diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml index acc938d2..412b116e 100644 --- a/.github/workflows/check-dist.yml +++ b/.github/workflows/check-dist.yml @@ -24,8 +24,8 @@ jobs: working-directory: actions/spa-setup-task steps: - - uses: actions/checkout@v4 - - uses: actions/setup-node@v4 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6 + - uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # ratchet:actions/setup-node@v6 with: node-version: '20' - run: yarn install @@ -41,7 +41,7 @@ jobs: id: diff # If index.js was different than expected, upload the expected version as an artifact - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # ratchet:actions/upload-artifact@v7 if: ${{ failure() && steps.diff.conclusion == 'failure' }} with: name: dist diff --git a/.github/workflows/master.yaml b/.github/workflows/master.yaml index 7c54eeaa..9f6268ca 100644 --- a/.github/workflows/master.yaml +++ b/.github/workflows/master.yaml @@ -14,9 +14,30 @@ env: GOOGLE_REGISTRY: "europe-north1-docker.pkg.dev" jobs: + check: + name: Static analysis + runs-on: ubuntu-22.04 + permissions: + contents: read + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6 + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # ratchet:jdx/mise-action@v4 + - run: mise run check + + test: + name: Tests + runs-on: ubuntu-22.04 + permissions: + contents: read + steps: + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6 + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # ratchet:jdx/mise-action@v4 + - run: mise run test + build_and_push: name: Build, push and sign images runs-on: ubuntu-22.04 + needs: [check, test] permissions: contents: "read" id-token: "write" @@ -35,21 +56,41 @@ jobs: chart: true - component: canary-deployer chart: true + dockerfile: Dockerfile.deploy + target: canary-deployer + - component: deploy-action + dockerfile: Dockerfile.deploy + target: deploy-action + - component: deploy + target: deploy steps: - - uses: actions/checkout@v4 # ratchet:exclude - - uses: azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112 # ratchet:azure/setup-helm@v3 + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6 + + - name: Set build metadata + id: meta + run: | + echo "last_commit=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT + echo "date=$(date '+%Y-%m-%d')" >> $GITHUB_OUTPUT + echo "buildtime=$(date '+%s')" >> $GITHUB_OUTPUT + + - uses: azure/setup-helm@dda3372f752e03dde6b3237bc9431cdc2f7a02a2 # ratchet:azure/setup-helm@v5 if: matrix.chart with: version: "v3.11.1" - name: "Build and push image" - uses: nais/platform-build-push-sign@main # ratchet:exclude + uses: nais/platform-build-push-sign@31014e4bcac554cb52525fe2364244c5166b84d2 # ratchet:nais/platform-build-push-sign@main id: build_push_sign with: - dockerfile: Dockerfile.${{ matrix.component }} + dockerfile: ${{ matrix.dockerfile || format('Dockerfile.{0}', matrix.component) }} + target: ${{ matrix.target }} name: ${{ matrix.component }} google_service_account: gh-deploy workload_identity_provider: ${{ secrets.NAIS_IO_WORKLOAD_IDENTITY_PROVIDER }} push: ${{ github.actor != 'dependabot[bot]' && github.ref == 'refs/heads/master' }} + build_args: | + LAST_COMMIT=${{ steps.meta.outputs.last_commit }} + DATE=${{ steps.meta.outputs.date }} + BUILDTIME=${{ steps.meta.outputs.buildtime }} - name: "Package chart" if: matrix.chart @@ -78,7 +119,7 @@ jobs: - name: "Authenticate to Google Cloud" if: matrix.chart && github.ref == 'refs/heads/master' id: "auth" - uses: "google-github-actions/auth@v2" # ratchet:exclude + uses: "google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093" # ratchet:google-github-actions/auth@v3 with: workload_identity_provider: ${{ secrets.NAIS_IO_WORKLOAD_IDENTITY_PROVIDER }} service_account: "gh-deploy@nais-io.iam.gserviceaccount.com" @@ -113,7 +154,7 @@ jobs: - build_and_push steps: - name: "Deploy hookd" - uses: nais/fasit-deploy@v4 # ratchet:exclude + uses: nais/fasit-deploy@9f870e05e92cde6cfd827b13384ec09e80be65fd # ratchet:nais/fasit-deploy@v4 with: chart: oci://${{ env.GOOGLE_REGISTRY }}/nais-io/nais/feature/${{ needs.build_and_push.outputs.hookd_chart_name }} version: ${{ needs.build_and_push.outputs.hookd_chart_version }} @@ -124,7 +165,7 @@ jobs: ] - name: "Deploy deployd" - uses: nais/fasit-deploy@v4 # ratchet:exclude + uses: nais/fasit-deploy@9f870e05e92cde6cfd827b13384ec09e80be65fd # ratchet:nais/fasit-deploy@v4 with: chart: oci://${{ env.GOOGLE_REGISTRY }}/nais-io/nais/feature/${{ needs.build_and_push.outputs.deployd_chart_name }} version: ${{ needs.build_and_push.outputs.deployd_chart_version }} @@ -137,7 +178,7 @@ jobs: ] - name: "Deploy canary-deployer" - uses: nais/fasit-deploy@v4 # ratchet:exclude + uses: nais/fasit-deploy@9f870e05e92cde6cfd827b13384ec09e80be65fd # ratchet:nais/fasit-deploy@v4 with: chart: oci://${{ env.GOOGLE_REGISTRY }}/nais-io/nais/feature/${{ needs.build_and_push.outputs.canary_deployer_chart_name }} version: ${{ needs.build_and_push.outputs.canary_deployer_chart_version }} @@ -154,11 +195,9 @@ jobs: - build_and_push runs-on: ubuntu-22.04 steps: - - uses: actions/checkout@v4 # ratchet:exclude + - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # ratchet:actions/checkout@v6 - - uses: actions/setup-go@v5 - with: - go-version: 'stable' + - uses: jdx/mise-action@1648a7812b9aeae629881980618f079932869151 # ratchet:jdx/mise-action@v4 - name: Force create tag env: @@ -170,9 +209,9 @@ jobs: - name: Create deploy binaries run: | - make deploy-release-linux - make deploy-release-darwin - make deploy-release-windows + mise run release:linux + mise run release:darwin + mise run release:windows - name: Delete release if exists env: diff --git a/.github/workflows/test-job.yaml b/.github/workflows/test-job.yaml deleted file mode 100644 index 0335f148..00000000 --- a/.github/workflows/test-job.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: Deploy Job -on: - workflow_dispatch: - inputs: - cluster: - description: "Cluster to deploy to" - default: "ci-fss" - required: false - type: string - -jobs: - deploy: - name: Deploy to NAIS - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: deploy to ${{ github.event.inputs.cluster }} - uses: nais/deploy/actions/deploy@v2 - env: - APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }} - CLUSTER: ${{ github.event.inputs.cluster }} - RESOURCE: testdata/job.yaml diff --git a/.github/workflows/test-naisjob-without-schedule.yaml b/.github/workflows/test-naisjob-without-schedule.yaml deleted file mode 100644 index d119d5d9..00000000 --- a/.github/workflows/test-naisjob-without-schedule.yaml +++ /dev/null @@ -1,23 +0,0 @@ -name: Deploy Naisjob (no schedule) -on: - workflow_dispatch: - inputs: - cluster: - description: "Cluster to deploy to" - default: "ci-fss" - required: false - type: string - -jobs: - deploy: - name: Deploy to NAIS - permissions: - contents: read - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: deploy to ${{ github.event.inputs.cluster }} - uses: nais/deploy/actions/deploy@v2 - env: - CLUSTER: ${{ github.event.inputs.cluster }} - RESOURCE: testdata/naisjob-without-schedule.yaml diff --git a/.github/workflows/test-naisjob.yaml b/.github/workflows/test-naisjob.yaml deleted file mode 100644 index 23a32631..00000000 --- a/.github/workflows/test-naisjob.yaml +++ /dev/null @@ -1,22 +0,0 @@ -name: Deploy Naisjob /w schedule -on: - workflow_dispatch: - inputs: - cluster: - description: "Cluster to deploy to" - default: "ci-fss" - required: false - type: string - -jobs: - deploy: - name: Deploy to NAIS - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - name: deploy to ${{ github.event.inputs.cluster }} - uses: nais/deploy/actions/deploy@v2 - env: - APIKEY: ${{ secrets.NAIS_DEPLOY_APIKEY }} - CLUSTER: ${{ github.event.inputs.cluster }} - RESOURCE: testdata/naisjob.yaml diff --git a/CODEOWNERS b/CODEOWNERS index 404dd532..f3d5fc1e 100644 --- a/CODEOWNERS +++ b/CODEOWNERS @@ -1 +1 @@ -* @navikt/aura +* @navikt/nais diff --git a/Dockerfile.canary-deployer b/Dockerfile.canary-deployer deleted file mode 100644 index 139d1ca4..00000000 --- a/Dockerfile.canary-deployer +++ /dev/null @@ -1,27 +0,0 @@ -FROM golang:1.26-alpine AS builder - -RUN apk add --no-cache git make curl -ENV GOOS=linux -ENV CGO_ENABLED=0 - -WORKDIR /src - -COPY go.mod . -COPY go.sum . -RUN go mod download -COPY . . - -RUN make kubebuilder -RUN make test -RUN make deploy-alpine - - -FROM alpine:3 - -WORKDIR /app -RUN apk add --no-cache ca-certificates -COPY --from=builder /src/bin/deploy . -ADD canary-deployer/deployer.sh /canary/deployer.sh -ADD canary-deployer/canary.yml /canary/resource.yml -ENV RESOURCE=/canary/resource.yml -CMD ["/canary/deployer.sh"] diff --git a/Dockerfile.deploy b/Dockerfile.deploy index b1c46e26..1ce2d1ef 100644 --- a/Dockerfile.deploy +++ b/Dockerfile.deploy @@ -1,6 +1,9 @@ FROM golang:1.26-alpine AS builder -RUN apk add --no-cache git make curl +ARG LAST_COMMIT=local +ARG DATE=unknown +ARG BUILDTIME=0 + ENV GOOS=linux ENV CGO_ENABLED=0 @@ -11,14 +14,36 @@ COPY go.sum . RUN go mod download COPY . . -RUN make kubebuilder -RUN make test -RUN make deploy-alpine +RUN go build -a -installsuffix cgo -o bin/deploy \ + -ldflags "-s -X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" \ + ./cmd/deploy/ -FROM alpine:3 +FROM alpine:3 AS deploy WORKDIR /app RUN apk add --no-cache ca-certificates wget COPY --from=builder /src/bin/deploy . CMD ["/app/deploy"] + + +FROM alpine:3 AS canary-deployer + +WORKDIR /app +RUN apk add --no-cache ca-certificates +COPY --from=builder /src/bin/deploy . +ADD canary-deployer/deployer.sh /canary/deployer.sh +ADD canary-deployer/canary.yml /canary/resource.yml +ENV RESOURCE=/canary/resource.yml +CMD ["/canary/deployer.sh"] + + +FROM alpine:3 AS deploy-action + +WORKDIR /app +ENV TZ="Europe/Oslo" +RUN apk add --no-cache ca-certificates curl jq +RUN curl -L -f https://github.com/mikefarah/yq/releases/download/2.4.1/yq_linux_amd64 > /usr/local/bin/yq && chmod +x /usr/local/bin/yq +COPY --from=builder /src/bin/deploy . +COPY actions/deploy/entrypoint.sh /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] diff --git a/Dockerfile.deploy-action b/Dockerfile.deploy-action deleted file mode 100644 index d56158c9..00000000 --- a/Dockerfile.deploy-action +++ /dev/null @@ -1,29 +0,0 @@ -FROM golang:1.26-alpine AS builder - -RUN apk add --no-cache git make curl -ENV GOOS=linux -ENV CGO_ENABLED=0 - -WORKDIR /src - -COPY go.mod . -COPY go.sum . -RUN go mod download -COPY . . - -RUN make kubebuilder -RUN make test -RUN make deploy-alpine - - -FROM alpine:3 - -WORKDIR /app -ENV TZ="Europe/Oslo" -RUN apk add --no-cache ca-certificates curl jq -RUN curl -L -f https://github.com/mikefarah/yq/releases/download/2.4.1/yq_linux_amd64 > /usr/local/bin/yq && chmod +x /usr/local/bin/yq - -COPY --from=builder /src/bin/deploy . -COPY actions/deploy/entrypoint.sh /entrypoint.sh - -ENTRYPOINT ["/entrypoint.sh"] diff --git a/Dockerfile.deployd b/Dockerfile.deployd index 82176969..e0cfea0c 100644 --- a/Dockerfile.deployd +++ b/Dockerfile.deployd @@ -1,6 +1,9 @@ FROM golang:1.26-alpine AS builder -RUN apk add --no-cache git make curl +ARG LAST_COMMIT=local +ARG DATE=unknown +ARG BUILDTIME=0 + ENV GOOS=linux ENV CGO_ENABLED=0 @@ -11,9 +14,9 @@ COPY go.sum . RUN go mod download COPY . . -RUN make kubebuilder -RUN make test -RUN make deployd-alpine +RUN go build -a -installsuffix cgo -o bin/deployd \ + -ldflags "-s -X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" \ + ./cmd/deployd/ FROM alpine:3 diff --git a/Dockerfile.hookd b/Dockerfile.hookd index 5ed07a1d..a04ba1f5 100644 --- a/Dockerfile.hookd +++ b/Dockerfile.hookd @@ -1,6 +1,9 @@ FROM golang:1.26-alpine AS builder -RUN apk add --no-cache git make curl +ARG LAST_COMMIT=local +ARG DATE=unknown +ARG BUILDTIME=0 + ENV GOOS=linux ENV CGO_ENABLED=0 @@ -11,9 +14,9 @@ COPY go.sum . RUN go mod download COPY . . -RUN make kubebuilder -RUN make test -RUN make hookd-alpine +RUN go build -a -installsuffix cgo -o bin/hookd \ + -ldflags "-s -X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" \ + ./cmd/hookd/ FROM alpine:3 diff --git a/Makefile b/Makefile deleted file mode 100644 index 3501ea1e..00000000 --- a/Makefile +++ /dev/null @@ -1,84 +0,0 @@ -PROTOC = $(shell which protoc) -PROTOC_GEN_GO = $(shell which protoc-gen-go) -BUILDTIME = $(shell date "+%s") -DATE = $(shell date "+%Y-%m-%d") -K8S_VERSION := 1.27.1 -LAST_COMMIT = $(shell git rev-parse --short HEAD) -VERSION ?= $(DATE)-$(LAST_COMMIT) -LDFLAGS := -X github.com/nais/deploy/pkg/version.Revision=$(LAST_COMMIT) -X github.com/nais/deploy/pkg/version.Date=$(DATE) -X github.com/nais/deploy/pkg/version.BuildUnixTime=$(BUILDTIME) -testbin_dir := ./.testbin/ - -.PHONY: all proto hookd deployd token-generator deploy alpine test docker upload deploy-alpine hookd-alpine deployd-alpine - -all: hookd deployd deploy - -install-protobuf-go: - go install google.golang.org/protobuf/cmd/protoc-gen-go - go install google.golang.org/grpc/cmd/protoc-gen-go-grpc - -proto: - $(PROTOC) --go-grpc_opt=paths=source_relative --go_opt=paths=source_relative --go_out=. --go-grpc_out=. pkg/pb/deployment.proto - -hookd: - go build -o bin/hookd -ldflags "-s $(LDFLAGS)" cmd/hookd/main.go - -deployd: - go build -o bin/deployd -ldflags "-s $(LDFLAGS)" cmd/deployd/main.go - -deploy: - go build -o bin/deploy -ldflags "-s $(LDFLAGS)" cmd/deploy/main.go - -crypt: - go build -o bin/crypt -ldflags "-s $(LDFLAGS)" cmd/crypt/main.go - -mocks: - go run github.com/vektra/mockery/v2 --inpackage --all --case snake --srcpkg ./pkg/hookd/database - go run github.com/vektra/mockery/v2 --inpackage --all --case snake --srcpkg ./pkg/grpc/dispatchserver - go run github.com/vektra/mockery/v2 --inpackage --all --case snake --srcpkg ./pkg/pb - -fmt: - go run mvdan.cc/gofumpt -w ./ - - -deploy-release-linux: - GOOS=linux \ - GOARCH=amd64 \ - go build -o deploy-linux -ldflags="-s -w $(LDFLAGS)" cmd/deploy/main.go - -deploy-release-darwin: - GOOS=darwin \ - GOARCH=amd64 \ - go build -o deploy-darwin -ldflags="-s -w $(LDFLAGS)" cmd/deploy/main.go - -deploy-release-windows: - GOOS=windows \ - GOARCH=amd64 \ - go build -o deploy-windows -ldflags="-s -w $(LDFLAGS)" cmd/deploy/main.go - -alpine: - go build -a -installsuffix cgo -o bin/hookd -ldflags "-s $(LDFLAGS)" cmd/hookd/main.go - go build -a -installsuffix cgo -o bin/deployd -ldflags "-s $(LDFLAGS)" cmd/deployd/main.go - go build -a -installsuffix cgo -o bin/deploy -ldflags "-s $(LDFLAGS)" cmd/deploy/main.go - -test: kubebuilder - go test ./... -count=1 - -migration: - go generate ./... - -kubebuilder: - mkdir -p $(testbin_dir) - cp $$(GOFLAGS="" go run sigs.k8s.io/controller-runtime/tools/setup-envtest@latest use $(K8S_VERSION) --bin-dir $(testbin_dir) -p path)/* $(testbin_dir)/ - chmod -R +x $(testbin_dir) - -check: - go run honnef.co/go/tools/cmd/staticcheck ./... - -deployd-alpine: - go build -a -installsuffix cgo -o bin/deployd -ldflags "-s $(LDFLAGS)" ./cmd/deployd/ - -hookd-alpine: - go build -a -installsuffix cgo -o bin/hookd -ldflags "-s $(LDFLAGS)" ./cmd/hookd/ - -deploy-alpine: - go build -a -installsuffix cgo -o bin/deploy -ldflags "-s $(LDFLAGS)" ./cmd/deploy/ diff --git a/README.md b/README.md index ce5ac8bc..a548e68d 100644 --- a/README.md +++ b/README.md @@ -147,7 +147,7 @@ psql -U postgres -h localhost -p 5432 hookd <<< EOF insert into apikey (key, team, created, expires) values ('1608bf2caf81bb68d50bfb094a8e0d90de2b27260767a64a0103c6255077eb446f4fabcb7ae94514380b4fdc006bd50dfe2ea73f4b60c0c55891a60f', - 'aura', now(),now()+interval '10 years'); + 'nais', now(),now()+interval '10 years'); EOF ``` diff --git a/actions/cdn-upload/v2/action.yaml b/actions/cdn-upload/v2/action.yaml index 36796151..31eebce8 100644 --- a/actions/cdn-upload/v2/action.yaml +++ b/actions/cdn-upload/v2/action.yaml @@ -82,7 +82,7 @@ runs: bucket_name=$(slug_hash_prefix_truncate "${{ inputs.tenant }}-${{ inputs.team }}" "nais-cdn" 63) echo "BUCKET_NAME=${bucket_name}" >> $GITHUB_ENV - - uses: nais/login@v0 # ratchet:exclude + - uses: nais/login@v0 # with: team: "${{ inputs.team }}" project_id: ${{ inputs.project_id }} diff --git a/charts/deployd/values.yaml b/charts/deployd/values.yaml index a8657b34..9deeb83e 100644 --- a/charts/deployd/values.yaml +++ b/charts/deployd/values.yaml @@ -56,7 +56,7 @@ deploymentEventRelays: kafka: groupIdPrefix: "deployment-event-relays" pool: "nav-infrastructure" - topic: "aura.dev-rapid" + topic: "nais.dev-rapid" canaryAlert: true diff --git a/cmd/deploy/main.go b/cmd/deploy/main.go index 2a818f55..70f2a421 100644 --- a/cmd/deploy/main.go +++ b/cmd/deploy/main.go @@ -54,7 +54,7 @@ func run() error { // OpenTelemetry tracerProvider, err := telemetry.New(ctx, "deploy", cfg.OpenTelemetryCollectorURL) if err != nil { - return fmt.Errorf("Setup OpenTelemetry: %w", err) + return fmt.Errorf("setup OpenTelemetry: %w", err) } // Clean shutdown for OT diff --git a/cmd/deployd/main.go b/cmd/deployd/main.go index e04638dc..44aacee8 100644 --- a/cmd/deployd/main.go +++ b/cmd/deployd/main.go @@ -66,7 +66,7 @@ func run() error { // OpenTelemetry tracerProvider, err := telemetry.New(programContext, "deployd", cfg.OpenTelemetryCollectorURL) if err != nil { - return fmt.Errorf("Setup OpenTelemetry: %w", err) + return fmt.Errorf("setup OpenTelemetry: %w", err) } // Clean shutdown for OT @@ -93,7 +93,18 @@ func run() error { metricsServer := http.NewServeMux() metricsServer.Handle(cfg.MetricsPath, metrics.Handler()) log.Infof("Serving metrics on %s endpoint %s", cfg.MetricsListenAddr, cfg.MetricsPath) - go http.ListenAndServe(cfg.MetricsListenAddr, metricsServer) + go func() { + srv := &http.Server{ + Addr: cfg.MetricsListenAddr, + Handler: metricsServer, + ReadTimeout: 30 * time.Second, + WriteTimeout: 30 * time.Second, + IdleTimeout: 60 * time.Second, + } + if err := srv.ListenAndServe(); err != nil { + log.Errorf("metrics server error: %s", err) + } + }() dialOptions := make([]grpc.DialOption, 0) if !cfg.GRPC.UseTLS { @@ -118,7 +129,7 @@ func run() error { })) } - grpcConnection, err := grpc.Dial(cfg.GRPC.Server, dialOptions...) + grpcConnection, err := grpc.NewClient(cfg.GRPC.Server, dialOptions...) if err != nil { return fmt.Errorf("connecting to hookd gRPC server: %s", err) } diff --git a/cmd/hookd/main.go b/cmd/hookd/main.go index 67ca2b6e..98501698 100644 --- a/cmd/hookd/main.go +++ b/cmd/hookd/main.go @@ -76,7 +76,7 @@ func run() error { // OpenTelemetry tracerProvider, err := telemetry.New(programContext, "hookd", cfg.OpenTelemetryCollectorURL) if err != nil { - return fmt.Errorf("Setup OpenTelemetry: %w", err) + return fmt.Errorf("setup OpenTelemetry: %w", err) } // Clean shutdown for OT @@ -153,7 +153,14 @@ func run() error { }) go func() { - err := http.ListenAndServe(cfg.ListenAddress, router) + server := &http.Server{ + Addr: cfg.ListenAddress, + Handler: router, + ReadTimeout: 30 * time.Second, + WriteTimeout: 30 * time.Second, + IdleTimeout: 60 * time.Second, + } + err := server.ListenAndServe() if err != nil { log.Error(err) } diff --git a/cmd/leakdetect/main.go b/cmd/leakdetect/main.go index 0978e205..7e1f6f95 100644 --- a/cmd/leakdetect/main.go +++ b/cmd/leakdetect/main.go @@ -34,7 +34,7 @@ func main() { continue } - dest := make(map[string]interface{}) + dest := make(map[string]any) dec := json.NewDecoder(data.Body) err = dec.Decode(&dest) if err != nil { diff --git a/go.mod b/go.mod index 6d3f84fb..2385b52b 100644 --- a/go.mod +++ b/go.mod @@ -1,18 +1,29 @@ module github.com/nais/deploy -go 1.26.0 +go 1.26.4 + +tool ( + github.com/securego/gosec/v2/cmd/gosec + github.com/vektra/mockery/v2 + golang.org/x/tools/cmd/deadcode + golang.org/x/vuln/cmd/govulncheck + google.golang.org/grpc/cmd/protoc-gen-go-grpc + google.golang.org/protobuf/cmd/protoc-gen-go + honnef.co/go/tools/cmd/staticcheck + mvdan.cc/gofumpt +) require ( github.com/aymerick/raymond v2.0.2+incompatible github.com/ghodss/yaml v1.0.0 - github.com/go-chi/chi v4.1.2+incompatible + github.com/go-chi/chi/v5 v5.3.0 github.com/golang/protobuf v1.5.4 github.com/google/go-github/v41 v41.0.0 github.com/google/uuid v1.6.0 github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 - github.com/jackc/pgx/v4 v4.18.3 + github.com/jackc/pgx/v5 v5.10.0 github.com/lestrrat-go/jwx/v2 v2.1.4 - github.com/lib/pq v1.10.9 + github.com/lib/pq v1.12.3 github.com/nais/api/pkg/apiclient v0.0.0-20250203125351-77dc0579837a github.com/nais/liberator v0.0.0-20250318133902-16463bfb012c github.com/prometheus/client_golang v1.20.5 @@ -20,35 +31,38 @@ require ( github.com/spf13/pflag v1.0.6 github.com/spf13/viper v1.19.0 github.com/stretchr/testify v1.11.1 - github.com/vektra/mockery/v2 v2.53.2 - go.opentelemetry.io/otel v1.39.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0 - go.opentelemetry.io/otel/sdk v1.39.0 - go.opentelemetry.io/otel/trace v1.39.0 - golang.org/x/vuln v1.1.4 - google.golang.org/grpc v1.79.3 - google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 - google.golang.org/protobuf v1.36.10 + go.opentelemetry.io/otel v1.44.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0 + go.opentelemetry.io/otel/sdk v1.44.0 + go.opentelemetry.io/otel/trace v1.44.0 + google.golang.org/grpc v1.81.1 + google.golang.org/protobuf v1.36.11 gopkg.in/sakura-internet/go-rison.v3 v3.2.0 gopkg.in/yaml.v2 v2.4.0 - honnef.co/go/tools v0.6.0 k8s.io/api v0.32.2 k8s.io/apimachinery v0.32.2 k8s.io/client-go v0.32.2 - mvdan.cc/gofumpt v0.8.0 sigs.k8s.io/controller-runtime v0.20.2 ) require ( - github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c // indirect + cloud.google.com/go v0.123.0 // indirect + cloud.google.com/go/auth v0.19.0 // indirect + cloud.google.com/go/compute/metadata v0.9.0 // indirect + github.com/BurntSushi/toml v1.6.0 // indirect + github.com/anthropics/anthropic-sdk-go v1.46.0 // indirect + github.com/bahlo/generic-list-go v0.2.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/cenkalti/backoff/v4 v4.3.0 // indirect + github.com/buger/jsonparser v1.2.0 // indirect + github.com/ccojocar/zxcvbn-go v1.0.4 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/chigopher/pathlib v0.19.1 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect github.com/emicklei/go-restful/v3 v3.12.1 // indirect github.com/evanphx/json-patch/v5 v5.9.11 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.8.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect github.com/go-logr/logr v1.4.3 // indirect @@ -63,21 +77,22 @@ require ( github.com/google/go-cmp v0.7.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect + github.com/google/s2a-go v0.1.9 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect + github.com/googleapis/gax-go/v2 v2.22.0 // indirect + github.com/gookit/color v1.6.1 // indirect + github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/huandu/xstrings v1.5.0 // indirect github.com/iancoleman/strcase v0.3.0 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jackc/chunkreader/v2 v2.0.1 // indirect - github.com/jackc/pgconn v1.14.3 // indirect - github.com/jackc/pgio v1.0.0 // indirect + github.com/invopop/jsonschema v0.13.0 // indirect github.com/jackc/pgpassfile v1.0.0 // indirect - github.com/jackc/pgproto3/v2 v2.3.3 // indirect - github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a // indirect - github.com/jackc/pgtype v1.14.0 // indirect - github.com/jackc/puddle v1.3.0 // indirect + github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect + github.com/jackc/puddle/v2 v2.2.2 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect @@ -88,7 +103,7 @@ require ( github.com/lestrrat-go/iter v1.0.2 // indirect github.com/lestrrat-go/option v1.0.1 // indirect github.com/magiconair/properties v1.8.9 // indirect - github.com/mailru/easyjson v0.9.0 // indirect + github.com/mailru/easyjson v0.9.2 // indirect github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -97,8 +112,7 @@ require ( github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/onsi/ginkgo/v2 v2.22.1 // indirect - github.com/onsi/gomega v1.36.2 // indirect + github.com/openai/openai-go/v3 v3.37.0 // indirect github.com/pelletier/go-toml/v2 v2.2.3 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -108,45 +122,62 @@ require ( github.com/rs/zerolog v1.33.0 // indirect github.com/sagikazarmark/locafero v0.7.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/securego/gosec/v2 v2.27.1 // indirect github.com/segmentio/asm v1.2.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.12.0 // indirect github.com/spf13/cast v1.7.1 // indirect github.com/spf13/cobra v1.8.1 // indirect - github.com/stretchr/objx v0.5.2 // indirect + github.com/standard-webhooks/standard-webhooks/libraries v0.0.1 // indirect + github.com/stretchr/objx v0.5.3 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/tidwall/gjson v1.19.0 // indirect + github.com/tidwall/match v1.2.0 // indirect + github.com/tidwall/pretty v1.2.1 // indirect + github.com/tidwall/sjson v1.2.5 // indirect + github.com/vektra/mockery/v2 v2.53.2 // indirect + github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect github.com/x448/float16 v0.8.4 // indirect + github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.39.0 // indirect - go.opentelemetry.io/proto/otlp v1.5.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 // indirect + go.opentelemetry.io/otel/metric v1.44.0 // indirect + go.opentelemetry.io/proto/otlp v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.46.0 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/crypto v0.52.0 // indirect golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac // indirect golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 // indirect - golang.org/x/mod v0.30.0 // indirect - golang.org/x/net v0.48.0 // indirect - golang.org/x/oauth2 v0.34.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.39.0 // indirect - golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 // indirect - golang.org/x/term v0.38.0 // indirect - golang.org/x/text v0.32.0 // indirect - golang.org/x/time v0.10.0 // indirect - golang.org/x/tools v0.39.0 // indirect + golang.org/x/mod v0.36.0 // indirect + golang.org/x/net v0.55.0 // indirect + golang.org/x/oauth2 v0.36.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.45.0 // indirect + golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6 // indirect + golang.org/x/term v0.43.0 // indirect + golang.org/x/text v0.37.0 // indirect + golang.org/x/time v0.15.0 // indirect + golang.org/x/tools v0.45.0 // indirect golang.org/x/tools/go/expect v0.1.1-deprecated // indirect golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect + golang.org/x/vuln v1.1.4 // indirect gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 // indirect + google.golang.org/api v0.274.0 // indirect + google.golang.org/genai v1.58.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa // indirect + google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect + honnef.co/go/tools v0.6.0 // indirect k8s.io/apiextensions-apiserver v0.32.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect + mvdan.cc/gofumpt v0.8.0 // indirect sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.5.0 // indirect sigs.k8s.io/yaml v1.4.0 // indirect diff --git a/go.sum b/go.sum index f9d4d57c..8edc41e6 100644 --- a/go.sum +++ b/go.sum @@ -1,36 +1,49 @@ -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c h1:pxW6RcqyfI9/kWtOwnv/G+AzdKuy2ZrqINhenH4HyNs= -github.com/BurntSushi/toml v1.4.1-0.20240526193622-a339e1f7089c/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= +cloud.google.com/go v0.123.0 h1:2NAUJwPR47q+E35uaJeYoNhuNEM9kM8SjgRgdeOJUSE= +cloud.google.com/go v0.123.0/go.mod h1:xBoMV08QcqUGuPW65Qfm1o9Y4zKZBpGS+7bImXLTAZU= +cloud.google.com/go/auth v0.19.0 h1:DGYwtbcsGsT1ywuxsIoWi1u/vlks0moIblQHgSDgQkQ= +cloud.google.com/go/auth v0.19.0/go.mod h1:2Aph7BT2KnaSFOM0JDPyiYgNh6PL9vGMiP8CUIXZ+IY= +cloud.google.com/go/compute/metadata v0.9.0 h1:pDUj4QMoPejqq20dK0Pg2N4yG9zIkYGdBtwLoEkH9Zs= +cloud.google.com/go/compute/metadata v0.9.0/go.mod h1:E0bWwX5wTnLPedCKqk3pJmVgCBSM6qQI1yTBdEb3C10= +github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= +github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= +github.com/Masterminds/semver/v3 v3.5.0 h1:kQceYJfbupGfZOKZQg0kou0DgAKhzDg2NZPAwZ/2OOE= +github.com/Masterminds/semver/v3 v3.5.0/go.mod h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM= +github.com/anthropics/anthropic-sdk-go v1.46.0 h1:yl3n+el5ZfNgiCtQ7zQ7s/NXxB11YbrKXdc3uLPNWlU= +github.com/anthropics/anthropic-sdk-go v1.46.0/go.mod h1:bx5vWuHFuGPkELH8Z4KUiNSohFnUwScdpTyr+50myPo= github.com/aymerick/raymond v2.0.2+incompatible h1:VEp3GpgdAnv9B2GFyTvqgcKvY+mfKMjPOA3SbKLtnU0= github.com/aymerick/raymond v2.0.2+incompatible/go.mod h1:osfaiScAUVup+UC9Nfq76eWqDhXlp+4UYaA8uhTBO6g= +github.com/bahlo/generic-list-go v0.2.0 h1:5sz/EEAK+ls5wF+NeqDpk5+iNdMDXrh3z3nPnH1Wvgk= +github.com/bahlo/generic-list-go v0.2.0/go.mod h1:2KvAjgMlE5NNynlg/5iLrrCCZ2+5xWbdbCW3pNTGyYg= 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/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/buger/jsonparser v1.2.0 h1:4EFcvK1kD4jyj6YqNK6skK6w+y7FHHBR+XBCtxwu/6g= +github.com/buger/jsonparser v1.2.0/go.mod h1:6RYKKt7H4d4+iWqouImQ9R2FZql3VbhNgx27UK13J/0= +github.com/ccojocar/zxcvbn-go v1.0.4 h1:FWnCIRMXPj43ukfX000kvBZvV6raSxakYr1nzyNrUcc= +github.com/ccojocar/zxcvbn-go v1.0.4/go.mod h1:3GxGX+rHmueTUMvm5ium7irpyjmm7ikxYFOSJB21Das= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= 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/chigopher/pathlib v0.19.1 h1:RoLlUJc0CqBGwq239cilyhxPNLXTK+HXoASGyGznx5A= github.com/chigopher/pathlib v0.19.1/go.mod h1:tzC1dZLW8o33UQpWkNkhvPwL5n4yyFRFm/jL1YGWFvY= -github.com/cockroachdb/apd v1.1.0 h1:3LFP3629v+1aKXU5Q37mxmRxX/pIu1nijXydLShEq5I= -github.com/cockroachdb/apd v1.1.0/go.mod h1:8Sl8LxpKi29FqWXR16WEFZRNSz3SoPzUzeMeY4+DwBQ= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 h1:NMZiJj8QnKe1LgsbDayM4UoHwbvwDRwnI3hwNaAHRnc= github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= +github.com/dnaeon/go-vcr v1.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84= github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.9.11 h1:/8HVnzMq13/3x9TPvjG08wUGqBTmZBsCWzjTM0wiaDU= github.com/evanphx/json-patch/v5 v5.9.11/go.mod h1:3j+LviiESTElxA4p3EMKAB9HXj3/XEtnUf6OZxqIQTM= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M= @@ -39,10 +52,8 @@ github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-chi/chi v4.1.2+incompatible h1:fGFk2Gmi/YKXk0OmGfBh0WgmN3XB8lVnEyNz34tQRec= -github.com/go-chi/chi v4.1.2+incompatible/go.mod h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-chi/chi/v5 v5.3.0 h1:halUjDxhshgXHMrao5bB8eNBXo/rnzwr8m5m36glehM= +github.com/go-chi/chi/v5 v5.3.0/go.mod h1:R+tYY2hNuVUUjxoPtqUdgBqevM9s9njzkTLutVsOCto= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -58,14 +69,11 @@ github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+Gr github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI= github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= -github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -90,18 +98,30 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17 github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad h1:a6HEuzUHeKH6hwfN/ZoQgRgVIWFJljSWa/zetS2WTvg= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= +github.com/google/pprof v0.0.0-20260507013755-92041b743c96 h1:YDDnaZ9afWajDboPMt9Vikqca/yWAX7KAxVzb4lJU1M= +github.com/google/pprof v0.0.0-20260507013755-92041b743c96/go.mod h1:MxpfABSjhmINe3F1It9d+8exIHFvUqtLIRCdOGNXqiI= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= 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.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.22.0 h1:PjIWBpgGIVKGoCXuiCoP64altEJCj3/Ei+kSU5vlZD4= +github.com/googleapis/gax-go/v2 v2.22.0/go.mod h1:irWBbALSr0Sk3qlqb9SyJ1h68WjgeFuiOzI4Rqw5+aY= +github.com/gookit/assert v0.1.1 h1:lh3GcawXe/p+cU7ESTZ5Ui3Sm/x8JWpIis4/1aF0mY0= +github.com/gookit/assert v0.1.1/go.mod h1:jS5bmIVQZTIwk42uXl4lyj4iaaxx32tqH16CFj0VX2E= +github.com/gookit/color v1.6.1 h1:KoTnDxJPRgrL0SoX0f8rCFg2zI0t4E3GZZBMo2nN8LU= +github.com/gookit/color v1.6.1/go.mod h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs= +github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg= +github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0 h1:f4tggROQKKcnh4eItay6z/HbHLqghBxS8g7pyMhmDio= github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.0.0/go.mod h1:hKAkSgNkL0FII46ZkJcpVEAai4KV+swlIWCKfekd1pA= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0 h1:2cz5kSrxzMYHiWOBbKj8itQm+nRykkB8aMv4ThcHYHA= github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.0.0/go.mod h1:w9Y7gY31krpLmrVU5ZPG9H7l9fZuRu5/3R3S3FMtVQ4= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1 h1:VNqngBF40hVlDloBruUehVYC3ArSgIyScOAyMRqBxRg= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.25.1/go.mod h1:RBRO7fro65R6tjKzYgLAFo0t1QEXY1Dp+i/bvpRiqiQ= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0 h1:5VipnvEpbqr2gA2VbM+nYVbkIF28c5ZQfqCBQ5g2xfk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.29.0/go.mod h1:Hyl3n6Twe1hvtd9XUXDec4pTvgMSEixRuQKPTMH2bNs= github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/huandu/xstrings v1.5.0 h1:2ag3IFq9ZDANvthTwTiqSSZLjDc+BedvHPAp5tJy2TI= @@ -112,55 +132,16 @@ github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jackc/chunkreader v1.0.0/go.mod h1:RT6O25fNZIuasFJRyZ4R/Y2BbhasbmZXF9QQ7T3kePo= -github.com/jackc/chunkreader/v2 v2.0.0/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/chunkreader/v2 v2.0.1 h1:i+RDz65UE+mmpjTfyz0MoVTnzeYxroil2G82ki7MGG8= -github.com/jackc/chunkreader/v2 v2.0.1/go.mod h1:odVSm741yZoC3dpHEUXIqA9tQRhFrgOHwnPIn9lDKlk= -github.com/jackc/pgconn v0.0.0-20190420214824-7e0022ef6ba3/go.mod h1:jkELnwuX+w9qN5YIfX0fl88Ehu4XC3keFuOJJk9pcnA= -github.com/jackc/pgconn v0.0.0-20190824142844-760dd75542eb/go.mod h1:lLjNuW/+OfW9/pnVKPazfWOgNfH2aPem8YQ7ilXGvJE= -github.com/jackc/pgconn v0.0.0-20190831204454-2fabfa3c18b7/go.mod h1:ZJKsE/KZfsUgOEh9hBm+xYTstcNHg7UPMVJqRfQxq4s= -github.com/jackc/pgconn v1.8.0/go.mod h1:1C2Pb36bGIP9QHGBYCjnyhqu7Rv3sGshaQUvmfGIB/o= -github.com/jackc/pgconn v1.9.0/go.mod h1:YctiPyvzfU11JFxoXokUOOKQXQmDMoJL9vJzHH8/2JY= -github.com/jackc/pgconn v1.9.1-0.20210724152538-d89c8390a530/go.mod h1:4z2w8XhRbP1hYxkpTuBjTS3ne3J48K83+u0zoyvg2pI= -github.com/jackc/pgconn v1.14.3 h1:bVoTr12EGANZz66nZPkMInAV/KHD2TxH9npjXXgiB3w= -github.com/jackc/pgconn v1.14.3/go.mod h1:RZbme4uasqzybK2RK5c65VsHxoyaml09lx3tXOcO/VM= -github.com/jackc/pgio v1.0.0 h1:g12B9UwVnzGhueNavwioyEEpAmqMe1E/BN9ES+8ovkE= -github.com/jackc/pgio v1.0.0/go.mod h1:oP+2QK2wFfUWgr+gxjoBH9KGBb31Eio69xUb0w5bYf8= -github.com/jackc/pgmock v0.0.0-20190831213851-13a1b77aafa2/go.mod h1:fGZlG77KXmcq05nJLRkk0+p82V8B8Dw8KN2/V9c/OAE= -github.com/jackc/pgmock v0.0.0-20201204152224-4fe30f7445fd/go.mod h1:hrBW0Enj2AZTNpt/7Y5rr2xe/9Mn757Wtb2xeBzPv2c= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65 h1:DadwsjnMwFjfWc9y5Wi/+Zz7xoE5ALHsRQlOctkOiHc= -github.com/jackc/pgmock v0.0.0-20210724152146-4ad1a8207f65/go.mod h1:5R2h2EEX+qri8jOWMbJCtaPWkrrNc7OHwsp2TCqp7ak= +github.com/invopop/jsonschema v0.13.0 h1:KvpoAJWEjR3uD9Kbm2HWJmqsEaHt8lBUpd0qHcIi21E= +github.com/invopop/jsonschema v0.13.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0= github.com/jackc/pgpassfile v1.0.0 h1:/6Hmqy13Ss2zCq62VdNG8tM1wchn8zjSGOBJ6icpsIM= github.com/jackc/pgpassfile v1.0.0/go.mod h1:CEx0iS5ambNFdcRtxPj5JhEz+xB6uRky5eyVu/W2HEg= -github.com/jackc/pgproto3 v1.1.0/go.mod h1:eR5FA3leWg7p9aeAqi37XOTgTIbkABlvcPB3E5rlc78= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190420180111-c116219b62db/go.mod h1:bhq50y+xrl9n5mRYyCBFKkpRVTLYJVWeCc+mEAI3yXA= -github.com/jackc/pgproto3/v2 v2.0.0-alpha1.0.20190609003834-432c2951c711/go.mod h1:uH0AWtUmuShn0bcesswc4aBTWGvw0cAxIJp+6OB//Wg= -github.com/jackc/pgproto3/v2 v2.0.0-rc3/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.0-rc3.0.20190831210041-4c03ce451f29/go.mod h1:ryONWYqW6dqSg1Lw6vXNMXoBJhpzvWKnT95C46ckYeM= -github.com/jackc/pgproto3/v2 v2.0.6/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.1.1/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgproto3/v2 v2.3.3 h1:1HLSx5H+tXR9pW3in3zaztoEwQYRC9SQaYUHjTSUOag= -github.com/jackc/pgproto3/v2 v2.3.3/go.mod h1:WfJCnwN3HIg9Ish/j3sgWXnAfK8A9Y0bwXYU5xKaEdA= -github.com/jackc/pgservicefile v0.0.0-20200714003250-2b9c44734f2b/go.mod h1:vsD4gTJCa9TptPL8sPkXrLZ+hDuNrZCnj29CQpr4X1E= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a h1:bbPeKD0xmW/Y25WS6cokEszi5g+S0QxI/d45PkRi7Nk= -github.com/jackc/pgservicefile v0.0.0-20221227161230-091c0ba34f0a/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= -github.com/jackc/pgtype v0.0.0-20190421001408-4ed0de4755e0/go.mod h1:hdSHsc1V01CGwFsrv11mJRHWJ6aifDLfdV3aVjFF0zg= -github.com/jackc/pgtype v0.0.0-20190824184912-ab885b375b90/go.mod h1:KcahbBH1nCMSo2DXpzsoWOAfFkdEtEJpPbVLq8eE+mc= -github.com/jackc/pgtype v0.0.0-20190828014616-a8802b16cc59/go.mod h1:MWlu30kVJrUS8lot6TQqcg7mtthZ9T0EoIBFiJcmcyw= -github.com/jackc/pgtype v1.8.1-0.20210724151600-32e20a603178/go.mod h1:C516IlIV9NKqfsMCXTdChteoXmwgUceqaLfjg2e3NlM= -github.com/jackc/pgtype v1.14.0 h1:y+xUdabmyMkJLyApYuPj38mW+aAIqCe5uuBB51rH3Vw= -github.com/jackc/pgtype v1.14.0/go.mod h1:LUMuVrfsFfdKGLw+AFFVv6KtHOFMwRgDDzBt76IqCA4= -github.com/jackc/pgx/v4 v4.0.0-20190420224344-cc3461e65d96/go.mod h1:mdxmSJJuR08CZQyj1PVQBHy9XOp5p8/SHH6a0psbY9Y= -github.com/jackc/pgx/v4 v4.0.0-20190421002000-1b8f0016e912/go.mod h1:no/Y67Jkk/9WuGR0JG/JseM9irFbnEPbuWV2EELPNuM= -github.com/jackc/pgx/v4 v4.0.0-pre1.0.20190824185557-6972a5742186/go.mod h1:X+GQnOEnf1dqHGpw7JmHqHc1NxDoalibchSk9/RWuDc= -github.com/jackc/pgx/v4 v4.12.1-0.20210724153913-640aa07df17c/go.mod h1:1QD0+tgSXP7iUjYm9C1NxKhny7lq6ee99u/z+IHFcgs= -github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= -github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= -github.com/jackc/puddle v0.0.0-20190413234325-e4ced69a3a2b/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v0.0.0-20190608224051-11cab39313c9/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= -github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0= -github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 h1:iCEnooe7UlwOQYpKFhBabPMi4aNAfoODPEFNiAnClxo= +github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761/go.mod h1:5TJZWKEWniPve33vlWYSoGYefn3gLQRzjfDlhSJ9ZKM= +github.com/jackc/pgx/v5 v5.10.0 h1:VhSvgU2jSli8o3AqIEOTJr7rZwAEUVo4E4XhR94Zfr0= +github.com/jackc/pgx/v5 v5.10.0/go.mod h1:mal1tBGAFfLHvZzaYh77YS/eC6IX9OWbRV1QIIM0Jn4= +github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= +github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/jinzhu/copier v0.4.0 h1:w3ciUoD19shMCRargcpm0cm91ytaBhDvuRpz1ODO/U8= github.com/jinzhu/copier v0.4.0/go.mod h1:DfbEm0FYsaqBcKcFuvmOZb218JkPGtvSHsKg8S8hyyg= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= @@ -171,14 +152,8 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= @@ -195,24 +170,15 @@ github.com/lestrrat-go/jwx/v2 v2.1.4 h1:uBCMmJX8oRZStmKuMMOFb0Yh9xmEMgNJLgjuKKt4 github.com/lestrrat-go/jwx/v2 v2.1.4/go.mod h1:nWRbDFR1ALG2Z6GJbBXzfQaYyvn751KuuyySN2yR6is= github.com/lestrrat-go/option v1.0.1 h1:oAzP2fvZGQKWkvHa1/SAcFolBEca1oN+mQ7eooNBEYU= github.com/lestrrat-go/option v1.0.1/go.mod h1:5ZHFbivi4xwXxhxY9XHDe2FHo6/Z7WWmtT7T5nBBp3I= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.1.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.2/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= -github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.12.3 h1:tTWxr2YLKwIvK90ZXEw8GP7UFHtcbTtty8zsI+YjrfQ= +github.com/lib/pq v1.12.3/go.mod h1:/p+8NSbOcwzAEI7wiMXFlgydTwcgTr3OSKMsD2BitpA= github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM= github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4= -github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= -github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcnceauSikq3lYCQ= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mailru/easyjson v0.9.2 h1:dX8U45hQsZpxd80nLvDGihsQ/OxlvTkVUXH2r/8cb2M= +github.com/mailru/easyjson v0.9.2/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= -github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.7/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= @@ -234,13 +200,14 @@ github.com/nais/api/pkg/apiclient v0.0.0-20250203125351-77dc0579837a h1:0Xcuog4M github.com/nais/api/pkg/apiclient v0.0.0-20250203125351-77dc0579837a/go.mod h1:0Tle2/7Ub7oryydDjLbvppxs+GgxuRBV1C+7hIAPV+Y= github.com/nais/liberator v0.0.0-20250318133902-16463bfb012c h1:rX9eQ5Ie+mesMLZaYVo2YXPYI4RT0b42QS5UHFsVM0U= github.com/nais/liberator v0.0.0-20250318133902-16463bfb012c/go.mod h1:F3YcGoCG6HAyX5R2tgGH79/R0LBAU2xtRgRaveSXKiA= -github.com/onsi/ginkgo/v2 v2.22.1 h1:QW7tbJAUDyVDVOM5dFa7qaybo+CRfR7bemlQUN6Z8aM= -github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM= -github.com/onsi/gomega v1.36.2 h1:koNYke6TVk6ZmnyHrCXba/T/MoLBXFjeC1PtvYgw0A8= -github.com/onsi/gomega v1.36.2/go.mod h1:DdwyADRjrc825LhMEkD76cHR5+pUnjhUN8GlHlRPHzY= +github.com/onsi/ginkgo/v2 v2.29.0 h1:rfh+ZFjgJhYWRoIqVf3Uwx/W20yLrcrE2h2GmYVRaag= +github.com/onsi/ginkgo/v2 v2.29.0/go.mod h1:+aXOY+vzZ5mu2iI2HpTZUPmM//oQfsNFX6gU9kNcA44= +github.com/onsi/gomega v1.41.0 h1:OwKp4pXNgVxf6sCplzYo794OFNuoL2q2SBMU5NSWOjA= +github.com/onsi/gomega v1.41.0/go.mod h1:M/Uqpu/8qTjtzCLUA2zJHX9Iilrau25x1PdoSRbWh5A= +github.com/openai/openai-go/v3 v3.37.0 h1:4OG68yZgnxZpwzebO+ZDUNkFJKKwKgzilMQq30nsouE= +github.com/openai/openai-go/v3 v3.37.0/go.mod h1:cdufnVK14cWcT9qA1rRtrXx4FTRsgbDPW7Ia7SS5cZo= github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M= github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -254,13 +221,9 @@ github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ= github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc= -github.com/rs/xid v1.2.1/go.mod h1:+uKXf+4Djp6Md1KODXJxgGQPKngRmWyn10oCKFzNHOQ= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.13.0/go.mod h1:YbFCdg8HfsridGWAh22vktObvhZbQsZXe4/zB0OKkWU= -github.com/rs/zerolog v1.15.0/go.mod h1:xYTKnLHcpfU2225ny5qZjxnj9NvkumZYjJHlAThCjNc= github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -268,14 +231,12 @@ github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsF github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2 h1:KRzFb2m7YtdldCEkzs6KqmJw4nqEVZGK7IN2kJkjTuQ= +github.com/santhosh-tekuri/jsonschema/v6 v6.0.2/go.mod h1:JXeL+ps8p7/KNMjDQk3TCwPpBy0wYklyWTfbkIzdIFU= +github.com/securego/gosec/v2 v2.27.1 h1:bg4lZnpCCpC8e5l0K+ADF5gG91jmT2LQgOcOflwBfJI= +github.com/securego/gosec/v2 v2.27.1/go.mod h1:lbgwsogcxq9aoN62Bk/vcdWwemFjlT5NPF/D/dH4+Ho= github.com/segmentio/asm v1.2.0 h1:9BQrFxC+YOHJlTlHGkTrFWf59nbL3XnCoFLTwDCI7ys= github.com/segmentio/asm v1.2.0/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= -github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ= -github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= @@ -291,15 +252,12 @@ github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI= github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg= +github.com/standard-webhooks/standard-webhooks/libraries v0.0.1 h1:uOfcYT+3QungH6tIGSVCR/Y3KJmgJiHcojJbMTPDZAI= +github.com/standard-webhooks/standard-webhooks/libraries v0.0.1/go.mod h1:L1MQhA6x4dn9r007T033lsaZMv9EmBAdXyU/+EF40fo= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4= +github.com/stretchr/objx v0.5.3/go.mod h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -307,99 +265,87 @@ github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/tidwall/gjson v1.14.2/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= +github.com/tidwall/gjson v1.19.0 h1:xwxm7n691Uf3u5OFjzngavjGTh55KX5q/9w9xHW88JU= +github.com/tidwall/gjson v1.19.0/go.mod h1:V37/opeE/JbLUOfH0QTXiNez2l0RUjYUhpT4szFQAfc= +github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/match v1.2.0 h1:0pt8FlkOwjN2fPt4bIl4BoNxb98gGHN2ObFEDkrfZnM= +github.com/tidwall/match v1.2.0/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= +github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4= +github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= +github.com/tidwall/sjson v1.2.5 h1:kLy8mja+1c9jlljvWTlSazM7cKDRfJuR/bOJhcY5NcY= +github.com/tidwall/sjson v1.2.5/go.mod h1:Fvgq9kS/6ociJEDnK0Fk1cpYF4FIW6ZF7LAe+6jwd28= github.com/vektra/mockery/v2 v2.53.2 h1:4G/4fl9x722Yb8hLqH1YU3XZNRJFwl5KUMvpkmAyuC8= github.com/vektra/mockery/v2 v2.53.2/go.mod h1:UJT+mgXhCcOCHXTnM5cJHCZL+d76BYB+EbY1sFztEB8= +github.com/wk8/go-ordered-map/v2 v2.1.8 h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc= +github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no= +github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q= 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/otel v1.39.0 h1:8yPrr/S0ND9QEfTfdP9V+SiwT4E0G7Y5MO7p85nis48= -go.opentelemetry.io/otel v1.39.0/go.mod h1:kLlFTywNWrFyEdH0oj2xK0bFYZtHRYUdv1NklR/tgc8= -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/otlptracehttp v1.34.0 h1:BEj3SPM81McUZHYjRS5pEgNgnmzGJ5tRpU5krWnV8Bs= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.34.0/go.mod h1:9cKLGBDzI/F3NoHLQGm4ZrYdIHsvGt6ej6hUowxY0J4= -go.opentelemetry.io/otel/metric v1.39.0 h1:d1UzonvEZriVfpNKEVmHXbdf909uGTOQjA0HF0Ls5Q0= -go.opentelemetry.io/otel/metric v1.39.0/go.mod h1:jrZSWL33sD7bBxg1xjrqyDjnuzTUB0x1nBERXd7Ftcs= -go.opentelemetry.io/otel/sdk v1.39.0 h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18= -go.opentelemetry.io/otel/sdk v1.39.0/go.mod h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE= -go.opentelemetry.io/otel/sdk/metric v1.39.0 h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8= -go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew= -go.opentelemetry.io/otel/trace v1.39.0 h1:2d2vfpEDmCJ5zVYz7ijaJdOF59xLomrvj7bjt6/qCJI= -go.opentelemetry.io/otel/trace v1.39.0/go.mod h1:88w4/PnZSazkGzz/w84VHpQafiU4EtqqlVdxWy+rNOA= -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/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0 h1:8tvICD4vSTOOsNrsI4Ljf6C+6UKvpTEH5XY3JMoyPoo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.69.0/go.mod h1:z9+yiacE0IHRqM4qFfkbt/JYlmYXgss8GY/jXoNuPJI= +go.opentelemetry.io/otel v1.44.0 h1:JjwHmHpA4iZ3wBxluu2fbbE7j4kqlE8jXyAyPXH7HqU= +go.opentelemetry.io/otel v1.44.0/go.mod h1:BMgjTHL9WPRlRjL2oZCBTL4whCGtXch2H4BhOPIAyYc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0 h1:4YsVu3B8+3qtWYYrsUYgn0OG78pN0rnNPRGX4SbokQI= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.44.0/go.mod h1:+wnlSn0mD1ADVMe3v9Z/WIaiz6q6gL2J/ejaAmdmv80= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0 h1:lgh3PiVrRUWMLOVSkQicxzZll5NjF1r+AtsX1XRIHw0= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.44.0/go.mod h1:5Cnhth3m/AgOeTgE3ex12pPmiu/gGtZit03kSzx9X7s= +go.opentelemetry.io/otel/metric v1.44.0 h1:1w0gILTcHdr3YI+ixLyjemwrVnsMURbTZFrSYCdDdmc= +go.opentelemetry.io/otel/metric v1.44.0/go.mod h1:8O7hanEPBNgEMmybD3s2VBKcgWOCsA6tzHBPODAiquo= +go.opentelemetry.io/otel/sdk v1.44.0 h1:nHYwb9lK+fJPU/dnT6s7W7Z8itMWyqrnVfbheVYrZ58= +go.opentelemetry.io/otel/sdk v1.44.0/go.mod h1:Osuydd3Se74nqjAKxid74N5eC+jfEqfTegHRnq58oK0= +go.opentelemetry.io/otel/sdk/metric v1.44.0 h1:3LlKgI+VjbVsjNRFZJZAJ30WjXC5VkNRks6si09iEfI= +go.opentelemetry.io/otel/sdk/metric v1.44.0/go.mod h1:5B5pMARnXxKhltooO4xUuCBorl65a4EpnTalObqOigA= +go.opentelemetry.io/otel/trace v1.44.0 h1:jxF5CsGYCe74MCRx2X4g7WsY/VBKRqqpNvXlX/6gtIk= +go.opentelemetry.io/otel/trace v1.44.0/go.mod h1:oLl1jrMQAVo6v3GAggN+1VH9VIz9iUSvW53sW1Q8PIE= +go.opentelemetry.io/proto/otlp v1.10.0 h1:IQRWgT5srOCYfiWnpqUYz9CVmbO8bFmKcwYxpuCSL2g= +go.opentelemetry.io/proto/otlp v1.10.0/go.mod h1:/CV4QoCR/S9yaPj8utp3lvQPoqMtxXdzn7ozvvozVqk= 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.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.9.1/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +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-20190411191339-88737f569e3a/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201203163018-be400aefbc4c/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU= -golang.org/x/crypto v0.46.0/go.mod h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0= +golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988= +golang.org/x/crypto v0.52.0/go.mod h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc= golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac h1:l5+whBCLH3iH2ZNHYLbAe58bo7yrN4mVcnkHDYz5vvs= golang.org/x/exp v0.0.0-20250210185358-939b2ce775ac/go.mod h1:hH+7mtFmImwwcMvScyxUhjuVHR3HGaDPMn9rMSUUbxo= golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678 h1:1P7xPZEwZMoBoz0Yze5Nx2/4pxj6nw9ZqHWXqP0iRgQ= golang.org/x/exp/typeparams v0.0.0-20231108232855-2478ac86f678/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk= -golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/mod v0.36.0 h1:JJjpVx6myfUsUdAzZuOSTTmRE0PfZeNWzzvKrP7amb4= +golang.org/x/mod v0.36.0/go.mod h1:moc6ELqsWcOw5Ef3xVprK5ul/MvtVvkIXLziUOICjUQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU= -golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY= +golang.org/x/net v0.55.0 h1:bcvxaJn3e1U6InsFWt1JUq1aSjnRxLzT2rtD2KfkDF8= +golang.org/x/net v0.55.0/go.mod h1:L5U2KuzuOe1lY7Z+aWVIKK6qEeJXnXV9yzGA+WCHJww= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= -golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs= +golang.org/x/oauth2 v0.36.0/go.mod h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= -golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4= +golang.org/x/sync v0.20.0/go.mod h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190403152447-81d4e9dc473e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -407,84 +353,73 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk= -golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54 h1:E2/AqCUMZGgd73TQkxUMcMla25GB9i/5HOdLr+uH7Vo= -golang.org/x/telemetry v0.0.0-20251111182119-bc8e575c7b54/go.mod h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY= +golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= +golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6 h1:HjU6IWBiAgRIdAJ9/y1rwCn+UELEmwV+VsTLzj/W4sE= +golang.org/x/telemetry v0.0.0-20260508192327-42602be52be6/go.mod h1:Eqhaxk/wZsWEH8CRxLwj6xzEJbz7k1EFGqx7nyCoabE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q= -golang.org/x/term v0.38.0/go.mod h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg= +golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4= +golang.org/x/term v0.43.0/go.mod h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU= -golang.org/x/text v0.32.0/go.mod h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY= -golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4= -golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc= +golang.org/x/text v0.37.0/go.mod h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38= +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-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425163242-31fd60d6bfdc/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190823170909-c4a336ef6a2f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ= -golang.org/x/tools v0.39.0/go.mod h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ= +golang.org/x/tools v0.45.0 h1:18qN3FAooORvApf5XjCXgsuayZOEtXf6JK18I3+ONa8= +golang.org/x/tools v0.45.0/go.mod h1:LuUGqqaXcXMEFEruIVJVm5mgDD8vww/z/SR1gQ4uE/0= 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/vuln v1.1.4 h1:Ju8QsuyhX3Hk8ma3CesTbO8vfJD9EvUBgHvkxHBzj0I= golang.org/x/vuln v1.1.4/go.mod h1:F+45wmU18ym/ca5PLTPLsSzr2KppzswxPP603ldA67s= -golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= 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= +gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4= +gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E= +google.golang.org/api v0.274.0 h1:aYhycS5QQCwxHLwfEHRRLf9yNsfvp1JadKKWBE54RFA= +google.golang.org/api v0.274.0/go.mod h1:JbAt7mF+XVmWu6xNP8/+CTiGH30ofmCmk9nM8d8fHew= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217 h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls= -google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217 h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217/go.mod h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk= -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/genai v1.58.0 h1:MNA3ZkRyr7MnRwZ9RNZ60p4+UMKV3yYRw6pyHq4pp0U= +google.golang.org/genai v1.58.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7 h1:XzmzkmB14QhVhgnawEVsOn6OFsnpyxNPRY9QV01dNB0= +google.golang.org/genproto v0.0.0-20260319201613-d00831a3d3e7/go.mod h1:L43LFes82YgSonw6iTXTxXUX1OlULt4AQtkik4ULL/I= +google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa h1:Kjn0N0tCrDgiAFW+lGO4JZ3ck44CehvJQMAwj9QF0G8= +google.golang.org/genproto/googleapis/api v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:q4lMZS6kskjT5HvCPrnnypcDPVJqT/f4nfxmkE7gryY= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa h1:mZHHdPZl0dbGHCflZgAq/Q468DWVFcU2whhB2KAo8fk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260526163538-3dc84a4a5aaa/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/grpc v1.81.1 h1:VnnIIZ88UzOOKLukQi+ImGz8O1Wdp8nAGGnvOfEIWQQ= +google.golang.org/grpc v1.81.1/go.mod h1:xGH9GfzOyMTGIOXBJmXt+BX/V0kcdQbdcuwQ/zNw42I= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1 h1:F29+wU6Ee6qgu9TddPgooOdaqsxTMunOoj8KA5yuS5A= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.5.1/go.mod h1:5KF+wpkbTSbGcR9zteSqZV6fqFOWBl4Yde8En8MryZA= -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-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= -gopkg.in/inconshreveable/log15.v2 v2.0.0-20180818164646-67afb5ed74ec/go.mod h1:aPpfJ7XW+gOuirDoZ8gHhLh3kZ1B08FtV2bbmy7Jv3s= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/sakura-internet/go-rison.v3 v3.2.0 h1:2ZPbR3eCPNLdylCftDA28upUsT8Uef10B47LpVoPtRc= gopkg.in/sakura-internet/go-rison.v3 v3.2.0/go.mod h1:Fx62gtnKjvBkcyvCUEi8kyd3JOFxBLa0GrtcAVcF5uA= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.6.0 h1:TAODvD3knlq75WCp2nyGJtT4LeRV/o7NN9nYPeVJXf8= honnef.co/go/tools v0.6.0/go.mod h1:3puzxxljPCe8RGJX7BIy1plGbxEOZni5mR2aXe3/uk4= k8s.io/api v0.32.2 h1:bZrMLEkgizC24G9eViHGOPbW+aRo9duEISRIJKfdJuw= diff --git a/mise.lock b/mise.lock new file mode 100644 index 00000000..282b3b5d --- /dev/null +++ b/mise.lock @@ -0,0 +1,129 @@ +# @generated - this file is auto-generated by `mise lock` https://mise.en.dev/dev-tools/mise-lock.html + +[[tools.go]] +version = "1.26.4" +backend = "core:go" + +[tools.go."platforms.linux-arm64"] +checksum = "sha256:ef758ae7c6cf9267c9c0ef080b8965f453d89ab2d25d9eb22de4405925238768" +url = "https://dl.google.com/go/go1.26.4.linux-arm64.tar.gz" + +[tools.go."platforms.linux-arm64-musl"] +checksum = "sha256:ef758ae7c6cf9267c9c0ef080b8965f453d89ab2d25d9eb22de4405925238768" +url = "https://dl.google.com/go/go1.26.4.linux-arm64.tar.gz" + +[tools.go."platforms.linux-x64"] +checksum = "sha256:1153d3d50e0ac764b447adfe05c2bcf08e889d42a02e0fe0259bd47f6733ad7f" +url = "https://dl.google.com/go/go1.26.4.linux-amd64.tar.gz" + +[tools.go."platforms.linux-x64-musl"] +checksum = "sha256:1153d3d50e0ac764b447adfe05c2bcf08e889d42a02e0fe0259bd47f6733ad7f" +url = "https://dl.google.com/go/go1.26.4.linux-amd64.tar.gz" + +[tools.go."platforms.macos-arm64"] +checksum = "sha256:b62ad2b6d7d2464f12a5bcad7ff47f19d08325773b5efd21610e445a05a9bf53" +url = "https://dl.google.com/go/go1.26.4.darwin-arm64.tar.gz" + +[tools.go."platforms.macos-x64"] +checksum = "sha256:05dc9b5f9997744520aaebb3d5deaa7c755371aebbfb7f97c2511a9f3367538d" +url = "https://dl.google.com/go/go1.26.4.darwin-amd64.tar.gz" + +[tools.go."platforms.windows-x64"] +checksum = "sha256:3ca8fb4630b07c419cbdd51f754e31363cfcfb83b3a5354d9e895c90be2cc345" +url = "https://dl.google.com/go/go1.26.4.windows-amd64.zip" + +[[tools.protoc]] +version = "34.1" +backend = "aqua:protocolbuffers/protobuf/protoc" + +[tools.protoc."platforms.linux-arm64"] +checksum = "sha256:31c5e9e3c7bf013cf41fb97765ee255c140024a6b175b6cc9b64beddd7c23ba7" +url = "https://github.com/protocolbuffers/protobuf/releases/download/v34.1/protoc-34.1-linux-aarch_64.zip" + +[tools.protoc."platforms.linux-arm64-musl"] +checksum = "sha256:31c5e9e3c7bf013cf41fb97765ee255c140024a6b175b6cc9b64beddd7c23ba7" +url = "https://github.com/protocolbuffers/protobuf/releases/download/v34.1/protoc-34.1-linux-aarch_64.zip" + +[tools.protoc."platforms.linux-x64"] +checksum = "sha256:af27ea66cd26938fe48587804ca7d4817457a08350021a1c6e23a27ccc8c6904" +url = "https://github.com/protocolbuffers/protobuf/releases/download/v34.1/protoc-34.1-linux-x86_64.zip" + +[tools.protoc."platforms.linux-x64-musl"] +checksum = "sha256:af27ea66cd26938fe48587804ca7d4817457a08350021a1c6e23a27ccc8c6904" +url = "https://github.com/protocolbuffers/protobuf/releases/download/v34.1/protoc-34.1-linux-x86_64.zip" + +[tools.protoc."platforms.macos-arm64"] +checksum = "sha256:2c7e92b8b578916937df132b3032e2e8e6c170862ecf7a8333094a6f3d03650c" +url = "https://github.com/protocolbuffers/protobuf/releases/download/v34.1/protoc-34.1-osx-aarch_64.zip" + +[tools.protoc."platforms.macos-x64"] +checksum = "sha256:ab124429c1f49951f03b6c0c0e911fec04e2c7c20de5c935e0cde7353bbd016c" +url = "https://github.com/protocolbuffers/protobuf/releases/download/v34.1/protoc-34.1-osx-x86_64.zip" + +[tools.protoc."platforms.windows-x64"] +checksum = "sha256:6d7ebdc75e9c1f0026d4fb28f17ef1d0aae77d36744d83a9e052d79ba493724f" +url = "https://github.com/protocolbuffers/protobuf/releases/download/v34.1/protoc-34.1-win64.zip" + +[[tools.protoc-gen-go]] +version = "1.36.11" +backend = "aqua:protocolbuffers/protobuf-go/protoc-gen-go" + +[tools.protoc-gen-go."platforms.linux-arm64"] +checksum = "sha256:8760755b06cbfe6e64478bbe16b60e518d89d059ccaf667df05398d19636cbad" +url = "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.36.11/protoc-gen-go.v1.36.11.linux.arm64.tar.gz" + +[tools.protoc-gen-go."platforms.linux-arm64-musl"] +checksum = "sha256:8760755b06cbfe6e64478bbe16b60e518d89d059ccaf667df05398d19636cbad" +url = "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.36.11/protoc-gen-go.v1.36.11.linux.arm64.tar.gz" + +[tools.protoc-gen-go."platforms.linux-x64"] +checksum = "sha256:6ad8f8fc11b96dc4deb176f7ee84af40e15d32e4608594bcc3534b7824a3dc71" +url = "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.36.11/protoc-gen-go.v1.36.11.linux.amd64.tar.gz" + +[tools.protoc-gen-go."platforms.linux-x64-musl"] +checksum = "sha256:6ad8f8fc11b96dc4deb176f7ee84af40e15d32e4608594bcc3534b7824a3dc71" +url = "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.36.11/protoc-gen-go.v1.36.11.linux.amd64.tar.gz" + +[tools.protoc-gen-go."platforms.macos-arm64"] +checksum = "sha256:31a1c65833213a925f6771dd84b749ac5b3f4de30be3694d8ec19e23fc44acbf" +url = "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.36.11/protoc-gen-go.v1.36.11.darwin.arm64.tar.gz" + +[tools.protoc-gen-go."platforms.macos-x64"] +checksum = "sha256:e41b9fc3e6b80a943caee6736f8f764e1059fb6ff9ef4f423b62645a9abc8f9f" +url = "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.36.11/protoc-gen-go.v1.36.11.darwin.amd64.tar.gz" + +[tools.protoc-gen-go."platforms.windows-x64"] +checksum = "sha256:045cac56df5fae04912d39b1e9f8e568f8a1eaf0adc800a6e8bfbe97fd1bef9c" +url = "https://github.com/protocolbuffers/protobuf-go/releases/download/v1.36.11/protoc-gen-go.v1.36.11.windows.amd64.zip" + +[[tools.protoc-gen-go-grpc]] +version = "1.6.1" +backend = "aqua:grpc/grpc-go/protoc-gen-go-grpc" + +[tools.protoc-gen-go-grpc."platforms.linux-arm64"] +checksum = "sha256:71f64c5448fe57425002e77a3b85a317dc1ffb276c094ca19f9be3cf3dba066d" +url = "https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v1.6.1/protoc-gen-go-grpc.v1.6.1.linux.arm64.tar.gz" + +[tools.protoc-gen-go-grpc."platforms.linux-arm64-musl"] +checksum = "sha256:71f64c5448fe57425002e77a3b85a317dc1ffb276c094ca19f9be3cf3dba066d" +url = "https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v1.6.1/protoc-gen-go-grpc.v1.6.1.linux.arm64.tar.gz" + +[tools.protoc-gen-go-grpc."platforms.linux-x64"] +checksum = "sha256:d422c203a0f4f050d647c58a11b8854535956b6c9aa655dd8a50b976a2b552f9" +url = "https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v1.6.1/protoc-gen-go-grpc.v1.6.1.linux.amd64.tar.gz" + +[tools.protoc-gen-go-grpc."platforms.linux-x64-musl"] +checksum = "sha256:d422c203a0f4f050d647c58a11b8854535956b6c9aa655dd8a50b976a2b552f9" +url = "https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v1.6.1/protoc-gen-go-grpc.v1.6.1.linux.amd64.tar.gz" + +[tools.protoc-gen-go-grpc."platforms.macos-arm64"] +checksum = "sha256:55d96d01811710865b0531de287d60699b89c54d81c6127f07bf492a3ad08809" +url = "https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v1.6.1/protoc-gen-go-grpc.v1.6.1.darwin.arm64.tar.gz" + +[tools.protoc-gen-go-grpc."platforms.macos-x64"] +checksum = "sha256:a3e45283e7cf0006078996bc870d0388cd22ac88b84811ea67ff8e793adf8b7c" +url = "https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v1.6.1/protoc-gen-go-grpc.v1.6.1.darwin.amd64.tar.gz" + +[tools.protoc-gen-go-grpc."platforms.windows-x64"] +checksum = "sha256:250bffb33af3a64cf628cda08b554e287067a0c776cd7b039865dcf8a598df32" +url = "https://github.com/grpc/grpc-go/releases/download/cmd/protoc-gen-go-grpc/v1.6.1/protoc-gen-go-grpc.v1.6.1.windows.amd64.tar.gz" diff --git a/mise.toml b/mise.toml new file mode 100644 index 00000000..c8933676 --- /dev/null +++ b/mise.toml @@ -0,0 +1,169 @@ +[tools] +go = "1.26" +protoc = "latest" +protoc-gen-go = "1.36.11" +protoc-gen-go-grpc = "latest" + +[tasks.build] +description = "Build all binaries (hookd, deployd, deploy)" +depends = ["build:hookd", "build:deployd", "build:deploy"] + +[tasks."build:hookd"] +description = "Build hookd" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +go build -o bin/hookd -ldflags "-s ${LDFLAGS}" cmd/hookd/main.go +""" + +[tasks."build:deployd"] +description = "Build deployd" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +go build -o bin/deployd -ldflags "-s ${LDFLAGS}" cmd/deployd/main.go +""" + +[tasks."build:deploy"] +description = "Build deploy CLI" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +go build -o bin/deploy -ldflags "-s ${LDFLAGS}" cmd/deploy/main.go +""" + +[tasks."build:crypt"] +description = "Build crypt" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +go build -o bin/crypt -ldflags "-s ${LDFLAGS}" cmd/crypt/main.go +""" + +[tasks."build:alpine"] +description = "Build all binaries for Alpine (CGO disabled)" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +go build -a -installsuffix cgo -o bin/hookd -ldflags "-s ${LDFLAGS}" ./cmd/hookd/ +go build -a -installsuffix cgo -o bin/deployd -ldflags "-s ${LDFLAGS}" ./cmd/deployd/ +go build -a -installsuffix cgo -o bin/deploy -ldflags "-s ${LDFLAGS}" ./cmd/deploy/ +""" + +[tasks."release:linux"] +description = "Build deploy CLI for Linux/amd64" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +GOOS=linux GOARCH=amd64 go build -o deploy-linux -ldflags="-s -w ${LDFLAGS}" cmd/deploy/main.go +""" + +[tasks."release:darwin"] +description = "Build deploy CLI for macOS/amd64" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +GOOS=darwin GOARCH=amd64 go build -o deploy-darwin -ldflags="-s -w ${LDFLAGS}" cmd/deploy/main.go +""" + +[tasks."release:windows"] +description = "Build deploy CLI for Windows/amd64" +run = """ +LAST_COMMIT=$(git rev-parse --short HEAD) +DATE=$(date "+%Y-%m-%d") +BUILDTIME=$(date "+%s") +LDFLAGS="-X github.com/nais/deploy/pkg/version.Revision=${LAST_COMMIT} -X github.com/nais/deploy/pkg/version.Date=${DATE} -X github.com/nais/deploy/pkg/version.BuildUnixTime=${BUILDTIME}" +GOOS=windows GOARCH=amd64 go build -o deploy-windows -ldflags="-s -w ${LDFLAGS}" cmd/deploy/main.go +""" + +[tasks.proto] +description = "Generate protobuf code" +run = "protoc --go-grpc_opt=paths=source_relative --go_opt=paths=source_relative --go_out=. --go-grpc_out=. pkg/pb/deployment.proto" + +[tasks.mocks] +description = "Generate mocks" +run = """ +go tool github.com/vektra/mockery/v2 --inpackage --all --case snake --srcpkg ./pkg/hookd/database +go tool github.com/vektra/mockery/v2 --inpackage --all --case snake --srcpkg ./pkg/grpc/dispatchserver +go tool github.com/vektra/mockery/v2 --inpackage --all --case snake --srcpkg ./pkg/pb +""" + +[tasks.migration] +description = "Run go generate" +run = "go generate ./..." + +[tasks.fmt] +description = "Format all code" +depends = ["fmt:go", "fmt:gofix"] + +[tasks."fmt:go"] +description = "Format Go code using gofumpt" +run = "go tool mvdan.cc/gofumpt -w ./" + +[tasks."fmt:gofix"] +description = "Run go fix on all packages" +run = "go fix ./..." + +[tasks.check] +description = "Run all static analysis tools" +run = "unset MISE_TASK_OUTPUT && mise run check:staticcheck ::: check:vulncheck ::: check:deadcode ::: check:gosec" + +[tasks."check:staticcheck"] +description = "Run staticcheck" +run = "go tool honnef.co/go/tools/cmd/staticcheck ./..." + +[tasks."check:vulncheck"] +description = "Run govulncheck" +run = "go tool golang.org/x/vuln/cmd/govulncheck ./..." + +[tasks."check:deadcode"] +description = "Run deadcode" +run = "go tool golang.org/x/tools/cmd/deadcode -test ./..." + +[tasks."check:gosec"] +description = "Run gosec" +run = "go tool github.com/securego/gosec/v2/cmd/gosec --exclude-generated -terse ./..." + +[tasks.setup-envtest] +description = "Download envtest binaries for tests" +run = """ +LOCALBIN=$(pwd)/.testbin +ENVTEST_VERSION=release-0.23 +ENVTEST_K8S_VERSION=1.33.0 +ENVTEST=${LOCALBIN}/setup-envtest + +mkdir -p "${LOCALBIN}" + +if [ ! -f "${ENVTEST}-${ENVTEST_VERSION}" ]; then + echo "Downloading sigs.k8s.io/controller-runtime/tools/setup-envtest@${ENVTEST_VERSION}" + rm -f "${ENVTEST}" || true + GOBIN="${LOCALBIN}" go install "sigs.k8s.io/controller-runtime/tools/setup-envtest@${ENVTEST_VERSION}" + mv "${ENVTEST}" "${ENVTEST}-${ENVTEST_VERSION}" +fi +ln -sf "${ENVTEST}-${ENVTEST_VERSION}" "${ENVTEST}" + +echo "Setting up envtest binaries for Kubernetes version ${ENVTEST_K8S_VERSION}..." +${ENVTEST} use ${ENVTEST_K8S_VERSION} --bin-dir "${LOCALBIN}" || { + echo "Error: Failed to set up envtest binaries for version ${ENVTEST_K8S_VERSION}." + exit 1 +} +""" + +[tasks.test] +description = "Run all tests" +depends = ["setup-envtest"] +run = "go test ./... -count=1" diff --git a/pkg/deployclient/deployclient.go b/pkg/deployclient/deployclient.go index 2398f22b..2fc34c6c 100644 --- a/pkg/deployclient/deployclient.go +++ b/pkg/deployclient/deployclient.go @@ -28,11 +28,11 @@ const ( ) var ( - ErrResourceRequired = errors.New("at least one Kubernetes resource is required to make sense of the deployment") - ErrImageRequired = errors.New("workload-image is required when using workload-name") - ErrAuthRequired = errors.New("Github token or API key required") - ErrClusterRequired = errors.New("cluster required; see reference section in the documentation for available environments") - ErrMalformedAPIKey = errors.New("API key must be a hex encoded string") + ErrResourceRequired = errors.New("at least one Kubernetes resource is required to make sense of the deployment") + ErrImageRequired = errors.New("workload-image is required when using workload-name") + ErrAuthRequired = errors.New("github token or API key required") + ErrClusterRequired = errors.New("cluster required; see reference section in the documentation for available environments") + ErrMalformedAPIKey = errors.New("API key must be a hex encoded string") ) type Deployer struct { @@ -200,7 +200,6 @@ func (d *Deployer) Deploy(ctx context.Context, cfg *Config, deployRequest *pb.De deployStatus, err = d.Client.Deploy(requestContext, deployRequest) return err }) - if err != nil { code := grpcErrorCode(err) err = fmt.Errorf("%s", formatGrpcError(err)) @@ -227,7 +226,6 @@ func (d *Deployer) Deploy(ctx context.Context, cfg *Config, deployRequest *pb.De } err = sendDeploymentRequest() - // First handle errors that might have occurred with the request itself. // Errors from underlying systems are handled later. if err != nil { @@ -247,7 +245,7 @@ func (d *Deployer) Deploy(ctx context.Context, cfg *Config, deployRequest *pb.De log.Info("---") // If running in GitHub actions, print a markdown summary - summaryFile, err := os.OpenFile(os.Getenv("GITHUB_STEP_SUMMARY"), os.O_APPEND|os.O_WRONLY, 0644) + summaryFile, err := os.OpenFile(os.Getenv("GITHUB_STEP_SUMMARY"), os.O_APPEND|os.O_WRONLY, 0o644) // #nosec G703 G302 -- path from GitHub Actions environment; 0o644 appropriate for CI summary file summaryEnabled := strings.ToLower(os.Getenv("NAIS_DEPLOY_SUMMARY")) != "false" summary := func(format string, a ...any) { if summaryFile == nil || !summaryEnabled { diff --git a/pkg/deployclient/injection.go b/pkg/deployclient/injection.go index ace60bcb..7e56af74 100644 --- a/pkg/deployclient/injection.go +++ b/pkg/deployclient/injection.go @@ -3,10 +3,12 @@ package deployclient import ( "encoding/json" "fmt" - nais_io_v1 "github.com/nais/liberator/pkg/apis/nais.io/v1" + "maps" "os" "strings" + nais_io_v1 "github.com/nais/liberator/pkg/apis/nais.io/v1" + "github.com/nais/deploy/pkg/version" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) @@ -33,9 +35,7 @@ func InjectAnnotations(resource json.RawMessage, annotations map[string]string) if meta.Annotations == nil { meta.Annotations = make(map[string]string) } - for k, v := range annotations { - meta.Annotations[k] = v - } + maps.Copy(meta.Annotations, annotations) encoded, err := json.Marshal(meta) if err != nil { return nil, err diff --git a/pkg/deployclient/template.go b/pkg/deployclient/template.go index f5cd62df..7ad78566 100644 --- a/pkg/deployclient/template.go +++ b/pkg/deployclient/template.go @@ -14,7 +14,7 @@ import ( ) func MultiDocumentFileAsJSON(path string, ctx TemplateVariables) ([]json.RawMessage, error) { - fileContents, err := os.ReadFile(path) + fileContents, err := os.ReadFile(path) // #nosec G304 -- user-supplied deployment resource path, intentional if err != nil { return nil, fmt.Errorf("%s: open file: %s", path, err) } @@ -132,7 +132,7 @@ func templatedFile(data []byte, ctx TemplateVariables) ([]byte, error) { } func templateVariablesFromFile(path string) (TemplateVariables, error) { - file, err := os.ReadFile(path) + file, err := os.ReadFile(path) // #nosec G304 -- user-supplied vars file path, intentional if err != nil { return nil, fmt.Errorf("%s: open file: %s", path, err) } diff --git a/pkg/deployd/config/config.go b/pkg/deployd/config/config.go index 51f0f582..0846bb9d 100644 --- a/pkg/deployd/config/config.go +++ b/pkg/deployd/config/config.go @@ -39,8 +39,8 @@ const ( ) func bindNAIS() { - viper.BindEnv(HookdKey, "HOOKD_KEY") - viper.BindEnv(OtelExporterOtlpEndpoint, "OTEL_EXPORTER_OTLP_ENDPOINT") + viper.BindEnv(HookdKey, "HOOKD_KEY") // #nosec G104 -- viper.BindEnv error is always nil for valid keys + viper.BindEnv(OtelExporterOtlpEndpoint, "OTEL_EXPORTER_OTLP_ENDPOINT") // #nosec G104 } func Initialize() *Config { diff --git a/pkg/deployd/deployd/deployd_test.go b/pkg/deployd/deployd/deployd_test.go index 66c15855..a62d07c0 100644 --- a/pkg/deployd/deployd/deployd_test.go +++ b/pkg/deployd/deployd/deployd_test.go @@ -183,9 +183,19 @@ type testRig struct { scheme *runtime.Scheme } -func testBinDirectory() string { +func testBinDirectory() (string, error) { _, filename, _, _ := go_runtime.Caller(0) - return filepath.Clean(filepath.Join(filepath.Dir(filename), "../../../.testbin/")) + basePath := filepath.Clean(filepath.Join(filepath.Dir(filename), "../../../.testbin/k8s")) + entries, err := os.ReadDir(basePath) + if err != nil { + return "", fmt.Errorf("failed to read envtest binary dir %s: %w", basePath, err) + } + for _, entry := range entries { + if entry.IsDir() { + return filepath.Join(basePath, entry.Name()), nil + } + } + return "", fmt.Errorf("no envtest binaries found in %s; run 'mise run setup-envtest' first", basePath) } func newTestRig() (*testRig, error) { @@ -193,7 +203,13 @@ func newTestRig() (*testRig, error) { rig := &testRig{} - err = os.Setenv("KUBEBUILDER_ASSETS", testBinDirectory()) + err = os.Setenv("KUBEBUILDER_ASSETS", func() string { + dir, err := testBinDirectory() + if err != nil { + panic(err) + } + return dir + }()) if err != nil { return nil, fmt.Errorf("failed to set environment variable: %w", err) } @@ -452,10 +468,8 @@ func subTest(t *testing.T, rig *testRig, test testSpec, team string) { } wg := &sync.WaitGroup{} - wg.Add(1) - go func() { - defer wg.Done() + wg.Go(func() { err := waitForResources(ctx, rig, test) if err != nil { t.Errorf("Wait for resources: %s", err) @@ -468,7 +482,7 @@ func subTest(t *testing.T, rig *testRig, test testSpec, team string) { assert.NoError(t, err) } log.Infof("Coroutine processing finished") - }() + }) // Start deployment teamClient, err := rig.kubeclient.Impersonate(op.Request.GetTeam()) diff --git a/pkg/deployd/strategy/deploy.go b/pkg/deployd/strategy/deploy.go index c84442db..9d93bab0 100644 --- a/pkg/deployd/strategy/deploy.go +++ b/pkg/deployd/strategy/deploy.go @@ -69,7 +69,7 @@ func transformStrictDecodingError(resource unstructured.Unstructured, err error) } } - docs := map[string]string{ + docs := map[string]string{ // #nosec G101 -- documentation URLs, not credentials "aiven.io/v1alpha1, Kind=OpenSearch": "https://doc.nais.io/persistence/opensearch/how-to/create/", "aiven.io/v1alpha1, Kind=Redis": "https://doc.nais.io/persistence/redis/", "aiven.io/v1alpha1, Kind=ServiceIntegration": "https://doc.nais.io/persistence/opensearch/how-to/create/#serviceintegration", diff --git a/pkg/deployd/strategy/jobwatch.go b/pkg/deployd/strategy/jobwatch.go index 75e2ef8b..0e6b51e6 100644 --- a/pkg/deployd/strategy/jobwatch.go +++ b/pkg/deployd/strategy/jobwatch.go @@ -30,7 +30,6 @@ func (j job) Watch(op *operation.Operation, resource unstructured.Unstructured, // Wait until the new job object is present in the cluster. for ctx.Err() == nil { job, err = client.Get(op.Context, resource.GetName(), metav1.GetOptions{}) - if err != nil { time.Sleep(requestInterval) continue diff --git a/pkg/grpc/deployserver/deployserver.go b/pkg/grpc/deployserver/deployserver.go index 1eed203e..8f17a408 100644 --- a/pkg/grpc/deployserver/deployserver.go +++ b/pkg/grpc/deployserver/deployserver.go @@ -91,7 +91,6 @@ func (ds *deployServer) addToDatabase(ctx context.Context, request *pb.Deploymen Name: id.Name, Namespace: id.Namespace, }) - if err != nil { logger.Error(err) return ErrDatabaseUnavailable diff --git a/pkg/grpc/dispatchserver/dispatchserver_test.go b/pkg/grpc/dispatchserver/dispatchserver_test.go index c76e3845..b5b55ef1 100644 --- a/pkg/grpc/dispatchserver/dispatchserver_test.go +++ b/pkg/grpc/dispatchserver/dispatchserver_test.go @@ -42,8 +42,7 @@ func (s *erringDeploymentsStream) SendMsg(any) error { return nil } func (s *erringDeploymentsStream) RecvMsg(any) error { return nil } func TestDeploymentsUnregistersClusterWhenSendFails(t *testing.T) { - ctx, cancel := context.WithCancel(context.Background()) - defer cancel() + ctx := t.Context() _, _ = telemetry.New(ctx, "test", "") deploymentStore := database.MockDeploymentStore{} @@ -145,7 +144,7 @@ func TestInterceptors(t *testing.T) { t.Run("test correct password gets deployment reques (stream)", func(t *testing.T) { pskClientInterceptor := &presharedkey_interceptor.ClientInterceptor{RequireTLS: false, Key: CorrectPassword} - conn, _ := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) + conn, _ := grpc.NewClient("passthrough:///bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) client := pb.NewDispatchClient(conn) deploymentsClient, err := client.Deployments(ctx, &pb.GetDeploymentOpts{Cluster: "test"}) @@ -171,7 +170,7 @@ func TestInterceptors(t *testing.T) { t.Run("test wrong password does not get deployment request (stream)", func(t *testing.T) { pskClientInterceptor := &presharedkey_interceptor.ClientInterceptor{RequireTLS: false, Key: WrongPassword} - conn, _ := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) + conn, _ := grpc.NewClient("passthrough:///bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) client := pb.NewDispatchClient(conn) deploymentsClient, err := client.Deployments(ctx, &pb.GetDeploymentOpts{Cluster: "test2"}) @@ -202,7 +201,7 @@ func TestInterceptors(t *testing.T) { t.Run("test correct password can post status (unary)", func(t *testing.T) { pskClientInterceptor := &presharedkey_interceptor.ClientInterceptor{RequireTLS: false, Key: CorrectPassword} - conn, _ := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) + conn, _ := grpc.NewClient("passthrough:///bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) client := pb.NewDispatchClient(conn) _, err := client.ReportStatus(ctx, &pb.DeploymentStatus{}) @@ -214,7 +213,7 @@ func TestInterceptors(t *testing.T) { t.Run("test wrong password cant post status (unary)", func(t *testing.T) { pskClientInterceptor := &presharedkey_interceptor.ClientInterceptor{RequireTLS: false, Key: WrongPassword} - conn, _ := grpc.DialContext(ctx, "bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) + conn, _ := grpc.NewClient("passthrough:///bufnet", grpc.WithContextDialer(bufDialer(b)), grpc.WithTransportCredentials(insecure.NewCredentials()), grpc.WithPerRPCCredentials(pskClientInterceptor)) client := pb.NewDispatchClient(conn) _, err := client.ReportStatus(ctx, &pb.DeploymentStatus{}) diff --git a/pkg/grpc/interceptor/auth/client.go b/pkg/grpc/interceptor/auth/client.go index 0d774ce0..f336af33 100644 --- a/pkg/grpc/interceptor/auth/client.go +++ b/pkg/grpc/interceptor/auth/client.go @@ -41,25 +41,6 @@ func (t *APIKeyInterceptor) RequireTransportSecurity() bool { return t.RequireTLS } -var _ ClientInterceptor = &JWTInterceptor{} - -type JWTInterceptor struct { - JWT string - RequireTLS bool - Team string -} - -func (c *JWTInterceptor) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) { - return map[string]string{ - "jwt": c.JWT, - "team": c.Team, - }, nil -} - -func (t *JWTInterceptor) RequireTransportSecurity() bool { - return t.RequireTLS -} - type GitHubTokenInterceptor struct { BearerToken string RequireTLS bool diff --git a/pkg/grpc/interceptor/auth/server.go b/pkg/grpc/interceptor/auth/server.go index 82ca6f7f..3aa91f6e 100644 --- a/pkg/grpc/interceptor/auth/server.go +++ b/pkg/grpc/interceptor/auth/server.go @@ -50,7 +50,7 @@ func NewServerInterceptor(apiKeyStore database.ApiKeyStore, tokenValidator Token } } -func (s *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { +func (s *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { _, ok := req.(*pb.DeploymentRequest) if !ok { return nil, status.Errorf(codes.InvalidArgument, "requests to this endpoint must be DeploymentRequest") @@ -169,7 +169,7 @@ func (s *ServerInterceptor) Unary() grpc.UnaryServerInterceptor { return s.UnaryServerInterceptor } -func (s *ServerInterceptor) StreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { +func (s *ServerInterceptor) StreamServerInterceptor(srv any, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { md, ok := metadata.FromIncomingContext(ss.Context()) if !ok { return status.Errorf(codes.InvalidArgument, "invalid metadata in request") diff --git a/pkg/grpc/interceptor/presharedkey/server.go b/pkg/grpc/interceptor/presharedkey/server.go index c276cc06..e92b43f7 100644 --- a/pkg/grpc/interceptor/presharedkey/server.go +++ b/pkg/grpc/interceptor/presharedkey/server.go @@ -2,6 +2,7 @@ package presharedkey_interceptor import ( "context" + "slices" "google.golang.org/grpc" "google.golang.org/grpc/codes" @@ -13,7 +14,7 @@ type ServerInterceptor struct { Keys []string } -func (t *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { +func (t *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { err = t.authenticate(ctx) if err != nil { return nil, err @@ -33,10 +34,8 @@ func (t *ServerInterceptor) authenticate(ctx context.Context) error { } accessKey := values[0] - for _, key := range t.Keys { - if key == accessKey { - return nil - } + if slices.Contains(t.Keys, accessKey) { + return nil } return status.Errorf(codes.PermissionDenied, "application is not authorized") @@ -46,7 +45,7 @@ func (t *ServerInterceptor) Unary() grpc.UnaryServerInterceptor { return t.UnaryServerInterceptor } -func (t *ServerInterceptor) StreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { +func (t *ServerInterceptor) StreamServerInterceptor(srv any, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { err := t.authenticate(ss.Context()) if err != nil { return err diff --git a/pkg/grpc/interceptor/switch/server.go b/pkg/grpc/interceptor/switch/server.go index ed94413e..b909757b 100644 --- a/pkg/grpc/interceptor/switch/server.go +++ b/pkg/grpc/interceptor/switch/server.go @@ -33,7 +33,7 @@ func (t *ServerInterceptor) Add(prefix string, interceptor Interceptor) { t.urimap[prefix] = interceptor } -func (t *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { +func (t *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { for prefix, interceptor := range t.urimap { if isService(info.FullMethod, prefix) { return interceptor.Unary()(ctx, req, info, handler) @@ -42,11 +42,7 @@ func (t *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req inte return nil, status.Errorf(codes.Unimplemented, "BUG: no interceptor added for service endpoint %s", info.FullMethod) } -func (t *ServerInterceptor) Unary() grpc.UnaryServerInterceptor { - return t.UnaryServerInterceptor -} - -func (t *ServerInterceptor) StreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { +func (t *ServerInterceptor) StreamServerInterceptor(srv any, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { for prefix, interceptor := range t.urimap { if isService(info.FullMethod, prefix) { return interceptor.Stream()(srv, ss, info, handler) @@ -54,7 +50,3 @@ func (t *ServerInterceptor) StreamServerInterceptor(srv interface{}, ss grpc.Ser } return status.Errorf(codes.Unimplemented, "BUG: no interceptor added for service endpoint %s", info.FullMethod) } - -func (t *ServerInterceptor) Stream() grpc.StreamServerInterceptor { - return t.StreamServerInterceptor -} diff --git a/pkg/grpc/interceptor/unauthenticated/server.go b/pkg/grpc/interceptor/unauthenticated/server.go index 5c0bf117..e20f8c41 100644 --- a/pkg/grpc/interceptor/unauthenticated/server.go +++ b/pkg/grpc/interceptor/unauthenticated/server.go @@ -8,7 +8,7 @@ import ( type ServerInterceptor struct{} -func (t *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp interface{}, err error) { +func (t *ServerInterceptor) UnaryServerInterceptor(ctx context.Context, req any, info *grpc.UnaryServerInfo, handler grpc.UnaryHandler) (resp any, err error) { return handler(ctx, req) } @@ -16,7 +16,7 @@ func (t *ServerInterceptor) Unary() grpc.UnaryServerInterceptor { return t.UnaryServerInterceptor } -func (t *ServerInterceptor) StreamServerInterceptor(srv interface{}, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { +func (t *ServerInterceptor) StreamServerInterceptor(srv any, ss grpc.ServerStream, info *grpc.StreamServerInfo, handler grpc.StreamHandler) error { return handler(srv, ss) } diff --git a/pkg/hookd/api/router.go b/pkg/hookd/api/router.go index e79599e0..676f1218 100644 --- a/pkg/hookd/api/router.go +++ b/pkg/hookd/api/router.go @@ -6,8 +6,8 @@ import ( "github.com/nais/deploy/pkg/grpc/dispatchserver" - "github.com/go-chi/chi" - chi_middleware "github.com/go-chi/chi/middleware" + "github.com/go-chi/chi/v5" + chi_middleware "github.com/go-chi/chi/v5/middleware" gh "github.com/google/go-github/v41/github" api_v1_apikey "github.com/nais/deploy/pkg/hookd/api/v1/apikey" api_v1_provision "github.com/nais/deploy/pkg/hookd/api/v1/provision" diff --git a/pkg/hookd/api/v1/apikey/handler.go b/pkg/hookd/api/v1/apikey/handler.go index f60ba5d8..3f2cd868 100644 --- a/pkg/hookd/api/v1/apikey/handler.go +++ b/pkg/hookd/api/v1/apikey/handler.go @@ -4,7 +4,7 @@ import ( "encoding/json" "net/http" - "github.com/go-chi/chi" + "github.com/go-chi/chi/v5" api_v1 "github.com/nais/deploy/pkg/hookd/api/v1" "github.com/nais/deploy/pkg/hookd/database" "github.com/nais/deploy/pkg/hookd/middleware" @@ -54,7 +54,7 @@ func (d *DefaultApiKeyHandler) GetTeamApiKey(w http.ResponseWriter, r *http.Requ } w.WriteHeader(http.StatusOK) - w.Write(ret) + w.Write(ret) // #nosec G104 -- network write error after headers sent; nothing actionable } // RotateTeamApiKey rotates the API key for a specific team diff --git a/pkg/hookd/api/v1/clusterlist.go b/pkg/hookd/api/v1/clusterlist.go deleted file mode 100644 index ddbac7fb..00000000 --- a/pkg/hookd/api/v1/clusterlist.go +++ /dev/null @@ -1,16 +0,0 @@ -package api_v1 - -import ( - "fmt" -) - -type ClusterList []string - -func (c ClusterList) Contains(cluster string) error { - for _, cl := range c { - if cl == cluster { - return nil - } - } - return fmt.Errorf("cluster '%s' is not a valid choice", cluster) -} diff --git a/pkg/hookd/api/v1/provision/handler.go b/pkg/hookd/api/v1/provision/handler.go index 93ef7360..1bd5363b 100644 --- a/pkg/hookd/api/v1/provision/handler.go +++ b/pkg/hookd/api/v1/provision/handler.go @@ -32,7 +32,7 @@ type Response struct { } func (r *Response) render(w io.Writer) { - json.NewEncoder(w).Encode(r) + json.NewEncoder(w).Encode(r) // #nosec G117 G104 -- ApiKeys is a response field name, not a credential; write error after headers is not actionable } func (r *Request) validate() error { @@ -209,7 +209,6 @@ func (h *Handler) validateRequest(w http.ResponseWriter, r *http.Request, logger logger.Tracef("Request has valid JSON") err = request.validate() - if err != nil { w.WriteHeader(http.StatusBadRequest) response.Message = fmt.Sprintf("invalid request: %s", err) diff --git a/pkg/hookd/api/v1/provision/handler_test.go b/pkg/hookd/api/v1/provision/handler_test.go index 7e4dbca1..aa85beab 100644 --- a/pkg/hookd/api/v1/provision/handler_test.go +++ b/pkg/hookd/api/v1/provision/handler_test.go @@ -80,7 +80,7 @@ func testStatusResponse(t *testing.T, recorder *httptest.ResponseRecorder, respo // Inject timestamp in request payload func addTimestampToBody(in []byte, timeshift int64) []byte { - tmp := make(map[string]interface{}) + tmp := make(map[string]any) err := json.Unmarshal(in, &tmp) if err != nil { return in diff --git a/pkg/hookd/config/config.go b/pkg/hookd/config/config.go index 9ebb382f..d90519e3 100644 --- a/pkg/hookd/config/config.go +++ b/pkg/hookd/config/config.go @@ -64,11 +64,11 @@ const ( // Bind environment variables provided by the NAIS platform func bindNAIS() { - viper.BindEnv(DatabaseUrl, "DATABASE_URL") - viper.BindEnv(OtelExporterOtlpEndpoint, "OTEL_EXPORTER_OTLP_ENDPOINT") + viper.BindEnv(DatabaseUrl, "DATABASE_URL") // #nosec G104 -- viper.BindEnv error is always nil for valid keys + viper.BindEnv(OtelExporterOtlpEndpoint, "OTEL_EXPORTER_OTLP_ENDPOINT") // #nosec G104 - viper.BindEnv(DeploydKeys, "DEPLOYD_KEYS") - viper.BindEnv(FrontendKeys, "FRONTEND_KEYS") + viper.BindEnv(DeploydKeys, "DEPLOYD_KEYS") // #nosec G104 + viper.BindEnv(FrontendKeys, "FRONTEND_KEYS") // #nosec G104 } func Initialize() *Config { diff --git a/pkg/hookd/database/apikey.go b/pkg/hookd/database/apikey.go index 7bb73a3b..b283c0b7 100644 --- a/pkg/hookd/database/apikey.go +++ b/pkg/hookd/database/apikey.go @@ -6,7 +6,7 @@ import ( "fmt" "time" - "github.com/jackc/pgx/v4" + "github.com/jackc/pgx/v5" "github.com/nais/deploy/pkg/crypto" api_v1 "github.com/nais/deploy/pkg/hookd/api/v1" ) @@ -55,7 +55,7 @@ func (apikeys ApiKeys) ValidKeys() []api_v1.Key { return keys } -const selectApiKeyFields = `key, team, created, expires` +const selectApiKeyFields = `key, team, created, expires` // #nosec G101 -- SQL column list, not a credential func (db *Database) decrypt(encrypted string) ([]byte, error) { decoded, err := hex.DecodeString(encrypted) diff --git a/pkg/hookd/database/database.go b/pkg/hookd/database/database.go index 4f25d23d..9c4d4c71 100644 --- a/pkg/hookd/database/database.go +++ b/pkg/hookd/database/database.go @@ -6,8 +6,8 @@ import ( "strings" "time" - "github.com/jackc/pgx/v4" - "github.com/jackc/pgx/v4/pgxpool" + "github.com/jackc/pgx/v5" + "github.com/jackc/pgx/v5/pgxpool" "github.com/nais/deploy/pkg/hookd/metrics" log "github.com/sirupsen/logrus" ) @@ -29,7 +29,7 @@ func IsErrForeignKeyViolation(err error) bool { } func New(ctx context.Context, dsn string, encryptionKey []byte) (*Database, error) { - conn, err := pgxpool.Connect(ctx, dsn) + conn, err := pgxpool.New(ctx, dsn) if err != nil { return nil, err } @@ -40,7 +40,7 @@ func New(ctx context.Context, dsn string, encryptionKey []byte) (*Database, erro }, nil } -func (db *Database) timedQuery(ctx context.Context, sql string, args ...interface{}) (pgx.Rows, error) { +func (db *Database) timedQuery(ctx context.Context, sql string, args ...any) (pgx.Rows, error) { now := time.Now() rows, err := db.conn.Query(ctx, sql, args...) metrics.DatabaseQuery(now, err) diff --git a/pkg/hookd/database/deployment.go b/pkg/hookd/database/deployment.go index 0fdb1090..97ba1ec4 100644 --- a/pkg/hookd/database/deployment.go +++ b/pkg/hookd/database/deployment.go @@ -4,7 +4,7 @@ import ( "context" "time" - "github.com/jackc/pgx/v4" + "github.com/jackc/pgx/v5" "github.com/lib/pq" ) diff --git a/pkg/hookd/database/repository_teams.go b/pkg/hookd/database/repository_teams.go index f45a9f45..5b087be8 100644 --- a/pkg/hookd/database/repository_teams.go +++ b/pkg/hookd/database/repository_teams.go @@ -50,7 +50,7 @@ func (db *Database) WriteRepositoryTeams(ctx context.Context, repository string, query = `DELETE FROM team_repositories WHERE repository = $1;` _, err = tx.Exec(ctx, query, repository) if err != nil { - tx.Rollback(ctx) + tx.Rollback(ctx) // #nosec G104 -- rollback error is secondary to the original error being returned return err } @@ -58,7 +58,7 @@ func (db *Database) WriteRepositoryTeams(ctx context.Context, repository string, query = `INSERT INTO team_repositories (team, repository) VALUES ($1, $2);` _, err = tx.Exec(ctx, query, team, repository) if err != nil { - tx.Rollback(ctx) + tx.Rollback(ctx) // #nosec G104 -- rollback error is secondary to the original error being returned return err } } diff --git a/pkg/hookd/database/schema/generator.go b/pkg/hookd/database/schema/generator.go index 019e7471..5d8e960a 100644 --- a/pkg/hookd/database/schema/generator.go +++ b/pkg/hookd/database/schema/generator.go @@ -26,12 +26,12 @@ var footer = ` ` func textify(fn string, w io.Writer) error { - file, err := os.ReadFile(fn) + file, err := os.ReadFile(fn) // #nosec G304 -- fn comes from os.ReadDir, constrained to .sql files in this directory if err != nil { return err } - _, err = w.Write([]byte(fmt.Sprintf("%q", file))) + _, err = w.Write(fmt.Appendf(nil, "%q", file)) if err != nil { return err } @@ -65,7 +65,7 @@ func main() { sort.Strings(names) - out, err := os.OpenFile("../zz-migrations-generated.go", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0o666) + out, err := os.OpenFile("../zz-migrations-generated.go", os.O_CREATE|os.O_TRUNC|os.O_RDWR, 0o600) if err != nil { log.Fatal(err) } diff --git a/pkg/hookd/logproxy/logproxy.go b/pkg/hookd/logproxy/logproxy.go index 5524be2c..7d218fb3 100644 --- a/pkg/hookd/logproxy/logproxy.go +++ b/pkg/hookd/logproxy/logproxy.go @@ -50,7 +50,7 @@ func MakeHandler(cfg Config) http.HandlerFunc { badrequest := func(err error) { w.WriteHeader(http.StatusBadRequest) log.Error(err) - _, err = w.Write([]byte(err.Error() + "\n")) + _, err = w.Write([]byte(err.Error() + "\n")) // #nosec G705 -- plain text error response after 400 status, no HTML context if err != nil { log.Errorf("unable to answer http request: %s", err) } diff --git a/pkg/hookd/metrics/metrics.go b/pkg/hookd/metrics/metrics.go index e928a7b1..8a641269 100644 --- a/pkg/hookd/metrics/metrics.go +++ b/pkg/hookd/metrics/metrics.go @@ -27,7 +27,7 @@ const ( ) var ( - deployQueue = make(map[string]interface{}) + deployQueue = make(map[string]any) clusterConnections = make(map[string]bool) qlock = &sync.Mutex{} ) @@ -174,7 +174,7 @@ func UpdateQueue(status *pb.DeploymentStatus) { // Other states mean the deployment is still being processed. default: - deployQueue[status.GetRequest().GetID()] = new(interface{}) + deployQueue[status.GetRequest().GetID()] = new(any) } queueSize.Set(float64(len(deployQueue))) diff --git a/pkg/hookd/middleware/contexttools.go b/pkg/hookd/middleware/contexttools.go deleted file mode 100644 index 08b5ce1d..00000000 --- a/pkg/hookd/middleware/contexttools.go +++ /dev/null @@ -1,34 +0,0 @@ -package middleware - -import ( - "context" - "fmt" -) - -type requestContextValidIdentifier string - -const ( - contextKeyEmail requestContextValidIdentifier = "email" - contextKeyGroups requestContextValidIdentifier = "groups" -) - -func GetEmail(ctx context.Context) string { - email, _ := ctx.Value(contextKeyEmail).(string) - return email -} - -func GetGroups(ctx context.Context) ([]string, error) { - groups, ok := ctx.Value(contextKeyGroups).([]string) - if !ok { - return nil, fmt.Errorf("no group claims found in context") - } - return groups, nil -} - -func WithEmail(ctx context.Context, email string) context.Context { - return context.WithValue(ctx, contextKeyEmail, email) -} - -func WithGroups(ctx context.Context, groups []string) context.Context { - return context.WithValue(ctx, contextKeyGroups, groups) -} diff --git a/pkg/hookd/middleware/logger.go b/pkg/hookd/middleware/logger.go index 2cfdea91..364ff2ef 100644 --- a/pkg/hookd/middleware/logger.go +++ b/pkg/hookd/middleware/logger.go @@ -5,7 +5,7 @@ import ( "net/http" "time" - chi_middleware "github.com/go-chi/chi/middleware" + chi_middleware "github.com/go-chi/chi/v5/middleware" log "github.com/sirupsen/logrus" ) diff --git a/pkg/hookd/middleware/prometheus.go b/pkg/hookd/middleware/prometheus.go index fd758387..fe6f5f97 100644 --- a/pkg/hookd/middleware/prometheus.go +++ b/pkg/hookd/middleware/prometheus.go @@ -8,7 +8,7 @@ import ( "strconv" "time" - chi_middleware "github.com/go-chi/chi/middleware" + chi_middleware "github.com/go-chi/chi/v5/middleware" "github.com/prometheus/client_golang/prometheus" ) @@ -52,8 +52,8 @@ func PrometheusMiddleware(name string, buckets ...float64) *Middleware { []string{"code", "method", "path"}, ) - prometheus.Register(m.reqs) - prometheus.Register(m.latency) + prometheus.Register(m.reqs) // #nosec G104 -- duplicate registration on restart is expected and harmless + prometheus.Register(m.latency) // #nosec G104 return &m } diff --git a/pkg/hookd/middleware/pskvalidator.go b/pkg/hookd/middleware/pskvalidator.go index 0123aa6c..38e8ca4a 100644 --- a/pkg/hookd/middleware/pskvalidator.go +++ b/pkg/hookd/middleware/pskvalidator.go @@ -3,17 +3,16 @@ package middleware import ( "fmt" "net/http" + "slices" ) func PskValidatorMiddleware(keys []string) func(next http.Handler) http.Handler { return func(next http.Handler) http.Handler { fn := func(w http.ResponseWriter, r *http.Request) { psk := r.Header.Get("X-PSK") - for _, key := range keys { - if key == psk { - next.ServeHTTP(w, r) - return - } + if slices.Contains(keys, psk) { + next.ServeHTTP(w, r) + return } w.WriteHeader(http.StatusForbidden) fmt.Fprintf(w, "Unauthorized access: Invalid key") diff --git a/pkg/logging/standardlogger.go b/pkg/logging/standardlogger.go deleted file mode 100644 index 6755686f..00000000 --- a/pkg/logging/standardlogger.go +++ /dev/null @@ -1,48 +0,0 @@ -package logging - -import ( - "fmt" - - log "github.com/sirupsen/logrus" -) - -type standardLogger struct { - logger *log.Logger - level log.Level -} - -func (d *standardLogger) Print(v ...interface{}) { - d.logger.Log(d.level, v...) -} - -func (d *standardLogger) Printf(format string, v ...interface{}) { - d.logger.Logf(d.level, format, v...) -} - -func (d *standardLogger) Println(v ...interface{}) { - d.logger.Logln(d.level, v...) -} - -func New(level, format string) (*standardLogger, error) { - var err error - - l := &standardLogger{} - l.logger = log.New() - - switch format { - case "json": - l.logger.SetFormatter(JsonFormatter()) - case "text": - l.logger.SetFormatter(TextFormatter()) - default: - return nil, fmt.Errorf("log format '%s' is not recognized", format) - } - - l.level, err = log.ParseLevel(level) - if err != nil { - return nil, fmt.Errorf("while setting log level: %s", err) - } - l.logger.SetLevel(log.GetLevel()) - - return l, nil -} diff --git a/pkg/pb/deployment.pb.go b/pkg/pb/deployment.pb.go index 541e600b..e1dd8a07 100644 --- a/pkg/pb/deployment.pb.go +++ b/pkg/pb/deployment.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v5.28.0 +// protoc-gen-go v1.36.11 +// protoc v7.34.1 // source: pkg/pb/deployment.proto package pb @@ -13,6 +13,7 @@ import ( timestamppb "google.golang.org/protobuf/types/known/timestamppb" reflect "reflect" sync "sync" + unsafe "unsafe" ) const ( @@ -84,21 +85,18 @@ func (DeploymentState) EnumDescriptor() ([]byte, []int) { } type GithubRepository struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` + Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` unknownFields protoimpl.UnknownFields - - Owner string `protobuf:"bytes,1,opt,name=owner,proto3" json:"owner,omitempty"` - Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GithubRepository) Reset() { *x = GithubRepository{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_pb_deployment_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pkg_pb_deployment_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GithubRepository) String() string { @@ -109,7 +107,7 @@ func (*GithubRepository) ProtoMessage() {} func (x *GithubRepository) ProtoReflect() protoreflect.Message { mi := &file_pkg_pb_deployment_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -139,20 +137,17 @@ func (x *GithubRepository) GetName() string { } type Kubernetes struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Resources []*structpb.Struct `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` unknownFields protoimpl.UnknownFields - - Resources []*structpb.Struct `protobuf:"bytes,1,rep,name=resources,proto3" json:"resources,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Kubernetes) Reset() { *x = Kubernetes{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_pb_deployment_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pkg_pb_deployment_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Kubernetes) String() string { @@ -163,7 +158,7 @@ func (*Kubernetes) ProtoMessage() {} func (x *Kubernetes) ProtoReflect() protoreflect.Message { mi := &file_pkg_pb_deployment_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -186,10 +181,7 @@ func (x *Kubernetes) GetResources() []*structpb.Struct { } type DeploymentRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` ID string `protobuf:"bytes,1,opt,name=ID,proto3" json:"ID,omitempty"` Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"` Deadline *timestamppb.Timestamp `protobuf:"bytes,3,opt,name=deadline,proto3" json:"deadline,omitempty"` @@ -202,15 +194,15 @@ type DeploymentRequest struct { TraceParent string `protobuf:"bytes,10,opt,name=traceParent,proto3" json:"traceParent,omitempty"` DeployerUsername string `protobuf:"bytes,11,opt,name=deployerUsername,proto3" json:"deployerUsername,omitempty"` TriggerUrl string `protobuf:"bytes,12,opt,name=triggerUrl,proto3" json:"triggerUrl,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeploymentRequest) Reset() { *x = DeploymentRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_pb_deployment_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pkg_pb_deployment_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeploymentRequest) String() string { @@ -221,7 +213,7 @@ func (*DeploymentRequest) ProtoMessage() {} func (x *DeploymentRequest) ProtoReflect() protoreflect.Message { mi := &file_pkg_pb_deployment_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -321,23 +313,20 @@ func (x *DeploymentRequest) GetTriggerUrl() string { } type DeploymentStatus struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Request *DeploymentRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` + Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"` + State DeploymentState `protobuf:"varint,3,opt,name=state,proto3,enum=pb.DeploymentState" json:"state,omitempty"` + Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Request *DeploymentRequest `protobuf:"bytes,1,opt,name=request,proto3" json:"request,omitempty"` - Time *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=time,proto3" json:"time,omitempty"` - State DeploymentState `protobuf:"varint,3,opt,name=state,proto3,enum=pb.DeploymentState" json:"state,omitempty"` - Message string `protobuf:"bytes,4,opt,name=message,proto3" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DeploymentStatus) Reset() { *x = DeploymentStatus{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_pb_deployment_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pkg_pb_deployment_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeploymentStatus) String() string { @@ -348,7 +337,7 @@ func (*DeploymentStatus) ProtoMessage() {} func (x *DeploymentStatus) ProtoReflect() protoreflect.Message { mi := &file_pkg_pb_deployment_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -392,21 +381,18 @@ func (x *DeploymentStatus) GetMessage() string { } type GetDeploymentOpts struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` + StartupTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=startupTime,proto3" json:"startupTime,omitempty"` unknownFields protoimpl.UnknownFields - - Cluster string `protobuf:"bytes,1,opt,name=cluster,proto3" json:"cluster,omitempty"` - StartupTime *timestamppb.Timestamp `protobuf:"bytes,2,opt,name=startupTime,proto3" json:"startupTime,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GetDeploymentOpts) Reset() { *x = GetDeploymentOpts{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_pb_deployment_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pkg_pb_deployment_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GetDeploymentOpts) String() string { @@ -417,7 +403,7 @@ func (*GetDeploymentOpts) ProtoMessage() {} func (x *GetDeploymentOpts) ProtoReflect() protoreflect.Message { mi := &file_pkg_pb_deployment_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -447,18 +433,16 @@ func (x *GetDeploymentOpts) GetStartupTime() *timestamppb.Timestamp { } type ReportStatusOpts struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ReportStatusOpts) Reset() { *x = ReportStatusOpts{} - if protoimpl.UnsafeEnabled { - mi := &file_pkg_pb_deployment_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_pkg_pb_deployment_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReportStatusOpts) String() string { @@ -469,7 +453,7 @@ func (*ReportStatusOpts) ProtoMessage() {} func (x *ReportStatusOpts) ProtoReflect() protoreflect.Message { mi := &file_pkg_pb_deployment_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -486,109 +470,69 @@ func (*ReportStatusOpts) Descriptor() ([]byte, []int) { var File_pkg_pb_deployment_proto protoreflect.FileDescriptor -var file_pkg_pb_deployment_proto_rawDesc = []byte{ - 0x0a, 0x17, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x2f, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, - 0x65, 0x6e, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x1f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, - 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1c, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, - 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3c, 0x0a, 0x10, - 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, - 0x12, 0x14, 0x0a, 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x05, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x22, 0x43, 0x0a, 0x0a, 0x4b, 0x75, - 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x09, 0x72, 0x65, 0x73, 0x6f, - 0x75, 0x72, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x52, 0x09, 0x72, 0x65, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x73, 0x22, - 0xd9, 0x03, 0x0a, 0x11, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x44, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x02, 0x49, 0x44, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, - 0x04, 0x74, 0x69, 0x6d, 0x65, 0x12, 0x36, 0x0a, 0x08, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, - 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, - 0x61, 0x6d, 0x70, 0x52, 0x08, 0x64, 0x65, 0x61, 0x64, 0x6c, 0x69, 0x6e, 0x65, 0x12, 0x18, 0x0a, - 0x07, 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, - 0x63, 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x18, - 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x65, 0x61, 0x6d, 0x12, 0x1c, 0x0a, 0x09, 0x67, - 0x69, 0x74, 0x52, 0x65, 0x66, 0x53, 0x68, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x67, 0x69, 0x74, 0x52, 0x65, 0x66, 0x53, 0x68, 0x61, 0x12, 0x2e, 0x0a, 0x0a, 0x6b, 0x75, 0x62, - 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, - 0x70, 0x62, 0x2e, 0x4b, 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x52, 0x0a, 0x6b, - 0x75, 0x62, 0x65, 0x72, 0x6e, 0x65, 0x74, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x0a, 0x72, 0x65, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, - 0x70, 0x62, 0x2e, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x52, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x6f, 0x72, 0x79, 0x52, 0x0a, 0x72, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x6f, 0x72, 0x79, 0x12, - 0x2c, 0x0a, 0x11, 0x47, 0x69, 0x74, 0x68, 0x75, 0x62, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, - 0x6d, 0x65, 0x6e, 0x74, 0x18, 0x09, 0x20, 0x01, 0x28, 0x09, 0x52, 0x11, 0x47, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x45, 0x6e, 0x76, 0x69, 0x72, 0x6f, 0x6e, 0x6d, 0x65, 0x6e, 0x74, 0x12, 0x20, 0x0a, - 0x0b, 0x74, 0x72, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x74, 0x72, 0x61, 0x63, 0x65, 0x50, 0x61, 0x72, 0x65, 0x6e, 0x74, 0x12, - 0x2a, 0x0a, 0x10, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x64, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x65, 0x72, 0x55, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x74, - 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x0a, 0x74, 0x72, 0x69, 0x67, 0x67, 0x65, 0x72, 0x55, 0x72, 0x6c, 0x22, 0xb8, 0x01, 0x0a, 0x10, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x2f, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x52, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x2e, 0x0a, 0x04, 0x74, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1a, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x04, 0x74, 0x69, 0x6d, - 0x65, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x13, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x53, 0x74, 0x61, 0x74, 0x65, 0x52, 0x05, 0x73, 0x74, 0x61, 0x74, 0x65, 0x12, 0x18, 0x0a, 0x07, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x6b, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x12, 0x18, 0x0a, 0x07, 0x63, - 0x6c, 0x75, 0x73, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x63, 0x6c, - 0x75, 0x73, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x0a, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, - 0x54, 0x69, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x52, 0x0b, 0x73, 0x74, 0x61, 0x72, 0x74, 0x75, 0x70, 0x54, - 0x69, 0x6d, 0x65, 0x22, 0x12, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, - 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, 0x73, 0x2a, 0x6e, 0x0a, 0x0f, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0b, 0x0a, 0x07, 0x73, 0x75, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x09, 0x0a, 0x05, 0x65, 0x72, 0x72, 0x6f, 0x72, - 0x10, 0x01, 0x12, 0x0b, 0x0a, 0x07, 0x66, 0x61, 0x69, 0x6c, 0x75, 0x72, 0x65, 0x10, 0x02, 0x12, - 0x0c, 0x0a, 0x08, 0x69, 0x6e, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x10, 0x03, 0x12, 0x0f, 0x0a, - 0x0b, 0x69, 0x6e, 0x5f, 0x70, 0x72, 0x6f, 0x67, 0x72, 0x65, 0x73, 0x73, 0x10, 0x04, 0x12, 0x0a, - 0x0a, 0x06, 0x71, 0x75, 0x65, 0x75, 0x65, 0x64, 0x10, 0x05, 0x12, 0x0b, 0x0a, 0x07, 0x70, 0x65, - 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x10, 0x06, 0x32, 0x89, 0x01, 0x0a, 0x08, 0x44, 0x69, 0x73, 0x70, - 0x61, 0x74, 0x63, 0x68, 0x12, 0x3f, 0x0a, 0x0b, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x65, 0x74, 0x44, 0x65, 0x70, 0x6c, - 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x4f, 0x70, 0x74, 0x73, 0x1a, 0x15, 0x2e, 0x70, 0x62, 0x2e, - 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x22, 0x00, 0x30, 0x01, 0x12, 0x3c, 0x0a, 0x0c, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, - 0x74, 0x61, 0x74, 0x75, 0x73, 0x12, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, - 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x1a, 0x14, 0x2e, 0x70, 0x62, - 0x2e, 0x52, 0x65, 0x70, 0x6f, 0x72, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x4f, 0x70, 0x74, - 0x73, 0x22, 0x00, 0x32, 0x7c, 0x0a, 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x37, 0x0a, - 0x06, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, - 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, - 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x12, 0x39, 0x0a, 0x06, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, - 0x12, 0x15, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x14, 0x2e, 0x70, 0x62, 0x2e, 0x44, 0x65, 0x70, - 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x61, 0x74, 0x75, 0x73, 0x22, 0x00, 0x30, - 0x01, 0x42, 0x39, 0x0a, 0x18, 0x6e, 0x6f, 0x2e, 0x6e, 0x61, 0x76, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x73, 0x2e, 0x64, 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x6d, 0x65, 0x6e, 0x74, 0x5a, 0x1d, 0x67, - 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x6e, 0x61, 0x69, 0x73, 0x2f, 0x64, - 0x65, 0x70, 0x6c, 0x6f, 0x79, 0x2f, 0x70, 0x6b, 0x67, 0x2f, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} +const file_pkg_pb_deployment_proto_rawDesc = "" + + "\n" + + "\x17pkg/pb/deployment.proto\x12\x02pb\x1a\x1fgoogle/protobuf/timestamp.proto\x1a\x1cgoogle/protobuf/struct.proto\"<\n" + + "\x10GithubRepository\x12\x14\n" + + "\x05owner\x18\x01 \x01(\tR\x05owner\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\"C\n" + + "\n" + + "Kubernetes\x125\n" + + "\tresources\x18\x01 \x03(\v2\x17.google.protobuf.StructR\tresources\"\xd9\x03\n" + + "\x11DeploymentRequest\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\tR\x02ID\x12.\n" + + "\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x126\n" + + "\bdeadline\x18\x03 \x01(\v2\x1a.google.protobuf.TimestampR\bdeadline\x12\x18\n" + + "\acluster\x18\x04 \x01(\tR\acluster\x12\x12\n" + + "\x04team\x18\x05 \x01(\tR\x04team\x12\x1c\n" + + "\tgitRefSha\x18\x06 \x01(\tR\tgitRefSha\x12.\n" + + "\n" + + "kubernetes\x18\a \x01(\v2\x0e.pb.KubernetesR\n" + + "kubernetes\x124\n" + + "\n" + + "repository\x18\b \x01(\v2\x14.pb.GithubRepositoryR\n" + + "repository\x12,\n" + + "\x11GithubEnvironment\x18\t \x01(\tR\x11GithubEnvironment\x12 \n" + + "\vtraceParent\x18\n" + + " \x01(\tR\vtraceParent\x12*\n" + + "\x10deployerUsername\x18\v \x01(\tR\x10deployerUsername\x12\x1e\n" + + "\n" + + "triggerUrl\x18\f \x01(\tR\n" + + "triggerUrl\"\xb8\x01\n" + + "\x10DeploymentStatus\x12/\n" + + "\arequest\x18\x01 \x01(\v2\x15.pb.DeploymentRequestR\arequest\x12.\n" + + "\x04time\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\x04time\x12)\n" + + "\x05state\x18\x03 \x01(\x0e2\x13.pb.DeploymentStateR\x05state\x12\x18\n" + + "\amessage\x18\x04 \x01(\tR\amessage\"k\n" + + "\x11GetDeploymentOpts\x12\x18\n" + + "\acluster\x18\x01 \x01(\tR\acluster\x12<\n" + + "\vstartupTime\x18\x02 \x01(\v2\x1a.google.protobuf.TimestampR\vstartupTime\"\x12\n" + + "\x10ReportStatusOpts*n\n" + + "\x0fDeploymentState\x12\v\n" + + "\asuccess\x10\x00\x12\t\n" + + "\x05error\x10\x01\x12\v\n" + + "\afailure\x10\x02\x12\f\n" + + "\binactive\x10\x03\x12\x0f\n" + + "\vin_progress\x10\x04\x12\n" + + "\n" + + "\x06queued\x10\x05\x12\v\n" + + "\apending\x10\x062\x89\x01\n" + + "\bDispatch\x12?\n" + + "\vDeployments\x12\x15.pb.GetDeploymentOpts\x1a\x15.pb.DeploymentRequest\"\x000\x01\x12<\n" + + "\fReportStatus\x12\x14.pb.DeploymentStatus\x1a\x14.pb.ReportStatusOpts\"\x002|\n" + + "\x06Deploy\x127\n" + + "\x06Deploy\x12\x15.pb.DeploymentRequest\x1a\x14.pb.DeploymentStatus\"\x00\x129\n" + + "\x06Status\x12\x15.pb.DeploymentRequest\x1a\x14.pb.DeploymentStatus\"\x000\x01B9\n" + + "\x18no.nav.protos.deploymentZ\x1dgithub.com/nais/deploy/pkg/pbb\x06proto3" var ( file_pkg_pb_deployment_proto_rawDescOnce sync.Once - file_pkg_pb_deployment_proto_rawDescData = file_pkg_pb_deployment_proto_rawDesc + file_pkg_pb_deployment_proto_rawDescData []byte ) func file_pkg_pb_deployment_proto_rawDescGZIP() []byte { file_pkg_pb_deployment_proto_rawDescOnce.Do(func() { - file_pkg_pb_deployment_proto_rawDescData = protoimpl.X.CompressGZIP(file_pkg_pb_deployment_proto_rawDescData) + file_pkg_pb_deployment_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_pkg_pb_deployment_proto_rawDesc), len(file_pkg_pb_deployment_proto_rawDesc))) }) return file_pkg_pb_deployment_proto_rawDescData } @@ -636,85 +580,11 @@ func file_pkg_pb_deployment_proto_init() { if File_pkg_pb_deployment_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_pkg_pb_deployment_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*GithubRepository); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_pb_deployment_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Kubernetes); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_pb_deployment_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*DeploymentRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_pb_deployment_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*DeploymentStatus); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_pb_deployment_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*GetDeploymentOpts); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_pkg_pb_deployment_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*ReportStatusOpts); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_pkg_pb_deployment_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_pkg_pb_deployment_proto_rawDesc), len(file_pkg_pb_deployment_proto_rawDesc)), NumEnums: 1, NumMessages: 6, NumExtensions: 0, @@ -726,7 +596,6 @@ func file_pkg_pb_deployment_proto_init() { MessageInfos: file_pkg_pb_deployment_proto_msgTypes, }.Build() File_pkg_pb_deployment_proto = out.File - file_pkg_pb_deployment_proto_rawDesc = nil file_pkg_pb_deployment_proto_goTypes = nil file_pkg_pb_deployment_proto_depIdxs = nil } diff --git a/pkg/pb/deployment_grpc.pb.go b/pkg/pb/deployment_grpc.pb.go index c5fc7fdd..b61d53cf 100644 --- a/pkg/pb/deployment_grpc.pb.go +++ b/pkg/pb/deployment_grpc.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: -// - protoc-gen-go-grpc v1.5.1 -// - protoc v5.28.0 +// - protoc-gen-go-grpc v1.6.1 +// - protoc v7.34.1 // source: pkg/pb/deployment.proto package pb @@ -93,10 +93,10 @@ type DispatchServer interface { type UnimplementedDispatchServer struct{} func (UnimplementedDispatchServer) Deployments(*GetDeploymentOpts, grpc.ServerStreamingServer[DeploymentRequest]) error { - return status.Errorf(codes.Unimplemented, "method Deployments not implemented") + return status.Error(codes.Unimplemented, "method Deployments not implemented") } func (UnimplementedDispatchServer) ReportStatus(context.Context, *DeploymentStatus) (*ReportStatusOpts, error) { - return nil, status.Errorf(codes.Unimplemented, "method ReportStatus not implemented") + return nil, status.Error(codes.Unimplemented, "method ReportStatus not implemented") } func (UnimplementedDispatchServer) mustEmbedUnimplementedDispatchServer() {} func (UnimplementedDispatchServer) testEmbeddedByValue() {} @@ -109,7 +109,7 @@ type UnsafeDispatchServer interface { } func RegisterDispatchServer(s grpc.ServiceRegistrar, srv DispatchServer) { - // If the following call pancis, it indicates UnimplementedDispatchServer was + // If the following call panics, it indicates UnimplementedDispatchServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. @@ -241,10 +241,10 @@ type DeployServer interface { type UnimplementedDeployServer struct{} func (UnimplementedDeployServer) Deploy(context.Context, *DeploymentRequest) (*DeploymentStatus, error) { - return nil, status.Errorf(codes.Unimplemented, "method Deploy not implemented") + return nil, status.Error(codes.Unimplemented, "method Deploy not implemented") } func (UnimplementedDeployServer) Status(*DeploymentRequest, grpc.ServerStreamingServer[DeploymentStatus]) error { - return status.Errorf(codes.Unimplemented, "method Status not implemented") + return status.Error(codes.Unimplemented, "method Status not implemented") } func (UnimplementedDeployServer) mustEmbedUnimplementedDeployServer() {} func (UnimplementedDeployServer) testEmbeddedByValue() {} @@ -257,7 +257,7 @@ type UnsafeDeployServer interface { } func RegisterDeployServer(s grpc.ServiceRegistrar, srv DeployServer) { - // If the following call pancis, it indicates UnimplementedDeployServer was + // If the following call panics, it indicates UnimplementedDeployServer was // embedded by pointer and is nil. This will cause panics if an // unimplemented method is ever invoked, so we test this at initialization // time to prevent it from happening at runtime later due to I/O. diff --git a/pkg/pb/payload.go b/pkg/pb/payload.go index e470f79b..c20896b4 100644 --- a/pkg/pb/payload.go +++ b/pkg/pb/payload.go @@ -32,15 +32,6 @@ func KubernetesFromJSONResources(resources json.RawMessage) (*Kubernetes, error) return kube, nil } -func KubernetesFromJSON(data []byte) (*Kubernetes, error) { - k := &Kubernetes{} - err := protojson.Unmarshal(data, k) - if err != nil { - return nil, err - } - return k, nil -} - func (m *Kubernetes) JSONResources() ([]json.RawMessage, error) { resources := m.GetResources() msgs := make([]json.RawMessage, len(resources)) diff --git a/pkg/pb/status.go b/pkg/pb/status.go index 5f861325..850b2624 100644 --- a/pkg/pb/status.go +++ b/pkg/pb/status.go @@ -56,7 +56,7 @@ func NewFailureStatus(req *DeploymentRequest, err error) *DeploymentStatus { } } -func NewInProgressStatus(req *DeploymentRequest, format string, args ...interface{}) *DeploymentStatus { +func NewInProgressStatus(req *DeploymentRequest, format string, args ...any) *DeploymentStatus { return &DeploymentStatus{ Request: req, Message: fmt.Sprintf(format, args...), diff --git a/pkg/pb/timestamp.go b/pkg/pb/timestamp.go index 3977a755..0a7e042a 100644 --- a/pkg/pb/timestamp.go +++ b/pkg/pb/timestamp.go @@ -13,7 +13,7 @@ func TimestampAsTime(timestamp *timestamp.Timestamp) time.Time { func TimeAsTimestamp(t time.Time) *timestamp.Timestamp { return ×tamp.Timestamp{ Seconds: t.Unix(), - Nanos: int32(t.Nanosecond()), + Nanos: int32(t.Nanosecond()), // #nosec G115 -- t.Nanosecond() is always 0-999,999,999, fits safely in int32 } } diff --git a/testdata/deploy.env b/testdata/deploy.env deleted file mode 100644 index 47f2d221..00000000 --- a/testdata/deploy.env +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -export APIKEY=ff -export CLUSTER=local -export DEPLOY_SERVER=localhost:9090 -export GRPC_AUTHENTICATION=false -export GRPC_USE_TLS=false -export RETRY=true -export WAIT=true diff --git a/testdata/job.yaml b/testdata/job.yaml deleted file mode 100644 index 73157e98..00000000 --- a/testdata/job.yaml +++ /dev/null @@ -1,20 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: pi - labels: - app: pi - team: aura - namespace: aura -spec: - template: - metadata: - labels: - app: pi - nais.io/naisjob: "true" - spec: - restartPolicy: OnFailure - containers: - - name: pi - image: navikt/perl - command: ["perl", "-Mbignum=bpi", "-wle", "print bpi(4000)"] diff --git a/testdata/naisjob-without-schedule.yaml b/testdata/naisjob-without-schedule.yaml deleted file mode 100644 index 6c9f89d5..00000000 --- a/testdata/naisjob-without-schedule.yaml +++ /dev/null @@ -1,14 +0,0 @@ -apiVersion: nais.io/v1 -kind: Naisjob -metadata: - labels: - team: aura - annotations: - nais.io/naisjob: "true" - name: naisjob-without-schedule - namespace: aura -spec: - image: navikt/perl - command: ["perl", "-le", "sleep(40);print 'job complete'"] - secureLogs: - enabled: true diff --git a/testdata/naisjob.yaml b/testdata/naisjob.yaml deleted file mode 100644 index bbb015dc..00000000 --- a/testdata/naisjob.yaml +++ /dev/null @@ -1,15 +0,0 @@ -apiVersion: nais.io/v1 -kind: Naisjob -metadata: - labels: - team: aura - annotations: - nais.io/naisjob: "true" - name: naisjob-with-schedule - namespace: aura -spec: - image: navikt/perl - schedule: "0/5 * * * *" - command: ["perl", "-le", "sleep(40);print 'job complete'"] - secureLogs: - enabled: true diff --git a/tools.go b/tools.go index 8a125fb5..79101034 100644 --- a/tools.go +++ b/tools.go @@ -1,5 +1,4 @@ //go:build tools -// +build tools package tools