From b3391fd9e9e4db96119ee38ec83c190523f3050a Mon Sep 17 00:00:00 2001
From: Philippe Scorsolini
Date: Fri, 20 Feb 2026 12:03:15 +0100
Subject: [PATCH] chore: sync with function-template-go
Signed-off-by: Philippe Scorsolini
---
.github/workflows/ci.yml | 15 +-
.github/workflows/tag.yml | 26 ----
.golangci.yml | 240 ++++++++++++++++++-------------
Dockerfile | 4 +-
README.md | 6 +-
fn.go | 74 ++++++++--
fn_test.go | 6 +-
go.mod | 14 +-
go.sum | 71 ++++++---
input/v1beta1/input.go | 4 +-
input/v1beta1/resource_select.go | 3 +-
main.go | 10 +-
renovate.json | 4 +
13 files changed, 287 insertions(+), 190 deletions(-)
delete mode 100644 .github/workflows/tag.yml
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index e3de797..f00ad79 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -44,7 +44,7 @@ jobs:
uses: actions/checkout@v6
- name: Setup Go
- uses: actions/setup-go@v5
+ uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
cache: false # The golangci-lint action does its own caching.
@@ -53,7 +53,7 @@ jobs:
run: go mod tidy && git diff --exit-code go.mod go.sum
- name: Lint
- uses: golangci/golangci-lint-action@v8
+ uses: golangci/golangci-lint-action@v9
with:
version: ${{ env.GOLANGCI_VERSION }}
@@ -64,7 +64,7 @@ jobs:
uses: actions/checkout@v6
- name: Setup Go
- uses: actions/setup-go@v5
+ uses: actions/setup-go@v6
with:
go-version: ${{ env.GO_VERSION }}
@@ -120,7 +120,7 @@ jobs:
run: ./crossplane xpkg build --package-file=${{ matrix.arch }}.xpkg --package-root=package/ --embed-runtime-image-tarball=runtime-${{ matrix.arch }}.tar
- name: Upload Single-Platform Package
- uses: actions/upload-artifact@v4
+ uses: actions/upload-artifact@v6
with:
name: package-${{ matrix.arch }}
path: "*.xpkg"
@@ -128,7 +128,8 @@ jobs:
retention-days: 1
# This job downloads the single-platform packages built by the build job, and
- # pushes them as a multi-platform package.
+ # pushes them as a multi-platform package. We only push the package it the
+ # XPKG_ACCESS_ID and XPKG_TOKEN secrets were provided.
push:
if: ${{ github.event_name != 'pull_request' }}
runs-on: ubuntu-24.04
@@ -139,7 +140,7 @@ jobs:
uses: actions/checkout@v6
- name: Download Single-Platform Packages
- uses: actions/download-artifact@v4
+ uses: actions/download-artifact@v7
with:
# See https://github.com/docker/build-push-action/blob/263435/README.md#summaries
pattern: "!*.dockerbuild"
@@ -170,7 +171,7 @@ jobs:
run: "./crossplane --verbose xpkg push --package-files $(echo *.xpkg|tr ' ' ,) ${{ env.XPKG }}:${{ env.XPKG_VERSION }}"
- name: Login to GHCR
- uses: docker/login-action@v3.6.0
+ uses: docker/login-action@v3.7.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
diff --git a/.github/workflows/tag.yml b/.github/workflows/tag.yml
deleted file mode 100644
index db347f3..0000000
--- a/.github/workflows/tag.yml
+++ /dev/null
@@ -1,26 +0,0 @@
-name: Tag
-
-on:
- workflow_dispatch:
- inputs:
- version:
- description: 'Release version (e.g. v0.1.0)'
- required: true
- message:
- description: 'Tag message'
- required: true
-
-jobs:
- create-tag:
- runs-on: ubuntu-latest
-
- steps:
- - name: Checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
-
- - name: Create Tag
- uses: negz/create-tag@39bae1e0932567a58c20dea5a1a0d18358503320 # v1
- with:
- version: ${{ github.event.inputs.version }}
- message: ${{ github.event.inputs.message }}
- token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.golangci.yml b/.golangci.yml
index ae8b557..343ee1f 100644
--- a/.golangci.yml
+++ b/.golangci.yml
@@ -1,142 +1,172 @@
+# copied from https://github.com/crossplane/crossplane/blob/main/.golangci.yml and
+# updated slightly for this repository.
version: "2"
output:
formats:
text:
- path: stdout
+ path: stderr
linters:
- enable:
- - asasalint
- - asciicheck
- - bidichk
- - bodyclose
- - contextcheck
- - durationcheck
- - errchkjson
- - errorlint
- - exhaustive
- - gocheckcompilerdirectives
- - gochecksumtype
- - goconst
- - gocritic
+ default: all
+ disable:
+ # These are linters we'd like to enable, but that will be labor intensive to
+ # make existing code compliant.
+ - wrapcheck
+ - varnamelen
+ - testpackage
+ - paralleltest
+ - nilnil
+ - funcorder
+
+ # Below are linters that lint for things we don't value. Each entry below
+ # this line must have a comment explaining the rationale.
+
+ # These linters add whitespace in an attempt to make code more readable.
+ # This isn't a widely accepted Go best practice, and would be laborious to
+ # apply to existing code.
+ - wsl
+ - wsl_v5
+ - nlreturn
+
+ # Warns about uses of fmt.Sprintf that are less performant than alternatives
+ # such as string concatenation. We value readability more than performance
+ # unless performance is measured to be an issue.
+ - perfsprint
+
+ # This linter:
+ #
+ # 1. Requires errors.Is/errors.As to test equality.
+ # 2. Requires all errors be wrapped with fmt.Errorf specifically.
+ # 3. Disallows errors.New inline - requires package level errors.
+ #
+ # 1 is covered by other linters. 2 is covered by wrapcheck, which can also
+ # handle our use of crossplane-runtime's errors package. 3 is more strict
+ # than we need. Not every error needs to be tested for equality.
+ - err113
+
+ # These linters duplicate gocognit, but calculate complexity differently.
- gocyclo
- - gosec
- - gosmopolitan
- - loggercheck
- - makezero
- - misspell
- - musttag
- - nakedret
- - nilerr
- - nilnesserr
- - noctx
- - nolintlint
- - prealloc
- - protogetter
- - reassign
- - recvcheck
- - revive
- - rowserrcheck
- - spancheck
- - sqlclosecheck
- - testifylint
- - unconvert
- - unparam
- - zerologlint
-
+ - cyclop
+ - nestif
+ - funlen
+ - maintidx
+
+ # Enforces max line length. It's not idiomatic to enforce a strict limit on
+ # line length in Go. We'd prefer to lint for things that often cause long
+ # lines, like functions with too many parameters or long parameter names
+ # that duplicate their types.
+ - lll
+
+ # Warns about struct instantiations that don't specify every field. Could be
+ # useful in theory to catch fields that are accidentally omitted. Seems like
+ # it would have many more false positives than useful catches, though.
+ - exhaustruct
+
+ # Warns about TODO comments. The rationale being they should be issues
+ # instead. We're okay with using TODO to track minor cleanups for next time
+ # we touch a particular file.
+ - godox
+
+ # Warns about duplicated code blocks within the same file. Could be useful
+ # to prompt folks to think about whether code should be broken out into a
+ # function, but generally we're less worried about DRY and fine with a
+ # little copying. We don't want to give folks the impression that we require
+ # every duplicated code block to be factored out into a function.
+ - dupl
+
+ # Warns about returning interfaces rather than concrete types. We do think
+ # it's best to avoid returning interfaces where possible. However, at the
+ # time of writing enabling this linter would only catch the (many) cases
+ # where we must return an interface.
+ - ireturn
+
+ # Warns about returning named variables. We do think it's best to avoid
+ # returning named variables where possible. However, at the time of writing
+ # enabling this linter would only catch the (many) cases where returning
+ # named variables is useful to document what the variables are. For example
+ # we believe it makes sense to return (ready bool) rather than just (bool)
+ # to communicate what the bool means.
+ - nonamedreturns
+
+ # Warns about using magic numbers. We do think it's best to avoid magic
+ # numbers, but we should not be strict about it.
+ - mnd
+
+ # Warns about if err := Foo(); err != nil style error checks. Seems to go
+ # against idiomatic Go programming, which encourages this approach - e.g.
+ # to scope errors.
+ - noinlineerr
settings:
+ depguard:
+ rules:
+ no_third_party_test_libraries:
+ list-mode: lax
+ files:
+ - $test
+ deny:
+ - pkg: github.com/stretchr/testify
+ desc: See https://go.dev/wiki/TestComments#assert-libraries
+ - pkg: github.com/onsi/ginkgo
+ desc: See https://go.dev/wiki/TestComments#assert-libraries
+ - pkg: github.com/onsi/gomega
+ desc: See https://go.dev/wiki/TestComments#assert-libraries
dupl:
- # tokens count to trigger issue, 150 by default
threshold: 100
-
errcheck:
- # report about not checking of errors in type assetions: `a := b.(MyStruct)`;
- # default is false: such cases aren't reported by default.
check-type-assertions: false
- # report about assignment of errors to blank identifier: `num, _ := strconv.Atoi(numStr)`;
- # default is false: such cases aren't reported by default.
check-blank: false
- # List of functions to exclude from checking, where each entry is a single function to exclude.
- # See https://github.com/kisielk/errcheck#excluding-functions for details.
- exclude-functions:
- - io/ioutil.ReadFile
-
goconst:
- # minimal length of string constant, 3 by default
min-len: 3
- # minimal occurrences count to trigger, 3 by default
min-occurrences: 5
-
gocritic:
- # Enable multiple checks by tags, run `GL_DEBUG=gocritic golangci-lint` run to see all tags and checks.
- # Empty list by default. See https://github.com/go-critic/go-critic#usage -> section "Tags".
enabled-tags:
- performance
- settings: # settings passed to gocritic
- captLocal: # must be valid enabled check name
+ settings:
+ captLocal:
paramsOnly: true
rangeValCopy:
sizeThreshold: 32
-
- gocyclo:
- # minimal code complexity to report, 30 by default (but we recommend 10-20)
- min-complexity: 10
-
govet:
- # report about shadowed variables
disable:
- shadow
-
+ interfacebloat:
+ max: 5
lll:
- # tab width in spaces. Default to 1.
tab-width: 1
-
nakedret:
- # make an issue if func has more lines of code than this setting and it has naked returns; default is 30
max-func-lines: 30
-
nolintlint:
require-explanation: true
require-specific: true
-
prealloc:
- # XXX: we don't recommend using this linter before doing performance profiling.
- # For most programs usage of prealloc will be a premature optimization.
-
- # Report preallocation suggestions only on simple loops that have no returns/breaks/continues/gotos in them.
- # True by default.
simple: true
range-loops: true
for-loops: false
-
+ tagliatelle:
+ case:
+ rules:
+ json: goCamel
unparam:
- # Inspect exported functions, default is false. Set to true if no external program/library imports your code.
- # XXX: if you enable this setting, unparam will report a lot of false-positives in text editors:
- # if it's called for subdir of a project it can't find external interfaces. All text editor integrations
- # with golangci-lint call it on a directory with the changed file.
check-exported: false
-
+ unused:
+ exported-fields-are-used: true
exclusions:
generated: lax
rules:
-
- # Excluding configuration per-path and per-linter
- - linters:
- - all
- path: zz_generated\..+\.go$
-
- # Exclude some linters from running on tests files.
- linters:
- - dupl
+ - containedctx
- errcheck
- - gocyclo
+ - forcetypeassert
+ - gochecknoglobals
+ - gochecknoinits
+ - gocognit
- gosec
- scopelint
- unparam
+ - embeddedstructfieldcheck
path: _test(ing)?\.go
- # Ease some gocritic warnings on test files.
- linters:
- gocritic
path: _test\.go
@@ -167,48 +197,52 @@ linters:
- gosec
text: 'G104:'
+ # This is about implicit memory aliasing in a range loop.
+ # This is a false positive with Go v1.22 and above.
+ - linters:
+ - gosec
+ text: 'G601:'
+
# Some k8s dependencies do not have JSON tags on all fields in structs.
- linters:
- musttag
path: k8s.io/
+
paths:
+ - zz_generated\..+\.go$
+ - .+\.pb.go$
- third_party$
- builtin$
- - examples$
+ - example$
issues:
- # maximum issues count per one linter. set to 0 to disable. default is 50.
max-issues-per-linter: 0
- # Maximum count of issues with the same text. Set to 0 to disable. Default is 3.
max-same-issues: 0
- # Show only new issues: if there are unstaged changes or untracked files,
- # only those changes are analyzed, else only changes in HEAD~ are analyzed.
- # It's a super-useful option for integration of golangci-lint into existing
- # large codebase. It's not practical to fix all existing issues at the moment
- # of integration: much better don't allow issues in new code.
- # Default is false.
new: false
formatters:
enable:
- gci
- gofmt
+ - gofumpt
+ - goimports
settings:
gci:
sections:
- standard
- default
- - prefix(github.com/crossplane)
- - prefix(github.com/crossplane-contrib)
+ - prefix(github.com/crossplane/function-sdk-go)
+ - prefix(github.com/crossplane-contrib/function-extra-resources)
- blank
- dot
custom-order: true
gofmt:
- # simplify code: gofmt with `-s` option, true by default
simplify: true
exclusions:
generated: lax
paths:
+ - zz_generated\..+\.go$
+ - .+\.pb.go$
- third_party$
- builtin$
- - examples$
+ - example$
diff --git a/Dockerfile b/Dockerfile
index 64e579e..36b633a 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,6 +13,8 @@ FROM --platform=${BUILDPLATFORM} golang:${GO_VERSION} AS build
WORKDIR /fn
# Most functions don't want or need CGo support, so we disable it.
+# If CGo support is needed make sure to also change the base image to one that
+# includes glibc, like 'distroless/base'.
ENV CGO_ENABLED=0
# We run go mod download in a separate step so that we can cache its results.
@@ -38,7 +40,7 @@ RUN --mount=target=. \
# Produce the Function image. We use a very lightweight 'distroless' image that
# does not include any of the build tools used in previous stages.
-FROM gcr.io/distroless/base-debian11 AS image
+FROM gcr.io/distroless/static-debian12:nonroot AS image
WORKDIR /
COPY --from=build /function /function
EXPOSE 9443
diff --git a/README.md b/README.md
index 23a8315..964581a 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
# function-extra-resources
-[](https://github.com/crossplane/function-template-go/actions/workflows/ci.yml)
+[](https://github.com/crossplane-contrib/function-extra-resources/actions/workflows/ci.yml)
A function for selecting extra resources via [composition function][functions]s in [Go][go].
## Using `function-extra-resources`
-Please see the example in `./examples`
+Please see the example in `./example`
`function-extra-resources` is generally most useful in tandem with a function that can reference the many resources like
`function-go-templating`.
@@ -81,7 +81,7 @@ Shoud get the function process/server build and running to serve CLI function re
### After locally serving function-extra-resources
-`./run.sh` will use the crossplane CLI to run our basic example in `./examples`
+`./run.sh` will use the crossplane CLI to run our basic example in `./example`
### Crossplane Function Basics
diff --git a/fn.go b/fn.go
index e0662f6..32dcbd9 100644
--- a/fn.go
+++ b/fn.go
@@ -5,11 +5,11 @@ import (
"reflect"
"sort"
- "google.golang.org/protobuf/types/known/structpb"
-
"github.com/crossplane/crossplane-runtime/v2/pkg/errors"
"github.com/crossplane/crossplane-runtime/v2/pkg/fieldpath"
"github.com/crossplane/crossplane-runtime/v2/pkg/logging"
+ "google.golang.org/protobuf/types/known/structpb"
+
fnv1 "github.com/crossplane/function-sdk-go/proto/v1"
"github.com/crossplane/function-sdk-go/request"
"github.com/crossplane/function-sdk-go/resource"
@@ -92,7 +92,7 @@ func (f *Function) RunFunction(_ context.Context, req *fnv1.RunFunctionRequest)
// Build requirements takes input and outputs an array of external resoruce requirements to request
// from Crossplane's external resource API.
-func buildRequirements(in *v1beta1.Input, xr *resource.Composite) (*fnv1.Requirements, error) { //nolint:gocyclo // Adding non-nil validations increases function complexity.
+func buildRequirements(in *v1beta1.Input, xr *resource.Composite) (*fnv1.Requirements, error) { //nolint:gocyclo,gocognit // Adding non-nil validations increases function complexity.
extraResources := make(map[string]*fnv1.ResourceSelector, len(in.Spec.ExtraResources))
for _, extraResource := range in.Spec.ExtraResources {
extraResName := extraResource.Into
@@ -190,7 +190,7 @@ func verifyAndSortExtras(in *v1beta1.Input, extraResources map[string][]resource
}
// Sort extra resources by field path within a single kind.
-func sortExtrasByFieldPath(extras []resource.Required, path string) error { //nolint:gocyclo // TODO(phisco): refactor
+func sortExtrasByFieldPath(extras []resource.Required, path string) error { //nolint:gocyclo,gocognit // TODO(phisco): refactor
if path == "" {
return errors.New("cannot sort by empty field path")
}
@@ -234,21 +234,69 @@ func sortExtrasByFieldPath(extras []resource.Required, path string) error { //no
}
switch t.Kind() { //nolint:exhaustive // we only support these types
case reflect.Float64:
- return vali.(float64) < valj.(float64)
+ ai, aok := vali.(float64)
+ bj, bok := valj.(float64)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as float64")
+ return false
+ }
+ return ai < bj
case reflect.Float32:
- return vali.(float32) < valj.(float32)
+ ai, aok := vali.(float32)
+ bj, bok := valj.(float32)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as float32")
+ return false
+ }
+ return ai < bj
case reflect.Int64:
- return vali.(int64) < valj.(int64)
+ ai, aok := vali.(int64)
+ bj, bok := valj.(int64)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as int64")
+ return false
+ }
+ return ai < bj
case reflect.Int32:
- return vali.(int32) < valj.(int32)
+ ai, aok := vali.(int32)
+ bj, bok := valj.(int32)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as int32")
+ return false
+ }
+ return ai < bj
case reflect.Int16:
- return vali.(int16) < valj.(int16)
+ ai, aok := vali.(int16)
+ bj, bok := valj.(int16)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as int16")
+ return false
+ }
+ return ai < bj
case reflect.Int8:
- return vali.(int8) < valj.(int8)
+ ai, aok := vali.(int8)
+ bj, bok := valj.(int8)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as int8")
+ return false
+ }
+ return ai < bj
case reflect.Int:
- return vali.(int) < valj.(int)
+ ai, aok := vali.(int)
+ bj, bok := valj.(int)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as int")
+ return false
+ }
+ return ai < bj
case reflect.String:
- return vali.(string) < valj.(string)
+ ai, aok := vali.(string)
+ bj, bok := valj.(string)
+ if !aok || !bok {
+ err = errors.Errorf("cannot compare values as string")
+ return false
+ }
+ return ai < bj
default:
// should never happen
err = errors.Errorf("unsupported type %q for sorting", t)
@@ -259,7 +307,7 @@ func sortExtrasByFieldPath(extras []resource.Required, path string) error { //no
return err
}
- for i := 0; i < len(extras); i++ {
+ for i := range extras {
extras[i] = p[i].ec
}
return nil
diff --git a/fn_test.go b/fn_test.go
index 2dde8be..dcd0007 100644
--- a/fn_test.go
+++ b/fn_test.go
@@ -4,6 +4,8 @@ import (
"context"
"testing"
+ "github.com/crossplane/crossplane-runtime/v2/pkg/fieldpath"
+ "github.com/crossplane/crossplane-runtime/v2/pkg/logging"
"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
"google.golang.org/protobuf/encoding/protojson"
@@ -12,8 +14,6 @@ import (
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/utils/ptr"
- "github.com/crossplane/crossplane-runtime/v2/pkg/fieldpath"
- "github.com/crossplane/crossplane-runtime/v2/pkg/logging"
fnv1 "github.com/crossplane/function-sdk-go/proto/v1"
"github.com/crossplane/function-sdk-go/resource"
"github.com/crossplane/function-sdk-go/response"
@@ -723,7 +723,7 @@ func TestRunFunction(t *testing.T) {
func resourceWithFieldPathValue(path string, value any) resource.Required {
u := unstructured.Unstructured{
- Object: map[string]interface{}{},
+ Object: map[string]any{},
}
err := fieldpath.Pave(u.Object).SetValue(path, value)
if err != nil {
diff --git a/go.mod b/go.mod
index 755a720..4ce30d4 100644
--- a/go.mod
+++ b/go.mod
@@ -1,16 +1,16 @@
module github.com/crossplane-contrib/function-extra-resources
-go 1.24.9
+go 1.24.10
require (
- github.com/alecthomas/kong v0.8.1
+ github.com/alecthomas/kong v1.14.0
github.com/crossplane/crossplane-runtime/v2 v2.1.0
github.com/crossplane/function-sdk-go v0.5.0
github.com/google/go-cmp v0.7.0
- google.golang.org/protobuf v1.36.10
- k8s.io/apimachinery v0.34.0
- k8s.io/utils v0.0.0-20251002143259-bc988d571ff4
- sigs.k8s.io/controller-tools v0.18.0
+ google.golang.org/protobuf v1.36.11
+ k8s.io/apimachinery v0.34.3
+ k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2
+ sigs.k8s.io/controller-tools v0.19.0
)
require (
@@ -65,7 +65,7 @@ require (
golang.org/x/text v0.30.0 // indirect
golang.org/x/time v0.11.0 // indirect
golang.org/x/tools v0.38.0 // indirect
- golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect
+ golang.org/x/tools/go/expect v0.1.1-deprecated // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff // indirect
google.golang.org/grpc v1.75.1 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
diff --git a/go.sum b/go.sum
index ce615ab..75d56b2 100644
--- a/go.sum
+++ b/go.sum
@@ -1,13 +1,21 @@
+cel.dev/expr v0.24.0 h1:56OvJKSH3hDGL0ml5uSxZmz3/3Pq4tJ+fb1unVLAFcY=
+cel.dev/expr v0.24.0/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw=
dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8=
dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA=
-github.com/alecthomas/assert/v2 v2.1.0 h1:tbredtNcQnoSd3QBhQWI7QZ3XHOVkw1Moklp2ojoH/0=
-github.com/alecthomas/assert/v2 v2.1.0/go.mod h1:b/+1DI2Q6NckYi+3mXyH3wFb8qG37K/DuK80n7WefXA=
-github.com/alecthomas/kong v0.8.1 h1:acZdn3m4lLRobeh3Zi2S2EpnXTd1mOL6U7xVml+vfkY=
-github.com/alecthomas/kong v0.8.1/go.mod h1:n1iCIO2xS46oE8ZfYCNDqdR0b0wZNrXAIAqro/2132U=
-github.com/alecthomas/repr v0.1.0 h1:ENn2e1+J3k09gyj2shc0dHr/yjaWSHRlrJ4DPMevDqE=
-github.com/alecthomas/repr v0.1.0/go.mod h1:2kn6fqh/zIyPLmm3ugklbEi5hg5wS435eygvNfaDQL8=
+github.com/alecthomas/assert/v2 v2.11.0 h1:2Q9r3ki8+JYXvGsDyBXwH3LcJ+WK5D0gc5E8vS6K3D0=
+github.com/alecthomas/assert/v2 v2.11.0/go.mod h1:Bze95FyfUr7x34QZrjL+XP+0qgp/zg8yS+TtBj1WA3k=
+github.com/alecthomas/kong v1.14.0 h1:gFgEUZWu2ZmZ+UhyZ1bDhuutbKN1nTtJTwh19Wsn21s=
+github.com/alecthomas/kong v1.14.0/go.mod h1:wrlbXem1CWqUV5Vbmss5ISYhsVPkBb1Yo7YKJghju2I=
+github.com/alecthomas/repr v0.5.2 h1:SU73FTI9D1P5UNtvseffFSGmdNci/O6RsqzeXJtP0Qs=
+github.com/alecthomas/repr v0.5.2/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
+github.com/antlr4-go/antlr/v4 v4.13.1 h1:SqQKkuVZ+zWkMMNkjy5FZe5mr5WURWnlpmOuzYWrPrQ=
+github.com/antlr4-go/antlr/v4 v4.13.1/go.mod h1:GKmUxMtwp6ZgGwZSva4eWPC5mS6vUAmOABFgjdkM7Nw=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
+github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
+github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
+github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
+github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
@@ -25,6 +33,8 @@ github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjT
github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM=
github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM=
github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU=
+github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
+github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/fsnotify/fsnotify v1.9.0 h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
github.com/fsnotify/fsnotify v1.9.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
@@ -53,6 +63,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
+github.com/google/cel-go v0.26.1 h1:iPbVVEdkhTX++hpe3lzSk7D3G3QSYqLGoHOcEio+UXQ=
+github.com/google/cel-go v0.26.1/go.mod h1:A9O8OU9rdvrK5MQyrqfIxo1a0u4g3sF8KB6PUIaryMM=
github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
@@ -66,6 +78,8 @@ github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 h1:QGLs
github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0/go.mod h1:hM2alZsMUni80N33RBe6J0e423LB+odMj7d3EMP9l20=
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0 h1:FbSCl+KggFl+Ocym490i/EyXF4lPgLoUtcSWquBM0Rs=
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.0/go.mod h1:qOchhhIlmRcqk/O9uCo/puJlyo07YINaIqdZfZG3Jkc=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3 h1:5ZPtiqj0JL5oKWmcsq4VMaAW5ukBEgSGXEN89zeH1Jo=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.3/go.mod h1:ndYquD05frm2vACXE1nsccT4oJzjhw2arTS2cpUD1PI=
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
@@ -104,8 +118,8 @@ github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE=
github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU=
github.com/onsi/ginkgo/v2 v2.23.3 h1:edHxnszytJ4lD9D5Jjc4tiDkPBZ3siDeJJkUZJJVkp0=
github.com/onsi/ginkgo/v2 v2.23.3/go.mod h1:zXTP6xIp3U8aVuXN8ENK9IXRaTjFnpVB9mGmaSRvxnM=
-github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y=
-github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
+github.com/onsi/gomega v1.38.1 h1:FaLA8GlcpXDwsb7m0h2A9ew2aTk3vnZMlzFgg5tz/pk=
+github.com/onsi/gomega v1.38.1/go.mod h1:LfcV8wZLvwcYRwPiJysphKAEsmcFnLMK/9c+PjvlX8g=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -128,6 +142,8 @@ github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4
github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk=
github.com/spf13/pflag v1.0.10/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stoewer/go-strcase v1.3.1 h1:iS0MdW+kVTxgMoE1LAZyMiYJFKlOzLooE4MxjirtkAs=
+github.com/stoewer/go-strcase v1.3.1/go.mod h1:fAH5hQ5pehh+j3nZfvwdk2RgEgQjAoM8wodgtPmh1xo=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
@@ -145,8 +161,14 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0/go.mod h1:h06DGIukJOevXaj/xrNjhi/2098RZzcLTbc0jDAUbsg=
go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8=
go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 h1:OeNbIYk/2C15ckl7glBlOBp5+WlYsOElzTNmiPW/x60=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0/go.mod h1:7Bept48yIeqxP2OZ9/AqIpYS94h2or0aB4FypJTc8ZM=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0 h1:tgJ0uaNS4c98WRNUEx5U3aDlrDOI5Rs+1Vifcw4DJ8U=
+go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.34.0/go.mod h1:U7HYyW0zt/a9x5J1Kjs+r1f/d4ZHnYFclhYY2+YbeoE=
go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA=
go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI=
go.opentelemetry.io/otel/sdk v1.37.0 h1:ItB0QUqnjesGRvNcmAcU0LyvkVyGJ2xftD29bWdDvKI=
@@ -155,6 +177,8 @@ go.opentelemetry.io/otel/sdk/metric v1.37.0 h1:90lI228XrB9jCMuSdA0673aubgRobVZFh
go.opentelemetry.io/otel/sdk/metric v1.37.0/go.mod h1:cNen4ZWfiD37l5NhS+Keb5RXVWZWpRE+9WyVCpbo5ps=
go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE=
go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
+go.opentelemetry.io/proto/otlp v1.5.0 h1:xJvq7gMzB31/d406fB8U5CBdyQGw4P399D1aQWU/3i4=
+go.opentelemetry.io/proto/otlp v1.5.0/go.mod h1:keN8WnHxOy8PG0rQZjJJ5A2ebUoafqWp0eVQ4yIXvJ4=
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=
@@ -168,6 +192,8 @@ go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b h1:18qgiDvlvH7kk8Ioa8Ov+K6xCi0GMvmGfGW0sgd/SYA=
+golang.org/x/exp v0.0.0-20251009144603-d2f985daa21b/go.mod h1:j/pmGrbnkbPtQfxEe5D0VQhZC6qKbfKifgD0oM7sR70=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
@@ -205,8 +231,8 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
-golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY=
-golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
+golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
+golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@@ -217,12 +243,15 @@ gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw
gomodules.xyz/jsonpatch/v2 v2.4.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/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk=
+google.golang.org/genproto/googleapis/api v0.0.0-20251007200510-49b9836ed3ff h1:8Zg5TdmcbU8A7CXGjGXF1Slqu/nIFCRaR3S5gT2plIA=
+google.golang.org/genproto/googleapis/api v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:dbWfpVPvW/RqafStmRWBUpMN14puDezDMHxNYiRfQu0=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff h1:A90eA31Wq6HOMIQlLfzFwzqGKBTuaVztYu/g8sn+8Zc=
google.golang.org/genproto/googleapis/rpc v0.0.0-20251007200510-49b9836ed3ff/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
google.golang.org/grpc v1.75.1 h1:/ODCNEuf9VghjgO3rqLcfg8fiOP0nSluljWFlDxELLI=
google.golang.org/grpc v1.75.1/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ=
-google.golang.org/protobuf v1.36.10 h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
-google.golang.org/protobuf v1.36.10/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
+google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE=
+google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -241,24 +270,30 @@ k8s.io/api v0.34.0 h1:L+JtP2wDbEYPUeNGbeSa/5GwFtIA662EmT2YSLOkAVE=
k8s.io/api v0.34.0/go.mod h1:YzgkIzOOlhl9uwWCZNqpw6RJy9L2FK4dlJeayUoydug=
k8s.io/apiextensions-apiserver v0.34.0 h1:B3hiB32jV7BcyKcMU5fDaDxk882YrJ1KU+ZSkA9Qxoc=
k8s.io/apiextensions-apiserver v0.34.0/go.mod h1:hLI4GxE1BDBy9adJKxUxCEHBGZtGfIg98Q+JmTD7+g0=
-k8s.io/apimachinery v0.34.0 h1:eR1WO5fo0HyoQZt1wdISpFDffnWOvFLOOeJ7MgIv4z0=
-k8s.io/apimachinery v0.34.0/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
+k8s.io/apimachinery v0.34.3 h1:/TB+SFEiQvN9HPldtlWOTp0hWbJ+fjU+wkxysf/aQnE=
+k8s.io/apimachinery v0.34.3/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw=
+k8s.io/apiserver v0.34.0 h1:Z51fw1iGMqN7uJ1kEaynf2Aec1Y774PqU+FVWCFV3Jg=
+k8s.io/apiserver v0.34.0/go.mod h1:52ti5YhxAvewmmpVRqlASvaqxt0gKJxvCeW7ZrwgazQ=
k8s.io/client-go v0.34.0 h1:YoWv5r7bsBfb0Hs2jh8SOvFbKzzxyNo0nSb0zC19KZo=
k8s.io/client-go v0.34.0/go.mod h1:ozgMnEKXkRjeMvBZdV1AijMHLTh3pbACPvK7zFR+QQY=
k8s.io/code-generator v0.34.0 h1:Ze2i1QsvUprIlX3oHiGv09BFQRLCz+StA8qKwwFzees=
k8s.io/code-generator v0.34.0/go.mod h1:Py2+4w2HXItL8CGhks8uI/wS3Y93wPKO/9mBQUYNua0=
+k8s.io/component-base v0.34.0 h1:bS8Ua3zlJzapklsB1dZgjEJuJEeHjj8yTu1gxE2zQX8=
+k8s.io/component-base v0.34.0/go.mod h1:RSCqUdvIjjrEm81epPcjQ/DS+49fADvGSCkIP3IC6vg=
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f h1:SLb+kxmzfA87x4E4brQzB33VBbT2+x7Zq9ROIHmGn9Q=
k8s.io/gengo/v2 v2.0.0-20250604051438-85fd79dbfd9f/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b h1:MloQ9/bdJyIu9lb1PzujOPolHyvO06MXG5TUIj2mNAA=
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b/go.mod h1:UZ2yyWbFTpuhSbFhv24aGNOdoRdJZgsIObGBUaYVsts=
-k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
-k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU=
+k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2 h1:jpcvIRr3GLoUoEKRkHKSmGjxb6lWwrBlJsXc+eUYQHM=
+sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.2/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
sigs.k8s.io/controller-runtime v0.22.0 h1:mTOfibb8Hxwpx3xEkR56i7xSjB+nH4hZG37SrlCY5e0=
sigs.k8s.io/controller-runtime v0.22.0/go.mod h1:FwiwRjkRPbiN+zp2QRp7wlTCzbUXxZ/D4OzuQUDwBHY=
-sigs.k8s.io/controller-tools v0.18.0 h1:rGxGZCZTV2wJreeRgqVoWab/mfcumTMmSwKzoM9xrsE=
-sigs.k8s.io/controller-tools v0.18.0/go.mod h1:gLKoiGBriyNh+x1rWtUQnakUYEujErjXs9pf+x/8n1U=
+sigs.k8s.io/controller-tools v0.19.0 h1:OU7jrPPiZusryu6YK0jYSjPqg8Vhf8cAzluP9XGI5uk=
+sigs.k8s.io/controller-tools v0.19.0/go.mod h1:y5HY/iNDFkmFla2CfQoVb2AQXMsBk4ad84iR1PLANB0=
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
diff --git a/input/v1beta1/input.go b/input/v1beta1/input.go
index be52996..37b7463 100644
--- a/input/v1beta1/input.go
+++ b/input/v1beta1/input.go
@@ -20,8 +20,8 @@ import (
// +kubebuilder:resource:categories=crossplane
type Input struct {
metav1.TypeMeta `json:",inline"`
- metav1.ObjectMeta `json:"metadata,omitempty"`
+ metav1.ObjectMeta `json:"metadata"`
// Spec is the input to this function.
- Spec InputSpec `json:"spec,omitempty"`
+ Spec InputSpec `json:"spec"`
}
diff --git a/input/v1beta1/resource_select.go b/input/v1beta1/resource_select.go
index 49dc69e..2b12c27 100644
--- a/input/v1beta1/resource_select.go
+++ b/input/v1beta1/resource_select.go
@@ -204,8 +204,7 @@ type ResourceSourceSelectorLabelMatcher struct {
Value *string `json:"value,omitempty"`
}
-// FromFieldPathIsOptional returns true if the FromFieldPathPolicy is set to
-// +optional
+// FromFieldPathIsOptional returns true if the FromFieldPathPolicy is set to Optional.
func (e *ResourceSourceSelectorLabelMatcher) FromFieldPathIsOptional() bool {
return e.FromFieldPathPolicy != nil && *e.FromFieldPathPolicy == FromFieldPathPolicyOptional
}
diff --git a/main.go b/main.go
index 4b76801..c7d2f77 100644
--- a/main.go
+++ b/main.go
@@ -9,13 +9,13 @@ import (
// CLI of this Function.
type CLI struct {
- Debug bool `short:"d" help:"Emit debug logs in addition to info logs."`
+ Debug bool `help:"Emit debug logs in addition to info logs." short:"d"`
- Network string `help:"Network on which to listen for gRPC connections." default:"tcp"`
- Address string `help:"Address at which to listen for gRPC connections." default:":9443"`
- TLSCertsDir string `help:"Directory containing server certs (tls.key, tls.crt) and the CA used to verify client certificates (ca.crt)" env:"TLS_SERVER_CERTS_DIR"`
+ Network string `default:"tcp" help:"Network on which to listen for gRPC connections."`
+ Address string `default:":9443" help:"Address at which to listen for gRPC connections."`
+ TLSCertsDir string `env:"TLS_SERVER_CERTS_DIR" help:"Directory containing server certs (tls.key, tls.crt) and the CA used to verify client certificates (ca.crt)"`
Insecure bool `help:"Run without mTLS credentials. If you supply this flag --tls-server-certs-dir will be ignored."`
- MaxRecvMessageSize int `help:"Maximum size of received messages in MB." default:"4"`
+ MaxRecvMessageSize int `default:"4" help:"Maximum size of received messages in MB."`
}
// Run this Function.
diff --git a/renovate.json b/renovate.json
index 82b19d0..21e99bb 100644
--- a/renovate.json
+++ b/renovate.json
@@ -12,5 +12,9 @@
"matchFileNames": ["example/**"],
"groupName": "examples"
}
+ ],
+ "postUpdateOptions": [
+ "gomodTidy",
+ "gomodUpdateImportPaths"
]
}