diff --git a/.github/renovate-nix.json5 b/.github/renovate-nix.json5 index 124b92cec..d7b5d3fb7 100644 --- a/.github/renovate-nix.json5 +++ b/.github/renovate-nix.json5 @@ -25,7 +25,7 @@ matchBaseBranches: [ 'main', // Release 2.2 and newer use nix. - '/'^release-2\.([2-9]|..+)$/', + '/^release-2\.([2-9]|..+)$/', ], postUpgradeTasks: { commands: [ @@ -46,7 +46,7 @@ matchBaseBranches: [ 'main', // Release 2.2 and newer use nix. - '/'^release-2\.([2-9]|..+)$/', + '/^release-2\.([2-9]|..+)$/', ], postUpgradeTasks: { commands: [ diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml index fed71e912..71630628e 100644 --- a/.github/workflows/backport.yml +++ b/.github/workflows/backport.yml @@ -27,7 +27,7 @@ jobs: fetch-depth: 0 - name: Open Backport PR - uses: zeebe-io/backport-action@ef20d86abccbac3ee3a73cb2efbdc06344c390e5 # v2.5.0 + uses: zeebe-io/backport-action@3c06f323a58619da1e8522229ebc8d5de2633e46 # v4.3.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} github_workspace: ${{ github.workspace }} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c2cea90c2..8c2582e27 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -22,7 +22,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Install Nix - uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31 + uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31 - name: Setup Cachix uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -33,6 +33,26 @@ jobs: - name: Verify Generated Code run: nix build .#checks.x86_64-linux.generate --print-build-logs + validate-renovate-config: + runs-on: ubuntu-22.04 + + steps: + - name: Checkout + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 + + # renovate-config-validator only looks at the top-level file and does + # not recursively resolve local> presets, so we also syntax-check every + # renovate*.json5 with the json5 CLI to catch preset parse errors at + # PR time rather than 24h later in the scheduled Renovate job. + - name: Validate Renovate preset syntax + run: | + for f in .github/renovate*.json5; do + npx --yes json5 "$f" > /dev/null + done + + - name: Validate Renovate JSON + run: npx --yes --package renovate -- renovate-config-validator + lint: runs-on: ubuntu-22.04 @@ -41,7 +61,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Install Nix - uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31 + uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31 - name: Setup Cachix uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -63,7 +83,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Install Nix - uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31 + uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31 - name: Setup Cachix uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 @@ -75,34 +95,12 @@ jobs: uses: nicknovitski/nix-develop@9be7cfb4b10451d3390a75dc18ad0465bed4932a # v1 - name: Initialize CodeQL - uses: github/codeql-action/init@b5ebac6f4c00c8ccddb7cdcd45fdb248329f808a # v3 + uses: github/codeql-action/init@c10b8064de6f491fea524254123dbe5e09572f13 # v4 with: languages: go - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@b5ebac6f4c00c8ccddb7cdcd45fdb248329f808a # v3 - - trivy-scan-fs: - runs-on: ubuntu-22.04 - steps: - - name: Checkout - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - - - name: Run Trivy vulnerability scanner in fs mode - uses: aquasecurity/trivy-action@b6643a29fecd7f34b3597bc6acb0a98b03d33ff8 # 0.33.1 - with: - scan-type: 'fs' - ignore-unfixed: true - skip-dirs: design - scan-ref: '.' - severity: 'CRITICAL,HIGH' - format: sarif - output: 'trivy-results.sarif' - - - name: Upload Trivy Results to GitHub - uses: github/codeql-action/upload-sarif@b5ebac6f4c00c8ccddb7cdcd45fdb248329f808a # v3 - with: - sarif_file: 'trivy-results.sarif' + uses: github/codeql-action/analyze@c10b8064de6f491fea524254123dbe5e09572f13 # v4 unit-tests: runs-on: ubuntu-22.04 @@ -112,7 +110,7 @@ jobs: uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6 - name: Install Nix - uses: cachix/install-nix-action@4e002c8ec80594ecd40e759629461e26c8abed15 # v31 + uses: cachix/install-nix-action@616559265b40713947b9c190a8ff4b507b5df49b # v31 - name: Setup Cachix uses: cachix/cachix-action@3ba601ff5bbb07c7220846facfa2cd81eeee15a1 # v16 diff --git a/.github/workflows/commands.yml b/.github/workflows/commands.yml index 29cc9b100..b99a65c9f 100644 --- a/.github/workflows/commands.yml +++ b/.github/workflows/commands.yml @@ -85,7 +85,7 @@ jobs: fetch-depth: 0 - name: Open Backport PR - uses: zeebe-io/backport-action@ef20d86abccbac3ee3a73cb2efbdc06344c390e5 # v2.5.0 + uses: zeebe-io/backport-action@3c06f323a58619da1e8522229ebc8d5de2633e46 # v4.3.0 with: github_token: ${{ secrets.GITHUB_TOKEN }} github_workspace: ${{ github.workspace }} diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml index 02da9e5fb..d04ed7da3 100644 --- a/.github/workflows/renovate.yml +++ b/.github/workflows/renovate.yml @@ -24,19 +24,28 @@ jobs: - name: Checkout uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 - # Don't waste time starting Renovate if JSON is invalid + # Don't waste time starting Renovate if any preset is unparseable. + # renovate-config-validator only looks at the top-level file and does + # not recursively resolve local> presets, so we also syntax-check every + # renovate*.json5 with the json5 CLI. + - name: Validate Renovate preset syntax + run: | + for f in .github/renovate*.json5; do + npx --yes json5 "$f" > /dev/null + done + - name: Validate Renovate JSON - run: npx --yes --package renovate -- renovate-config-validator + run: npx --yes --package renovate -- renovate-config-validator - name: Get token id: get-github-app-token - uses: actions/create-github-app-token@29824e69f54612133e76f7eaac726eef6c875baf # v2 + uses: actions/create-github-app-token@fee1f7d63c2ff003460e3d139729b119787bc349 # v2 with: app-id: ${{ secrets.RENOVATE_GITHUB_APP_ID }} private-key: ${{ secrets.RENOVATE_GITHUB_APP_PRIVATE_KEY }} - name: Self-hosted Renovate - uses: renovatebot/github-action@0984fb80fc633b17e57f3e8b6c007fe0dc3e0d62 # v40.3.6 + uses: renovatebot/github-action@eb932558ad942cccfd8211cf535f17ff183a9f74 # v46.1.9 env: RENOVATE_REPOSITORIES: ${{ github.repository }} # Use GitHub API to create commits diff --git a/flake.lock b/flake.lock index 274d87f7a..9c01fc58b 100644 --- a/flake.lock +++ b/flake.lock @@ -56,10 +56,27 @@ "type": "github" } }, + "nixpkgs-unstable": { + "locked": { + "lastModified": 1775888245, + "narHash": "sha256-nwASzrRDD1JBEu/o8ekKYEXm/oJW6EMCzCRdrwcLe90=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "13043924aaa7375ce482ebe2494338e058282925", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "root": { "inputs": { "gomod2nix": "gomod2nix", - "nixpkgs": "nixpkgs" + "nixpkgs": "nixpkgs", + "nixpkgs-unstable": "nixpkgs-unstable" } }, "systems": { diff --git a/flake.nix b/flake.nix index e80160b2b..fdd9f799f 100644 --- a/flake.nix +++ b/flake.nix @@ -6,6 +6,7 @@ inputs = { nixpkgs.url = "github:NixOS/nixpkgs/nixos-25.11"; + nixpkgs-unstable.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; # TODO(negz): Unpin once https://github.com/nix-community/gomod2nix/pull/231 is released. gomod2nix = { @@ -18,6 +19,7 @@ { self, nixpkgs, + nixpkgs-unstable, gomod2nix, }: let @@ -37,7 +39,13 @@ inherit system; pkgs = import nixpkgs { inherit system; - overlays = [ gomod2nix.overlays.default ]; + overlays = [ + gomod2nix.overlays.default + (_final: _prev: { + go = nixpkgs-unstable.legacyPackages.${system}.go_1_25; + inherit (nixpkgs-unstable.legacyPackages.${system}) go_1_25; + }) + ]; }; }; diff --git a/go.mod b/go.mod index cced056dd..c5df277e6 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module github.com/crossplane/crossplane-runtime/v2 -go 1.25.5 +go 1.25.9 require ( dario.cat/mergo v1.0.2 github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 - github.com/Masterminds/semver v1.5.0 - github.com/crossplane/crossplane/apis/v2 v2.0.0-20260407152912-8f8e265fb638 + github.com/Masterminds/semver/v3 v3.4.0 + github.com/crossplane/crossplane/apis/v2 v2.0.0-20260424160951-8f231230ebb6 github.com/evanphx/json-patch v5.9.11+incompatible github.com/go-logr/logr v1.4.3 github.com/google/go-cmp v0.7.0 @@ -15,17 +15,17 @@ require ( github.com/in-toto/attestation v1.1.2 github.com/in-toto/in-toto-golang v0.10.0 github.com/prometheus/client_golang v1.23.2 - github.com/sigstore/cosign/v3 v3.0.4 - github.com/sigstore/sigstore v1.10.4 + github.com/sigstore/cosign/v3 v3.0.5 + github.com/sigstore/sigstore v1.10.5 github.com/sirupsen/logrus v1.9.4 github.com/spf13/afero v1.15.0 - golang.org/x/time v0.14.0 - google.golang.org/grpc v1.79.2 + golang.org/x/time v0.15.0 + google.golang.org/grpc v1.79.3 google.golang.org/protobuf v1.36.11 - k8s.io/api v0.35.0 + k8s.io/api v0.35.1 k8s.io/apiextensions-apiserver v0.35.0 - k8s.io/apimachinery v0.35.0 - k8s.io/client-go v0.35.0 + k8s.io/apimachinery v0.35.1 + k8s.io/client-go v0.35.1 k8s.io/component-base v0.35.0 k8s.io/klog/v2 v2.130.1 k8s.io/utils v0.0.0-20260108192941-914a6e750570 @@ -48,22 +48,22 @@ require ( github.com/Azure/go-autorest/tracing v0.6.1 // indirect github.com/antlr4-go/antlr/v4 v4.13.1 // indirect github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect - github.com/aws/aws-sdk-go-v2 v1.41.2 // indirect - github.com/aws/aws-sdk-go-v2/config v1.32.10 // indirect - github.com/aws/aws-sdk-go-v2/credentials v1.19.10 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.18 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.18 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 // indirect + github.com/aws/aws-sdk-go-v2 v1.41.4 // indirect + github.com/aws/aws-sdk-go-v2/config v1.32.12 // indirect + github.com/aws/aws-sdk-go-v2/credentials v1.19.12 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect github.com/aws/aws-sdk-go-v2/service/ecr v1.55.3 // indirect github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.38.10 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.5 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.18 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.6 // indirect - github.com/aws/aws-sdk-go-v2/service/sso v1.30.11 // indirect - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15 // indirect - github.com/aws/aws-sdk-go-v2/service/sts v1.41.7 // indirect - github.com/aws/smithy-go v1.24.1 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect + github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 // indirect + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 // indirect + github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 // indirect + github.com/aws/smithy-go v1.24.2 // indirect github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.12.0 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/blang/semver v3.5.1+incompatible // indirect @@ -97,7 +97,7 @@ require ( github.com/go-openapi/loads v0.23.3 // indirect github.com/go-openapi/runtime v0.29.3 // indirect github.com/go-openapi/spec v0.22.4 // indirect - github.com/go-openapi/strfmt v0.26.0 // indirect + github.com/go-openapi/strfmt v0.26.1 // indirect github.com/go-openapi/swag v0.25.5 // indirect github.com/go-openapi/swag/cmdutils v0.25.5 // indirect github.com/go-openapi/swag/conv v0.25.5 // indirect @@ -153,7 +153,7 @@ require ( github.com/sigstore/rekor v1.5.1 // indirect github.com/sigstore/rekor-tiles/v2 v2.2.1 // indirect github.com/sigstore/sigstore-go v1.1.4 // indirect - github.com/sigstore/timestamp-authority/v2 v2.0.5 // indirect + github.com/sigstore/timestamp-authority/v2 v2.0.6 // indirect github.com/spf13/cobra v1.10.2 // indirect github.com/spf13/pflag v1.0.10 // indirect github.com/stoewer/go-strcase v1.3.1 // indirect @@ -167,10 +167,10 @@ require ( github.com/x448/float16 v0.8.4 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0 // indirect - go.opentelemetry.io/otel v1.41.0 // indirect + go.opentelemetry.io/otel v1.42.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 // indirect - go.opentelemetry.io/otel/metric v1.41.0 // indirect - go.opentelemetry.io/otel/trace v1.41.0 // indirect + go.opentelemetry.io/otel/metric v1.42.0 // indirect + go.opentelemetry.io/otel/trace v1.42.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.27.1 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect @@ -186,8 +186,8 @@ require ( golang.org/x/text v0.36.0 // indirect golang.org/x/tools v0.44.0 // indirect gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260316180232-0b37fe3546d5 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index 791ec8415..6fd25d8a3 100644 --- a/go.sum +++ b/go.sum @@ -10,14 +10,14 @@ cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdB cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= cloud.google.com/go/iam v1.5.3 h1:+vMINPiDF2ognBJ97ABAYYwRgsaqxPbQDlMnbHMjolc= cloud.google.com/go/iam v1.5.3/go.mod h1:MR3v9oLkZCTlaqljW6Eb2d3HGDGK5/bDv93jhfISFvU= -cloud.google.com/go/kms v1.25.0 h1:gVqvGGUmz0nYCmtoxWmdc1wli2L1apgP8U4fghPGSbQ= -cloud.google.com/go/kms v1.25.0/go.mod h1:XIdHkzfj0bUO3E+LvwPg+oc7s58/Ns8Nd8Sdtljihbk= +cloud.google.com/go/kms v1.26.0 h1:cK9mN2cf+9V63D3H1f6koxTatWy39aTI/hCjz1I+adU= +cloud.google.com/go/kms v1.26.0/go.mod h1:pHKOdFJm63hxBsiPkYtowZPltu9dW0MWvBa6IA4HM58= cloud.google.com/go/longrunning v0.8.0 h1:LiKK77J3bx5gDLi4SMViHixjD2ohlkwBi+mKA7EhfW8= cloud.google.com/go/longrunning v0.8.0/go.mod h1:UmErU2Onzi+fKDg2gR7dusz11Pe26aknR4kHmJJqIfk= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= -filippo.io/edwards25519 v1.1.1 h1:YpjwWWlNmGIDyXOn8zLzqiD+9TyIlPhGFG96P39uBpw= -filippo.io/edwards25519 v1.1.1/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +filippo.io/edwards25519 v1.2.0 h1:crnVqOiS4jqYleHd9vaKZ+HKtHfllngJIiOpNpoJsjo= +filippo.io/edwards25519 v1.2.0/go.mod h1:xzAOLCNug/yB62zG1bQ8uziwrIqIuxhctzJT18Q77mc= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6 h1:He8afgbRMd7mFxO99hRNu+6tazq8nFF9lIwo9JFroBk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20240806141605-e8a1dd7889d6/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= github.com/AdamKorcz/go-fuzz-headers-1 v0.0.0-20230919221257-8b5d3ce2d11d h1:zjqpY4C7H15HjRPEenkS4SAn3Jy2eRRjkjZbGR30TOg= @@ -64,8 +64,6 @@ github.com/Azure/go-autorest/tracing v0.6.1 h1:YUMSrC/CeD1ZnnXcNYU4a/fzsO35u2Fsf github.com/Azure/go-autorest/tracing v0.6.1/go.mod h1:/3EgjbsjraOqiicERAeu3m7/z0x1TzjQGAwDrJrXGkc= github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs= github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/Masterminds/semver/v3 v3.4.0 h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0= github.com/Masterminds/semver/v3 v3.4.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= github.com/alessio/shellescape v1.4.1 h1:V7yhSDDn8LP4lc4jS8pFkt0zCnzVJlG5JXy9BVKJUX0= @@ -76,40 +74,40 @@ github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3d github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ= github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= -github.com/aws/aws-sdk-go-v2 v1.41.2 h1:LuT2rzqNQsauaGkPK/7813XxcZ3o3yePY0Iy891T2ls= -github.com/aws/aws-sdk-go-v2 v1.41.2/go.mod h1:IvvlAZQXvTXznUPfRVfryiG1fbzE2NGK6m9u39YQ+S4= -github.com/aws/aws-sdk-go-v2/config v1.32.10 h1:9DMthfO6XWZYLfzZglAgW5Fyou2nRI5CuV44sTedKBI= -github.com/aws/aws-sdk-go-v2/config v1.32.10/go.mod h1:2rUIOnA2JaiqYmSKYmRJlcMWy6qTj1vuRFscppSBMcw= -github.com/aws/aws-sdk-go-v2/credentials v1.19.10 h1:EEhmEUFCE1Yhl7vDhNOI5OCL/iKMdkkYFTRpZXNw7m8= -github.com/aws/aws-sdk-go-v2/credentials v1.19.10/go.mod h1:RnnlFCAlxQCkN2Q379B67USkBMu1PipEEiibzYN5UTE= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18 h1:Ii4s+Sq3yDfaMLpjrJsqD6SmG/Wq/P5L/hw2qa78UAY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.18/go.mod h1:6x81qnY++ovptLE6nWQeWrpXxbnlIex+4H4eYYGcqfc= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.18 h1:F43zk1vemYIqPAwhjTjYIz0irU2EY7sOb/F5eJ3HuyM= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.18/go.mod h1:w1jdlZXrGKaJcNoL+Nnrj+k5wlpGXqnNrKoP22HvAug= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.18 h1:xCeWVjj0ki0l3nruoyP2slHsGArMxeiiaoPN5QZH6YQ= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.18/go.mod h1:r/eLGuGCBw6l36ZRWiw6PaZwPXb6YOj+i/7MizNl5/k= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4 h1:WKuaxf++XKWlHWu9ECbMlha8WOEGm0OUEZqm4K/Gcfk= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.4/go.mod h1:ZWy7j6v1vWGmPReu0iSGvRiise4YI5SkR3OHKTZ6Wuc= +github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= +github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= +github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= +github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= +github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= +github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= github.com/aws/aws-sdk-go-v2/service/ecr v1.55.3 h1:RtGctYMmkTerGClvdY6bHXdtly4FeYw9wz/NPz62LF8= github.com/aws/aws-sdk-go-v2/service/ecr v1.55.3/go.mod h1:vBfBu24Ka3/5UZtepbTV0gnc9VPLT8ok+0oDDaYAzn4= github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.38.10 h1:1A/sI3LNMi3fhRI5TFLMwwo7ALAALSFVCSGvFlr1Iys= github.com/aws/aws-sdk-go-v2/service/ecrpublic v1.38.10/go.mod h1:Diyyyz0b43X13pdi1mVMqlTwDjOmRbJMvDsqnduUYWM= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.5 h1:CeY9LUdur+Dxoeldqoun6y4WtJ3RQtzk0JMP2gfUay0= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.5/go.mod h1:AZLZf2fMaahW5s/wMRciu1sYbdsikT/UHwbUjOdEVTc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.18 h1:LTRCYFlnnKFlKsyIQxKhJuDuA3ZkrDQMRYm6rXiHlLY= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.18/go.mod h1:XhwkgGG6bHSd00nO/mexWTcTjgd6PjuvWQMqSn2UaEk= -github.com/aws/aws-sdk-go-v2/service/kms v1.49.5 h1:DKibav4XF66XSeaXcrn9GlWGHos6D/vJ4r7jsK7z5CE= -github.com/aws/aws-sdk-go-v2/service/kms v1.49.5/go.mod h1:1SdcmEGUEQE1mrU2sIgeHtcMSxHuybhPvuEPANzIDfI= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.6 h1:MzORe+J94I+hYu2a6XmV5yC9huoTv8NRcCrUNedDypQ= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.6/go.mod h1:hXzcHLARD7GeWnifd8j9RWqtfIgxj4/cAtIVIK7hg8g= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.11 h1:7oGD8KPfBOJGXiCoRKrrrQkbvCp8N++u36hrLMPey6o= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.11/go.mod h1:0DO9B5EUJQlIDif+XJRWCljZRKsAFKh3gpFz7UnDtOo= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15 h1:edCcNp9eGIUDUCrzoCu1jWAXLGFIizeqkdkKgRlJwWc= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.15/go.mod h1:lyRQKED9xWfgkYC/wmmYfv7iVIM68Z5OQ88ZdcV1QbU= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.7 h1:NITQpgo9A5NrDZ57uOWj+abvXSb83BbyggcUBVksN7c= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.7/go.mod h1:sks5UWBhEuWYDPdwlnRFn1w7xWdH29Jcpe+/PJQefEs= -github.com/aws/smithy-go v1.24.1 h1:VbyeNfmYkWoxMVpGUAbQumkODcYmfMRfZ8yQiH30SK0= -github.com/aws/smithy-go v1.24.1/go.mod h1:LEj2LM3rBRQJxPZTB4KuzZkaZYnZPnvgIhb4pu07mx0= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= +github.com/aws/aws-sdk-go-v2/service/kms v1.50.3 h1:s/zDSG/a/Su9aX+v0Ld9cimUCdkr5FWPmBV8owaEbZY= +github.com/aws/aws-sdk-go-v2/service/kms v1.50.3/go.mod h1:/iSgiUor15ZuxFGQSTf3lA2FmKxFsQoc2tADOarQBSw= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk= +github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= +github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.12.0 h1:JFWXO6QPihCknDdnL6VaQE57km4ZKheHIGd9YiOGcTo= github.com/awslabs/amazon-ecr-credential-helper/ecr-login v0.12.0/go.mod h1:046/oLyFlYdAghYQE2yHXi/E//VM5Cf3/dFmA+3CZ0c= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -138,8 +136,8 @@ github.com/coreos/go-oidc/v3 v3.17.0/go.mod h1:wqPbKFrVnE90vty060SB40FCJ8fTHTxSw github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/crossplane/crossplane/apis/v2 v2.0.0-20260407152912-8f8e265fb638 h1:CcM0AkXpmfFTPjqYV3PYKcNIdaUFpYl8c/iJrUjcCdg= -github.com/crossplane/crossplane/apis/v2 v2.0.0-20260407152912-8f8e265fb638/go.mod h1:pl+8j97av1Tv1az8CwIzXepl1YfwI5/fOsWO6Bh4sNI= +github.com/crossplane/crossplane/apis/v2 v2.0.0-20260424160951-8f231230ebb6 h1:9ki6AJQgBJIcLNjK+scUZp2ZDenuAo18d0JSNOlkY2Y= +github.com/crossplane/crossplane/apis/v2 v2.0.0-20260424160951-8f231230ebb6/go.mod h1:h7KE74Z4TFs1L/FFv3RdsiG9Uax7L56oHpcggSZnONg= github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467 h1:uX1JmpONuD549D73r6cgnxyUu18Zb7yHAy5AYU0Pm4Q= github.com/cyberphone/json-canonicalization v0.0.0-20241213102144-19d51d7fe467/go.mod h1:uzvlm1mxhHkdfqitSA92i7Se+S9ksOn3a3qmv/kyOCw= github.com/danieljoos/wincred v1.2.3 h1:v7dZC2x32Ut3nEfRH+vhoZGvN72+dQ/snVXo/vMFLdQ= @@ -205,8 +203,8 @@ github.com/go-openapi/runtime v0.29.3 h1:h5twGaEqxtQg40ePiYm9vFFH1q06Czd7Ot6ufdK github.com/go-openapi/runtime v0.29.3/go.mod h1:8A1W0/L5eyNJvKciqZtvIVQvYO66NlB7INMSZ9bw/oI= github.com/go-openapi/spec v0.22.4 h1:4pxGjipMKu0FzFiu/DPwN3CTBRlVM2yLf/YTWorYfDQ= github.com/go-openapi/spec v0.22.4/go.mod h1:WQ6Ai0VPWMZgMT4XySjlRIE6GP1bGQOtEThn3gcWLtQ= -github.com/go-openapi/strfmt v0.26.0 h1:SDdQLyOEqu8W96rO1FRG1fuCtVyzmukky0zcD6gMGLU= -github.com/go-openapi/strfmt v0.26.0/go.mod h1:Zslk5VZPOISLwmWTMBIS7oiVFem1o1EI6zULY8Uer7Y= +github.com/go-openapi/strfmt v0.26.1 h1:7zGCHji7zSYDC2tCXIusoxYQz/48jAf2q+sF6wXTG+c= +github.com/go-openapi/strfmt v0.26.1/go.mod h1:Zslk5VZPOISLwmWTMBIS7oiVFem1o1EI6zULY8Uer7Y= github.com/go-openapi/swag v0.25.5 h1:pNkwbUEeGwMtcgxDr+2GBPAk4kT+kJ+AaB+TMKAg+TU= github.com/go-openapi/swag v0.25.5/go.mod h1:B3RT6l8q7X803JRxa2e59tHOiZlX1t8viplOcs9CwTA= github.com/go-openapi/swag/cmdutils v0.25.5 h1:yh5hHrpgsw4NwM9KAEtaDTXILYzdXh/I8Whhx9hKj7c= @@ -305,10 +303,10 @@ github.com/google/trillian v1.7.2 h1:EPBxc4YWY4Ak8tcuhyFleY+zYlbCDCa4Sn24e1Ka8Js github.com/google/trillian v1.7.2/go.mod h1:mfQJW4qRH6/ilABtPYNBerVJAJ/upxHLX81zxNQw05s= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= -github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= +github.com/googleapis/enterprise-certificate-proxy v0.3.14 h1:yh8ncqsbUY4shRD5dA6RlzjJaT4hi3kII+zYw8wmLb8= +github.com/googleapis/enterprise-certificate-proxy v0.3.14/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= +github.com/googleapis/gax-go/v2 v2.19.0 h1:fYQaUOiGwll0cGj7jmHT/0nPlcrZDFPrZRhTsoCr8hE= +github.com/googleapis/gax-go/v2 v2.19.0/go.mod h1:w2ROXVdfGEVFXzmlciUU4EdjHgWvB5h2n6x/8XSTTJA= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.7 h1:X+2YciYSxvMQK0UZ7sg45ZVabVZBeBuvMkmuI2V3Fak= @@ -452,28 +450,28 @@ github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shibumi/go-pathspec v1.3.0 h1:QUyMZhFo0Md5B8zV8x2tesohbb5kfbpTi9rBnKh5dkI= github.com/shibumi/go-pathspec v1.3.0/go.mod h1:Xutfslp817l2I1cZvgcfeMQJG5QnU2lh5tVaaMCl3jE= -github.com/sigstore/cosign/v3 v3.0.4 h1:SuEn9z8V0eyjF0PWxuGgQ7QSPWReNexLJovkZ3wLaf8= -github.com/sigstore/cosign/v3 v3.0.4/go.mod h1:DJY5LPzHiI6bWpG/Q/NQUTfeASjkN8TDAUx1Nnt3I0I= +github.com/sigstore/cosign/v3 v3.0.5 h1:c1zPqjU+H4wmirgysC+AkWMg7a7fykyOYF/m+F1150I= +github.com/sigstore/cosign/v3 v3.0.5/go.mod h1:ble1vMvJagCFyTIDkibCq6MIHiWDw00JNYl0f9rB4T4= github.com/sigstore/protobuf-specs v0.5.0 h1:F8YTI65xOHw70NrvPwJ5PhAzsvTnuJMGLkA4FIkofAY= github.com/sigstore/protobuf-specs v0.5.0/go.mod h1:+gXR+38nIa2oEupqDdzg4qSBT0Os+sP7oYv6alWewWc= github.com/sigstore/rekor v1.5.1 h1:Ca1egHRWRuDvXV4tZu9aXEXc3Gej9FG+HKeapV9OAMQ= github.com/sigstore/rekor v1.5.1/go.mod h1:gTLDuZuo3SyQCuZvKqwRPA79Qo/2rw39/WtLP/rZjUQ= github.com/sigstore/rekor-tiles/v2 v2.2.1 h1:UmV1CBQ3SjxxPGpFmwDoOhoIwiKpM2Qm1pU5tPGmvNk= github.com/sigstore/rekor-tiles/v2 v2.2.1/go.mod h1:z8n6l6oidpaLjjE6rJERuQqY9X38ulnHZCXyL+DEL7U= -github.com/sigstore/sigstore v1.10.4 h1:ytOmxMgLdcUed3w1SbbZOgcxqwMG61lh1TmZLN+WeZE= -github.com/sigstore/sigstore v1.10.4/go.mod h1:tDiyrdOref3q6qJxm2G+JHghqfmvifB7hw+EReAfnbI= +github.com/sigstore/sigstore v1.10.5 h1:KqrOjDhNOVY+uOzQFat2FrGLClPPCb3uz8pK3wuI+ow= +github.com/sigstore/sigstore v1.10.5/go.mod h1:k/mcVVXw3I87dYG/iCVTSW2xTrW7vPzxxGic4KqsqXs= github.com/sigstore/sigstore-go v1.1.4 h1:wTTsgCHOfqiEzVyBYA6mDczGtBkN7cM8mPpjJj5QvMg= github.com/sigstore/sigstore-go v1.1.4/go.mod h1:2U/mQOT9cjjxrtIUeKDVhL+sHBKsnWddn8URlswdBsg= -github.com/sigstore/sigstore/pkg/signature/kms/aws v1.10.4 h1:VZ+L6SKVWbLPHznIF0tBuO7qKMFdJiJMVwFKu9DlY5o= -github.com/sigstore/sigstore/pkg/signature/kms/aws v1.10.4/go.mod h1:Rstj47WpJym25il8j4jTL0BfikzP/9AhVD+DsBcYzZc= -github.com/sigstore/sigstore/pkg/signature/kms/azure v1.10.4 h1:G7yOv8bxk3zIEEZyVCixPxtePIAm+t3ZWSaKRPzVw+o= -github.com/sigstore/sigstore/pkg/signature/kms/azure v1.10.4/go.mod h1:hxJelB/bRItMYOzi6qD9xEKjse2QZcikh4TbysfdDHc= -github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.10.4 h1:Qxt6dE4IwhJ6gIXmg2q4S/SeqEDSZ29nmfsv7Zb6LL4= -github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.10.4/go.mod h1:hJVeNOwarqfyALjOwsf0OR8YA/A96NABucEaQumPr30= -github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.10.4 h1:KVavYMPfSf5NryOl6VrZ9nRG3fXOOJOPp7Czk/YCPkM= -github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.10.4/go.mod h1:J7CA1AaBkyK8dYq6EdQANhj+8oEcsA7PrIp088qgPiY= -github.com/sigstore/timestamp-authority/v2 v2.0.5 h1:WT17MU4bNRvjRLlTvTO5gmrSIWJVbzwrNXgwsjB+53U= -github.com/sigstore/timestamp-authority/v2 v2.0.5/go.mod h1:oV+Yy0GsfgNAeDZcv/WJjQE42wFtMTtuD85bPLAQk5M= +github.com/sigstore/sigstore/pkg/signature/kms/aws v1.10.5 h1:aqHRubTITULckG9JAcq2FEhtKkT/RRE8oErfuV3smSI= +github.com/sigstore/sigstore/pkg/signature/kms/aws v1.10.5/go.mod h1:h9eK9QyPqpFskF/ewFkRLtwh4/Q3FLc2/DXbym4IHN8= +github.com/sigstore/sigstore/pkg/signature/kms/azure v1.10.5 h1:+9C6CUkv+J4iT67Lx+H1EGBfAdoAHqXumHadeIj9jA4= +github.com/sigstore/sigstore/pkg/signature/kms/azure v1.10.5/go.mod h1:myZsg7wRiy/vf102g5uUAitYhtXCwepmAGxgHG1VHuE= +github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.10.5 h1:BpQx6AhjwIN9LmlO4ypkcMcHiWiepgZQGSw5U69frHU= +github.com/sigstore/sigstore/pkg/signature/kms/gcp v1.10.5/go.mod h1:ejMD/17lMJ4HykQRPdj5NNr+OQYIEZto8HjDKghVMOA= +github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.10.5 h1:OFwQZgWkB/6J6W5sy3SkXE4pJnhNRnE2cJd8ySXmHpo= +github.com/sigstore/sigstore/pkg/signature/kms/hashivault v1.10.5/go.mod h1:Ee/enmyxi/RFLVlajbnjgH2wOWQwlJ0wY8qZrk43hEw= +github.com/sigstore/timestamp-authority/v2 v2.0.6 h1:1Vh7/SdmLsVLG6Br6/bisd1SnlicfDm0MJYiA+D7Ppw= +github.com/sigstore/timestamp-authority/v2 v2.0.6/go.mod h1:Nk5ucGBDyH0tXAIMZ0prf6xn8qfTnbJhSq+CDabYcfc= github.com/sirupsen/logrus v1.9.4 h1:TsZE7l11zFCLZnZ+teH4Umoq5BhEIfIzfRDZ1Uzql2w= github.com/sirupsen/logrus v1.9.4/go.mod h1:ftWc9WdOfJ0a92nsE2jF5u5ZwH8Bv2zdeOC42RjbV2g= github.com/spf13/afero v1.15.0 h1:b/YBCLWAJdFWJTN9cLhiXXcD7mzKn9Dm86dNnfyQw1I= @@ -543,24 +541,24 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.6 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0 h1:ssfIgGNANqpVFCndZvcuyKbl0g+UAVcbBcqGkG28H0Y= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.64.0/go.mod h1:GQ/474YrbE4Jx8gZ4q5I4hrhUzM6UPzyrqJYV2AqPoQ= -go.opentelemetry.io/otel v1.41.0 h1:YlEwVsGAlCvczDILpUXpIpPSL/VPugt7zHThEMLce1c= -go.opentelemetry.io/otel v1.41.0/go.mod h1:Yt4UwgEKeT05QbLwbyHXEwhnjxNO6D8L5PQP51/46dE= +go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= +go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0 h1:f0cb2XPmrqn4XMy9PNliTgRKJgS5WcL/u0/WRYGz4t0= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.39.0/go.mod h1:vnakAaFckOMiMtOIhFI2MNH4FYrZzXCYxmb1LlhoGz8= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0 h1:in9O8ESIOlwJAEGTkkf34DesGRAc/Pn8qJ7k3r/42LM= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.39.0/go.mod h1:Rp0EXBm5tfnv0WL+ARyO/PHBEaEAT8UUHQ6AGJcSq6c= -go.opentelemetry.io/otel/metric v1.41.0 h1:rFnDcs4gRzBcsO9tS8LCpgR0dxg4aaxWlJxCno7JlTQ= -go.opentelemetry.io/otel/metric v1.41.0/go.mod h1:xPvCwd9pU0VN8tPZYzDZV/BMj9CM9vs00GuBjeKhJps= +go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= +go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= go.opentelemetry.io/otel/sdk v1.41.0 h1:YPIEXKmiAwkGl3Gu1huk1aYWwtpRLeskpV+wPisxBp8= go.opentelemetry.io/otel/sdk v1.41.0/go.mod h1:ahFdU0G5y8IxglBf0QBJXgSe7agzjE4GiTJ6HT9ud90= go.opentelemetry.io/otel/sdk/metric v1.41.0 h1:siZQIYBAUd1rlIWQT2uCxWJxcCO7q3TriaMlf08rXw8= go.opentelemetry.io/otel/sdk/metric v1.41.0/go.mod h1:HNBuSvT7ROaGtGI50ArdRLUnvRTRGniSUZbxiWxSO8Y= -go.opentelemetry.io/otel/trace v1.41.0 h1:Vbk2co6bhj8L59ZJ6/xFTskY+tGAbOnCtQGVVa9TIN0= -go.opentelemetry.io/otel/trace v1.41.0/go.mod h1:U1NU4ULCoxeDKc09yCWdWe+3QoyweJcISEVa1RBzOis= +go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= +go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= -go.step.sm/crypto v0.76.2 h1:JJ/yMcs/rmcCAwlo+afrHjq74XBFRTJw5B2y4Q4Z4c4= -go.step.sm/crypto v0.76.2/go.mod h1:m6KlB/HzIuGFep0UWI5e0SYi38UxpoKeCg6qUaHV6/Q= +go.step.sm/crypto v0.77.2 h1:qFjjei+RHc5kP5R7NW9OUWT7SqWIuAOvOkXqg4fNWj8= +go.step.sm/crypto v0.77.2/go.mod h1:W0YJb9onM5l78qgkXIJ2Up6grnwW8EtpCKIza/NCg0o= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -651,8 +649,8 @@ golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg= golang.org/x/text v0.36.0/go.mod h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= 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-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -673,16 +671,16 @@ gomodules.xyz/jsonpatch/v2 v2.5.0 h1:JELs8RLM12qJGXU4u/TO3V25KW8GreMKl9pdkk14RM0 gomodules.xyz/jsonpatch/v2 v2.5.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= -google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= -google.golang.org/genproto v0.0.0-20260128011058-8636f8732409 h1:VQZ/yAbAtjkHgH80teYd2em3xtIkkHd7ZhqfH2N9CsM= -google.golang.org/genproto v0.0.0-20260128011058-8636f8732409/go.mod h1:rxKD3IEILWEu3P44seeNOAwZN4SaoKaQ/2eTg4mM6EM= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20 h1:7ei4lp52gK1uSejlA8AZl5AJjeLUOHBQscRQZUgAcu0= -google.golang.org/genproto/googleapis/api v0.0.0-20260203192932-546029d2fa20/go.mod h1:ZdbssH/1SOVnjnDlXzxDHK2MCidiqXtbYccJNzNYPEE= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= -google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= -google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/api v0.272.0 h1:eLUQZGnAS3OHn31URRf9sAmRk3w2JjMx37d2k8AjJmA= +google.golang.org/api v0.272.0/go.mod h1:wKjowi5LNJc5qarNvDCvNQBn3rVK8nSy6jg2SwRwzIA= +google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5 h1:JNfk58HZ8lfmXbYK2vx/UvsqIL59TzByCxPIX4TDmsE= +google.golang.org/genproto v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:x5julN69+ED4PcFk/XWayw35O0lf/nGa4aNgODCmNmw= +google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5 h1:CogIeEXn4qWYzzQU0QqvYBM8yDF9cFYzDq9ojSpv0Js= +google.golang.org/genproto/googleapis/api v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:EIQZ5bFCfRQDV4MhRle7+OgjNtZ6P1PiZBgAKuxXu/Y= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260316180232-0b37fe3546d5 h1:aJmi6DVGGIStN9Mobk/tZOOQUBbj0BPjZjjnOdoZKts= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260316180232-0b37fe3546d5/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE= +google.golang.org/grpc v1.79.3/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= 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= @@ -713,16 +711,16 @@ 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.1.0 h1:rVV8Tcg/8jHUkPUorwjaMTtemIMVXfIPKiOqnhEhakk= gotest.tools/v3 v3.1.0/go.mod h1:fHy7eyTmJFO5bQbUsEGQ1v4m2J3Jz9eWL54TP2/ZuYQ= -k8s.io/api v0.35.0 h1:iBAU5LTyBI9vw3L5glmat1njFK34srdLmktWwLTprlY= -k8s.io/api v0.35.0/go.mod h1:AQ0SNTzm4ZAczM03QH42c7l3bih1TbAXYo0DkF8ktnA= +k8s.io/api v0.35.1 h1:0PO/1FhlK/EQNVK5+txc4FuhQibV25VLSdLMmGpDE/Q= +k8s.io/api v0.35.1/go.mod h1:28uR9xlXWml9eT0uaGo6y71xK86JBELShLy4wR1XtxM= k8s.io/apiextensions-apiserver v0.35.0 h1:3xHk2rTOdWXXJM+RDQZJvdx0yEOgC0FgQ1PlJatA5T4= k8s.io/apiextensions-apiserver v0.35.0/go.mod h1:E1Ahk9SADaLQ4qtzYFkwUqusXTcaV2uw3l14aqpL2LU= -k8s.io/apimachinery v0.35.0 h1:Z2L3IHvPVv/MJ7xRxHEtk6GoJElaAqDCCU0S6ncYok8= -k8s.io/apimachinery v0.35.0/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= +k8s.io/apimachinery v0.35.1 h1:yxO6gV555P1YV0SANtnTjXYfiivaTPvCTKX6w6qdDsU= +k8s.io/apimachinery v0.35.1/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= k8s.io/apiserver v0.35.0 h1:CUGo5o+7hW9GcAEF3x3usT3fX4f9r8xmgQeCBDaOgX4= k8s.io/apiserver v0.35.0/go.mod h1:QUy1U4+PrzbJaM3XGu2tQ7U9A4udRRo5cyxkFX0GEds= -k8s.io/client-go v0.35.0 h1:IAW0ifFbfQQwQmga0UdoH0yvdqrbwMdq9vIFEhRpxBE= -k8s.io/client-go v0.35.0/go.mod h1:q2E5AAyqcbeLGPdoRB+Nxe3KYTfPce1Dnu1myQdqz9o= +k8s.io/client-go v0.35.1 h1:+eSfZHwuo/I19PaSxqumjqZ9l5XiTEKbIaJ+j1wLcLM= +k8s.io/client-go v0.35.1/go.mod h1:1p1KxDt3a0ruRfc/pG4qT/3oHmUj1AhSHEcxNSGg+OA= k8s.io/code-generator v0.35.0 h1:TvrtfKYZTm9oDF2z+veFKSCcgZE3Igv0svY+ehCmjHQ= k8s.io/code-generator v0.35.0/go.mod h1:iS1gvVf3c/T71N5DOGYO+Gt3PdJ6B9LYSvIyQ4FHzgc= k8s.io/component-base v0.35.0 h1:+yBrOhzri2S1BVqyVSvcM3PtPyx5GUxCK2tinZz1G94= diff --git a/gomod2nix.toml b/gomod2nix.toml index 0e035056b..8479b5b30 100644 --- a/gomod2nix.toml +++ b/gomod2nix.toml @@ -1,582 +1,774 @@ schema = 3 [mod] - [mod."cloud.google.com/go/compute/metadata"] - version = "v0.9.0" - hash = "sha256-VFqQwLJKyH1zReR/XtygEHP5UkI01T9BHEL0hvXtauo=" - [mod."dario.cat/mergo"] - version = "v1.0.2" - hash = "sha256-p6jdiHlLEfZES8vJnDywG4aVzIe16p0CU6iglglIweA=" - [mod."github.com/AdaLogics/go-fuzz-headers"] - version = "v0.0.0-20240806141605-e8a1dd7889d6" - hash = "sha256-4h0bcF0eg/Y9DnurD91SbGAzLz0DwffJsF//YJGfPJg=" - [mod."github.com/Azure/azure-sdk-for-go"] - version = "v68.0.0+incompatible" - hash = "sha256-xaa9LgrrLjgbOh/XM1dZMWH/sZeGMb59gK0CTB6JUUI=" - [mod."github.com/Azure/go-ansiterm"] - version = "v0.0.0-20250102033503-faa5f7b0171c" - hash = "sha256-4WYKJtxjnm3egDAh9ocTR+gy5UUqVoY3knHy9c17XIY=" - [mod."github.com/Azure/go-autorest"] - version = "v14.2.0+incompatible" - hash = "sha256-dvWOcudtx0NP6U2RDt40hwtELFRdYdLEklRWYterRN0=" - [mod."github.com/Azure/go-autorest/autorest"] - version = "v0.11.30" - hash = "sha256-CykvDRDHHCyhIZOxbvpT/a0VEhuJmIwKw/MEjS3hmEs=" - [mod."github.com/Azure/go-autorest/autorest/adal"] - version = "v0.9.24" - hash = "sha256-itnCV0BJlMi5MHFlxePRUA/XPwofDzTksUVh7jcqarE=" - [mod."github.com/Azure/go-autorest/autorest/azure/auth"] - version = "v0.5.13" - hash = "sha256-s901woJ0T3B+1QUUOMcjz0ops2pXzZQ+x7/XEuC91Ko=" - [mod."github.com/Azure/go-autorest/autorest/azure/cli"] - version = "v0.4.7" - hash = "sha256-ljC1ag2fX8jLdlgr1wgLx66QdRHYa9VdOu0r9RFDtLo=" - [mod."github.com/Azure/go-autorest/autorest/date"] - version = "v0.3.1" - hash = "sha256-DqCnDxzYgcAPEpnlHqa+eL3msZvbkYNSMq6ftSEMSQo=" - [mod."github.com/Azure/go-autorest/logger"] - version = "v0.2.2" - hash = "sha256-fmbHaafgS17KXIXpqqChOF8qqi+lfJHZM4o+i0pmNSs=" - [mod."github.com/Azure/go-autorest/tracing"] - version = "v0.6.1" - hash = "sha256-nstDZC8Btx78yzqIR4clfu+R93rebUOZalEW1ZaQfIY=" - [mod."github.com/Masterminds/semver"] - version = "v1.5.0" - hash = "sha256-3fEInOXFdzCiGdDZ1s9otEes7VXiL8Q1RVB3zXRPJsQ=" - [mod."github.com/antlr4-go/antlr/v4"] - version = "v4.13.1" - hash = "sha256-beAuxHNRUuhzcSJUh/8ztVf1zCUiaT72fg2Jvx0AuNQ=" - [mod."github.com/asaskevich/govalidator"] - version = "v0.0.0-20230301143203-a9d515a09cc2" - hash = "sha256-UCENzt1c1tFgsAzK2TNq5s2g0tQMQ5PxFaQKe8hTL/A=" - [mod."github.com/aws/aws-sdk-go-v2"] - version = "v1.41.2" - hash = "sha256-EAQPodNyhqBiq/faGJSo5jUfOpCcZJm083nvgMuANCQ=" - [mod."github.com/aws/aws-sdk-go-v2/config"] - version = "v1.32.10" - hash = "sha256-+C//A+tMNN0g22ElCtZYt7gxzVfs7lgtduW9z4kmWGo=" - [mod."github.com/aws/aws-sdk-go-v2/credentials"] - version = "v1.19.10" - hash = "sha256-FAbYBsAyaX+aj2BoIcQ5GFiRzX2bwa3nOHqGp3nNUwA=" - [mod."github.com/aws/aws-sdk-go-v2/feature/ec2/imds"] - version = "v1.18.18" - hash = "sha256-orIJcAMz9/rkmaaysk7mrGNelzPHOo9Eoa65Xzx8gt8=" - [mod."github.com/aws/aws-sdk-go-v2/internal/configsources"] - version = "v1.4.18" - hash = "sha256-55OGbRC2EFydDo37h8XDeEGUXWmH83dnLjVZKhWIF38=" - [mod."github.com/aws/aws-sdk-go-v2/internal/endpoints/v2"] - version = "v2.7.18" - hash = "sha256-dFZpZX6EI8TWQllmzVcmBXx4MhjHeA9lkbws/l3ZBXw=" - [mod."github.com/aws/aws-sdk-go-v2/internal/ini"] - version = "v1.8.4" - hash = "sha256-okyFQwcEqbwKwkGK5xp/VYE0fGg9cqG6AuLijIuf5xg=" - [mod."github.com/aws/aws-sdk-go-v2/service/ecr"] - version = "v1.55.3" - hash = "sha256-J9v9A2bMBTPM0K/aHM3TrS0nBkuTNFVQyqtnc1ZwE7w=" - [mod."github.com/aws/aws-sdk-go-v2/service/ecrpublic"] - version = "v1.38.10" - hash = "sha256-uJtfhtkG4pfehKHyc2dsqafvt6fKMnMgMe/uPemJrPY=" - [mod."github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding"] - version = "v1.13.5" - hash = "sha256-jj3T3rstd3oliRTHo0k3ea1OjJOZvFFOQyKqyffsiIw=" - [mod."github.com/aws/aws-sdk-go-v2/service/internal/presigned-url"] - version = "v1.13.18" - hash = "sha256-ruDy0cjd2bKEBg5sZWPb4userk+LUdeKv/mNu1vB+Hw=" - [mod."github.com/aws/aws-sdk-go-v2/service/signin"] - version = "v1.0.6" - hash = "sha256-DUaNjp3Brzzyyp4TzHVpEuo1WtbadnzILN2Hqq0wZto=" - [mod."github.com/aws/aws-sdk-go-v2/service/sso"] - version = "v1.30.11" - hash = "sha256-kxlJke5caGF+ScsHHIASY2i7ma52QT5G002KmV/d9CY=" - [mod."github.com/aws/aws-sdk-go-v2/service/ssooidc"] - version = "v1.35.15" - hash = "sha256-JzKHVBgISh3PZK+VFsVHHHTcnt5pL2TwGgU5E2mDxzU=" - [mod."github.com/aws/aws-sdk-go-v2/service/sts"] - version = "v1.41.7" - hash = "sha256-m4vWKU3Mmp0H5DdLXdA8tpvbUovUY8PqDC5FSMNuUdM=" - [mod."github.com/aws/smithy-go"] - version = "v1.24.1" - hash = "sha256-kbPpGmfjAEk35awys+WFjFJ7K0qrxkxGRr7QOE/rZ08=" - [mod."github.com/awslabs/amazon-ecr-credential-helper/ecr-login"] - version = "v0.12.0" - hash = "sha256-PHoHWGX9RVkAQNQF2fz5Hv4JEaGBvLhcuUwlu5IQjU0=" - [mod."github.com/beorn7/perks"] - version = "v1.0.1" - hash = "sha256-h75GUqfwJKngCJQVE5Ao5wnO3cfKD9lSIteoLp/3xJ4=" - [mod."github.com/blang/semver"] - version = "v3.5.1+incompatible" - hash = "sha256-vmoIH5J0esVFmLDT2ecwtalvJqRRoLwomysyvlIRmo8=" - [mod."github.com/blang/semver/v4"] - version = "v4.0.0" - hash = "sha256-dJC22MjnfT5WqJ7x7Tc3Bvpw9tFnBn9HqfWFiM57JVc=" - [mod."github.com/cenkalti/backoff/v5"] - version = "v5.0.3" - hash = "sha256-bKq43PPD8RM6e7HePxHaO27traqm76bkvHcTVTQ+jeY=" - [mod."github.com/cespare/xxhash/v2"] - version = "v2.3.0" - hash = "sha256-7hRlwSR+fos1kx4VZmJ/7snR7zHh8ZFKX+qqqqGcQpY=" - [mod."github.com/chrismellard/docker-credential-acr-env"] - version = "v0.0.0-20230304212654-82a0ddb27589" - hash = "sha256-EWyO62fm/zhWdo4/96bscr3POG/5tKsWXYqp5mTwP0Y=" - [mod."github.com/containerd/stargz-snapshotter/estargz"] - version = "v0.18.2" - hash = "sha256-6KS9ObQ1tKXkvvKQy1BmxJ59aisDGvEtqhj1Oo54IRY=" - [mod."github.com/coreos/go-oidc/v3"] - version = "v3.17.0" - hash = "sha256-b9dCq5GN5ac64UG23Rijv1qcmUZNcxb8DJQycAa96EQ=" - [mod."github.com/crossplane/crossplane/apis/v2"] - version = "v2.0.0-20260407152912-8f8e265fb638" - hash = "sha256-5d79zPJ85YcoSTaAEi+Zs67IfM32YURgVpR3hv2m8PU=" - [mod."github.com/cyberphone/json-canonicalization"] - version = "v0.0.0-20241213102144-19d51d7fe467" - hash = "sha256-eqH3UKAZ9eOlZjYdN7nWuJ1hFm2JAP1PVbJInQk6OLw=" - [mod."github.com/davecgh/go-spew"] - version = "v1.1.2-0.20180830191138-d8f796af33cc" - hash = "sha256-fV9oI51xjHdOmEx6+dlq7Ku2Ag+m/bmbzPo6A4Y74qc=" - [mod."github.com/digitorus/pkcs7"] - version = "v0.0.0-20230818184609-3a137a874352" - hash = "sha256-zhgLL+kS2vkOhiK3kkI6yMhr71JOYo/uuxDo1dsC2k0=" - [mod."github.com/digitorus/timestamp"] - version = "v0.0.0-20231217203849-220c5c2851b7" - hash = "sha256-uNkyMBsdbLN1PiDLHAGWUYf6sZ08ENbxpv9RkNtzaW0=" - [mod."github.com/dimchansky/utfbom"] - version = "v1.1.1" - hash = "sha256-w8KEprK54zJkMat78T6zldjDwvhbc/O8s6pVFzfmg1I=" - [mod."github.com/docker/cli"] - version = "v29.4.0+incompatible" - hash = "sha256-mUN7Fu9e4ahtUJBUvCHUk+ICFq1d6vs7MoJf0/cw+mA=" - [mod."github.com/docker/distribution"] - version = "v2.8.3+incompatible" - hash = "sha256-XhRURCGNpJC83QZTtgCxHHFL76HaxIxjt70HwUa847E=" - [mod."github.com/docker/docker-credential-helpers"] - version = "v0.9.5" - hash = "sha256-7fm66H8bvqjiEssTy/oiAMmQd7T15aVS+EANrw+4H4U=" - [mod."github.com/dustin/go-humanize"] - version = "v1.0.1" - hash = "sha256-yuvxYYngpfVkUg9yAmG99IUVmADTQA0tMbBXe0Fq0Mc=" - [mod."github.com/emicklei/go-restful/v3"] - version = "v3.13.0" - hash = "sha256-lB2Z29RDLiVQE5NrsV1s2iHeQ4ciGwNj5OG1zJxwZV8=" - [mod."github.com/evanphx/json-patch"] - version = "v5.9.11+incompatible" - hash = "sha256-1iyZpBaeBLmNkJ3T4A9fAEXEYB9nk9V02ug4pwl5dy0=" - [mod."github.com/evanphx/json-patch/v5"] - version = "v5.9.11" - hash = "sha256-DaWzRi5dIr3U7kJlV3Qm1DWoKh5W+FI2BW/ATXT40J4=" - [mod."github.com/fatih/color"] - version = "v1.18.0" - hash = "sha256-pP5y72FSbi4j/BjyVq/XbAOFjzNjMxZt2R/lFFxGWvY=" - [mod."github.com/fsnotify/fsnotify"] - version = "v1.9.0" - hash = "sha256-WtpE1N6dpHwEvIub7Xp/CrWm0fd6PX7MKA4PV44rp2g=" - [mod."github.com/fxamacker/cbor/v2"] - version = "v2.9.0" - hash = "sha256-/IZK76MRCrz9XCiilieH5tKaLnIWyPJhwxDoVKB8dFc=" - [mod."github.com/go-chi/chi/v5"] - version = "v5.2.5" - hash = "sha256-Y1+17ky94849aqk3iKf30F1u+G6K3nzZzLOBSeqIUow=" - [mod."github.com/go-jose/go-jose/v4"] - version = "v4.1.4" - hash = "sha256-MKoJKXup1jfwOyN8mHXu1CQ8fvFJTaEf3K2LVtNSRhc=" - [mod."github.com/go-logr/logr"] - version = "v1.4.3" - hash = "sha256-Nnp/dEVNMxLp3RSPDHZzGbI8BkSNuZMX0I0cjWKXXLA=" - [mod."github.com/go-logr/stdr"] - version = "v1.2.2" - hash = "sha256-rRweAP7XIb4egtT1f2gkz4sYOu7LDHmcJ5iNsJUd0sE=" - [mod."github.com/go-openapi/analysis"] - version = "v0.24.3" - hash = "sha256-jBLHbyhrdLwc0x/P3MlUik0xZPV6xOaKAa5aPV77sBY=" - [mod."github.com/go-openapi/errors"] - version = "v0.22.7" - hash = "sha256-Iy5ieFbpjjbVEQ+UWXIeI8jzN/TjtsOoEX5IB6/v6gc=" - [mod."github.com/go-openapi/jsonpointer"] - version = "v0.22.5" - hash = "sha256-btK8c3hxbO9mAlvRYuAaNdjaHNYyLvNl/RfNxPsqQuw=" - [mod."github.com/go-openapi/jsonreference"] - version = "v0.21.5" - hash = "sha256-fBeVESt+JKLthLDTyuABzPV/hOmg4t8dPtwvAs1Ojog=" - [mod."github.com/go-openapi/loads"] - version = "v0.23.3" - hash = "sha256-KeSh5BVDAkNBw50Yoyi19lEzODOrTcASyjtnpcrcZ10=" - [mod."github.com/go-openapi/runtime"] - version = "v0.29.3" - hash = "sha256-nid3RStsHKEZgCNPU1+4NkqDsIOAc52JOF68zH3/bC4=" - [mod."github.com/go-openapi/spec"] - version = "v0.22.4" - hash = "sha256-nwNLmtrjR3w+vFGlBFSq4vM2ZsDQS4RDBQGYmlGv7BY=" - [mod."github.com/go-openapi/strfmt"] - version = "v0.26.0" - hash = "sha256-DGGi5KayLv8lDwoxqCroU51MvGVTvbm79BCX3W1IYD0=" - [mod."github.com/go-openapi/swag"] - version = "v0.25.5" - hash = "sha256-ptIgtll6FVI7viEVxM/imWUjgaeLP/oViAarM/EhsWU=" - [mod."github.com/go-openapi/swag/cmdutils"] - version = "v0.25.5" - hash = "sha256-sEGS7K9gzBuKgkoIiHn5Mgv7+SvPqJ1iFZRsXrso/2M=" - [mod."github.com/go-openapi/swag/conv"] - version = "v0.25.5" - hash = "sha256-+yLC40AK2pyn62zStk7Q13Bsb4/HDsJUKTTNBSWSTvg=" - [mod."github.com/go-openapi/swag/fileutils"] - version = "v0.25.5" - hash = "sha256-zYxEpqJuZ97vFLQxfYwegDQhffKhpsDtYF1xhOVxL4c=" - [mod."github.com/go-openapi/swag/jsonname"] - version = "v0.25.5" - hash = "sha256-ypcI24qrUOd0lbZUJcFByQr07U7WtQvIu/YhuewUWDo=" - [mod."github.com/go-openapi/swag/jsonutils"] - version = "v0.25.5" - hash = "sha256-e6OOoTIH/zrI/unpNIu3foYEvSWKb7Jvf+6E6/nvpMg=" - [mod."github.com/go-openapi/swag/loading"] - version = "v0.25.5" - hash = "sha256-gwy+xJkF3PHT5YMYnXgSX9XhuvwwOVpH60QTLsAh6/E=" - [mod."github.com/go-openapi/swag/mangling"] - version = "v0.25.5" - hash = "sha256-SXSdvYE+wIm95KHRUPYjPEdFU6hc85/7H5rJH7bdTSM=" - [mod."github.com/go-openapi/swag/netutils"] - version = "v0.25.5" - hash = "sha256-FzjcovD9ZGR/dNyU019KC/CRVn/OJ6XUJ3hS5J4w6go=" - [mod."github.com/go-openapi/swag/stringutils"] - version = "v0.25.5" - hash = "sha256-Ze2Y056Imqyq6kHPcACuqHt992WbXfC9LDziSCFuO/c=" - [mod."github.com/go-openapi/swag/typeutils"] - version = "v0.25.5" - hash = "sha256-A1mGLvoaLCT0iORn4tiyKWB8L69dMJzFjBFpt80Xzkg=" - [mod."github.com/go-openapi/swag/yamlutils"] - version = "v0.25.5" - hash = "sha256-+EumuV+qkhYn08XfR1ngIKMh79Mkj8vItpg0y0spX+c=" - [mod."github.com/go-openapi/validate"] - version = "v0.25.2" - hash = "sha256-jH7GfH+JyC1tD2Ejz8ioI5U7IKYqQbllU381qSo5D30=" - [mod."github.com/go-viper/mapstructure/v2"] - version = "v2.5.0" - hash = "sha256-LbrCBANBprVI84M0CWrXc7rriJL5ac5VKbh58LBTw7U=" - [mod."github.com/gobuffalo/flect"] - version = "v1.0.3" - hash = "sha256-gpA1fe9XTjZ9r+yYCysCgXKo1AmYNuNFwWn7ZQ4Ky1M=" - [mod."github.com/golang-jwt/jwt/v4"] - version = "v4.5.2" - hash = "sha256-rTSqYEPooi8Uu4aXMW6k9dynOV+URYTGzVmbG3EQ7uo=" - [mod."github.com/golang/snappy"] - version = "v0.0.4" - hash = "sha256-Umx+5xHAQCN/Gi4HbtMhnDCSPFAXSsjVbXd8n5LhjAA=" - [mod."github.com/google/btree"] - version = "v1.1.3" - hash = "sha256-/6Us2eNRFi2IIp7p5uPUXLridilAdk4SmZhcTYR0csw=" - [mod."github.com/google/cel-go"] - version = "v0.26.1" - hash = "sha256-XVL+pNGjmLrQefpB7qj419zWl1qhPVHmVxsP/Ro1AtE=" - [mod."github.com/google/certificate-transparency-go"] - version = "v1.3.3" - hash = "sha256-CdAOfBmZ7xs51YUxLhg5edjxeCQqE2Kw0jOe+jHgvfA=" - [mod."github.com/google/gnostic-models"] - version = "v0.7.1" - hash = "sha256-dfSFaYzgD4HrdL6ZsN8V9w0SMzx0WXl38dIy4dnjhhc=" - [mod."github.com/google/go-cmp"] - version = "v0.7.0" - hash = "sha256-JbxZFBFGCh/Rj5XZ1vG94V2x7c18L8XKB0N9ZD5F2rM=" - [mod."github.com/google/go-containerregistry"] - version = "v0.20.7" - hash = "sha256-IkvePl7PwjCaHPealmpkxpqeNo7Cn1I/xzHyHV1x18c=" - [mod."github.com/google/go-containerregistry/pkg/authn/k8schain"] - version = "v0.0.0-20230919002926-dbcd01c402b2" - hash = "sha256-y/xHODMYpIsday3XuwTS8bO5+1CMjgazalC2fijnC6c=" - [mod."github.com/google/go-containerregistry/pkg/authn/kubernetes"] - version = "v0.0.0-20250225234217-098045d5e61f" - hash = "sha256-UZyDwMt9qQw5XHHDOlTyYMRvG1BiDfBHeZLmoMzunB4=" - [mod."github.com/google/uuid"] - version = "v1.6.0" - hash = "sha256-VWl9sqUzdOuhW0KzQlv0gwwUQClYkmZwSydHG2sALYw=" - [mod."github.com/grpc-ecosystem/grpc-gateway/v2"] - version = "v2.27.7" - hash = "sha256-5TAHtwMLAbyk4iRQ574kb+EPEGhcZ0ZsoLQplck7zFA=" - [mod."github.com/hashicorp/go-cleanhttp"] - version = "v0.5.2" - hash = "sha256-N9GOKYo7tK6XQUFhvhImtL7PZW/mr4C4Manx/yPVvcQ=" - [mod."github.com/hashicorp/go-retryablehttp"] - version = "v0.7.8" - hash = "sha256-4LZwKaFBbpKi9lSq5y6lOlYHU6WMnQdGNMxTd33rN80=" - [mod."github.com/in-toto/attestation"] - version = "v1.1.2" - hash = "sha256-BdRbWCnzMCMyZmo8lkovtvGWQq2qCB7S2XBZWClJ6TM=" - [mod."github.com/in-toto/in-toto-golang"] - version = "v0.10.0" - hash = "sha256-ZL2+v1bszcWWTLUsIVf0A7q37Vw+v9vgqb2AlMHabe0=" - [mod."github.com/inconshreveable/mousetrap"] - version = "v1.1.0" - hash = "sha256-XWlYH0c8IcxAwQTnIi6WYqq44nOKUylSWxWO/vi+8pE=" - [mod."github.com/jedisct1/go-minisign"] - version = "v0.0.0-20230811132847-661be99b8267" - hash = "sha256-tWufMmbfSlJRLsD1/ye5H+9b/uEQnBCQwORLJ1KwRh8=" - [mod."github.com/json-iterator/go"] - version = "v1.1.12" - hash = "sha256-To8A0h+lbfZ/6zM+2PpRpY3+L6725OPC66lffq6fUoM=" - [mod."github.com/klauspost/compress"] - version = "v1.18.5" - hash = "sha256-H9b5iFJf4XbEnkGQCjGQAJ3aYhVDiolKrDewTbhuzQo=" - [mod."github.com/letsencrypt/boulder"] - version = "v0.20260223.0" - hash = "sha256-p/AuDyJr7chBqbXT+LLa3ShKX96aC3SsfzR2ekb2+xM=" - [mod."github.com/mattn/go-colorable"] - version = "v0.1.14" - hash = "sha256-JC60PjKj7MvhZmUHTZ9p372FV72I9Mxvli3fivTbxuA=" - [mod."github.com/mattn/go-isatty"] - version = "v0.0.20" - hash = "sha256-qhw9hWtU5wnyFyuMbKx+7RB8ckQaFQ8D+8GKPkN3HHQ=" - [mod."github.com/mitchellh/go-homedir"] - version = "v1.1.0" - hash = "sha256-oduBKXHAQG8X6aqLEpqZHs5DOKe84u6WkBwi4W6cv3k=" - [mod."github.com/moby/term"] - version = "v0.5.2" - hash = "sha256-/G20jUZKx36ktmPU/nEw/gX7kRTl1Dbu7zvNBYNt4xU=" - [mod."github.com/modern-go/concurrent"] - version = "v0.0.0-20180306012644-bacd9c7ef1dd" - hash = "sha256-OTySieAgPWR4oJnlohaFTeK1tRaVp/b0d1rYY8xKMzo=" - [mod."github.com/modern-go/reflect2"] - version = "v1.0.3-0.20250322232337-35a7c28c31ee" - hash = "sha256-0pkWWZRB3lGFyzmlxxrm0KWVQo9HNXNafaUu3k+rE1g=" - [mod."github.com/munnerz/goautoneg"] - version = "v0.0.0-20191010083416-a7dc8b61c822" - hash = "sha256-79URDDFenmGc9JZu+5AXHToMrtTREHb3BC84b/gym9Q=" - [mod."github.com/nozzle/throttler"] - version = "v0.0.0-20180817012639-2ea982251481" - hash = "sha256-pufLisYZW//uJXtCkobaU0Etnu+ZPQCqaRzRItx65hk=" - [mod."github.com/oklog/ulid/v2"] - version = "v2.1.1" - hash = "sha256-kPNLaZMGwGc7ngPCivf/n4Bis219yOkGAaa6mt7+yTY=" - [mod."github.com/opencontainers/go-digest"] - version = "v1.0.0" - hash = "sha256-cfVDjHyWItmUGZ2dzQhCHgmOmou8v7N+itDkLZVkqkQ=" - [mod."github.com/opencontainers/image-spec"] - version = "v1.1.1" - hash = "sha256-bxBjtl+6846Ed3QHwdssOrNvlHV6b+Dn17zPISSQGP8=" - [mod."github.com/pkg/browser"] - version = "v0.0.0-20240102092130-5ac0b6a4141c" - hash = "sha256-9iaSHHpcA1fXVF5f8RlKyo1DSoHx7eGXIC2/4LFaoBY=" - [mod."github.com/pkg/errors"] - version = "v0.9.1" - hash = "sha256-mNfQtcrQmu3sNg/7IwiieKWOgFQOVVe2yXgKBpe/wZw=" - [mod."github.com/pmezard/go-difflib"] - version = "v1.0.1-0.20181226105442-5d4384ee4fb2" - hash = "sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90=" - [mod."github.com/prometheus/client_golang"] - version = "v1.23.2" - hash = "sha256-3GD4fBFa1tJu8MS4TNP6r2re2eViUE+kWUaieIOQXCg=" - [mod."github.com/prometheus/client_model"] - version = "v0.6.2" - hash = "sha256-q6Fh6v8iNJN9ypD47LjWmx66YITa3FyRjZMRsuRTFeQ=" - [mod."github.com/prometheus/common"] - version = "v0.67.5" - hash = "sha256-pDzmYsAANsaIf3W9HxpbgRnZ4BkPhJBBwzKq2E58FRw=" - [mod."github.com/prometheus/procfs"] - version = "v0.19.2" - hash = "sha256-PJW21pew9v+XA7Miow8JVPct+FPIHmQHphwO+g2kNWA=" - [mod."github.com/sassoftware/relic"] - version = "v7.2.1+incompatible" - hash = "sha256-vHyTdLRh6OlfoGzVgvx7I0+E6tpE7V43lCQaHD/e8J4=" - [mod."github.com/secure-systems-lab/go-securesystemslib"] - version = "v0.10.0" - hash = "sha256-KY68WNnb3tgNTi0QWsmirkPfmU0xyaP23QVuSuawtHQ=" - [mod."github.com/shibumi/go-pathspec"] - version = "v1.3.0" - hash = "sha256-ZHLft/o+xyJrUlaCwnCDqbjkPj6iIxlOuA0fFBuwVvM=" - [mod."github.com/sigstore/cosign/v3"] - version = "v3.0.4" - hash = "sha256-vKqTcSUgY2Hj1IlunX0dq6snFlMCTCCctyCiMOWaZ8M=" - [mod."github.com/sigstore/protobuf-specs"] - version = "v0.5.0" - hash = "sha256-nImiBItjCQwskGHqYYthBjUfHHxy8VnVwSMWkK6GiNo=" - [mod."github.com/sigstore/rekor"] - version = "v1.5.1" - hash = "sha256-4+wM/pNyOtFZM9WQDSLubScfbquWmvDRY93vHjIrf9k=" - [mod."github.com/sigstore/rekor-tiles/v2"] - version = "v2.2.1" - hash = "sha256-mRnRvIp0UE7o5CUJiG8hs5xFJABuEAWWnjvTwz/4cKo=" - [mod."github.com/sigstore/sigstore"] - version = "v1.10.4" - hash = "sha256-eRJFozhehtpsiOSJ1z6a4SmyfGd7hl+IjQ4QD3yW0h0=" - [mod."github.com/sigstore/sigstore-go"] - version = "v1.1.4" - hash = "sha256-EsPVloCbJXMXOUKsNU00WQzzR2DfkbmCGYGdYgnH94I=" - [mod."github.com/sigstore/timestamp-authority/v2"] - version = "v2.0.5" - hash = "sha256-pq8J9O1fSxW5+tdyS5ZVp4+Kzo0Bbpu4Cw6eqeaVDhU=" - [mod."github.com/sirupsen/logrus"] - version = "v1.9.4" - hash = "sha256-ltRvmtM3XTCAFwY0IesfRqYIivyXPPuvkFjL4ARh1wg=" - [mod."github.com/spf13/afero"] - version = "v1.15.0" - hash = "sha256-LhcezbOqfuBzacytbqck0hNUxi6NbWNhifUc5/9uHQ8=" - [mod."github.com/spf13/cobra"] - version = "v1.10.2" - hash = "sha256-nbRCTFiDCC2jKK7AHi79n7urYCMP5yDZnWtNVJrDi+k=" - [mod."github.com/spf13/pflag"] - version = "v1.0.10" - hash = "sha256-uDPnWjHpSrzXr17KEYEA1yAbizfcsfo5AyztY2tS6ZU=" - [mod."github.com/stoewer/go-strcase"] - version = "v1.3.1" - hash = "sha256-yptboRvbZtX+OEdlTgJnrCT+bvaMgCJp5B9ifEaSfw0=" - [mod."github.com/syndtr/goleveldb"] - version = "v1.0.1-0.20220721030215-126854af5e6d" - hash = "sha256-z7HzuNVmpAJalsebJ+X7jdXq7BykcOyfzhFT8os+euM=" - [mod."github.com/theupdateframework/go-tuf"] - version = "v0.7.0" - hash = "sha256-YwQTq6V20iI46KufNAi+1P1qrn0ldZxsFRY7dhXbO1s=" - [mod."github.com/theupdateframework/go-tuf/v2"] - version = "v2.4.1" - hash = "sha256-v9ULpLPiK+0wBn+36zwA2ci8bX1ugO+qf3+1nd7xI4g=" - [mod."github.com/titanous/rocacheck"] - version = "v0.0.0-20171023193734-afe73141d399" - hash = "sha256-r5XUB1A/doHNd5pu1cL0J8Jwy5IBtc8gQtG5NmKEYPU=" - [mod."github.com/transparency-dev/formats"] - version = "v0.0.0-20251017110053-404c0d5b696c" - hash = "sha256-IaDd91Eeh6DasW5UcQaUpYobBwSNJO2nC64rySBs4wI=" - [mod."github.com/transparency-dev/merkle"] - version = "v0.0.2" - hash = "sha256-4KsqpIqgXlypi1X88PekMRfWJ/Y8tuww6DAuXar2+FY=" - [mod."github.com/vbatts/tar-split"] - version = "v0.12.2" - hash = "sha256-6gOHl4puCV9T2EWpFpqMCkV9N2PEPSiWbNZNp20q7iM=" - [mod."github.com/x448/float16"] - version = "v0.8.4" - hash = "sha256-VKzMTMS9pIB/cwe17xPftCSK9Mf4Y6EuBEJlB4by5mE=" - [mod."go.opentelemetry.io/auto/sdk"] - version = "v1.2.1" - hash = "sha256-73bFYhnxNf4SfeQ52ebnwOWywdQbqc9lWawCcSgofvE=" - [mod."go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp"] - version = "v0.64.0" - hash = "sha256-xilqHTTNmvhxDFfTnE8ZytsrYq5gYFD77/glakljCy0=" - [mod."go.opentelemetry.io/otel"] - version = "v1.41.0" - hash = "sha256-FPVlkljBrDio3rM05uZpVGfcHnS3K9wrpK5d/n9haiY=" - [mod."go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc"] - version = "v1.39.0" - hash = "sha256-7pfSAaoIS1fbtVd9CCx6J4/DHBsmReon6r9Hocb2CCU=" - [mod."go.opentelemetry.io/otel/metric"] - version = "v1.41.0" - hash = "sha256-ewIzb2gPApZcnE6xIi8/k8lfd/38NW5yOAzpOUVVXdk=" - [mod."go.opentelemetry.io/otel/trace"] - version = "v1.41.0" - hash = "sha256-kvVEiONIBtfHxT7u+19EWvLzFj+A4Mvke+/VWmlNAM4=" - [mod."go.uber.org/multierr"] - version = "v1.11.0" - hash = "sha256-Lb6rHHfR62Ozg2j2JZy3MKOMKdsfzd1IYTR57r3Mhp0=" - [mod."go.uber.org/zap"] - version = "v1.27.1" - hash = "sha256-bn/MMu7X3GkUuW12Xwn9JYbOJeEu9+yoQtkmO+36xlQ=" - [mod."go.yaml.in/yaml/v2"] - version = "v2.4.3" - hash = "sha256-WqfrOUQFvfuORgl1yyVOcsEXU/vwWQHkcVWx3vCxvaw=" - [mod."go.yaml.in/yaml/v3"] - version = "v3.0.4" - hash = "sha256-NkGFiDPoCxbr3LFsI6OCygjjkY0rdmg5ggvVVwpyDQ4=" - [mod."golang.org/x/crypto"] - version = "v0.50.0" - hash = "sha256-vC1BJT7+3UBWLyEE5n3to0NKhMo6m2HGow2HiFgpQLo=" - [mod."golang.org/x/exp"] - version = "v0.0.0-20260112195511-716be5621a96" - hash = "sha256-rWqwXzLvvhcI/ZkOQMqCXMKI5FAuHd9YNoKTXujmboA=" - [mod."golang.org/x/mod"] - version = "v0.35.0" - hash = "sha256-ICEQxokHywOFInDPqoP+go9l1tZSz3roknF5SXPtNV4=" - [mod."golang.org/x/net"] - version = "v0.53.0" - hash = "sha256-G9gKLmyaf6lIV429NKX+YlL6oUPJwlv+BrG6qGhzvmU=" - [mod."golang.org/x/oauth2"] - version = "v0.36.0" - hash = "sha256-evS7WkMrpgonmTcqtWFpC5rSKZN8O+vnAhNUs1MS9kw=" - [mod."golang.org/x/sync"] - version = "v0.20.0" - hash = "sha256-ybcjhCfK6lroUM0yswUvWooW8MOQZBXyiSqoxG6Uy0Y=" - [mod."golang.org/x/sys"] - version = "v0.43.0" - hash = "sha256-aDQXqSTZES2l/132PBxhZN4ywldpPyfm7LByYCHzzwM=" - [mod."golang.org/x/term"] - version = "v0.42.0" - hash = "sha256-FCiDvAfq7dgBGQuiDYDFJbj/JPawhrmPF2qdUEftQ1c=" - [mod."golang.org/x/text"] - version = "v0.36.0" - hash = "sha256-/0t9C6Mc8kYjxweFB0us2lGKo8GovHhBiq5nlMOppC0=" - [mod."golang.org/x/time"] - version = "v0.14.0" - hash = "sha256-fVjpq0ieUHVEOTSElDVleMWvfdcqojZchqdUXiC7NnY=" - [mod."golang.org/x/tools"] - version = "v0.44.0" - hash = "sha256-xuj5FLtSJsAojLLTLXtPdLAIFNTKoVFbDMuqRXmj2W4=" - [mod."gomodules.xyz/jsonpatch/v2"] - version = "v2.5.0" - hash = "sha256-L3Xy24GTtcDHmMgc9rlgUm3GrxFO7XQKJhfYIr3li1s=" - [mod."google.golang.org/genproto/googleapis/api"] - version = "v0.0.0-20260203192932-546029d2fa20" - hash = "sha256-JLKiAZgzBCWDirystkpOu5VeKld8AeDQ37Zfu8ynnrE=" - [mod."google.golang.org/genproto/googleapis/rpc"] - version = "v0.0.0-20260217215200-42d3e9bedb6d" - hash = "sha256-pnGJ+eFKWgDoT8oYp88FEOaafs+WJe3vsZHyZLSj5pU=" - [mod."google.golang.org/grpc"] - version = "v1.79.2" - hash = "sha256-n6B5wCKUSOhABR0/Vl4NopD6cxV4qXAqS3EdCuc42G8=" - [mod."google.golang.org/protobuf"] - version = "v1.36.11" - hash = "sha256-7W+6jntfI/awWL3JP6yQedxqP5S9o3XvPgJ2XxxsIeE=" - [mod."gopkg.in/evanphx/json-patch.v4"] - version = "v4.13.0" - hash = "sha256-1iyZpBaeBLmNkJ3T4A9fAEXEYB9nk9V02ug4pwl5dy0=" - [mod."gopkg.in/inf.v0"] - version = "v0.9.1" - hash = "sha256-z84XlyeWLcoYOvWLxPkPFgLkpjyb2Y4pdeGMyySOZQI=" - [mod."gopkg.in/yaml.v2"] - version = "v2.4.0" - hash = "sha256-uVEGglIedjOIGZzHW4YwN1VoRSTK8o0eGZqzd+TNdd0=" - [mod."gopkg.in/yaml.v3"] - version = "v3.0.1" - hash = "sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=" - [mod."k8s.io/api"] - version = "v0.35.0" - hash = "sha256-eIie0MFXkmNsfiO58pg+ThJ1wPcYh3T7Gch9p2GrT64=" - [mod."k8s.io/apiextensions-apiserver"] - version = "v0.35.0" - hash = "sha256-RZdGkV4SoCTY022pIzQbeVwaxIYhIpXapLZrD593gh8=" - [mod."k8s.io/apimachinery"] - version = "v0.35.0" - hash = "sha256-+dplbHUOfaCaD2E9IS4F3lnjSCr/a4LjTgdB9de92Pw=" - [mod."k8s.io/client-go"] - version = "v0.35.0" - hash = "sha256-s+o7ybLe83chueBIVvYRibI2HCk+QQoWTjfXqmzsjHs=" - [mod."k8s.io/code-generator"] - version = "v0.35.0" - hash = "sha256-0F8vNVdF/quBPGxOpxBL/GhupnkMoTE8dcZYX57RZKk=" - [mod."k8s.io/component-base"] - version = "v0.35.0" - hash = "sha256-fIAmKs3/T8oHrXBX3sMWr/D1DGhyCsgM+6ZFdaA8BXU=" - [mod."k8s.io/gengo/v2"] - version = "v2.0.0-20251215205346-5ee0d033ba5b" - hash = "sha256-FxD4b+cOzKuXsGI4NpsaUK/YTOMxugMGAh2jY3od3p8=" - [mod."k8s.io/klog/v2"] - version = "v2.130.1" - hash = "sha256-n5vls1o1a0V0KYv+3SULq4q3R2Is15K8iDHhFlsSH4o=" - [mod."k8s.io/kube-openapi"] - version = "v0.0.0-20260127142750-a19766b6e2d4" - hash = "sha256-NS8NvGTX3Ycoc4JU/jwLgtNlD5OOQ5zk2hzvFFSD/jM=" - [mod."k8s.io/utils"] - version = "v0.0.0-20260108192941-914a6e750570" - hash = "sha256-eFcd1fZT9M7wc/foeEAUj3jgHJfEY9U3lVqQTkIVJ44=" - [mod."sigs.k8s.io/apiserver-network-proxy/konnectivity-client"] - version = "v0.34.0" - hash = "sha256-98ScvhhmVxEVAGv9rhk10ceYUadNOuBERtCcdaIb42s=" - [mod."sigs.k8s.io/controller-runtime"] - version = "v0.23.1" - hash = "sha256-iOaYAJgy/Q1Hi6afs5mLtP8K5J8Cs/MlDoGp8wE1GOY=" - [mod."sigs.k8s.io/controller-tools"] - version = "v0.20.0" - hash = "sha256-1/v8hCCykTDMjhx4jM84/v+WJlQ8M1whdgpGfgmSRRU=" - [mod."sigs.k8s.io/json"] - version = "v0.0.0-20250730193827-2d320260d730" - hash = "sha256-y3vUPJYL6oxu/8c0j4vgX6fzqHtVPSCjfyuWkZYf6+I=" - [mod."sigs.k8s.io/randfill"] - version = "v1.0.0" - hash = "sha256-xldQxDwW84hmlihdSOFfjXyauhxEWV9KmIDLZMTcYNo=" - [mod."sigs.k8s.io/structured-merge-diff/v6"] - version = "v6.3.2-0.20260122202528-d9cc6641c482" - hash = "sha256-4ZUkeHKvdhsZmFSSZKAL/1GZdPO6735BY6FqRc+8tog=" - [mod."sigs.k8s.io/yaml"] - version = "v1.6.0" - hash = "sha256-49hg7IVPzwxeovp+HTMiWa/10NMMTSTjAdCmIv6p9dw=" + [mod.'cloud.google.com/go/compute/metadata'] + version = 'v0.9.0' + hash = 'sha256-VFqQwLJKyH1zReR/XtygEHP5UkI01T9BHEL0hvXtauo=' + + [mod.'dario.cat/mergo'] + version = 'v1.0.2' + hash = 'sha256-p6jdiHlLEfZES8vJnDywG4aVzIe16p0CU6iglglIweA=' + + [mod.'github.com/AdaLogics/go-fuzz-headers'] + version = 'v0.0.0-20240806141605-e8a1dd7889d6' + hash = 'sha256-4h0bcF0eg/Y9DnurD91SbGAzLz0DwffJsF//YJGfPJg=' + + [mod.'github.com/Azure/azure-sdk-for-go'] + version = 'v68.0.0+incompatible' + hash = 'sha256-xaa9LgrrLjgbOh/XM1dZMWH/sZeGMb59gK0CTB6JUUI=' + + [mod.'github.com/Azure/go-ansiterm'] + version = 'v0.0.0-20250102033503-faa5f7b0171c' + hash = 'sha256-4WYKJtxjnm3egDAh9ocTR+gy5UUqVoY3knHy9c17XIY=' + + [mod.'github.com/Azure/go-autorest'] + version = 'v14.2.0+incompatible' + hash = 'sha256-dvWOcudtx0NP6U2RDt40hwtELFRdYdLEklRWYterRN0=' + + [mod.'github.com/Azure/go-autorest/autorest'] + version = 'v0.11.30' + hash = 'sha256-CykvDRDHHCyhIZOxbvpT/a0VEhuJmIwKw/MEjS3hmEs=' + + [mod.'github.com/Azure/go-autorest/autorest/adal'] + version = 'v0.9.24' + hash = 'sha256-itnCV0BJlMi5MHFlxePRUA/XPwofDzTksUVh7jcqarE=' + + [mod.'github.com/Azure/go-autorest/autorest/azure/auth'] + version = 'v0.5.13' + hash = 'sha256-s901woJ0T3B+1QUUOMcjz0ops2pXzZQ+x7/XEuC91Ko=' + + [mod.'github.com/Azure/go-autorest/autorest/azure/cli'] + version = 'v0.4.7' + hash = 'sha256-ljC1ag2fX8jLdlgr1wgLx66QdRHYa9VdOu0r9RFDtLo=' + + [mod.'github.com/Azure/go-autorest/autorest/date'] + version = 'v0.3.1' + hash = 'sha256-DqCnDxzYgcAPEpnlHqa+eL3msZvbkYNSMq6ftSEMSQo=' + + [mod.'github.com/Azure/go-autorest/logger'] + version = 'v0.2.2' + hash = 'sha256-fmbHaafgS17KXIXpqqChOF8qqi+lfJHZM4o+i0pmNSs=' + + [mod.'github.com/Azure/go-autorest/tracing'] + version = 'v0.6.1' + hash = 'sha256-nstDZC8Btx78yzqIR4clfu+R93rebUOZalEW1ZaQfIY=' + + [mod.'github.com/Masterminds/semver/v3'] + version = 'v3.4.0' + hash = 'sha256-75kRraVwYVjYLWZvuSlts4Iu28Eh3SpiF0GHc7vCYHI=' + + [mod.'github.com/antlr4-go/antlr/v4'] + version = 'v4.13.1' + hash = 'sha256-beAuxHNRUuhzcSJUh/8ztVf1zCUiaT72fg2Jvx0AuNQ=' + + [mod.'github.com/asaskevich/govalidator'] + version = 'v0.0.0-20230301143203-a9d515a09cc2' + hash = 'sha256-UCENzt1c1tFgsAzK2TNq5s2g0tQMQ5PxFaQKe8hTL/A=' + + [mod.'github.com/aws/aws-sdk-go-v2'] + version = 'v1.41.4' + hash = 'sha256-k9xv4f8YPSzZ1yR3/zuyNDGenZKk0DD4lceL713yXtc=' + + [mod.'github.com/aws/aws-sdk-go-v2/config'] + version = 'v1.32.12' + hash = 'sha256-aTkdSRe8KPmVZdsunU8j/hZQLhGw1ckKpLN/ryRBZM0=' + + [mod.'github.com/aws/aws-sdk-go-v2/credentials'] + version = 'v1.19.12' + hash = 'sha256-xEIT1ARA9RYrQtLZIus71E6niNHIOVM1J7mUnA5AhJQ=' + + [mod.'github.com/aws/aws-sdk-go-v2/feature/ec2/imds'] + version = 'v1.18.20' + hash = 'sha256-dCTpdKZheVCSt+R+NnFOnlS0bCt4gPavlDh15Kl/sMQ=' + + [mod.'github.com/aws/aws-sdk-go-v2/internal/configsources'] + version = 'v1.4.20' + hash = 'sha256-aATIk4oLd7aaV66ereBdjINLMDwmIHxu+NNsgKWH1t4=' + + [mod.'github.com/aws/aws-sdk-go-v2/internal/endpoints/v2'] + version = 'v2.7.20' + hash = 'sha256-G6266uj64sgfDTJ9V1UY1sQs3UmryB0CFgxzmbjjChY=' + + [mod.'github.com/aws/aws-sdk-go-v2/internal/ini'] + version = 'v1.8.6' + hash = 'sha256-oIRPqu99vnGINAWKnCEytpv7N0gRWO7S72tb1r8oxvk=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/ecr'] + version = 'v1.55.3' + hash = 'sha256-J9v9A2bMBTPM0K/aHM3TrS0nBkuTNFVQyqtnc1ZwE7w=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/ecrpublic'] + version = 'v1.38.10' + hash = 'sha256-uJtfhtkG4pfehKHyc2dsqafvt6fKMnMgMe/uPemJrPY=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding'] + version = 'v1.13.7' + hash = 'sha256-AfYJdpmnW01Bk/jfHATlNU6lddjqcigFkHw/zcT9WO4=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/internal/presigned-url'] + version = 'v1.13.20' + hash = 'sha256-a5TifKunIoqKd2uAceYh6F1LvMHMyEQcWvJf0sxKhPM=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/signin'] + version = 'v1.0.8' + hash = 'sha256-o4pWg3yMZHxdI94x5Z6qbiRg7gpmzbpJnJWsR1BOc44=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/sso'] + version = 'v1.30.13' + hash = 'sha256-V277a0ikm/H0paIeDLtPGEyav2a69Kdb9d5bh+JLAeY=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/ssooidc'] + version = 'v1.35.17' + hash = 'sha256-r5V5DoCIR4yzN1Ttg+dIA85GVkWMPgeD6Zu0rWGqNJE=' + + [mod.'github.com/aws/aws-sdk-go-v2/service/sts'] + version = 'v1.41.9' + hash = 'sha256-I15uxeoKxDURsZrEVDzCRtVIu/HE756M1Rt7PPpdZ7c=' + + [mod.'github.com/aws/smithy-go'] + version = 'v1.24.2' + hash = 'sha256-v0y+Lir61fgdCwdVoca5mK+FcGh9OD3cTEwHIfLytcI=' + + [mod.'github.com/awslabs/amazon-ecr-credential-helper/ecr-login'] + version = 'v0.12.0' + hash = 'sha256-PHoHWGX9RVkAQNQF2fz5Hv4JEaGBvLhcuUwlu5IQjU0=' + + [mod.'github.com/beorn7/perks'] + version = 'v1.0.1' + hash = 'sha256-h75GUqfwJKngCJQVE5Ao5wnO3cfKD9lSIteoLp/3xJ4=' + + [mod.'github.com/blang/semver'] + version = 'v3.5.1+incompatible' + hash = 'sha256-vmoIH5J0esVFmLDT2ecwtalvJqRRoLwomysyvlIRmo8=' + + [mod.'github.com/blang/semver/v4'] + version = 'v4.0.0' + hash = 'sha256-dJC22MjnfT5WqJ7x7Tc3Bvpw9tFnBn9HqfWFiM57JVc=' + + [mod.'github.com/cenkalti/backoff/v5'] + version = 'v5.0.3' + hash = 'sha256-bKq43PPD8RM6e7HePxHaO27traqm76bkvHcTVTQ+jeY=' + + [mod.'github.com/cespare/xxhash/v2'] + version = 'v2.3.0' + hash = 'sha256-7hRlwSR+fos1kx4VZmJ/7snR7zHh8ZFKX+qqqqGcQpY=' + + [mod.'github.com/chrismellard/docker-credential-acr-env'] + version = 'v0.0.0-20230304212654-82a0ddb27589' + hash = 'sha256-EWyO62fm/zhWdo4/96bscr3POG/5tKsWXYqp5mTwP0Y=' + + [mod.'github.com/containerd/stargz-snapshotter/estargz'] + version = 'v0.18.2' + hash = 'sha256-6KS9ObQ1tKXkvvKQy1BmxJ59aisDGvEtqhj1Oo54IRY=' + + [mod.'github.com/coreos/go-oidc/v3'] + version = 'v3.17.0' + hash = 'sha256-b9dCq5GN5ac64UG23Rijv1qcmUZNcxb8DJQycAa96EQ=' + + [mod.'github.com/crossplane/crossplane/apis/v2'] + version = 'v2.0.0-20260424160951-8f231230ebb6' + hash = 'sha256-wtcG/nMC4A9nebFxsfSlWZjdupAQ6IjHinFhvFB6KNk=' + + [mod.'github.com/cyberphone/json-canonicalization'] + version = 'v0.0.0-20241213102144-19d51d7fe467' + hash = 'sha256-eqH3UKAZ9eOlZjYdN7nWuJ1hFm2JAP1PVbJInQk6OLw=' + + [mod.'github.com/davecgh/go-spew'] + version = 'v1.1.2-0.20180830191138-d8f796af33cc' + hash = 'sha256-fV9oI51xjHdOmEx6+dlq7Ku2Ag+m/bmbzPo6A4Y74qc=' + + [mod.'github.com/digitorus/pkcs7'] + version = 'v0.0.0-20230818184609-3a137a874352' + hash = 'sha256-zhgLL+kS2vkOhiK3kkI6yMhr71JOYo/uuxDo1dsC2k0=' + + [mod.'github.com/digitorus/timestamp'] + version = 'v0.0.0-20231217203849-220c5c2851b7' + hash = 'sha256-uNkyMBsdbLN1PiDLHAGWUYf6sZ08ENbxpv9RkNtzaW0=' + + [mod.'github.com/dimchansky/utfbom'] + version = 'v1.1.1' + hash = 'sha256-w8KEprK54zJkMat78T6zldjDwvhbc/O8s6pVFzfmg1I=' + + [mod.'github.com/docker/cli'] + version = 'v29.4.0+incompatible' + hash = 'sha256-mUN7Fu9e4ahtUJBUvCHUk+ICFq1d6vs7MoJf0/cw+mA=' + + [mod.'github.com/docker/distribution'] + version = 'v2.8.3+incompatible' + hash = 'sha256-XhRURCGNpJC83QZTtgCxHHFL76HaxIxjt70HwUa847E=' + + [mod.'github.com/docker/docker-credential-helpers'] + version = 'v0.9.5' + hash = 'sha256-7fm66H8bvqjiEssTy/oiAMmQd7T15aVS+EANrw+4H4U=' + + [mod.'github.com/dustin/go-humanize'] + version = 'v1.0.1' + hash = 'sha256-yuvxYYngpfVkUg9yAmG99IUVmADTQA0tMbBXe0Fq0Mc=' + + [mod.'github.com/emicklei/go-restful/v3'] + version = 'v3.13.0' + hash = 'sha256-lB2Z29RDLiVQE5NrsV1s2iHeQ4ciGwNj5OG1zJxwZV8=' + + [mod.'github.com/evanphx/json-patch'] + version = 'v5.9.11+incompatible' + hash = 'sha256-1iyZpBaeBLmNkJ3T4A9fAEXEYB9nk9V02ug4pwl5dy0=' + + [mod.'github.com/evanphx/json-patch/v5'] + version = 'v5.9.11' + hash = 'sha256-DaWzRi5dIr3U7kJlV3Qm1DWoKh5W+FI2BW/ATXT40J4=' + + [mod.'github.com/fatih/color'] + version = 'v1.18.0' + hash = 'sha256-pP5y72FSbi4j/BjyVq/XbAOFjzNjMxZt2R/lFFxGWvY=' + + [mod.'github.com/fsnotify/fsnotify'] + version = 'v1.9.0' + hash = 'sha256-WtpE1N6dpHwEvIub7Xp/CrWm0fd6PX7MKA4PV44rp2g=' + + [mod.'github.com/fxamacker/cbor/v2'] + version = 'v2.9.0' + hash = 'sha256-/IZK76MRCrz9XCiilieH5tKaLnIWyPJhwxDoVKB8dFc=' + + [mod.'github.com/go-chi/chi/v5'] + version = 'v5.2.5' + hash = 'sha256-Y1+17ky94849aqk3iKf30F1u+G6K3nzZzLOBSeqIUow=' + + [mod.'github.com/go-jose/go-jose/v4'] + version = 'v4.1.4' + hash = 'sha256-MKoJKXup1jfwOyN8mHXu1CQ8fvFJTaEf3K2LVtNSRhc=' + + [mod.'github.com/go-logr/logr'] + version = 'v1.4.3' + hash = 'sha256-Nnp/dEVNMxLp3RSPDHZzGbI8BkSNuZMX0I0cjWKXXLA=' + + [mod.'github.com/go-logr/stdr'] + version = 'v1.2.2' + hash = 'sha256-rRweAP7XIb4egtT1f2gkz4sYOu7LDHmcJ5iNsJUd0sE=' + + [mod.'github.com/go-openapi/analysis'] + version = 'v0.24.3' + hash = 'sha256-jBLHbyhrdLwc0x/P3MlUik0xZPV6xOaKAa5aPV77sBY=' + + [mod.'github.com/go-openapi/errors'] + version = 'v0.22.7' + hash = 'sha256-Iy5ieFbpjjbVEQ+UWXIeI8jzN/TjtsOoEX5IB6/v6gc=' + + [mod.'github.com/go-openapi/jsonpointer'] + version = 'v0.22.5' + hash = 'sha256-btK8c3hxbO9mAlvRYuAaNdjaHNYyLvNl/RfNxPsqQuw=' + + [mod.'github.com/go-openapi/jsonreference'] + version = 'v0.21.5' + hash = 'sha256-fBeVESt+JKLthLDTyuABzPV/hOmg4t8dPtwvAs1Ojog=' + + [mod.'github.com/go-openapi/loads'] + version = 'v0.23.3' + hash = 'sha256-KeSh5BVDAkNBw50Yoyi19lEzODOrTcASyjtnpcrcZ10=' + + [mod.'github.com/go-openapi/runtime'] + version = 'v0.29.3' + hash = 'sha256-nid3RStsHKEZgCNPU1+4NkqDsIOAc52JOF68zH3/bC4=' + + [mod.'github.com/go-openapi/spec'] + version = 'v0.22.4' + hash = 'sha256-nwNLmtrjR3w+vFGlBFSq4vM2ZsDQS4RDBQGYmlGv7BY=' + + [mod.'github.com/go-openapi/strfmt'] + version = 'v0.26.1' + hash = 'sha256-HcLytF6mvc2I+ReaKTjL5/LJzKfdwhb0iIpxjjV9+6M=' + + [mod.'github.com/go-openapi/swag'] + version = 'v0.25.5' + hash = 'sha256-ptIgtll6FVI7viEVxM/imWUjgaeLP/oViAarM/EhsWU=' + + [mod.'github.com/go-openapi/swag/cmdutils'] + version = 'v0.25.5' + hash = 'sha256-sEGS7K9gzBuKgkoIiHn5Mgv7+SvPqJ1iFZRsXrso/2M=' + + [mod.'github.com/go-openapi/swag/conv'] + version = 'v0.25.5' + hash = 'sha256-+yLC40AK2pyn62zStk7Q13Bsb4/HDsJUKTTNBSWSTvg=' + + [mod.'github.com/go-openapi/swag/fileutils'] + version = 'v0.25.5' + hash = 'sha256-zYxEpqJuZ97vFLQxfYwegDQhffKhpsDtYF1xhOVxL4c=' + + [mod.'github.com/go-openapi/swag/jsonname'] + version = 'v0.25.5' + hash = 'sha256-ypcI24qrUOd0lbZUJcFByQr07U7WtQvIu/YhuewUWDo=' + + [mod.'github.com/go-openapi/swag/jsonutils'] + version = 'v0.25.5' + hash = 'sha256-e6OOoTIH/zrI/unpNIu3foYEvSWKb7Jvf+6E6/nvpMg=' + + [mod.'github.com/go-openapi/swag/loading'] + version = 'v0.25.5' + hash = 'sha256-gwy+xJkF3PHT5YMYnXgSX9XhuvwwOVpH60QTLsAh6/E=' + + [mod.'github.com/go-openapi/swag/mangling'] + version = 'v0.25.5' + hash = 'sha256-SXSdvYE+wIm95KHRUPYjPEdFU6hc85/7H5rJH7bdTSM=' + + [mod.'github.com/go-openapi/swag/netutils'] + version = 'v0.25.5' + hash = 'sha256-FzjcovD9ZGR/dNyU019KC/CRVn/OJ6XUJ3hS5J4w6go=' + + [mod.'github.com/go-openapi/swag/stringutils'] + version = 'v0.25.5' + hash = 'sha256-Ze2Y056Imqyq6kHPcACuqHt992WbXfC9LDziSCFuO/c=' + + [mod.'github.com/go-openapi/swag/typeutils'] + version = 'v0.25.5' + hash = 'sha256-A1mGLvoaLCT0iORn4tiyKWB8L69dMJzFjBFpt80Xzkg=' + + [mod.'github.com/go-openapi/swag/yamlutils'] + version = 'v0.25.5' + hash = 'sha256-+EumuV+qkhYn08XfR1ngIKMh79Mkj8vItpg0y0spX+c=' + + [mod.'github.com/go-openapi/validate'] + version = 'v0.25.2' + hash = 'sha256-jH7GfH+JyC1tD2Ejz8ioI5U7IKYqQbllU381qSo5D30=' + + [mod.'github.com/go-viper/mapstructure/v2'] + version = 'v2.5.0' + hash = 'sha256-LbrCBANBprVI84M0CWrXc7rriJL5ac5VKbh58LBTw7U=' + + [mod.'github.com/gobuffalo/flect'] + version = 'v1.0.3' + hash = 'sha256-gpA1fe9XTjZ9r+yYCysCgXKo1AmYNuNFwWn7ZQ4Ky1M=' + + [mod.'github.com/golang-jwt/jwt/v4'] + version = 'v4.5.2' + hash = 'sha256-rTSqYEPooi8Uu4aXMW6k9dynOV+URYTGzVmbG3EQ7uo=' + + [mod.'github.com/golang/snappy'] + version = 'v0.0.4' + hash = 'sha256-Umx+5xHAQCN/Gi4HbtMhnDCSPFAXSsjVbXd8n5LhjAA=' + + [mod.'github.com/google/btree'] + version = 'v1.1.3' + hash = 'sha256-/6Us2eNRFi2IIp7p5uPUXLridilAdk4SmZhcTYR0csw=' + + [mod.'github.com/google/cel-go'] + version = 'v0.26.1' + hash = 'sha256-XVL+pNGjmLrQefpB7qj419zWl1qhPVHmVxsP/Ro1AtE=' + + [mod.'github.com/google/certificate-transparency-go'] + version = 'v1.3.3' + hash = 'sha256-CdAOfBmZ7xs51YUxLhg5edjxeCQqE2Kw0jOe+jHgvfA=' + + [mod.'github.com/google/gnostic-models'] + version = 'v0.7.1' + hash = 'sha256-dfSFaYzgD4HrdL6ZsN8V9w0SMzx0WXl38dIy4dnjhhc=' + + [mod.'github.com/google/go-cmp'] + version = 'v0.7.0' + hash = 'sha256-JbxZFBFGCh/Rj5XZ1vG94V2x7c18L8XKB0N9ZD5F2rM=' + + [mod.'github.com/google/go-containerregistry'] + version = 'v0.20.7' + hash = 'sha256-IkvePl7PwjCaHPealmpkxpqeNo7Cn1I/xzHyHV1x18c=' + + [mod.'github.com/google/go-containerregistry/pkg/authn/k8schain'] + version = 'v0.0.0-20230919002926-dbcd01c402b2' + hash = 'sha256-y/xHODMYpIsday3XuwTS8bO5+1CMjgazalC2fijnC6c=' + + [mod.'github.com/google/go-containerregistry/pkg/authn/kubernetes'] + version = 'v0.0.0-20250225234217-098045d5e61f' + hash = 'sha256-UZyDwMt9qQw5XHHDOlTyYMRvG1BiDfBHeZLmoMzunB4=' + + [mod.'github.com/google/uuid'] + version = 'v1.6.0' + hash = 'sha256-VWl9sqUzdOuhW0KzQlv0gwwUQClYkmZwSydHG2sALYw=' + + [mod.'github.com/grpc-ecosystem/grpc-gateway/v2'] + version = 'v2.27.7' + hash = 'sha256-5TAHtwMLAbyk4iRQ574kb+EPEGhcZ0ZsoLQplck7zFA=' + + [mod.'github.com/hashicorp/go-cleanhttp'] + version = 'v0.5.2' + hash = 'sha256-N9GOKYo7tK6XQUFhvhImtL7PZW/mr4C4Manx/yPVvcQ=' + + [mod.'github.com/hashicorp/go-retryablehttp'] + version = 'v0.7.8' + hash = 'sha256-4LZwKaFBbpKi9lSq5y6lOlYHU6WMnQdGNMxTd33rN80=' + + [mod.'github.com/in-toto/attestation'] + version = 'v1.1.2' + hash = 'sha256-BdRbWCnzMCMyZmo8lkovtvGWQq2qCB7S2XBZWClJ6TM=' + + [mod.'github.com/in-toto/in-toto-golang'] + version = 'v0.10.0' + hash = 'sha256-ZL2+v1bszcWWTLUsIVf0A7q37Vw+v9vgqb2AlMHabe0=' + + [mod.'github.com/inconshreveable/mousetrap'] + version = 'v1.1.0' + hash = 'sha256-XWlYH0c8IcxAwQTnIi6WYqq44nOKUylSWxWO/vi+8pE=' + + [mod.'github.com/jedisct1/go-minisign'] + version = 'v0.0.0-20230811132847-661be99b8267' + hash = 'sha256-tWufMmbfSlJRLsD1/ye5H+9b/uEQnBCQwORLJ1KwRh8=' + + [mod.'github.com/json-iterator/go'] + version = 'v1.1.12' + hash = 'sha256-To8A0h+lbfZ/6zM+2PpRpY3+L6725OPC66lffq6fUoM=' + + [mod.'github.com/klauspost/compress'] + version = 'v1.18.5' + hash = 'sha256-H9b5iFJf4XbEnkGQCjGQAJ3aYhVDiolKrDewTbhuzQo=' + + [mod.'github.com/letsencrypt/boulder'] + version = 'v0.20260223.0' + hash = 'sha256-p/AuDyJr7chBqbXT+LLa3ShKX96aC3SsfzR2ekb2+xM=' + + [mod.'github.com/mattn/go-colorable'] + version = 'v0.1.14' + hash = 'sha256-JC60PjKj7MvhZmUHTZ9p372FV72I9Mxvli3fivTbxuA=' + + [mod.'github.com/mattn/go-isatty'] + version = 'v0.0.20' + hash = 'sha256-qhw9hWtU5wnyFyuMbKx+7RB8ckQaFQ8D+8GKPkN3HHQ=' + + [mod.'github.com/mitchellh/go-homedir'] + version = 'v1.1.0' + hash = 'sha256-oduBKXHAQG8X6aqLEpqZHs5DOKe84u6WkBwi4W6cv3k=' + + [mod.'github.com/moby/term'] + version = 'v0.5.2' + hash = 'sha256-/G20jUZKx36ktmPU/nEw/gX7kRTl1Dbu7zvNBYNt4xU=' + + [mod.'github.com/modern-go/concurrent'] + version = 'v0.0.0-20180306012644-bacd9c7ef1dd' + hash = 'sha256-OTySieAgPWR4oJnlohaFTeK1tRaVp/b0d1rYY8xKMzo=' + + [mod.'github.com/modern-go/reflect2'] + version = 'v1.0.3-0.20250322232337-35a7c28c31ee' + hash = 'sha256-0pkWWZRB3lGFyzmlxxrm0KWVQo9HNXNafaUu3k+rE1g=' + + [mod.'github.com/munnerz/goautoneg'] + version = 'v0.0.0-20191010083416-a7dc8b61c822' + hash = 'sha256-79URDDFenmGc9JZu+5AXHToMrtTREHb3BC84b/gym9Q=' + + [mod.'github.com/nozzle/throttler'] + version = 'v0.0.0-20180817012639-2ea982251481' + hash = 'sha256-pufLisYZW//uJXtCkobaU0Etnu+ZPQCqaRzRItx65hk=' + + [mod.'github.com/oklog/ulid/v2'] + version = 'v2.1.1' + hash = 'sha256-kPNLaZMGwGc7ngPCivf/n4Bis219yOkGAaa6mt7+yTY=' + + [mod.'github.com/opencontainers/go-digest'] + version = 'v1.0.0' + hash = 'sha256-cfVDjHyWItmUGZ2dzQhCHgmOmou8v7N+itDkLZVkqkQ=' + + [mod.'github.com/opencontainers/image-spec'] + version = 'v1.1.1' + hash = 'sha256-bxBjtl+6846Ed3QHwdssOrNvlHV6b+Dn17zPISSQGP8=' + + [mod.'github.com/pkg/browser'] + version = 'v0.0.0-20240102092130-5ac0b6a4141c' + hash = 'sha256-9iaSHHpcA1fXVF5f8RlKyo1DSoHx7eGXIC2/4LFaoBY=' + + [mod.'github.com/pkg/errors'] + version = 'v0.9.1' + hash = 'sha256-mNfQtcrQmu3sNg/7IwiieKWOgFQOVVe2yXgKBpe/wZw=' + + [mod.'github.com/pmezard/go-difflib'] + version = 'v1.0.1-0.20181226105442-5d4384ee4fb2' + hash = 'sha256-XA4Oj1gdmdV/F/+8kMI+DBxKPthZ768hbKsO3d9Gx90=' + + [mod.'github.com/prometheus/client_golang'] + version = 'v1.23.2' + hash = 'sha256-3GD4fBFa1tJu8MS4TNP6r2re2eViUE+kWUaieIOQXCg=' + + [mod.'github.com/prometheus/client_model'] + version = 'v0.6.2' + hash = 'sha256-q6Fh6v8iNJN9ypD47LjWmx66YITa3FyRjZMRsuRTFeQ=' + + [mod.'github.com/prometheus/common'] + version = 'v0.67.5' + hash = 'sha256-pDzmYsAANsaIf3W9HxpbgRnZ4BkPhJBBwzKq2E58FRw=' + + [mod.'github.com/prometheus/procfs'] + version = 'v0.19.2' + hash = 'sha256-PJW21pew9v+XA7Miow8JVPct+FPIHmQHphwO+g2kNWA=' + + [mod.'github.com/sassoftware/relic'] + version = 'v7.2.1+incompatible' + hash = 'sha256-vHyTdLRh6OlfoGzVgvx7I0+E6tpE7V43lCQaHD/e8J4=' + + [mod.'github.com/secure-systems-lab/go-securesystemslib'] + version = 'v0.10.0' + hash = 'sha256-KY68WNnb3tgNTi0QWsmirkPfmU0xyaP23QVuSuawtHQ=' + + [mod.'github.com/shibumi/go-pathspec'] + version = 'v1.3.0' + hash = 'sha256-ZHLft/o+xyJrUlaCwnCDqbjkPj6iIxlOuA0fFBuwVvM=' + + [mod.'github.com/sigstore/cosign/v3'] + version = 'v3.0.5' + hash = 'sha256-wN5iAfcBCDTvhbvSar4DBw7w1sxIFWcMKv8qkx07mfo=' + + [mod.'github.com/sigstore/protobuf-specs'] + version = 'v0.5.0' + hash = 'sha256-nImiBItjCQwskGHqYYthBjUfHHxy8VnVwSMWkK6GiNo=' + + [mod.'github.com/sigstore/rekor'] + version = 'v1.5.1' + hash = 'sha256-4+wM/pNyOtFZM9WQDSLubScfbquWmvDRY93vHjIrf9k=' + + [mod.'github.com/sigstore/rekor-tiles/v2'] + version = 'v2.2.1' + hash = 'sha256-mRnRvIp0UE7o5CUJiG8hs5xFJABuEAWWnjvTwz/4cKo=' + + [mod.'github.com/sigstore/sigstore'] + version = 'v1.10.5' + hash = 'sha256-t9oup+yS4jWxEoVbYLjUrI+Hu1XlWe+bu7KVOCIf+aE=' + + [mod.'github.com/sigstore/sigstore-go'] + version = 'v1.1.4' + hash = 'sha256-EsPVloCbJXMXOUKsNU00WQzzR2DfkbmCGYGdYgnH94I=' + + [mod.'github.com/sigstore/timestamp-authority/v2'] + version = 'v2.0.6' + hash = 'sha256-k1LVuwm+cgCotsNxZbGI+c8jmMTI0itBvXc5TGVu27I=' + + [mod.'github.com/sirupsen/logrus'] + version = 'v1.9.4' + hash = 'sha256-ltRvmtM3XTCAFwY0IesfRqYIivyXPPuvkFjL4ARh1wg=' + + [mod.'github.com/spf13/afero'] + version = 'v1.15.0' + hash = 'sha256-LhcezbOqfuBzacytbqck0hNUxi6NbWNhifUc5/9uHQ8=' + + [mod.'github.com/spf13/cobra'] + version = 'v1.10.2' + hash = 'sha256-nbRCTFiDCC2jKK7AHi79n7urYCMP5yDZnWtNVJrDi+k=' + + [mod.'github.com/spf13/pflag'] + version = 'v1.0.10' + hash = 'sha256-uDPnWjHpSrzXr17KEYEA1yAbizfcsfo5AyztY2tS6ZU=' + + [mod.'github.com/stoewer/go-strcase'] + version = 'v1.3.1' + hash = 'sha256-yptboRvbZtX+OEdlTgJnrCT+bvaMgCJp5B9ifEaSfw0=' + + [mod.'github.com/syndtr/goleveldb'] + version = 'v1.0.1-0.20220721030215-126854af5e6d' + hash = 'sha256-z7HzuNVmpAJalsebJ+X7jdXq7BykcOyfzhFT8os+euM=' + + [mod.'github.com/theupdateframework/go-tuf'] + version = 'v0.7.0' + hash = 'sha256-YwQTq6V20iI46KufNAi+1P1qrn0ldZxsFRY7dhXbO1s=' + + [mod.'github.com/theupdateframework/go-tuf/v2'] + version = 'v2.4.1' + hash = 'sha256-v9ULpLPiK+0wBn+36zwA2ci8bX1ugO+qf3+1nd7xI4g=' + + [mod.'github.com/titanous/rocacheck'] + version = 'v0.0.0-20171023193734-afe73141d399' + hash = 'sha256-r5XUB1A/doHNd5pu1cL0J8Jwy5IBtc8gQtG5NmKEYPU=' + + [mod.'github.com/transparency-dev/formats'] + version = 'v0.0.0-20251017110053-404c0d5b696c' + hash = 'sha256-IaDd91Eeh6DasW5UcQaUpYobBwSNJO2nC64rySBs4wI=' + + [mod.'github.com/transparency-dev/merkle'] + version = 'v0.0.2' + hash = 'sha256-4KsqpIqgXlypi1X88PekMRfWJ/Y8tuww6DAuXar2+FY=' + + [mod.'github.com/vbatts/tar-split'] + version = 'v0.12.2' + hash = 'sha256-6gOHl4puCV9T2EWpFpqMCkV9N2PEPSiWbNZNp20q7iM=' + + [mod.'github.com/x448/float16'] + version = 'v0.8.4' + hash = 'sha256-VKzMTMS9pIB/cwe17xPftCSK9Mf4Y6EuBEJlB4by5mE=' + + [mod.'go.opentelemetry.io/auto/sdk'] + version = 'v1.2.1' + hash = 'sha256-73bFYhnxNf4SfeQ52ebnwOWywdQbqc9lWawCcSgofvE=' + + [mod.'go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp'] + version = 'v0.64.0' + hash = 'sha256-xilqHTTNmvhxDFfTnE8ZytsrYq5gYFD77/glakljCy0=' + + [mod.'go.opentelemetry.io/otel'] + version = 'v1.42.0' + hash = 'sha256-7dck3F+khfda+U8PLSJTVETFl/M/mjXboBOsDCtF5aQ=' + + [mod.'go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc'] + version = 'v1.39.0' + hash = 'sha256-7pfSAaoIS1fbtVd9CCx6J4/DHBsmReon6r9Hocb2CCU=' + + [mod.'go.opentelemetry.io/otel/metric'] + version = 'v1.42.0' + hash = 'sha256-OabGeuj05yLHN917j30E0QO8x8fHuZoNeotgfbzIWIA=' + + [mod.'go.opentelemetry.io/otel/trace'] + version = 'v1.42.0' + hash = 'sha256-WowP4UqkV5BDYVlw4pivWf3DPANLgTlVbwzpED371zw=' + + [mod.'go.uber.org/multierr'] + version = 'v1.11.0' + hash = 'sha256-Lb6rHHfR62Ozg2j2JZy3MKOMKdsfzd1IYTR57r3Mhp0=' + + [mod.'go.uber.org/zap'] + version = 'v1.27.1' + hash = 'sha256-bn/MMu7X3GkUuW12Xwn9JYbOJeEu9+yoQtkmO+36xlQ=' + + [mod.'go.yaml.in/yaml/v2'] + version = 'v2.4.3' + hash = 'sha256-WqfrOUQFvfuORgl1yyVOcsEXU/vwWQHkcVWx3vCxvaw=' + + [mod.'go.yaml.in/yaml/v3'] + version = 'v3.0.4' + hash = 'sha256-NkGFiDPoCxbr3LFsI6OCygjjkY0rdmg5ggvVVwpyDQ4=' + + [mod.'golang.org/x/crypto'] + version = 'v0.50.0' + hash = 'sha256-vC1BJT7+3UBWLyEE5n3to0NKhMo6m2HGow2HiFgpQLo=' + + [mod.'golang.org/x/exp'] + version = 'v0.0.0-20260112195511-716be5621a96' + hash = 'sha256-rWqwXzLvvhcI/ZkOQMqCXMKI5FAuHd9YNoKTXujmboA=' + + [mod.'golang.org/x/mod'] + version = 'v0.35.0' + hash = 'sha256-ICEQxokHywOFInDPqoP+go9l1tZSz3roknF5SXPtNV4=' + + [mod.'golang.org/x/net'] + version = 'v0.53.0' + hash = 'sha256-G9gKLmyaf6lIV429NKX+YlL6oUPJwlv+BrG6qGhzvmU=' + + [mod.'golang.org/x/oauth2'] + version = 'v0.36.0' + hash = 'sha256-evS7WkMrpgonmTcqtWFpC5rSKZN8O+vnAhNUs1MS9kw=' + + [mod.'golang.org/x/sync'] + version = 'v0.20.0' + hash = 'sha256-ybcjhCfK6lroUM0yswUvWooW8MOQZBXyiSqoxG6Uy0Y=' + + [mod.'golang.org/x/sys'] + version = 'v0.43.0' + hash = 'sha256-aDQXqSTZES2l/132PBxhZN4ywldpPyfm7LByYCHzzwM=' + + [mod.'golang.org/x/term'] + version = 'v0.42.0' + hash = 'sha256-FCiDvAfq7dgBGQuiDYDFJbj/JPawhrmPF2qdUEftQ1c=' + + [mod.'golang.org/x/text'] + version = 'v0.36.0' + hash = 'sha256-/0t9C6Mc8kYjxweFB0us2lGKo8GovHhBiq5nlMOppC0=' + + [mod.'golang.org/x/time'] + version = 'v0.15.0' + hash = 'sha256-5D24A65wn7k93Jj3+918UKjB9ccmGHPBEqjD2XDB92E=' + + [mod.'golang.org/x/tools'] + version = 'v0.44.0' + hash = 'sha256-xuj5FLtSJsAojLLTLXtPdLAIFNTKoVFbDMuqRXmj2W4=' + + [mod.'gomodules.xyz/jsonpatch/v2'] + version = 'v2.5.0' + hash = 'sha256-L3Xy24GTtcDHmMgc9rlgUm3GrxFO7XQKJhfYIr3li1s=' + + [mod.'google.golang.org/genproto/googleapis/api'] + version = 'v0.0.0-20260316180232-0b37fe3546d5' + hash = 'sha256-OmiDhqoKu+PLEn3hxnYqSmjPfCs6cgObHkky8ENgUOk=' + + [mod.'google.golang.org/genproto/googleapis/rpc'] + version = 'v0.0.0-20260316180232-0b37fe3546d5' + hash = 'sha256-pnGJ+eFKWgDoT8oYp88FEOaafs+WJe3vsZHyZLSj5pU=' + + [mod.'google.golang.org/grpc'] + version = 'v1.79.3' + hash = 'sha256-mO9ZI8ONBMEBTlrwIPeQMfb3C9ru5zPb26P+uG/pIzY=' + + [mod.'google.golang.org/protobuf'] + version = 'v1.36.11' + hash = 'sha256-7W+6jntfI/awWL3JP6yQedxqP5S9o3XvPgJ2XxxsIeE=' + + [mod.'gopkg.in/evanphx/json-patch.v4'] + version = 'v4.13.0' + hash = 'sha256-1iyZpBaeBLmNkJ3T4A9fAEXEYB9nk9V02ug4pwl5dy0=' + + [mod.'gopkg.in/inf.v0'] + version = 'v0.9.1' + hash = 'sha256-z84XlyeWLcoYOvWLxPkPFgLkpjyb2Y4pdeGMyySOZQI=' + + [mod.'gopkg.in/yaml.v2'] + version = 'v2.4.0' + hash = 'sha256-uVEGglIedjOIGZzHW4YwN1VoRSTK8o0eGZqzd+TNdd0=' + + [mod.'gopkg.in/yaml.v3'] + version = 'v3.0.1' + hash = 'sha256-FqL9TKYJ0XkNwJFnq9j0VvJ5ZUU1RvH/52h/f5bkYAU=' + + [mod.'k8s.io/api'] + version = 'v0.35.1' + hash = 'sha256-lOfx98TObjLpO9Xg+PcR7G567x5pY/iiChXFhbpRclQ=' + + [mod.'k8s.io/apiextensions-apiserver'] + version = 'v0.35.0' + hash = 'sha256-RZdGkV4SoCTY022pIzQbeVwaxIYhIpXapLZrD593gh8=' + + [mod.'k8s.io/apimachinery'] + version = 'v0.35.1' + hash = 'sha256-+dplbHUOfaCaD2E9IS4F3lnjSCr/a4LjTgdB9de92Pw=' + + [mod.'k8s.io/client-go'] + version = 'v0.35.1' + hash = 'sha256-QEQ7TLUviAXDbvp2s6tT3HZtXy7pLjj5qSDu89iC9ek=' + + [mod.'k8s.io/code-generator'] + version = 'v0.35.0' + hash = 'sha256-0F8vNVdF/quBPGxOpxBL/GhupnkMoTE8dcZYX57RZKk=' + + [mod.'k8s.io/component-base'] + version = 'v0.35.0' + hash = 'sha256-fIAmKs3/T8oHrXBX3sMWr/D1DGhyCsgM+6ZFdaA8BXU=' + + [mod.'k8s.io/gengo/v2'] + version = 'v2.0.0-20251215205346-5ee0d033ba5b' + hash = 'sha256-FxD4b+cOzKuXsGI4NpsaUK/YTOMxugMGAh2jY3od3p8=' + + [mod.'k8s.io/klog/v2'] + version = 'v2.130.1' + hash = 'sha256-n5vls1o1a0V0KYv+3SULq4q3R2Is15K8iDHhFlsSH4o=' + + [mod.'k8s.io/kube-openapi'] + version = 'v0.0.0-20260127142750-a19766b6e2d4' + hash = 'sha256-NS8NvGTX3Ycoc4JU/jwLgtNlD5OOQ5zk2hzvFFSD/jM=' + + [mod.'k8s.io/utils'] + version = 'v0.0.0-20260108192941-914a6e750570' + hash = 'sha256-eFcd1fZT9M7wc/foeEAUj3jgHJfEY9U3lVqQTkIVJ44=' + + [mod.'sigs.k8s.io/apiserver-network-proxy/konnectivity-client'] + version = 'v0.34.0' + hash = 'sha256-98ScvhhmVxEVAGv9rhk10ceYUadNOuBERtCcdaIb42s=' + + [mod.'sigs.k8s.io/controller-runtime'] + version = 'v0.23.1' + hash = 'sha256-iOaYAJgy/Q1Hi6afs5mLtP8K5J8Cs/MlDoGp8wE1GOY=' + + [mod.'sigs.k8s.io/controller-tools'] + version = 'v0.20.0' + hash = 'sha256-1/v8hCCykTDMjhx4jM84/v+WJlQ8M1whdgpGfgmSRRU=' + + [mod.'sigs.k8s.io/json'] + version = 'v0.0.0-20250730193827-2d320260d730' + hash = 'sha256-y3vUPJYL6oxu/8c0j4vgX6fzqHtVPSCjfyuWkZYf6+I=' + + [mod.'sigs.k8s.io/randfill'] + version = 'v1.0.0' + hash = 'sha256-xldQxDwW84hmlihdSOFfjXyauhxEWV9KmIDLZMTcYNo=' + + [mod.'sigs.k8s.io/structured-merge-diff/v6'] + version = 'v6.3.2-0.20260122202528-d9cc6641c482' + hash = 'sha256-4ZUkeHKvdhsZmFSSZKAL/1GZdPO6735BY6FqRc+8tog=' + + [mod.'sigs.k8s.io/yaml'] + version = 'v1.6.0' + hash = 'sha256-49hg7IVPzwxeovp+HTMiWa/10NMMTSTjAdCmIv6p9dw=' diff --git a/pkg/reconciler/managed/reconciler.go b/pkg/reconciler/managed/reconciler.go index 188835416..bdf9f4d99 100644 --- a/pkg/reconciler/managed/reconciler.go +++ b/pkg/reconciler/managed/reconciler.go @@ -24,6 +24,7 @@ import ( xpv2 "github.com/crossplane/crossplane/apis/v2/core/v2" kerrors "k8s.io/apimachinery/pkg/api/errors" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/sets" "sigs.k8s.io/controller-runtime/pkg/client" @@ -92,7 +93,8 @@ const ( reasonUpdated event.Reason = "UpdatedExternalResource" reasonPending event.Reason = "PendingExternalResource" - reasonReconciliationPaused event.Reason = "ReconciliationPaused" + reasonReconciliationPaused event.Reason = "ReconciliationPaused" + reasonReconcileRequestHandled event.Reason = "ReconcileRequestHandled" ) // ControllerName returns the recommended name for controllers that use this @@ -124,6 +126,14 @@ type ManagementPoliciesChecker interface { //nolint:interfacebloat // This has t ShouldDelete() bool } +// A reconcileRequestTracker can record which reconcile-request token was last +// handled. Managed resources that embed ObservedStatus implement this +// interface automatically. +type reconcileRequestTracker interface { + GetLastHandledReconcileAt() string + SetLastHandledReconcileAt(token string) +} + // A CriticalAnnotationUpdater is used when it is critical that annotations must // be updated before returning from the Reconcile loop. type CriticalAnnotationUpdater interface { @@ -572,6 +582,7 @@ type Reconciler struct { newManaged func() resource.Managed pollInterval time.Duration + minPollInterval time.Duration pollIntervalHook PollIntervalHook timeout time.Duration @@ -673,6 +684,15 @@ func WithPollInterval(after time.Duration) ReconcilerOption { } } +// WithMinPollInterval specifies the shortest poll interval a resource may +// request via annotation. Annotation values below this floor are clamped to +// the minimum. +func WithMinPollInterval(d time.Duration) ReconcilerOption { + return func(r *Reconciler) { + r.minPollInterval = d + } +} + // WithMetricRecorder configures the Reconciler to use the supplied MetricRecorder. func WithMetricRecorder(recorder MetricRecorder) ReconcilerOption { return func(r *Reconciler) { @@ -841,6 +861,19 @@ func WithDeterministicExternalName(b bool) ReconcilerOption { } } +// effectivePollInterval returns the poll interval for the given resource, +// taking into account any per-resource override via annotation. Overrides +// below the configured minimum are clamped to the minimum. +func (r *Reconciler) effectivePollInterval(o metav1.Object) time.Duration { + if d, ok := meta.GetPollInterval(o); ok { + if d >= r.minPollInterval { + return d + } + return r.minPollInterval + } + return r.pollInterval +} + // NewReconciler returns a Reconciler that reconciles managed resources of the // supplied ManagedKind with resources in an external system such as a cloud // provider API. It panics if asked to reconcile a managed resource kind that is @@ -939,12 +972,39 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu log.Debug("Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation", "annotation", meta.AnnotationKeyReconciliationPaused) record.Event(managed, event.Normal(reasonReconciliationPaused, "Reconciliation is paused either through the `spec.managementPolicies` or the pause annotation", "annotation", meta.AnnotationKeyReconciliationPaused)) - status.MarkConditions(xpv2.ReconcilePaused()) + status.MarkConditions(xpv2.ReconcilePaused(), xpv2.PausedUnknown()) // if the pause annotation is removed or the management policies changed, we will have a chance to reconcile // again and resume and if status update fails, we will reconcile again to retry to update the status return reconcile.Result{}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) } + // Detect a new reconcile-request token early and emit the event once. + // The actual status mutation is deferred to updateStatus so it survives + // full-object Updates (late-init, create annotations) that reset + // in-memory status. + var reconcileRequestToken string + if token, ok := meta.GetReconcileRequest(managed); ok { + if tracker, ok := managed.(reconcileRequestTracker); ok { + if tracker.GetLastHandledReconcileAt() != token { + log.Debug("Processing reconcile request", "token", token) + record.Event(managed, event.Normal(reasonReconcileRequestHandled, "Handling reconcile request", "token", token)) + reconcileRequestToken = token + } + } + } + + // updateStatus applies the reconcile-request token (if any) immediately + // before persisting status. This ensures the token is not lost by + // intervening full-object Updates. + updateStatus := func() error { + if reconcileRequestToken != "" { + if tracker, ok := managed.(reconcileRequestTracker); ok { + tracker.SetLastHandledReconcileAt(reconcileRequestToken) + } + } + return r.client.Status().Update(ctx, managed) + } + // Check if the ManagementPolicies is set to a non-default value while the // feature is not enabled. This is a safety check to let users know that // they need to enable the feature flag before using the feature. For @@ -963,7 +1023,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonManagementPolicyInvalid, err)) status.MarkConditions(xpv2.ReconcileError(err)) - return reconcile.Result{}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // If managed resource has a deletion timestamp and a deletion policy of @@ -991,7 +1051,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotUnpublish, err)) status.MarkConditions(xpv2.Deleting(), xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if err := r.managed.RemoveFinalizer(ctx, managed); err != nil { @@ -1007,7 +1067,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu status.MarkConditions(xpv2.Deleting(), xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // We've successfully unpublished our managed resource's connection @@ -1033,7 +1093,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotInitialize, err)) status.MarkConditions(xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // If we started but never completed creation of an external resource we @@ -1047,7 +1107,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotInitialize, errors.New(errCreateIncomplete))) status.MarkConditions(xpv2.Creating(), xpv2.ReconcileError(errors.New(errCreateIncomplete))) - return reconcile.Result{Requeue: false}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: false}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } log.Debug("Cannot determine creation result, but proceeding due to deterministic external name") @@ -1078,7 +1138,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotResolveRefs, err)) status.MarkConditions(xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } } @@ -1098,7 +1158,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotConnect, err)) status.MarkConditions(xpv2.ReconcileError(errors.Wrap(err, errReconcileConnect))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } defer func() { @@ -1132,7 +1192,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotObserve, err)) status.MarkConditions(xpv2.ReconcileError(errors.Wrap(err, errReconcileObserve))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // In the observe-only mode, !observation.ResourceExists will be an error @@ -1141,7 +1201,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotObserve, errors.New(errExternalResourceNotExist))) status.MarkConditions(xpv2.ReconcileError(errors.Wrap(errors.New(errExternalResourceNotExist), errReconcileObserve))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // If this resource has a non-zero creation grace period we want to wait @@ -1190,7 +1250,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotDelete, err)) status.MarkConditions(xpv2.Deleting(), xpv2.ReconcileError(errors.Wrap(err, errReconcileDelete))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // We've successfully requested deletion of our external resource. @@ -1209,7 +1269,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Normal(reasonDeleted, "Successfully requested deletion of external resource")) status.MarkConditions(xpv2.Deleting(), xpv2.ReconcileSuccess()) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if err := r.managed.UnpublishConnection(ctx, managed, observation.ConnectionDetails); err != nil { @@ -1226,7 +1286,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotUnpublish, err)) status.MarkConditions(xpv2.Deleting(), xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if err := r.managed.RemoveFinalizer(ctx, managed); err != nil { @@ -1242,7 +1302,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu status.MarkConditions(xpv2.Deleting(), xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // We've successfully deleted our external resource (if necessary) and @@ -1268,7 +1328,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotPublish, err)) status.MarkConditions(xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if err := r.managed.AddFinalizer(ctx, managed); err != nil { @@ -1283,7 +1343,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu status.MarkConditions(xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if !observation.ResourceExists && policy.ShouldCreate() { @@ -1306,7 +1366,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotUpdateManaged, errors.Wrap(err, errUpdateManaged))) status.MarkConditions(xpv2.Creating(), xpv2.ReconcileError(errors.Wrap(err, errUpdateManaged))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } creation, err := external.Create(externalCtx, managed) @@ -1347,7 +1407,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu status.MarkConditions(xpv2.Creating(), xpv2.ReconcileError(errors.Wrap(err, errReconcileCreate))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // In some cases our external-name may be set by Create above. @@ -1380,7 +1440,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotUpdateManaged, errors.Wrap(err, errUpdateManagedAnnotations))) status.MarkConditions(xpv2.Creating(), xpv2.ReconcileError(errors.Wrap(err, errUpdateManagedAnnotations))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if _, err := r.managed.PublishConnection(ctx, managed, creation.ConnectionDetails); err != nil { @@ -1396,7 +1456,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotPublish, err)) status.MarkConditions(xpv2.Creating(), xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // We've successfully created our external resource. In many cases the @@ -1407,7 +1467,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Normal(reasonCreated, "Successfully requested creation of external resource")) status.MarkConditions(xpv2.Creating(), xpv2.ReconcileSuccess()) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if observation.ResourceLateInitialized && policy.ShouldLateInitialize() { @@ -1423,7 +1483,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotUpdateManaged, err)) status.MarkConditions(xpv2.ReconcileError(errors.Wrap(err, errUpdateManaged))) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } } @@ -1434,9 +1494,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu // after the specified poll interval in order to observe it and react // accordingly. // https://github.com/crossplane/crossplane/issues/289 - reconcileAfter := r.pollIntervalHook(managed, r.pollInterval) + reconcileAfter := r.pollIntervalHook(managed, r.effectivePollInterval(managed)) log.Debug("External resource is up to date", "requeue-after", time.Now().Add(reconcileAfter)) - status.MarkConditions(xpv2.ReconcileSuccess()) + status.MarkConditions(xpv2.ReconcileSuccess(), xpv2.ObserveMatched()) r.metricRecorder.recordFirstTimeReady(managed) // record that we intentionally did not update the managed resource @@ -1445,7 +1505,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu // that the external object would not have been updated. r.metricRecorder.recordUnchanged(managed.GetName()) - return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } if observation.Diff != "" { @@ -1454,11 +1514,11 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu // skip the update if the management policy is set to ignore updates if !policy.ShouldUpdate() { - reconcileAfter := r.pollIntervalHook(managed, r.pollInterval) + reconcileAfter := r.pollIntervalHook(managed, r.effectivePollInterval(managed)) log.Debug("Skipping update due to managementPolicies. Reconciliation succeeded", "requeue-after", time.Now().Add(reconcileAfter)) - status.MarkConditions(xpv2.ReconcileSuccess()) + status.MarkConditions(xpv2.ReconcileSuccess(), xpv2.UpdateRestricted().WithMessage(observation.Diff)) - return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } update, err := external.Update(externalCtx, managed) @@ -1475,9 +1535,9 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu } record.Event(managed, event.Warning(reasonCannotUpdate, err)) - status.MarkConditions(xpv2.ReconcileError(errors.Wrap(err, errReconcileUpdate))) + status.MarkConditions(xpv2.ReconcileError(errors.Wrap(err, errReconcileUpdate)), xpv2.UpdateFailed().WithMessage(observation.Diff)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // record the drift after the successful update. @@ -1495,7 +1555,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu record.Event(managed, event.Warning(reasonCannotPublish, err)) status.MarkConditions(xpv2.ReconcileError(err)) - return reconcile.Result{Requeue: true}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{Requeue: true}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } // We've successfully updated our external resource. Per the below issue @@ -1503,10 +1563,10 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (resu // changes, so we requeue a speculative reconcile after the specified poll // interval in order to observe it and react accordingly. // https://github.com/crossplane/crossplane/issues/289 - reconcileAfter := r.pollIntervalHook(managed, r.pollInterval) + reconcileAfter := r.pollIntervalHook(managed, r.effectivePollInterval(managed)) log.Debug("Successfully requested update of external resource", "requeue-after", time.Now().Add(reconcileAfter)) record.Event(managed, event.Normal(reasonUpdated, "Successfully requested update of external resource")) - status.MarkConditions(xpv2.ReconcileSuccess()) + status.MarkConditions(xpv2.ReconcileSuccess(), xpv2.UpdateRequested().WithMessage(observation.Diff)) - return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(r.client.Status().Update(ctx, managed), errUpdateManagedStatus) + return reconcile.Result{RequeueAfter: reconcileAfter}, errors.Wrap(updateStatus(), errUpdateManagedStatus) } diff --git a/pkg/reconciler/managed/reconciler_legacy_test.go b/pkg/reconciler/managed/reconciler_legacy_test.go index 72695fd2a..0522cf3d8 100644 --- a/pkg/reconciler/managed/reconciler_legacy_test.go +++ b/pkg/reconciler/managed/reconciler_legacy_test.go @@ -351,7 +351,7 @@ func TestReconciler(t *testing.T) { MockGet: legacyManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful no-op reconcile should be reported as a conditioned status." @@ -1088,7 +1088,7 @@ func TestReconciler(t *testing.T) { MockGet: legacyManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful no-op reconcile should be reported as a conditioned status." @@ -1253,7 +1253,7 @@ func TestReconciler(t *testing.T) { MockGet: legacyManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) - want.SetConditions(xpv2.ReconcileError(errors.Wrap(errBoom, errReconcileUpdate)).WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileError(errors.Wrap(errBoom, errReconcileUpdate)).WithObservedGeneration(42), xpv2.UpdateFailed().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "Errors while updating an external resource should be reported as a conditioned status." @@ -1354,7 +1354,7 @@ func TestReconciler(t *testing.T) { MockGet: legacyManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -1373,7 +1373,7 @@ func TestReconciler(t *testing.T) { WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { c := &ExternalClientFns{ ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ resource.Managed) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -1398,7 +1398,7 @@ func TestReconciler(t *testing.T) { MockGet: legacyManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -1417,7 +1417,7 @@ func TestReconciler(t *testing.T) { WithTypedExternalConnector(TypedExternalConnectorFn[*fake.LegacyManaged](func(_ context.Context, _ *fake.LegacyManaged) (TypedExternalClient[*fake.LegacyManaged], error) { c := &TypedExternalClientFns[*fake.LegacyManaged]{ ObserveFn: func(_ context.Context, _ *fake.LegacyManaged) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ *fake.LegacyManaged) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -1450,7 +1450,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetAnnotations(map[string]string{meta.AnnotationKeyReconciliationPaused: "true"}) - want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42), xpv2.PausedUnknown().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `If managed resource has the pause annotation with value "true", it should acquire "Synced" status condition with the status "False" and the reason "ReconcilePaused".` @@ -1480,7 +1480,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{}) - want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42), xpv2.PausedUnknown().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `If managed resource has the pause annotation with value "true", it should acquire "Synced" status condition with the status "False" and the reason "ReconcilePaused".` @@ -1516,7 +1516,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetAnnotations(map[string]string{meta.AnnotationKeyReconciliationPaused: "false"}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `Managed resource should acquire Synced=False/ReconcileSuccess status condition after a resume.` @@ -1778,7 +1778,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionObserve}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42), xpv2.UpdateRestricted().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "With ObserveOnly, a successful managed resource observation should be reported as a conditioned status." @@ -1915,7 +1915,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionObserve, xpv2.ManagementActionLateInitialize, xpv2.ManagementActionCreate, xpv2.ManagementActionDelete}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRestricted().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `Managed resource should acquire Synced=False/ReconcileSuccess status condition.` @@ -1966,7 +1966,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionAll}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -1986,7 +1986,7 @@ func TestReconciler(t *testing.T) { WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { c := &ExternalClientFns{ ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ resource.Managed) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -2017,7 +2017,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionAll}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -2037,7 +2037,7 @@ func TestReconciler(t *testing.T) { WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { c := &ExternalClientFns{ ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ resource.Managed) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -2069,7 +2069,7 @@ func TestReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newLegacyManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionObserve, xpv2.ManagementActionUpdate, xpv2.ManagementActionCreate, xpv2.ManagementActionDelete}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "Errors updating a managed resource should be reported as a conditioned status." diff --git a/pkg/reconciler/managed/reconciler_modern_test.go b/pkg/reconciler/managed/reconciler_modern_test.go index 3e980dd58..a932573ce 100644 --- a/pkg/reconciler/managed/reconciler_modern_test.go +++ b/pkg/reconciler/managed/reconciler_modern_test.go @@ -355,7 +355,7 @@ func TestModernReconciler(t *testing.T) { MockGet: modernManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful no-op reconcile should be reported as a conditioned status." @@ -1094,7 +1094,7 @@ func TestModernReconciler(t *testing.T) { MockGet: modernManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful no-op reconcile should be reported as a conditioned status." @@ -1259,7 +1259,7 @@ func TestModernReconciler(t *testing.T) { MockGet: modernManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) - want.SetConditions(xpv2.ReconcileError(errors.Wrap(errBoom, errReconcileUpdate)).WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileError(errors.Wrap(errBoom, errReconcileUpdate)).WithObservedGeneration(42), xpv2.UpdateFailed().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "Errors while updating an external resource should be reported as a conditioned status." @@ -1360,7 +1360,7 @@ func TestModernReconciler(t *testing.T) { MockGet: modernManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -1379,7 +1379,7 @@ func TestModernReconciler(t *testing.T) { WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { c := &ExternalClientFns{ ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ resource.Managed) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -1404,7 +1404,7 @@ func TestModernReconciler(t *testing.T) { MockGet: modernManagedMockGetFn(nil, 42), MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -1423,7 +1423,7 @@ func TestModernReconciler(t *testing.T) { WithTypedExternalConnector(TypedExternalConnectorFn[*fake.ModernManaged](func(_ context.Context, _ *fake.ModernManaged) (TypedExternalClient[*fake.ModernManaged], error) { c := &TypedExternalClientFns[*fake.ModernManaged]{ ObserveFn: func(_ context.Context, _ *fake.ModernManaged) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ *fake.ModernManaged) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -1456,7 +1456,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetAnnotations(map[string]string{meta.AnnotationKeyReconciliationPaused: "true"}) - want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42), xpv2.PausedUnknown().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `If managed resource has the pause annotation with value "true", it should acquire "Synced" status condition with the status "False" and the reason "ReconcilePaused".` @@ -1486,7 +1486,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{}) - want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcilePaused().WithObservedGeneration(42), xpv2.PausedUnknown().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `If managed resource has the pause annotation with value "true", it should acquire "Synced" status condition with the status "False" and the reason "ReconcilePaused".` @@ -1522,7 +1522,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetAnnotations(map[string]string{meta.AnnotationKeyReconciliationPaused: "false"}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `Managed resource should acquire Synced=False/ReconcileSuccess status condition after a resume.` @@ -1784,7 +1784,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionObserve}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42), xpv2.UpdateRestricted().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "With ObserveOnly, a successful managed resource observation should be reported as a conditioned status." @@ -1921,7 +1921,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionObserve, xpv2.ManagementActionLateInitialize, xpv2.ManagementActionCreate, xpv2.ManagementActionDelete}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRestricted().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := `Managed resource should acquire Synced=False/ReconcileSuccess status condition.` @@ -1972,7 +1972,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionAll}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42).WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -1992,7 +1992,7 @@ func TestModernReconciler(t *testing.T) { WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { c := &ExternalClientFns{ ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ resource.Managed) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -2023,7 +2023,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionAll}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.UpdateRequested().WithObservedGeneration(42).WithMessage("this is a diff")) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "A successful managed resource update should be reported as a conditioned status." @@ -2043,7 +2043,7 @@ func TestModernReconciler(t *testing.T) { WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { c := &ExternalClientFns{ ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { - return ExternalObservation{ResourceExists: true, ResourceUpToDate: false}, nil + return ExternalObservation{ResourceExists: true, ResourceUpToDate: false, Diff: "this is a diff"}, nil }, UpdateFn: func(_ context.Context, _ resource.Managed) (ExternalUpdate, error) { return ExternalUpdate{}, nil @@ -2075,7 +2075,7 @@ func TestModernReconciler(t *testing.T) { MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { want := newModernManaged(42) want.SetManagementPolicies(xpv2.ManagementPolicies{xpv2.ManagementActionObserve, xpv2.ManagementActionUpdate, xpv2.ManagementActionCreate, xpv2.ManagementActionDelete}) - want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42)) + want.SetConditions(xpv2.ReconcileSuccess().WithObservedGeneration(42), xpv2.ObserveMatched().WithObservedGeneration(42)) if diff := cmp.Diff(want, obj, test.EquateConditions()); diff != "" { reason := "Errors updating a managed resource should be reported as a conditioned status." @@ -2853,6 +2853,246 @@ func TestReconcilerChangeLogs(t *testing.T) { } } +func TestEffectivePollInterval(t *testing.T) { + cases := map[string]struct { + reason string + pollInterval time.Duration + minPollInterval time.Duration + annotation string + want time.Duration + }{ + "NoAnnotationReturnsDefault": { + reason: "When no annotation is set, the default poll interval is returned.", + pollInterval: 10 * time.Minute, + minPollInterval: 1 * time.Second, + want: 10 * time.Minute, + }, + "ValidAnnotationAboveMinimumReturnsAnnotation": { + reason: "When the annotation is at or above the minimum, it overrides the default.", + pollInterval: 10 * time.Minute, + minPollInterval: 1 * time.Second, + annotation: "24h", + want: 24 * time.Hour, + }, + "ValidAnnotationAtMinimumReturnsAnnotation": { + reason: "When the annotation equals the minimum exactly, it is returned as-is.", + pollInterval: 10 * time.Minute, + minPollInterval: 30 * time.Second, + annotation: "30s", + want: 30 * time.Second, + }, + "ValidAnnotationBelowMinimumReturnsMinimum": { + reason: "When the annotation is below the minimum, the minimum is returned.", + pollInterval: 10 * time.Minute, + minPollInterval: 30 * time.Second, + annotation: "1s", + want: 30 * time.Second, + }, + "InvalidAnnotationReturnsDefault": { + reason: "When the annotation cannot be parsed, the default poll interval is returned.", + pollInterval: 5 * time.Minute, + minPollInterval: 1 * time.Second, + annotation: "not-a-duration", + want: 5 * time.Minute, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + r := &Reconciler{ + pollInterval: tc.pollInterval, + minPollInterval: tc.minPollInterval, + } + + mg := &fake.ModernManaged{} + if tc.annotation != "" { + mg.SetAnnotations(map[string]string{ + meta.AnnotationKeyPollInterval: tc.annotation, + }) + } + + got := r.effectivePollInterval(mg) + if diff := cmp.Diff(tc.want, got); diff != "" { + t.Errorf("\n%s\neffectivePollInterval(...): -want, +got:\n%s", tc.reason, diff) + } + }) + } +} + +func TestReconcilePollIntervalAnnotation(t *testing.T) { + cases := map[string]struct { + reason string + pollInterval time.Duration + minPollInterval time.Duration + annotation string + wantApprox time.Duration + wantTolerance time.Duration + }{ + "AnnotationOverridesPollInterval": { + reason: "When a valid poll interval annotation is set, it should override the controller-level poll interval.", + pollInterval: 1 * time.Minute, + minPollInterval: 1 * time.Second, + annotation: "24h", + wantApprox: 24 * time.Hour, + wantTolerance: 1 * time.Second, + }, + "InvalidAnnotationFallsBack": { + reason: "When an invalid poll interval annotation is set, the controller-level poll interval should be used.", + pollInterval: 5 * time.Minute, + minPollInterval: 1 * time.Second, + annotation: "not-a-duration", + wantApprox: 5 * time.Minute, + wantTolerance: 1 * time.Second, + }, + "AnnotationBelowMinimumClampsToMin": { + reason: "When a poll interval annotation is below the configured minimum, the minimum should be used.", + pollInterval: 10 * time.Minute, + minPollInterval: 30 * time.Second, + annotation: "1s", + wantApprox: 30 * time.Second, + wantTolerance: 1 * time.Second, + }, + "NoAnnotationUsesDefault": { + reason: "When no poll interval annotation is set, the controller-level poll interval should be used.", + pollInterval: 10 * time.Minute, + minPollInterval: 1 * time.Second, + wantApprox: 10 * time.Minute, + wantTolerance: 1 * time.Second, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + r := NewReconciler(&fake.Manager{ + Client: &test.MockClient{ + MockGet: test.NewMockGetFn(nil, func(obj client.Object) error { + mg := asModernManaged(obj, 42) + if tc.annotation != "" { + mg.SetAnnotations(map[string]string{ + meta.AnnotationKeyPollInterval: tc.annotation, + }) + } + return nil + }), + MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, _ client.Object, _ ...client.SubResourceUpdateOption) error { + return nil + }), + }, + Scheme: fake.SchemeWith(&fake.ModernManaged{}), + }, resource.ManagedKind(fake.GVK(&fake.ModernManaged{})), + WithPollInterval(tc.pollInterval), + WithMinPollInterval(tc.minPollInterval), + WithInitializers(), + WithReferenceResolver(ReferenceResolverFn(func(_ context.Context, _ resource.Managed) error { return nil })), + WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { + return &ExternalClientFns{ + ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { + return ExternalObservation{ResourceExists: true, ResourceUpToDate: true}, nil + }, + DisconnectFn: func(_ context.Context) error { return nil }, + }, nil + })), + WithFinalizer(resource.FinalizerFns{AddFinalizerFn: func(_ context.Context, _ resource.Object) error { return nil }}), + ) + + got, err := r.Reconcile(context.Background(), reconcile.Request{}) + if diff := cmp.Diff(nil, err, cmpopts.EquateErrors()); diff != "" { + t.Fatalf("\n%s\nr.Reconcile(...): -want error, +got error:\n%s", tc.reason, diff) + } + + diff := got.RequeueAfter - tc.wantApprox + if diff < 0 { + diff = -diff + } + if diff > tc.wantTolerance { + t.Errorf("\n%s\nr.Reconcile(...): want RequeueAfter ~%v (±%v), got %v", + tc.reason, tc.wantApprox, tc.wantTolerance, got.RequeueAfter) + } + }) + } +} + +func TestReconcileRequestAnnotation(t *testing.T) { + type want struct { + result reconcile.Result + err error + token string + } + + cases := map[string]struct { + reason string + annotation string + handled string + want want + }{ + "NewReconcileRequestRecordsToken": { + reason: "A new reconcile-requested-at token should be recorded in status.lastHandledReconcileAt.", + annotation: "1705312200", + want: want{ + result: reconcile.Result{RequeueAfter: defaultPollInterval}, + token: "1705312200", + }, + }, + "AlreadyHandledReconcileRequestIsNoOp": { + reason: "When the token matches lastHandledReconcileAt, status should remain unchanged.", + annotation: "already-handled", + handled: "already-handled", + want: want{ + result: reconcile.Result{RequeueAfter: defaultPollInterval}, + token: "already-handled", + }, + }, + } + + for name, tc := range cases { + t.Run(name, func(t *testing.T) { + r := NewReconciler(&fake.Manager{ + Client: &test.MockClient{ + MockGet: test.NewMockGetFn(nil, func(obj client.Object) error { + mg := asModernManaged(obj, 42) + mg.SetAnnotations(map[string]string{ + meta.AnnotationKeyReconcileRequestedAt: tc.annotation, + }) + if tc.handled != "" { + mg.SetLastHandledReconcileAt(tc.handled) + } + return nil + }), + MockStatusUpdate: test.MockSubResourceUpdateFn(func(_ context.Context, obj client.Object, _ ...client.SubResourceUpdateOption) error { + mg := obj.(*fake.ModernManaged) + got := mg.GetLastHandledReconcileAt() + if diff := cmp.Diff(tc.want.token, got); diff != "" { + t.Errorf("\n%s\nstatus.lastHandledReconcileAt: -want, +got:\n%s", tc.reason, diff) + } + return nil + }), + }, + Scheme: fake.SchemeWith(&fake.ModernManaged{}), + }, resource.ManagedKind(fake.GVK(&fake.ModernManaged{})), + WithInitializers(), + WithReferenceResolver(ReferenceResolverFn(func(_ context.Context, _ resource.Managed) error { return nil })), + WithExternalConnector(ExternalConnectorFn(func(_ context.Context, _ resource.Managed) (ExternalClient, error) { + return &ExternalClientFns{ + ObserveFn: func(_ context.Context, _ resource.Managed) (ExternalObservation, error) { + return ExternalObservation{ResourceExists: true, ResourceUpToDate: true}, nil + }, + DisconnectFn: func(_ context.Context) error { return nil }, + }, nil + })), + WithFinalizer(resource.FinalizerFns{AddFinalizerFn: func(_ context.Context, _ resource.Object) error { return nil }}), + ) + + got, err := r.Reconcile(context.Background(), reconcile.Request{}) + if diff := cmp.Diff(tc.want.err, err, cmpopts.EquateErrors()); diff != "" { + t.Errorf("\n%s\nr.Reconcile(...): -want error, +got error:\n%s", tc.reason, diff) + } + if diff := cmp.Diff(tc.want.result, got); diff != "" { + t.Errorf("\n%s\nr.Reconcile(...): -want result, +got result:\n%s", tc.reason, diff) + } + }) + } +} + func asModernManaged(obj client.Object, generation int64) *fake.ModernManaged { mg := obj.(*fake.ModernManaged) mg.Generation = generation diff --git a/pkg/reconciler/providerconfig/reconciler.go b/pkg/reconciler/providerconfig/reconciler.go index a82aaeedd..4c043c613 100644 --- a/pkg/reconciler/providerconfig/reconciler.go +++ b/pkg/reconciler/providerconfig/reconciler.go @@ -166,6 +166,7 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (reco "uid", pc.GetUID(), "version", pc.GetResourceVersion(), "name", pc.GetName(), + "namespace", pc.GetNamespace(), ) l := r.newUsageList() @@ -178,7 +179,12 @@ func (r *Reconciler) Reconcile(ctx context.Context, req reconcile.Request) (reco matchingLabels[xpv2.LabelKeyProviderKind] = pc.GetObjectKind().GroupVersionKind().Kind } - if err := r.client.List(ctx, l, matchingLabels); err != nil { + listOpts := []client.ListOption{matchingLabels} + if pc.GetNamespace() != "" { + listOpts = append(listOpts, client.InNamespace(pc.GetNamespace())) + } + + if err := r.client.List(ctx, l, listOpts...); err != nil { log.Debug(errListPCUs, "error", err) r.record.Event(pc, event.Warning(reasonAccount, errors.Wrap(err, errListPCUs))) diff --git a/pkg/reconciler/providerconfig/reconciler_test.go b/pkg/reconciler/providerconfig/reconciler_test.go index a23ffaf8b..5d07e3546 100644 --- a/pkg/reconciler/providerconfig/reconciler_test.go +++ b/pkg/reconciler/providerconfig/reconciler_test.go @@ -77,8 +77,9 @@ func TestReconciler(t *testing.T) { } type want struct { - result reconcile.Result - err error + result reconcile.Result + err error + request reconcile.Request } cases := map[string]struct { @@ -333,13 +334,89 @@ func TestReconciler(t *testing.T) { result: reconcile.Result{Requeue: false}, }, }, + "ListUsagesScopedToNamespaceWhenNamespaced": { + reason: "When ProviderConfig is namespaced, List should be called with InNamespace option", + args: args{ + m: &fake.Manager{ + Client: &test.MockClient{ + MockGet: test.NewMockGetFn(nil, func(obj client.Object) error { + pc := obj.(*fake.ProviderConfig) + pc.SetNamespace("test-ns") + pc.SetName("my-pc") + return nil + }), + MockList: func(_ context.Context, _ client.ObjectList, opts ...client.ListOption) error { + // Capture and verify list options: should include InNamespace("test-ns") + listOpts := &client.ListOptions{} + for _, opt := range opts { + opt.ApplyToList(listOpts) + } + if listOpts.Namespace != "test-ns" { + t.Errorf("List called with namespace %q, want InNamespace(\"test-ns\")", listOpts.Namespace) + } + return nil + }, + MockUpdate: test.NewMockUpdateFn(nil), + MockStatusUpdate: test.NewMockSubResourceUpdateFn(nil), + }, + Scheme: fake.SchemeWith(&fake.ProviderConfig{}, &fake.ProviderConfigUsage{}, &ProviderConfigUsageList{}), + }, + of: resource.ProviderConfigKinds{ + Config: fake.GVK(&fake.ProviderConfig{}), + Usage: fake.GVK(&fake.ProviderConfigUsage{}), + UsageList: fake.GVK(&ProviderConfigUsageList{}), + }, + }, + want: want{ + result: reconcile.Result{Requeue: false}, + request: reconcile.Request{NamespacedName: types.NamespacedName{Name: "my-pc", Namespace: "test-ns"}}, + }, + }, + "ListUsagesNotScopedToNamespaceWhenClusterScoped": { + reason: "When ProviderConfig is cluster-scoped (empty namespace), List should not include InNamespace", + args: args{ + m: &fake.Manager{ + Client: &test.MockClient{ + MockGet: test.NewMockGetFn(nil, func(obj client.Object) error { + pc := obj.(*fake.ProviderConfig) + pc.SetNamespace("") // cluster-scoped + pc.SetName("my-pc") + return nil + }), + MockList: func(_ context.Context, _ client.ObjectList, opts ...client.ListOption) error { + listOpts := &client.ListOptions{} + for _, opt := range opts { + opt.ApplyToList(listOpts) + } + if listOpts.Namespace != "" { + t.Errorf("List called with namespace %q for cluster-scoped ProviderConfig, want empty", listOpts.Namespace) + } + return nil + }, + MockUpdate: test.NewMockUpdateFn(nil), + MockStatusUpdate: test.NewMockSubResourceUpdateFn(nil), + }, + Scheme: fake.SchemeWith(&fake.ProviderConfig{}, &fake.ProviderConfigUsage{}, &ProviderConfigUsageList{}), + }, + of: resource.ProviderConfigKinds{ + Config: fake.GVK(&fake.ProviderConfig{}), + Usage: fake.GVK(&fake.ProviderConfigUsage{}), + UsageList: fake.GVK(&ProviderConfigUsageList{}), + }, + }, + want: want{ + result: reconcile.Result{Requeue: false}, + request: reconcile.Request{NamespacedName: types.NamespacedName{Name: "my-pc"}}, + }, + }, } for name, tc := range cases { t.Run(name, func(t *testing.T) { r := NewReconciler(tc.args.m, tc.args.of) - got, err := r.Reconcile(context.Background(), reconcile.Request{}) + req := tc.want.request + got, err := r.Reconcile(context.Background(), req) if diff := cmp.Diff(tc.want.err, err, test.EquateErrors()); diff != "" { t.Errorf("\n%s\nr.Reconcile(...): -want error, +got error:\n%s", tc.reason, diff) } diff --git a/pkg/resource/fake/mocks.go b/pkg/resource/fake/mocks.go index 145ff5622..7992cfc1b 100644 --- a/pkg/resource/fake/mocks.go +++ b/pkg/resource/fake/mocks.go @@ -373,6 +373,7 @@ type ModernManaged struct { LocalConnectionSecretWriterTo Manageable xpv2.ConditionedStatus + xpv2.ObservedStatus } // GetObjectKind returns schema.ObjectKind. diff --git a/pkg/version/fake/mocks.go b/pkg/version/fake/mocks.go index 97aa02504..a87208ce1 100644 --- a/pkg/version/fake/mocks.go +++ b/pkg/version/fake/mocks.go @@ -18,7 +18,7 @@ limitations under the License. package fake import ( - "github.com/Masterminds/semver" + "github.com/Masterminds/semver/v3" "github.com/crossplane/crossplane-runtime/v2/pkg/version" ) diff --git a/pkg/version/version.go b/pkg/version/version.go index 6d7f7d1fe..907088068 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -18,7 +18,7 @@ limitations under the License. package version import ( - "github.com/Masterminds/semver" + "github.com/Masterminds/semver/v3" ) var version string diff --git a/pkg/version/version_test.go b/pkg/version/version_test.go index c508fa55d..52ef94347 100644 --- a/pkg/version/version_test.go +++ b/pkg/version/version_test.go @@ -67,7 +67,7 @@ func TestInRange(t *testing.T) { version: "v0a.13.0", }, want: want{ - err: errors.New("Invalid Semantic Version"), + err: errors.New("invalid semantic version"), }, }, "InvalidRange": { @@ -80,6 +80,36 @@ func TestInRange(t *testing.T) { err: errors.New("improper constraint: >a2"), }, }, + "ValidSpaceSeparatedRange": { + reason: "Should return true if version is within a valid space separated ranged constraint", + args: args{ + version: "v2.13.0", + r: ">=v2.0.0 =v2.0.0,=v2.0.0 >v5a.0.0", + }, + want: want{ + err: errors.New("improper constraint: >=v2.0.0 >v5a.0.0"), + }, + }, } for name, tc := range cases { diff --git a/pkg/xpkg/client.go b/pkg/xpkg/client.go index 141d9481f..1b6d6c72a 100644 --- a/pkg/xpkg/client.go +++ b/pkg/xpkg/client.go @@ -24,7 +24,7 @@ import ( "sort" "strings" - "github.com/Masterminds/semver" + "github.com/Masterminds/semver/v3" pkgmetav1 "github.com/crossplane/crossplane/apis/v2/pkg/meta/v1" ociname "github.com/google/go-containerregistry/pkg/name" v1 "github.com/google/go-containerregistry/pkg/v1" diff --git a/pkg/xpkg/lint.go b/pkg/xpkg/lint.go index fee1abec4..c2ced6827 100644 --- a/pkg/xpkg/lint.go +++ b/pkg/xpkg/lint.go @@ -17,7 +17,7 @@ limitations under the License. package xpkg import ( - "github.com/Masterminds/semver" + "github.com/Masterminds/semver/v3" v1 "github.com/crossplane/crossplane/apis/v2/apiextensions/v1" extv1alpha1 "github.com/crossplane/crossplane/apis/v2/apiextensions/v1alpha1" v2 "github.com/crossplane/crossplane/apis/v2/apiextensions/v2"