From 2b50a787d358aac3c0bb9c922c0bc5e263cd91c7 Mon Sep 17 00:00:00 2001 From: aknysh Date: Sun, 15 Mar 2026 15:32:03 -0400 Subject: [PATCH 1/9] updates --- examples/quick-start-advanced/Dockerfile | 2 +- go.mod | 208 ++++---- go.sum | 448 +++++++++--------- .../terraform_backend/terraform_backend_s3.go | 1 - pkg/ai/analyze/analyze_test.go | 2 +- pkg/devcontainer/lifecycle_rebuild_test.go | 4 +- 6 files changed, 333 insertions(+), 332 deletions(-) diff --git a/examples/quick-start-advanced/Dockerfile b/examples/quick-start-advanced/Dockerfile index b728f36c81..01fd2005f1 100644 --- a/examples/quick-start-advanced/Dockerfile +++ b/examples/quick-start-advanced/Dockerfile @@ -6,7 +6,7 @@ ARG GEODESIC_OS=debian # https://atmos.tools/ # https://github.com/cloudposse/atmos # https://github.com/cloudposse/atmos/releases -ARG ATMOS_VERSION=1.209.0 +ARG ATMOS_VERSION=1.210.0 # Terraform: https://github.com/hashicorp/terraform/releases ARG TF_VERSION=1.5.7 diff --git a/go.mod b/go.mod index 36be556d71..74c93a1e72 100644 --- a/go.mod +++ b/go.mod @@ -5,7 +5,7 @@ go 1.26 require ( al.essio.dev/pkg/shellescape v1.6.0 cloud.google.com/go/secretmanager v1.16.0 - cloud.google.com/go/storage v1.60.0 + cloud.google.com/go/storage v1.61.3 dario.cat/mergo v1.0.2 github.com/99designs/keyring v1.2.2 github.com/Azure/azure-sdk-for-go/sdk/azcore v1.21.0 @@ -13,39 +13,38 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armsubscriptions v1.3.0 github.com/Azure/azure-sdk-for-go/sdk/security/keyvault/azsecrets v1.4.0 github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.6.4 - github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 + github.com/AzureAD/microsoft-authentication-library-for-go v1.7.0 github.com/HdrHistogram/hdrhistogram-go v1.2.0 github.com/Masterminds/semver/v3 v3.4.0 github.com/Masterminds/sprig/v3 v3.3.0 - github.com/PuerkitoBio/goquery v1.11.0 + github.com/PuerkitoBio/goquery v1.12.0 github.com/adrg/xdg v0.5.3 github.com/agiledragon/gomonkey/v2 v2.14.0 github.com/alecthomas/chroma/v2 v2.23.1 github.com/alicebob/miniredis/v2 v2.37.0 - github.com/anthropics/anthropic-sdk-go v1.22.1 + github.com/anthropics/anthropic-sdk-go v1.26.0 github.com/arsham/figurine v1.3.0 github.com/atotto/clipboard v0.1.4 - github.com/aws/aws-sdk-go-v2 v1.41.3 - github.com/aws/aws-sdk-go-v2/config v1.32.11 - github.com/aws/aws-sdk-go-v2/credentials v1.19.11 - github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.6 - github.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.1 - github.com/aws/aws-sdk-go-v2/service/ecr v1.55.3 - github.com/aws/aws-sdk-go-v2/service/organizations v1.50.4 - github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4 - github.com/aws/aws-sdk-go-v2/service/ssm v1.67.8 - github.com/aws/aws-sdk-go-v2/service/sso v1.30.12 - github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.16 - github.com/aws/aws-sdk-go-v2/service/sts v1.41.8 + github.com/aws/aws-sdk-go-v2 v1.41.4 + github.com/aws/aws-sdk-go-v2/config v1.32.12 + github.com/aws/aws-sdk-go-v2/credentials v1.19.12 + github.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.2 + github.com/aws/aws-sdk-go-v2/service/ecr v1.56.1 + github.com/aws/aws-sdk-go-v2/service/organizations v1.50.5 + github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 + github.com/aws/aws-sdk-go-v2/service/ssm v1.68.3 + github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 + github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 + github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 github.com/aws/smithy-go v1.24.2 github.com/bmatcuk/doublestar/v4 v4.10.0 github.com/charmbracelet/bubbles v1.0.0 github.com/charmbracelet/bubbletea v1.3.10 - github.com/charmbracelet/colorprofile v0.4.2 - github.com/charmbracelet/glamour v0.10.0 - github.com/charmbracelet/huh v0.8.0 + github.com/charmbracelet/colorprofile v0.4.3 + github.com/charmbracelet/glamour v1.0.0 + github.com/charmbracelet/huh v1.0.0 github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 - github.com/charmbracelet/log v0.4.2 + github.com/charmbracelet/log v1.0.0 github.com/charmbracelet/x/ansi v0.11.6 github.com/charmbracelet/x/term v0.2.2 github.com/cockroachdb/errors v1.12.0 @@ -62,14 +61,14 @@ require ( github.com/goccy/go-yaml v1.19.2 github.com/gofrs/flock v0.13.0 github.com/google/go-cmp v0.7.0 - github.com/google/go-containerregistry v0.21.1 + github.com/google/go-containerregistry v0.21.2 github.com/google/go-github/v59 v59.0.0 github.com/google/renameio/v2 v2.0.2 github.com/google/uuid v1.6.0 - github.com/googleapis/gax-go/v2 v2.17.0 + github.com/googleapis/gax-go/v2 v2.18.0 github.com/hairyhenderson/gomplate/v3 v3.11.8 github.com/hairyhenderson/gomplate/v4 v4.3.3 - github.com/hashicorp/go-getter v1.8.4 + github.com/hashicorp/go-getter v1.8.5 github.com/hashicorp/go-version v1.8.0 github.com/hashicorp/hcl v1.0.1-vault-7 github.com/hashicorp/hcl/v2 v2.24.0 @@ -83,22 +82,22 @@ require ( github.com/kubescape/go-git-url v0.0.31 github.com/lrstanley/bubblezone v1.0.0 github.com/mattn/go-isatty v0.0.20 - github.com/mattn/go-runewidth v0.0.20 + github.com/mattn/go-runewidth v0.0.21 github.com/mikefarah/yq/v4 v4.52.4 github.com/mitchellh/go-wordwrap v1.0.1 github.com/mitchellh/mapstructure v1.5.0 - github.com/modelcontextprotocol/go-sdk v1.4.0 + github.com/modelcontextprotocol/go-sdk v1.4.1 github.com/muesli/ansi v0.0.0-20230316100256-276c6243b2f6 github.com/muesli/reflow v0.3.0 github.com/muesli/termenv v0.16.0 - github.com/open-policy-agent/opa v1.14.0 + github.com/open-policy-agent/opa v1.14.1 github.com/openai/openai-go v1.12.0 github.com/opencontainers/image-spec v1.1.1 github.com/otiai10/copy v1.14.1 github.com/pkg/errors v0.9.1 - github.com/posthog/posthog-go v1.10.0 + github.com/posthog/posthog-go v1.11.1 github.com/redis/go-redis/v9 v9.18.0 - github.com/samber/lo v1.52.0 + github.com/samber/lo v1.53.0 github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 github.com/sergi/go-diff v1.4.0 github.com/spf13/cobra v1.10.2 @@ -114,18 +113,18 @@ require ( github.com/zclconf/go-cty v1.18.0 go.uber.org/mock v0.6.0 go.yaml.in/yaml/v3 v3.0.4 - golang.org/x/oauth2 v0.35.0 - golang.org/x/term v0.40.0 - golang.org/x/text v0.34.0 - google.golang.org/api v0.269.0 - google.golang.org/genai v1.49.0 - google.golang.org/grpc v1.79.1 + golang.org/x/oauth2 v0.36.0 + golang.org/x/term v0.41.0 + golang.org/x/text v0.35.0 + google.golang.org/api v0.271.0 + google.golang.org/genai v1.50.0 + google.golang.org/grpc v1.79.2 gopkg.in/ini.v1 v1.67.1 gopkg.in/op/go-logging.v1 v1.0.0-20160211212156-b2cb9fa56473 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 modernc.org/sqlite v1.46.1 - mvdan.cc/sh/v3 v3.12.0 + mvdan.cc/sh/v3 v3.13.0 ) require ( @@ -136,7 +135,7 @@ require ( cloud.google.com/go/compute/metadata v0.9.0 // indirect cloud.google.com/go/iam v1.5.3 // indirect cloud.google.com/go/monitoring v1.24.3 // indirect - cuelang.org/go v0.15.4 // indirect + cuelang.org/go v0.16.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/AlecAivazis/survey/v2 v2.3.7 // indirect github.com/Azure/azure-sdk-for-go/sdk/internal v1.11.2 // indirect @@ -145,19 +144,19 @@ require ( github.com/Azure/go-autorest/autorest/to v0.4.1 // indirect github.com/Azure/go-ntlmssp v0.1.0 // indirect github.com/BurntSushi/toml v1.6.0 // indirect - github.com/CycloneDX/cyclonedx-go v0.9.2 // indirect + github.com/CycloneDX/cyclonedx-go v0.10.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.55.0 // indirect github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.55.0 // indirect github.com/Masterminds/goutils v1.1.1 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/ProtonMail/go-crypto v1.3.0 // indirect + github.com/ProtonMail/go-crypto v1.4.0 // indirect github.com/Shopify/ejson v1.5.4 // indirect github.com/a8m/envsubst v1.4.3 // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/agnivade/levenshtein v1.2.1 // indirect github.com/alecthomas/participle/v2 v2.1.4 // indirect - github.com/andybalholm/brotli v1.1.1 // indirect + github.com/andybalholm/brotli v1.2.0 // indirect github.com/andybalholm/cascadia v1.3.3 // indirect github.com/apparentlymart/go-cidr v1.1.0 // indirect github.com/apparentlymart/go-textseg/v15 v15.0.0 // indirect @@ -165,18 +164,19 @@ require ( github.com/arsham/rainbow v1.2.1 // indirect github.com/avast/retry-go v3.0.0+incompatible // indirect github.com/aws/aws-sdk-go v1.55.8 // indirect - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6 // indirect - github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.19 // indirect - github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.19 // indirect - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.19 // indirect - github.com/aws/aws-sdk-go-v2/internal/ini v1.8.5 // indirect - github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.6 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.19 // indirect - github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19 // indirect - github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.41.1 // indirect - github.com/aws/aws-sdk-go-v2/service/signin v1.0.7 // indirect + github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 // indirect + github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 // indirect + github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.8 // indirect + github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 // indirect + github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 // indirect + github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 // indirect + github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 // indirect + github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.41.4 // indirect + github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 // indirect github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect github.com/aymerick/douceur v0.2.0 // indirect github.com/bearsh/hid v1.6.0 // indirect @@ -190,17 +190,17 @@ require ( github.com/chainguard-dev/git-urls v1.0.2 // indirect github.com/charmbracelet/harmonica v0.2.0 // indirect github.com/charmbracelet/x/cellbuf v0.0.15 // indirect - github.com/charmbracelet/x/exp/slice v0.0.0-20260216111343-536eb63c1f4c // indirect + github.com/charmbracelet/x/exp/slice v0.0.0-20260315003922-bbd79dac4a98 // indirect github.com/charmbracelet/x/exp/strings v0.1.0 // indirect - github.com/clipperhouse/displaywidth v0.10.0 // indirect + github.com/clipperhouse/displaywidth v0.11.0 // indirect github.com/clipperhouse/uax29/v2 v2.7.0 // indirect github.com/cloudflare/circl v1.6.3 // indirect github.com/cncf/xds/go v0.0.0-20260202195803-dba9d589def2 // indirect github.com/cockroachdb/apd/v3 v3.2.1 // indirect github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect - github.com/cockroachdb/redact v1.1.6 // indirect + github.com/cockroachdb/redact v1.1.8 // indirect github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be // indirect - github.com/containerd/containerd/v2 v2.2.1 // indirect + github.com/containerd/containerd/v2 v2.2.2 // indirect github.com/containerd/errdefs v1.0.0 // indirect github.com/containerd/log v0.1.0 // indirect github.com/containerd/platforms v1.0.0-rc.2 // indirect @@ -210,14 +210,14 @@ require ( github.com/danieljoos/wincred v1.2.3 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/deckarep/golang-set/v2 v2.8.0 // indirect - github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 // indirect github.com/dgraph-io/ristretto/v2 v2.4.0 // indirect github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect github.com/dimchansky/utfbom v1.1.1 // indirect github.com/dlclark/regexp2 v1.11.5 // indirect - github.com/docker/cli v29.2.1+incompatible // indirect + github.com/docker/cli v29.3.0+incompatible // indirect github.com/docker/distribution v2.8.3+incompatible // indirect - github.com/docker/docker-credential-helpers v0.9.3 // indirect + github.com/docker/docker-credential-helpers v0.9.5 // indirect github.com/docker/libkv v0.2.2-0.20180912205406-458977154600 // indirect github.com/dsnet/compress v0.0.1 // indirect github.com/dustin/go-humanize v1.0.1 // indirect @@ -228,10 +228,10 @@ require ( github.com/emicklei/proto v1.14.3 // indirect github.com/emirpasic/gods v1.18.1 // indirect github.com/envoyproxy/go-control-plane/envoy v1.37.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.3.0 // indirect + github.com/envoyproxy/protoc-gen-validate v1.3.3 // indirect github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/forPelevin/gomoji v1.3.0 // indirect + github.com/forPelevin/gomoji v1.4.1 // indirect github.com/fsnotify/fsnotify v1.9.0 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.8.0 // indirect @@ -242,21 +242,21 @@ require ( github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/go-stack/stack v1.8.1 // indirect - github.com/goccy/go-json v0.10.5 // indirect + github.com/goccy/go-json v0.10.6 // indirect github.com/godbus/dbus v4.1.0+incompatible // indirect github.com/godbus/dbus/v5 v5.2.2 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.5.2 // indirect github.com/golang-jwt/jwt/v5 v5.3.1 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v1.0.0 // indirect github.com/google/flatbuffers v25.12.19+incompatible // indirect - github.com/google/go-querystring v1.1.0 // indirect + github.com/google/go-querystring v1.2.0 // indirect github.com/google/jsonschema-go v0.4.2 // indirect github.com/google/s2a-go v0.1.9 // indirect github.com/google/wire v0.7.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.12 // indirect - github.com/gookit/color v1.5.4 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.14 // indirect + github.com/gookit/color v1.6.0 // indirect github.com/gorilla/css v1.0.1 // indirect github.com/gorilla/websocket v1.5.4-0.20250319132907-e064f32e3674 // indirect github.com/gosimple/slug v1.15.0 // indirect @@ -268,8 +268,8 @@ require ( github.com/hairyhenderson/toml v0.4.2-0.20210923231440-40456b8e66cf // indirect github.com/hairyhenderson/xignore v0.3.3-0.20230403012150-95fe86932830 // indirect github.com/hairyhenderson/yaml v0.0.0-20220618171115-2d35fca545ce // indirect - github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70 // indirect - github.com/hashicorp/consul/api v1.33.2 // indirect + github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 // indirect + github.com/hashicorp/consul/api v1.33.4 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-hclog v1.6.3 // indirect @@ -300,8 +300,8 @@ require ( github.com/itchyny/gojq v0.12.18 // indirect github.com/itchyny/timefmt-go v0.1.7 // indirect github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/jfrog/archiver/v3 v3.6.1 // indirect - github.com/jfrog/build-info-go v1.11.0 // indirect + github.com/jfrog/archiver/v3 v3.6.3 // indirect + github.com/jfrog/build-info-go v1.13.0 // indirect github.com/jfrog/gofrog v1.7.6 // indirect github.com/jinzhu/copier v0.4.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect @@ -340,22 +340,22 @@ require ( github.com/muesli/cancelreader v0.2.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/ncruces/go-strftime v1.0.0 // indirect - github.com/nwaples/rardecode v1.1.3 // indirect + github.com/nwaples/rardecode/v2 v2.2.2 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/otiai10/mint v1.6.3 // indirect github.com/pelletier/go-toml/v2 v2.2.4 // indirect - github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/pierrec/lz4/v4 v4.1.22 // indirect + github.com/petermattis/goid v0.0.0-20260226131333-17d1149c6ac6 // indirect + github.com/pierrec/lz4/v4 v4.1.26 // indirect github.com/pjbgf/sha1cd v0.5.0 // indirect github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect - github.com/playwright-community/playwright-go v0.5200.1 // indirect + github.com/playwright-community/playwright-go v0.5700.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/client_golang v1.23.2 // indirect github.com/prometheus/client_model v0.6.2 // indirect github.com/prometheus/common v0.67.5 // indirect - github.com/prometheus/procfs v0.19.2 // indirect - github.com/protocolbuffers/txtpbfmt v0.0.0-20251124094003-fcb97cc64c7b // indirect + github.com/prometheus/procfs v0.20.1 // indirect + github.com/protocolbuffers/txtpbfmt v0.0.0-20260217160748-a481f6a22f94 // indirect github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect github.com/rivo/uniseg v0.4.7 // indirect @@ -365,14 +365,14 @@ require ( github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect github.com/sagikazarmark/locafero v0.12.0 // indirect github.com/sahilm/fuzzy v0.1.1 // indirect - github.com/sasha-s/go-deadlock v0.3.5 // indirect + github.com/sasha-s/go-deadlock v0.3.7 // indirect github.com/segmentio/asm v1.2.1 // indirect - github.com/segmentio/encoding v0.5.3 // indirect + github.com/segmentio/encoding v0.5.4 // indirect github.com/segmentio/ksuid v1.0.4 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/sirupsen/logrus v1.9.4 // indirect github.com/skeema/knownhosts v1.3.2 // indirect - github.com/sourcegraph/jsonrpc2 v0.2.0 // indirect + github.com/sourcegraph/jsonrpc2 v0.2.1 // indirect github.com/spf13/afero v1.15.0 // indirect github.com/spf13/cast v1.10.0 // indirect github.com/spiffe/go-spiffe/v2 v2.6.0 // indirect @@ -384,14 +384,14 @@ require ( 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/tliron/commonlog v0.2.19 // indirect - github.com/tliron/kutil v0.3.27 // indirect + github.com/tliron/commonlog v0.2.21 // indirect + github.com/tliron/go-kutil v0.4.0 // indirect github.com/trimble-oss/go-webauthn-client v0.3.0 // indirect github.com/ugorji/go/codec v1.3.1 // indirect github.com/ulikunitz/xz v0.5.15 // indirect - github.com/valyala/fastjson v1.6.7 // indirect + github.com/valyala/fastjson v1.6.10 // indirect github.com/vbatts/tar-split v0.12.2 // indirect - github.com/vektah/gqlparser/v2 v2.5.31 // indirect + github.com/vektah/gqlparser/v2 v2.5.32 // indirect github.com/wlynxg/chardet v1.0.4 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect @@ -406,40 +406,40 @@ require ( go.etcd.io/bbolt v1.4.3 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/auto/sdk v1.2.1 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.40.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 // indirect - go.opentelemetry.io/otel v1.40.0 // indirect - go.opentelemetry.io/otel/metric v1.40.0 // indirect - go.opentelemetry.io/otel/sdk v1.40.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.40.0 // indirect - go.opentelemetry.io/otel/trace v1.40.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.42.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 // indirect + go.opentelemetry.io/otel v1.42.0 // indirect + go.opentelemetry.io/otel/metric v1.42.0 // indirect + go.opentelemetry.io/otel/sdk v1.42.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.42.0 // indirect + go.opentelemetry.io/otel/trace v1.42.0 // indirect go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d // indirect go.uber.org/atomic v1.11.0 // indirect - go.yaml.in/yaml/v2 v2.4.3 // indirect + go.yaml.in/yaml/v2 v2.4.4 // indirect go.yaml.in/yaml/v4 v4.0.0-rc.4 // indirect go4.org/intern v0.0.0-20230525184215-6c62f75575cb // indirect go4.org/netipx v0.0.0-20231129151722-fdeea329fbba // indirect go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect gocloud.dev v0.41.0 // indirect - golang.org/x/crypto v0.48.0 // indirect - golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a // indirect - golang.org/x/mod v0.33.0 // indirect - golang.org/x/net v0.50.0 // indirect - golang.org/x/sync v0.19.0 // indirect - golang.org/x/sys v0.41.0 // indirect - golang.org/x/time v0.14.0 // indirect - golang.org/x/tools v0.42.0 // indirect + golang.org/x/crypto v0.49.0 // indirect + golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 // indirect + golang.org/x/mod v0.34.0 // indirect + golang.org/x/net v0.52.0 // indirect + golang.org/x/sync v0.20.0 // indirect + golang.org/x/sys v0.42.0 // indirect + golang.org/x/time v0.15.0 // indirect + golang.org/x/tools v0.43.0 // indirect golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da // indirect - google.golang.org/genproto v0.0.0-20260209200024-4cfbd4190f57 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d // indirect + google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/warnings.v0 v0.1.2 // indirect inet.af/netaddr v0.0.0-20230525184311-b8eac61e914a // indirect - k8s.io/client-go v0.35.1 // indirect + k8s.io/client-go v0.35.2 // indirect k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 // indirect - modernc.org/libc v1.67.6 // indirect + modernc.org/libc v1.70.0 // indirect modernc.org/mathutil v1.7.1 // indirect modernc.org/memory v1.11.0 // indirect mvdan.cc/xurls/v2 v2.6.0 // indirect diff --git a/go.sum b/go.sum index 6e477582b1..110df7025d 100644 --- a/go.sum +++ b/go.sum @@ -26,14 +26,14 @@ cloud.google.com/go/pubsub/v2 v2.0.0 h1:0qS6mRJ41gD1lNmM/vdm6bR7DQu6coQcVwD+VPf0 cloud.google.com/go/pubsub/v2 v2.0.0/go.mod h1:0aztFxNzVQIRSZ8vUr79uH2bS3jwLebwK6q1sgEub+E= cloud.google.com/go/secretmanager v1.16.0 h1:19QT7ZsLJ8FSP1k+4esQvuCD7npMJml6hYzilxVyT+k= cloud.google.com/go/secretmanager v1.16.0/go.mod h1://C/e4I8D26SDTz1f3TQcddhcmiC3rMEl0S1Cakvs3Q= -cloud.google.com/go/storage v1.60.0 h1:oBfZrSOCimggVNz9Y/bXY35uUcts7OViubeddTTVzQ8= -cloud.google.com/go/storage v1.60.0/go.mod h1:q+5196hXfejkctrnx+VYU8RKQr/L3c0cBIlrjmiAKE0= +cloud.google.com/go/storage v1.61.3 h1:VS//ZfBuPGDvakfD9xyPW1RGF1Vy3BWUoVZXgW1KMOg= +cloud.google.com/go/storage v1.61.3/go.mod h1:JtqK8BBB7TWv0HVGHubtUdzYYrakOQIsMLffZ2Z/HWk= cloud.google.com/go/trace v1.11.7 h1:kDNDX8JkaAG3R2nq1lIdkb7FCSi1rCmsEtKVsty7p+U= cloud.google.com/go/trace v1.11.7/go.mod h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s= -cuelabs.dev/go/oci/ociregistry v0.0.0-20250722084951-074d06050084 h1:4k1yAtPvZJZQTu8DRY8muBo0LHv6TqtrE0AO5n6IPYs= -cuelabs.dev/go/oci/ociregistry v0.0.0-20250722084951-074d06050084/go.mod h1:4WWeZNxUO1vRoZWAHIG0KZOd6dA25ypyWuwD3ti0Tdc= -cuelang.org/go v0.15.4 h1:lrkTDhqy8dveHgX1ZLQ6WmgbhD8+rXa0fD25hxEKYhw= -cuelang.org/go v0.15.4/go.mod h1:NYw6n4akZcTjA7QQwJ1/gqWrrhsN4aZwhcAL0jv9rZE= +cuelabs.dev/go/oci/ociregistry v0.0.0-20251212221603-3adeb8663819 h1:Zh+Ur3OsoWpvALHPLT45nOekHkgOt+IOfutBbPqM17I= +cuelabs.dev/go/oci/ociregistry v0.0.0-20251212221603-3adeb8663819/go.mod h1:WjmQxb+W6nVNCgj8nXrF24lIz95AHwnSl36tpjDZSU8= +cuelang.org/go v0.16.0 h1:mmt9SL/IzfSIiBKuP5wxdO4xLjvIHr3urpbjCDdMV5U= +cuelang.org/go v0.16.0/go.mod h1:4veMX+GpsK0B91b1seGXoozG80LJCczvG1M1Re/knxo= dario.cat/mergo v1.0.2 h1:85+piFYR1tMbRrLcDwR18y4UKJ3aH1Tbzi24VRW1TK8= dario.cat/mergo v1.0.2/go.mod h1:E/hbnu0NxMFBjpMIE34DRGLWqDy0g5FuKDhCb31ngxA= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= @@ -74,13 +74,13 @@ github.com/Azure/go-ntlmssp v0.1.0 h1:DjFo6YtWzNqNvQdrwEyr/e4nhU3vRiwenz5QX7sFz+ github.com/Azure/go-ntlmssp v0.1.0/go.mod h1:NYqdhxd/8aAct/s4qSYZEerdPuH1liG2/X9DiVTbhpk= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1 h1:WJTmL004Abzc5wDB5VtZG2PJk5ndYDgVacGqfirKxjM= github.com/AzureAD/microsoft-authentication-extensions-for-go/cache v0.1.1/go.mod h1:tCcJZ0uHAmvjsVYzEFivsRTN00oz5BEsRgQHu5JZ9WE= -github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0 h1:XRzhVemXdgvJqCH0sFfrBUTnUJSBrBf7++ypk+twtRs= -github.com/AzureAD/microsoft-authentication-library-for-go v1.6.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= +github.com/AzureAD/microsoft-authentication-library-for-go v1.7.0 h1:4iB+IesclUXdP0ICgAabvq2FYLXrJWKx1fJQ+GxSo3Y= +github.com/AzureAD/microsoft-authentication-library-for-go v1.7.0/go.mod h1:HKpQxkWaGLJ+D/5H8QRpyQXA1eKjxkFlOMwck5+33Jk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.6.0 h1:dRaEfpa2VI55EwlIW72hMRHdWouJeRF7TPYhI+AUQjk= github.com/BurntSushi/toml v1.6.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= -github.com/CycloneDX/cyclonedx-go v0.9.2 h1:688QHn2X/5nRezKe2ueIVCt+NRqf7fl3AVQk+vaFcIo= -github.com/CycloneDX/cyclonedx-go v0.9.2/go.mod h1:vcK6pKgO1WanCdd61qx4bFnSsDJQ6SbM2ZuMIgq86Jg= +github.com/CycloneDX/cyclonedx-go v0.10.0 h1:7xyklU7YD+CUyGzSFIARG18NYLsKVn4QFg04qSsu+7Y= +github.com/CycloneDX/cyclonedx-go v0.10.0/go.mod h1:vUvbCXQsEm48OI6oOlanxstwNByXjCZ2wuleUlwGEO8= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ= github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0= @@ -106,10 +106,10 @@ github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v1.3.0 h1:ILq8+Sf5If5DCpHQp4PbZdS1J7HDFRXz/+xKBiRGFrw= -github.com/ProtonMail/go-crypto v1.3.0/go.mod h1:9whxjD8Rbs29b4XWbB8irEcE8KHMqaR2e7GWU1R+/PE= -github.com/PuerkitoBio/goquery v1.11.0 h1:jZ7pwMQXIITcUXNH83LLk+txlaEy6NVOfTuP43xxfqw= -github.com/PuerkitoBio/goquery v1.11.0/go.mod h1:wQHgxUOU3JGuj3oD/QFfxUdlzW6xPHfqyHre6VMY4DQ= +github.com/ProtonMail/go-crypto v1.4.0 h1:Zq/pbM3F5DFgJiMouxEdSVY44MVoQNEKp5d5QxIQceQ= +github.com/ProtonMail/go-crypto v1.4.0/go.mod h1:e1OaTyu5SYVrO9gKOEhTc+5UcXtTUa+P3uLudwcgPqo= +github.com/PuerkitoBio/goquery v1.12.0 h1:pAcL4g3WRXekcB9AU/y1mbKez2dbY2AajVhtkO8RIBo= +github.com/PuerkitoBio/goquery v1.12.0/go.mod h1:802ej+gV2y7bbIhOIoPY5sT183ZW0YFofScC4q/hIpQ= github.com/Shopify/ejson v1.5.4 h1:rE3THgxBjdSUcJTNTn1SYaAzaGyxvjkEssAZEJ+zD+s= github.com/Shopify/ejson v1.5.4/go.mod h1:GZg88n4LpYqp92+tzWjvj+1aaiDJn7F1uWebQb4HbeQ= github.com/a8m/envsubst v1.4.3 h1:kDF7paGK8QACWYaQo6KtyYBozY2jhQrTuNNuUxQkhJY= @@ -139,14 +139,14 @@ github.com/alicebob/miniredis/v2 v2.37.0 h1:RheObYW32G1aiJIj81XVt78ZHJpHonHLHW7O github.com/alicebob/miniredis/v2 v2.37.0/go.mod h1:TcL7YfarKPGDAthEtl5NBeHZfeUQj6OXMm/+iu5cLMM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.1.1 h1:PR2pgnyFznKEugtsUo0xLdDop5SKXd5Qf5ysW+7XdTA= -github.com/andybalholm/brotli v1.1.1/go.mod h1:05ib4cKhjx3OQYUY22hTVd34Bc8upXjOLL2rKwwZBoA= +github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ= +github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY= github.com/andybalholm/cascadia v1.3.3 h1:AG2YHrzJIm4BZ19iwJ/DAua6Btl3IwJX+VI4kktS1LM= github.com/andybalholm/cascadia v1.3.3/go.mod h1:xNd9bqTn98Ln4DwST8/nG+H0yuB8Hmgu1YHNnWw0GeA= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/anthropics/anthropic-sdk-go v1.22.1 h1:xbsc3vJKCX/ELDZSpTNfz9wCgrFsamwFewPb1iI0Xh0= -github.com/anthropics/anthropic-sdk-go v1.22.1/go.mod h1:WTz31rIUHUHqai2UslPpw5CwXrQP3geYBioRV4WOLvE= +github.com/anthropics/anthropic-sdk-go v1.26.0 h1:oUTzFaUpAevfuELAP1sjL6CQJ9HHAfT7CoSYSac11PY= +github.com/anthropics/anthropic-sdk-go v1.26.0/go.mod h1:qUKmaW+uuPB64iy1l+4kOSvaLqPXnHTTBKH6RVZ7q5Q= github.com/apparentlymart/go-cidr v1.1.0 h1:2mAhrMoF+nhXqxTzSZMUzDHkLjmIHC+Zzn4tdgBZjnU= github.com/apparentlymart/go-cidr v1.1.0/go.mod h1:EBcsNrHc3zQeuaeCeCtQruQm+n9/YjEn/vI25Lg7Gwc= github.com/apparentlymart/go-textseg/v15 v15.0.0 h1:uYvfpb3DyLSCGWnctWKGj857c6ew1u1fNQOlOtuGxQY= @@ -169,54 +169,54 @@ github.com/avast/retry-go v3.0.0+incompatible/go.mod h1:XtSnn+n/sHqQIpZ10K1qAevB github.com/aws/aws-sdk-go v1.34.0/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0= github.com/aws/aws-sdk-go v1.55.8 h1:JRmEUbU52aJQZ2AjX4q4Wu7t4uZjOu71uyNmaWlUkJQ= github.com/aws/aws-sdk-go v1.55.8/go.mod h1:ZkViS9AqA6otK+JBBNH2++sx1sgxrPKcSzPPvQkUtXk= -github.com/aws/aws-sdk-go-v2 v1.41.3 h1:4kQ/fa22KjDt13QCy1+bYADvdgcxpfH18f0zP542kZA= -github.com/aws/aws-sdk-go-v2 v1.41.3/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6 h1:N4lRUXZpZ1KVEUn6hxtco/1d2lgYhNn1fHkkl8WhlyQ= -github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.6/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= -github.com/aws/aws-sdk-go-v2/config v1.32.11 h1:ftxI5sgz8jZkckuUHXfC/wMUc8u3fG1vQS0plr2F2Zs= -github.com/aws/aws-sdk-go-v2/config v1.32.11/go.mod h1:twF11+6ps9aNRKEDimksp923o44w/Thk9+8YIlzWMmo= -github.com/aws/aws-sdk-go-v2/credentials v1.19.11 h1:NdV8cwCcAXrCWyxArt58BrvZJ9pZ9Fhf9w6Uh5W3Uyc= -github.com/aws/aws-sdk-go-v2/credentials v1.19.11/go.mod h1:30yY2zqkMPdrvxBqzI9xQCM+WrlrZKSOpSJEsylVU+8= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.19 h1:INUvJxmhdEbVulJYHI061k4TVuS3jzzthNvjqvVvTKM= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.19/go.mod h1:FpZN2QISLdEBWkayloda+sZjVJL+e9Gl0k1SyTgcswU= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.6 h1:xuOfOJR0SPBrHhzAXZ5c+8i1KyJ+aUVJ2cl8DT16qH4= -github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.6/go.mod h1:rUVOV4y5upo55JxPss99p9FaN9BvqUjFgE/N54tvLuE= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.19 h1:/sECfyq2JTifMI2JPyZ4bdRN77zJmr6SrS1eL3augIA= -github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.19/go.mod h1:dMf8A5oAqr9/oxOfLkC/c2LU/uMcALP0Rgn2BD5LWn0= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.19 h1:AWeJMk33GTBf6J20XJe6qZoRSJo0WfUhsMdUKhoODXE= -github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.19/go.mod h1:+GWrYoaAsV7/4pNHpwh1kiNLXkKaSoppxQq9lbH8Ejw= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.5 h1:clHU5fm//kWS1C2HgtgWxfQbFbx4b6rx+5jzhgX9HrI= -github.com/aws/aws-sdk-go-v2/internal/ini v1.8.5/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20 h1:qi3e/dmpdONhj1RyIZdi6DKKpDXS5Lb8ftr3p7cyHJc= -github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.20/go.mod h1:V1K+TeJVD5JOk3D9e5tsX2KUdL7BlB+FV6cBhdobN8c= -github.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.1 h1:tnLUbtNW5c056BEbQ4xvlZaakvgdaEdiKF87R1fxuoo= -github.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.1/go.mod h1:DYDD64rVUpCvpLyuWCiTaaSfrW2O9GiDo8S6fNo8ZI0= -github.com/aws/aws-sdk-go-v2/service/ecr v1.55.3 h1:RtGctYMmkTerGClvdY6bHXdtly4FeYw9wz/NPz62LF8= -github.com/aws/aws-sdk-go-v2/service/ecr v1.55.3/go.mod h1:vBfBu24Ka3/5UZtepbTV0gnc9VPLT8ok+0oDDaYAzn4= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.6 h1:XAq62tBTJP/85lFD5oqOOe7YYgWxY9LvWq8plyDvDVg= -github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.6/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11 h1:BYf7XNsJMzl4mObARUBUib+j2tf0U//JAAtTnYqvqCw= -github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.11/go.mod h1:aEUS4WrNk/+FxkBZZa7tVgp4pGH+kFGW40Y8rCPqt5g= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.19 h1:X1Tow7suZk9UCJHE1Iw9GMZJJl0dAnKXXP1NaSDHwmw= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.19/go.mod h1:/rARO8psX+4sfjUQXp5LLifjUt8DuATZ31WptNJTyQA= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19 h1:JnQeStZvPHFHeyky/7LbMlyQjUa+jIBj36OlWm0pzIk= -github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.19/go.mod h1:HGyasyHvYdFQeJhvDHfH7HXkHh57htcJGKDZ+7z+I24= -github.com/aws/aws-sdk-go-v2/service/organizations v1.50.4 h1:cxBoPUd3gj7+AmpB0btKhGK/9kbOsiNcgZvoERW6sMI= -github.com/aws/aws-sdk-go-v2/service/organizations v1.50.4/go.mod h1:LIHqxZyzLBtVufP32kdC3tcUmhIN+5n++w6WCS+kswQ= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4 h1:4ExZyubQ6LQQVuF2Qp9OsfEvsTdAWh5Gfwf6PgIdLdk= -github.com/aws/aws-sdk-go-v2/service/s3 v1.96.4/go.mod h1:NF3JcMGOiARAss1ld3WGORCw71+4ExDD2cbbdKS5PpA= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.41.1 h1:72DBkm/CCuWx2LMHAXvLDkZfzopT3psfAeyZDIt1/yE= -github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.41.1/go.mod h1:A+oSJxFvzgjZWkpM0mXs3RxB5O1SD6473w3qafOC9eU= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.7 h1:Y2cAXlClHsXkkOvWZFXATr34b0hxxloeQu/pAZz2row= -github.com/aws/aws-sdk-go-v2/service/signin v1.0.7/go.mod h1:idzZ7gmDeqeNrSPkdbtMp9qWMgcBwykA7P7Rzh5DXVU= -github.com/aws/aws-sdk-go-v2/service/ssm v1.67.8 h1:31Llf5VfrZ78YvYs7sWcS7L2m3waikzRc6q1nYenVS4= -github.com/aws/aws-sdk-go-v2/service/ssm v1.67.8/go.mod h1:/jgaDlU1UImoxTxhRNxXHvBAPqPZQ8oCjcPbbkR6kac= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.12 h1:iSsvB9EtQ09YrsmIc44Heqlx5ByGErqhPK1ZQLppias= -github.com/aws/aws-sdk-go-v2/service/sso v1.30.12/go.mod h1:fEWYKTRGoZNl8tZ77i61/ccwOMJdGxwOhWCkp6TXAr0= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.16 h1:EnUdUqRP1CNzt2DkV67tJx6XDN4xlfBFm+bzeNOQVb0= -github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.16/go.mod h1:Jic/xv0Rq/pFNCh3WwpH4BEqdbSAl+IyHro8LbibHD8= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.8 h1:XQTQTF75vnug2TXS8m7CVJfC2nniYPZnO1D4Np761Oo= -github.com/aws/aws-sdk-go-v2/service/sts v1.41.8/go.mod h1:Xgx+PR1NUOjNmQY+tRMnouRp83JRM8pRMw/vCaVhPkI= +github.com/aws/aws-sdk-go-v2 v1.41.4 h1:10f50G7WyU02T56ox1wWXq+zTX9I1zxG46HYuG1hH/k= +github.com/aws/aws-sdk-go-v2 v1.41.4/go.mod h1:mwsPRE8ceUUpiTgF7QmQIJ7lgsKUPQOUl3o72QBrE1o= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7 h1:3kGOqnh1pPeddVa/E37XNTaWJ8W6vrbYV9lJEkCnhuY= +github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.7.7/go.mod h1:lyw7GFp3qENLh7kwzf7iMzAxDn+NzjXEAGjKS2UOKqI= +github.com/aws/aws-sdk-go-v2/config v1.32.12 h1:O3csC7HUGn2895eNrLytOJQdoL2xyJy0iYXhoZ1OmP0= +github.com/aws/aws-sdk-go-v2/config v1.32.12/go.mod h1:96zTvoOFR4FURjI+/5wY1vc1ABceROO4lWgWJuxgy0g= +github.com/aws/aws-sdk-go-v2/credentials v1.19.12 h1:oqtA6v+y5fZg//tcTWahyN9PEn5eDU/Wpvc2+kJ4aY8= +github.com/aws/aws-sdk-go-v2/credentials v1.19.12/go.mod h1:U3R1RtSHx6NB0DvEQFGyf/0sbrpJrluENHdPy1j/3TE= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20 h1:zOgq3uezl5nznfoK3ODuqbhVg1JzAGDUhXOsU0IDCAo= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.18.20/go.mod h1:z/MVwUARehy6GAg/yQ1GO2IMl0k++cu1ohP9zo887wE= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.8 h1:nuc44j+otOY0d1e+CWwB6zul57d2YEGlgCyiq3SL0lI= +github.com/aws/aws-sdk-go-v2/feature/s3/manager v1.22.8/go.mod h1:qSFgGCN8fjdhvlLhTPZdWRWXbwfeZZWF2FEaIplYPhE= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20 h1:CNXO7mvgThFGqOFgbNAP2nol2qAWBOGfqR/7tQlvLmc= +github.com/aws/aws-sdk-go-v2/internal/configsources v1.4.20/go.mod h1:oydPDJKcfMhgfcgBUZaG+toBbwy8yPWubJXBVERtI4o= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20 h1:tN6W/hg+pkM+tf9XDkWUbDEjGLb+raoBMFsTodcoYKw= +github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.7.20/go.mod h1:YJ898MhD067hSHA6xYCx5ts/jEd8BSOLtQDL3iZsvbc= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6 h1:qYQ4pzQ2Oz6WpQ8T3HvGHnZydA72MnLuFK9tJwmrbHw= +github.com/aws/aws-sdk-go-v2/internal/ini v1.8.6/go.mod h1:O3h0IK87yXci+kg6flUKzJnWeziQUKciKrLjcatSNcY= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21 h1:SwGMTMLIlvDNyhMteQ6r8IJSBPlRdXX5d4idhIGbkXA= +github.com/aws/aws-sdk-go-v2/internal/v4a v1.4.21/go.mod h1:UUxgWxofmOdAMuqEsSppbDtGKLfR04HGsD0HXzvhI1k= +github.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.2 h1:x0eGAWpd1B5I/vMtrB4Q4Zuc3CXWI8wjHfPPqBSrKmM= +github.com/aws/aws-sdk-go-v2/service/bedrockruntime v1.50.2/go.mod h1:V9oTWSDC2MtS1DR71hbNET/bZ8psQp022amEBe1grJc= +github.com/aws/aws-sdk-go-v2/service/ecr v1.56.1 h1:aVrtUrtZN2aGNuI+Pt1XR9ofsochGVepv40nEl4D1dQ= +github.com/aws/aws-sdk-go-v2/service/ecr v1.56.1/go.mod h1:j2lU1Ko0NlsZRXXQ8rSs561bhAC+HN2ob+UREFuSfIA= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7 h1:5EniKhLZe4xzL7a+fU3C2tfUN4nWIqlLesfrjkuPFTY= +github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding v1.13.7/go.mod h1:x0nZssQ3qZSnIcePWLvcoFisRXJzcTVvYpAAdYX8+GI= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12 h1:qtJZ70afD3ISKWnoX3xB0J2otEqu3LqicRcDBqsj0hQ= +github.com/aws/aws-sdk-go-v2/service/internal/checksum v1.9.12/go.mod h1:v2pNpJbRNl4vEUWEh5ytQok0zACAKfdmKS51Hotc3pQ= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20 h1:2HvVAIq+YqgGotK6EkMf+KIEqTISmTYh5zLpYyeTo1Y= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.13.20/go.mod h1:V4X406Y666khGa8ghKmphma/7C0DAtEQYhkq9z4vpbk= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20 h1:siU1A6xjUZ2N8zjTHSXFhB9L/2OY8Dqs0xXiLjF30jA= +github.com/aws/aws-sdk-go-v2/service/internal/s3shared v1.19.20/go.mod h1:4TLZCmVJDM3FOu5P5TJP0zOlu9zWgDWU7aUxWbr+rcw= +github.com/aws/aws-sdk-go-v2/service/organizations v1.50.5 h1:V0skJdwjmwcaxtGy2ws1WdBhG5Nkz6A/Ghvl6HXwzNc= +github.com/aws/aws-sdk-go-v2/service/organizations v1.50.5/go.mod h1:GIRcFyaju2WCHMsO1JkoSxBUGgXplULEXIJYdevIba4= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1 h1:csi9NLpFZXb9fxY7rS1xVzgPRGMt7MSNWeQ6eo247kE= +github.com/aws/aws-sdk-go-v2/service/s3 v1.97.1/go.mod h1:qXVal5H0ChqXP63t6jze5LmFalc7+ZE7wOdLtZ0LCP0= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.41.4 h1:9aZbO86sraeCIHHCpZhxwN9tnVy9POkSKzi4/TpT54A= +github.com/aws/aws-sdk-go-v2/service/secretsmanager v1.41.4/go.mod h1:cxiXDhEzIq7Xx1BtmC4lGBK3SwAZ79+EUWiKawYHo14= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.8 h1:0GFOLzEbOyZABS3PhYfBIx2rNBACYcKty+XGkTgw1ow= +github.com/aws/aws-sdk-go-v2/service/signin v1.0.8/go.mod h1:LXypKvk85AROkKhOG6/YEcHFPoX+prKTowKnVdcaIxE= +github.com/aws/aws-sdk-go-v2/service/ssm v1.68.3 h1:bBoWhx8lsFLTXintRX64ZBXcmFZbGqUmaPUrjXECqIc= +github.com/aws/aws-sdk-go-v2/service/ssm v1.68.3/go.mod h1:rcRkKbUJ2437WuXdq9fbj+MjTudYWzY9Ct8kiBbN8a8= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.13 h1:kiIDLZ005EcKomYYITtfsjn7dtOwHDOFy7IbPXKek2o= +github.com/aws/aws-sdk-go-v2/service/sso v1.30.13/go.mod h1:2h/xGEowcW/g38g06g3KpRWDlT+OTfxxI0o1KqayAB8= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17 h1:jzKAXIlhZhJbnYwHbvUQZEB8KfgAEuG0dc08Bkda7NU= +github.com/aws/aws-sdk-go-v2/service/ssooidc v1.35.17/go.mod h1:Al9fFsXjv4KfbzQHGe6V4NZSZQXecFcvaIF4e70FoRA= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.9 h1:Cng+OOwCHmFljXIxpEVXAGMnBia8MSU6Ch5i9PgBkcU= +github.com/aws/aws-sdk-go-v2/service/sts v1.41.9/go.mod h1:LrlIndBDdjA/EeXeyNBle+gyCwTlizzW5ycgWnvIxkk= github.com/aws/smithy-go v1.24.2 h1:FzA3bu/nt/vDvmnkg+R8Xl46gmzEDam6mZ1hzmwXFng= github.com/aws/smithy-go v1.24.2/go.mod h1:YE2RhdIuDbA5E5bTdciG9KrW3+TiEONeUWCqxX9i1Fc= github.com/aymanbagabas/go-osc52/v2 v2.0.1 h1:HwpRHbFMcZLEVr42D4p7XBqjyuxQH5SMiErDT4WkJ2k= @@ -265,18 +265,18 @@ github.com/charmbracelet/bubbles v1.0.0 h1:12J8/ak/uCZEMQ6KU7pcfwceyjLlWsDLAxB5f github.com/charmbracelet/bubbles v1.0.0/go.mod h1:9d/Zd5GdnauMI5ivUIVisuEm3ave1XwXtD1ckyV6r3E= github.com/charmbracelet/bubbletea v1.3.10 h1:otUDHWMMzQSB0Pkc87rm691KZ3SWa4KUlvF9nRvCICw= github.com/charmbracelet/bubbletea v1.3.10/go.mod h1:ORQfo0fk8U+po9VaNvnV95UPWA1BitP1E0N6xJPlHr4= -github.com/charmbracelet/colorprofile v0.4.2 h1:BdSNuMjRbotnxHSfxy+PCSa4xAmz7szw70ktAtWRYrY= -github.com/charmbracelet/colorprofile v0.4.2/go.mod h1:0rTi81QpwDElInthtrQ6Ni7cG0sDtwAd4C4le060fT8= -github.com/charmbracelet/glamour v0.10.0 h1:MtZvfwsYCx8jEPFJm3rIBFIMZUfUJ765oX8V6kXldcY= -github.com/charmbracelet/glamour v0.10.0/go.mod h1:f+uf+I/ChNmqo087elLnVdCiVgjSKWuXa/l6NU2ndYk= +github.com/charmbracelet/colorprofile v0.4.3 h1:QPa1IWkYI+AOB+fE+mg/5/4HRMZcaXex9t5KX76i20Q= +github.com/charmbracelet/colorprofile v0.4.3/go.mod h1:/zT4BhpD5aGFpqQQqw7a+VtHCzu+zrQtt1zhMt9mR4Q= +github.com/charmbracelet/glamour v1.0.0 h1:AWMLOVFHTsysl4WV8T8QgkQ0s/ZNZo7CiE4WKhk8l08= +github.com/charmbracelet/glamour v1.0.0/go.mod h1:DSdohgOBkMr2ZQNhw4LZxSGpx3SvpeujNoXrQyH2hxo= github.com/charmbracelet/harmonica v0.2.0 h1:8NxJWRWg/bzKqqEaaeFNipOu77YR5t8aSwG4pgaUBiQ= github.com/charmbracelet/harmonica v0.2.0/go.mod h1:KSri/1RMQOZLbw7AHqgcBycp8pgJnQMYYT8QZRqZ1Ao= -github.com/charmbracelet/huh v0.8.0 h1:Xz/Pm2h64cXQZn/Jvele4J3r7DDiqFCNIVteYukxDvY= -github.com/charmbracelet/huh v0.8.0/go.mod h1:5YVc+SlZ1IhQALxRPpkGwwEKftN/+OlJlnJYlDRFqN4= +github.com/charmbracelet/huh v1.0.0 h1:wOnedH8G4qzJbmhftTqrpppyqHakl/zbbNdXIWJyIxw= +github.com/charmbracelet/huh v1.0.0/go.mod h1:5YVc+SlZ1IhQALxRPpkGwwEKftN/+OlJlnJYlDRFqN4= github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834 h1:ZR7e0ro+SZZiIZD7msJyA+NjkCNNavuiPBLgerbOziE= github.com/charmbracelet/lipgloss v1.1.1-0.20250404203927-76690c660834/go.mod h1:aKC/t2arECF6rNOnaKaVU6y4t4ZeHQzqfxedE/VkVhA= -github.com/charmbracelet/log v0.4.2 h1:hYt8Qj6a8yLnvR+h7MwsJv/XvmBJXiueUcI3cIxsyig= -github.com/charmbracelet/log v0.4.2/go.mod h1:qifHGX/tc7eluv2R6pWIpyHDDrrb/AG71Pf2ysQu5nw= +github.com/charmbracelet/log v1.0.0 h1:HVVVMmfOorfj3BA9i8X8UL69Hoz9lI0PYwXfJvOdRc4= +github.com/charmbracelet/log v1.0.0/go.mod h1:uYgY3SmLpwJWxmlrPwXvzVYujxis1vAKRV/0VQB7yWA= github.com/charmbracelet/x/ansi v0.11.6 h1:GhV21SiDz/45W9AnV2R61xZMRri5NlLnl6CVF7ihZW8= github.com/charmbracelet/x/ansi v0.11.6/go.mod h1:2JNYLgQUsyqaiLovhU2Rv/pb8r6ydXKS3NIttu3VGZQ= github.com/charmbracelet/x/cellbuf v0.0.15 h1:ur3pZy0o6z/R7EylET877CBxaiE1Sp1GMxoFPAIztPI= @@ -287,8 +287,8 @@ github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86 h1:JSt3B+U9 github.com/charmbracelet/x/errors v0.0.0-20240508181413-e8d8b6e2de86/go.mod h1:2P0UgXMEa6TsToMSuFqKFQR+fZTO9CNGUNokkPatT/0= github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91 h1:payRxjMjKgx2PaCWLZ4p3ro9y97+TVLZNaRZgJwSVDQ= github.com/charmbracelet/x/exp/golden v0.0.0-20241011142426-46044092ad91/go.mod h1:wDlXFlCrmJ8J+swcL/MnGUuYnqgQdW9rhSD61oNMb6U= -github.com/charmbracelet/x/exp/slice v0.0.0-20260216111343-536eb63c1f4c h1:FMA08NNgiMLQsGrzjl+Kt75Yvk7ZTW1/RT+XNhTydhM= -github.com/charmbracelet/x/exp/slice v0.0.0-20260216111343-536eb63c1f4c/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA= +github.com/charmbracelet/x/exp/slice v0.0.0-20260315003922-bbd79dac4a98 h1:WiafOZ86JQkjBOTMX1hlHI9wCFyfMzT/c7OiWB7jnR4= +github.com/charmbracelet/x/exp/slice v0.0.0-20260315003922-bbd79dac4a98/go.mod h1:vqEfX6xzqW1pKKZUUiFOKg0OQ7bCh54Q2vR/tserrRA= github.com/charmbracelet/x/exp/strings v0.1.0 h1:i69S2XI7uG1u4NLGeJPSYU++Nmjvpo9nwd6aoEm7gkA= github.com/charmbracelet/x/exp/strings v0.1.0/go.mod h1:/ehtMPNh9K4odGFkqYJKpIYyePhdp1hLBRvyY4bWkH8= github.com/charmbracelet/x/term v0.2.2 h1:xVRT/S2ZcKdhhOuSP4t5cLi5o+JxklsoEObBSgfgZRk= @@ -300,8 +300,8 @@ github.com/charmbracelet/x/xpty v0.1.2/go.mod h1:XK2Z0id5rtLWcpeNiMYBccNNBrP2IJn github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/clipperhouse/displaywidth v0.10.0 h1:GhBG8WuerxjFQQYeuZAeVTuyxuX+UraiZGD4HJQ3Y8g= -github.com/clipperhouse/displaywidth v0.10.0/go.mod h1:XqJajYsaiEwkxOj4bowCTMcT1SgvHo9flfF3jQasdbs= +github.com/clipperhouse/displaywidth v0.11.0 h1:lBc6kY44VFw+TDx4I8opi/EtL9m20WSEFgwIwO+UVM8= +github.com/clipperhouse/displaywidth v0.11.0/go.mod h1:bkrFNkf81G8HyVqmKGxsPufD3JhNl3dSqnGhOoSD/o0= github.com/clipperhouse/uax29/v2 v2.7.0 h1:+gs4oBZ2gPfVrKPthwbMzWZDaAFPGYK72F0NJv2v7Vk= github.com/clipperhouse/uax29/v2 v2.7.0/go.mod h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM= github.com/cloudflare/circl v1.6.3 h1:9GPOhQGF9MCYUeXyMYlqTR6a5gTrgR/fBLXvUgtVcg8= @@ -315,12 +315,12 @@ github.com/cockroachdb/errors v1.12.0 h1:d7oCs6vuIMUQRVbi6jWWWEJZahLCfJpnJSVobd1 github.com/cockroachdb/errors v1.12.0/go.mod h1:SvzfYNNBshAVbZ8wzNc/UPK3w1vf0dKDUP41ucAIf7g= github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 h1:ASDL+UJcILMqgNeV5jiqR4j+sTuvQNHdf2chuKj1M5k= github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506/go.mod h1:Mw7HqKr2kdtu6aYGn3tPmAftiP3QPX63LdK/zcariIo= -github.com/cockroachdb/redact v1.1.6 h1:zXJBwDZ84xJNlHl1rMyCojqyIxv+7YUpQiJLQ7n4314= -github.com/cockroachdb/redact v1.1.6/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/redact v1.1.8 h1:8eVLLj6juKxiKrAEw2b8cJvNqWq++U8WOfQFuL7KTaA= +github.com/cockroachdb/redact v1.1.8/go.mod h1:GceHHpJ0rMDpYARL5In88Alq/xMBUtVlz7Qxix6ZVkw= github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be h1:J5BL2kskAlV9ckgEsNQXscjIaLiOYiZ75d4e94E6dcQ= github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be/go.mod h1:mk5IQ+Y0ZeO87b858TlA645sVcEcbiX6YqP98kt+7+w= -github.com/containerd/containerd/v2 v2.2.1 h1:TpyxcY4AL5A+07dxETevunVS5zxqzuq7ZqJXknM11yk= -github.com/containerd/containerd/v2 v2.2.1/go.mod h1:NR70yW1iDxe84F2iFWbR9xfAN0N2F0NcjTi1OVth4nU= +github.com/containerd/containerd/v2 v2.2.2 h1:mjVQdtfryzT7lOqs5EYUFZm8ioPVjOpkSoG1GJPxEMY= +github.com/containerd/containerd/v2 v2.2.2/go.mod h1:5Jhevmv6/2J+Iu/A2xXAdUIdI5Ah/hfyO7okJ4AFIdY= github.com/containerd/errdefs v1.0.0 h1:tg5yIfIlQIrxYtu9ajqY42W3lpS19XqdxRQeEwYG8PI= github.com/containerd/errdefs v1.0.0/go.mod h1:+YBYIdtsnF4Iw6nWZhJcqGSg/dwvV7tyJ/kCkyJ2k+M= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= @@ -353,8 +353,8 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set/v2 v2.8.0 h1:swm0rlPCmdWn9mESxKOjWk8hXSqoxOp+ZlfuyaAdFlQ= github.com/deckarep/golang-set/v2 v2.8.0/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4= -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/decred/dcrd/dcrec/secp256k1/v4 v4.4.1 h1:5RVFMOWjMyRy8cARdy79nAmgYw3hK/4HUq48LQ6Wwqo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.4.1/go.mod h1:ZXNYxsqcloTdSy/rNShjYzMhyjf0LaoftYK0p+A3h40= github.com/dgraph-io/badger/v4 v4.9.1 h1:DocZXZkg5JJHJPtUErA0ibyHxOVUDVoXLSCV6t8NC8w= github.com/dgraph-io/badger/v4 v4.9.1/go.mod h1:5/MEx97uzdPUHR4KtkNt8asfI2T4JiEiQlV7kWUo8c0= github.com/dgraph-io/ristretto/v2 v2.4.0 h1:I/w09yLjhdcVD2QV192UJcq8dPBaAJb9pOuMyNy0XlU= @@ -369,12 +369,14 @@ github.com/dimchansky/utfbom v1.1.1 h1:vV6w1AhK4VMnhBno/TPVCoK9U/LP0PkLCS9tbxHdi github.com/dimchansky/utfbom v1.1.1/go.mod h1:SxdoEBH5qIqFocHMyGOXVAybYJdr71b1Q/j0mACtrfE= github.com/dlclark/regexp2 v1.11.5 h1:Q/sSnsKerHeCkc/jSTNq1oCm7KiVgUMZRDUoRu0JQZQ= github.com/dlclark/regexp2 v1.11.5/go.mod h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8= -github.com/docker/cli v29.2.1+incompatible h1:n3Jt0QVCN65eiVBoUTZQM9mcQICCJt3akW4pKAbKdJg= -github.com/docker/cli v29.2.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +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/docker/cli v29.3.0+incompatible h1:z3iWveU7h19Pqx7alZES8j+IeFQZ1lhTwb2F+V9SVvk= +github.com/docker/cli v29.3.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker-credential-helpers v0.9.3 h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8= -github.com/docker/docker-credential-helpers v0.9.3/go.mod h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo= +github.com/docker/docker-credential-helpers v0.9.5 h1:EFNN8DHvaiK8zVqFA2DT6BjXE0GzfLOZ38ggPTKePkY= +github.com/docker/docker-credential-helpers v0.9.5/go.mod h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c= github.com/docker/libkv v0.2.2-0.20180912205406-458977154600 h1:x0AMRhackzbivKKiEeSMzH6gZmbALPXCBG0ecBmRlco= github.com/docker/libkv v0.2.2-0.20180912205406-458977154600/go.mod h1:r5hEwHwW8dr0TFBYGCarMNbrQOiwL1xoqDYZ/JqoTK0= github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= @@ -411,8 +413,8 @@ github.com/envoyproxy/go-control-plane/envoy v1.37.0/go.mod h1:DReE9MMrmecPy+YvQ github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.3.0 h1:TvGH1wof4H33rezVKWSpqKz5NXWg5VPuZ0uONDT6eb4= -github.com/envoyproxy/protoc-gen-validate v1.3.0/go.mod h1:HvYl7zwPa5mffgyeTUHA9zHIH36nmrm7oCbo4YKoSWA= +github.com/envoyproxy/protoc-gen-validate v1.3.3 h1:MVQghNeW+LZcmXe7SY1V36Z+WFMDjpqGAGacLe2T0ds= +github.com/envoyproxy/protoc-gen-validate v1.3.3/go.mod h1:TsndJ/ngyIdQRhMcVVGDDHINPLWB7C82oDArY51KfB0= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f h1:Y/CXytFA4m6baUTXGLOoWe4PQhGxaX0KpnayAqC48p4= github.com/erikgeiser/coninput v0.0.0-20211004153227-1c3628e74d0f/go.mod h1:vw97MGsxSvLiUE2X8qFplwetxpGLQrlU1Q9AUEIzCaM= github.com/expr-lang/expr v1.17.8 h1:W1loDTT+0PQf5YteHSTpju2qfUfNoBt4yw9+wOEU9VM= @@ -422,8 +424,8 @@ github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/forPelevin/gomoji v1.3.0 h1:WPIOLWB1bvRYlKZnSSEevLt3IfKlLs+tK+YA9fFYlkE= -github.com/forPelevin/gomoji v1.3.0/go.mod h1:mM6GtmCgpoQP2usDArc6GjbXrti5+FffolyQfGgPboQ= +github.com/forPelevin/gomoji v1.4.1 h1:7U+Bl8o6RV/dOQz7coQFWj/jX6Ram6/cWFOuFDEPEUo= +github.com/forPelevin/gomoji v1.4.1/go.mod h1:mM6GtmCgpoQP2usDArc6GjbXrti5+FffolyQfGgPboQ= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/foxcpp/go-mockdns v1.2.0 h1:omK3OrHRD1IWJz1FuFBCFquhXslXoF17OvBS6JPzZF0= @@ -487,8 +489,8 @@ github.com/go-viper/mapstructure/v2 v2.5.0 h1:vM5IJoUAy3d7zRSVtIwQgBj7BiWtMPfmPE github.com/go-viper/mapstructure/v2 v2.5.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.10.5 h1:Fq85nIqj+gXn/S5ahsiTlK3TmC85qgirsdTP/+DeaC4= -github.com/goccy/go-json v0.10.5/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= +github.com/goccy/go-json v0.10.6 h1:p8HrPJzOakx/mn/bQtjgNjdTcN+/S6FcG2CTtQOrHVU= +github.com/goccy/go-json v0.10.6/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/goccy/go-yaml v1.19.2 h1:PmFC1S6h8ljIz6gMRBopkjP1TVT7xuwrButHID66PoM= github.com/goccy/go-yaml v1.19.2/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/godbus/dbus v4.1.0+incompatible h1:WqqLRTsQic3apZUK9qC5sGNfXthmPXzUZ7nQPrNITa4= @@ -525,8 +527,8 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs= +github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= @@ -537,7 +539,6 @@ github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= @@ -545,12 +546,12 @@ github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeN github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= -github.com/google/go-containerregistry v0.21.1 h1:sOt/o9BS2b87FnR7wxXPvRKU1XVJn2QCwOS5g8zQXlc= -github.com/google/go-containerregistry v0.21.1/go.mod h1:ctO5aCaewH4AK1AumSF5DPW+0+R+d2FmylMJdp5G7p0= +github.com/google/go-containerregistry v0.21.2 h1:vYaMU4nU55JJGFC9JR/s8NZcTjbE9DBBbvusTW9NeS0= +github.com/google/go-containerregistry v0.21.2/go.mod h1:ctO5aCaewH4AK1AumSF5DPW+0+R+d2FmylMJdp5G7p0= github.com/google/go-github/v59 v59.0.0 h1:7h6bgpF5as0YQLLkEiVqpgtJqjimMYhBkD4jT5aN3VA= github.com/google/go-github/v59 v59.0.0/go.mod h1:rJU4R0rQHFVFDOkqGWxfLNo6vEk4dv40oDjhV/gH6wM= -github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= -github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= +github.com/google/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0= +github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU= github.com/google/go-replayers/grpcreplay v1.3.0 h1:1Keyy0m1sIpqstQmgz307zhiJ1pV4uIlFds5weTmxbo= github.com/google/go-replayers/grpcreplay v1.3.0/go.mod h1:v6NgKtkijC0d3e3RW8il6Sy5sqRVUwoQa4mHOGEy8DI= github.com/google/go-replayers/httpreplay v1.2.0 h1:VM1wEyyjaoU53BwrOnaf9VhAyQQEEioJvFYxYcLRKzk= @@ -573,12 +574,14 @@ 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/google/wire v0.7.0 h1:JxUKI6+CVBgCO2WToKy/nQk0sS+amI9z9EjVmdaocj4= github.com/google/wire v0.7.0/go.mod h1:n6YbUQD9cPKTnHXEBN2DXlOp/mVADhVErcMFb0v3J18= -github.com/googleapis/enterprise-certificate-proxy v0.3.12 h1:Fg+zsqzYEs1ZnvmcztTYxhgCBsx3eEhEwQ1W/lHq/sQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.12/go.mod h1:vqVt9yG9480NtzREnTlmGSBmFrA+bzb0yl0TxoBQXOg= -github.com/googleapis/gax-go/v2 v2.17.0 h1:RksgfBpxqff0EZkDWYuz9q/uWsTVz+kf43LsZ1J6SMc= -github.com/googleapis/gax-go/v2 v2.17.0/go.mod h1:mzaqghpQp4JDh3HvADwrat+6M3MOIDp5YKHhb9PAgDY= -github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0= -github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w= +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.18.0 h1:jxP5Uuo3bxm3M6gGtV94P4lliVetoCB4Wk2x8QA86LI= +github.com/googleapis/gax-go/v2 v2.18.0/go.mod h1:uSzZN4a356eRG985CzJ3WfbFSpqkLTjsnhWGJR6EwrE= +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.0 h1:JjJXBTk1ETNyqyilJhkTXJYYigHG24TM9Xa2M1xAhRA= +github.com/gookit/color v1.6.0/go.mod h1:9ACFc7/1IpHGBW8RwuDm/0YEnhg3dwwXpoMsmtyHfjs= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gopherjs/gopherjs v1.17.2 h1:fQnZVsXk8uxXIStYb0N4bGk7jeyTalG/wsZjQ25dO0g= github.com/gopherjs/gopherjs v1.17.2/go.mod h1:pRRIvn/QzFLrKfvEz3qUuEhtE/zLCWfreZ6J5gM2i+k= @@ -621,20 +624,20 @@ github.com/hairyhenderson/xignore v0.3.3-0.20230403012150-95fe86932830 h1:f+VnmD github.com/hairyhenderson/xignore v0.3.3-0.20230403012150-95fe86932830/go.mod h1:UqUZ8CHnVcV2/rb26Ydn+PQO7bAI8kFONU/vaK1Q/WU= github.com/hairyhenderson/yaml v0.0.0-20220618171115-2d35fca545ce h1:cVkYhlWAxwuS2/Yp6qPtcl0fGpcWxuZNonywHZ6/I+s= github.com/hairyhenderson/yaml v0.0.0-20220618171115-2d35fca545ce/go.mod h1:7TyiGlHI+IO+iJbqRZ82QbFtvgj/AIcFm5qc9DLn7Kc= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70 h1:0HADrxxqaQkGycO1JoUUA+B4FnIkuo8d2bz/hSaTFFQ= -github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.70/go.mod h1:fm2FdDCzJdtbXF7WKAMvBb5NEPouXPHFbGNYs9ShFns= -github.com/hashicorp/consul/api v1.33.2 h1:Q6mE0WZsUTJerlnl9TuXzqrtZ0cKdOCsxcZhj5mKbMs= -github.com/hashicorp/consul/api v1.33.2/go.mod h1:K3yoL/vnIBcQV/25NeMZVokRvPPERiqp2Udtr4xAfhs= -github.com/hashicorp/consul/sdk v0.17.1 h1:LumAh8larSXmXw2wvw/lK5ZALkJ2wK8VRwWMLVV5M5c= -github.com/hashicorp/consul/sdk v0.17.1/go.mod h1:EngiixMhmw9T7wApycq6rDRFXXVUwjjf7HuLiGMH/Sw= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71 h1:3qrWTgbR0uMacRVnE6//G1B20hUJexxqqmQ2OTs1+0s= +github.com/hashicorp/aws-sdk-go-base/v2 v2.0.0-beta.71/go.mod h1:YV27+mh2SLUqeP36G1a9MiqL5eBkFnZQJjNTR9Q9NcY= +github.com/hashicorp/consul/api v1.33.4 h1:AJkZp6qzgAYcMIU0+CjJ0Rb7+byfh0dazFK/gzlOcJk= +github.com/hashicorp/consul/api v1.33.4/go.mod h1:BkH3WEUzsnWvJJaHoDqKqoe2Q2EIixx7Gjj6MTwYnOA= +github.com/hashicorp/consul/sdk v0.17.2 h1:sC0jgNhJkZX3wo1DCrkG12r+1JlZQpWvk3AoL3yZE4Q= +github.com/hashicorp/consul/sdk v0.17.2/go.mod h1:VjccKcw6YhMhjH84/ZhTXZ0OG4SUq+K25P6DiCV/Hvg= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.8.4 h1:hGEd2xsuVKgwkMtPVufq73fAmZU/x65PPcqH3cb0D9A= -github.com/hashicorp/go-getter v1.8.4/go.mod h1:x27pPGSg9kzoB147QXI8d/nDvp2IgYGcwuRjpaXE9Yg= +github.com/hashicorp/go-getter v1.8.5 h1:DMPV5CSw5JrNg/IK7kDZt3+l2REKXOi3oAw7uYLh2NM= +github.com/hashicorp/go-getter v1.8.5/go.mod h1:WIffejwAyDSJhoVptc3UEshEMkR9O63rw34V7k43O3Q= github.com/hashicorp/go-hclog v1.5.0/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= @@ -722,10 +725,10 @@ github.com/itchyny/timefmt-go v0.1.7 h1:xyftit9Tbw+Dc/huSSPJaEmX1TVL8lw5vxjJLK4G github.com/itchyny/timefmt-go v0.1.7/go.mod h1:5E46Q+zj7vbTgWY8o5YkMeYb4I6GeWLFnetPy5oBrAI= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jfrog/archiver/v3 v3.6.1 h1:LOxnkw9pOn45DzCbZNFV6K0+6dCsQ0L8mR3ZcujO5eI= -github.com/jfrog/archiver/v3 v3.6.1/go.mod h1:VgR+3WZS4N+i9FaDwLZbq+jeU4B4zctXL+gL4EMzfLw= -github.com/jfrog/build-info-go v1.11.0 h1:qEONCgaHKlW3e2y0zIwTZVbgS/ERZrPlBWEbOYJbaSU= -github.com/jfrog/build-info-go v1.11.0/go.mod h1:szdz9+WzB7+7PGnILLUgyY+OF5qD5geBT7UGNIxibyw= +github.com/jfrog/archiver/v3 v3.6.3 h1:hkAmPjBw393tPmQ07JknLNWFNZjXdy2xFEnOW9wwOxI= +github.com/jfrog/archiver/v3 v3.6.3/go.mod h1:5V9l+Fte30Y4qe9dUOAd3yNTf8lmtVNuhKNrvI8PMhg= +github.com/jfrog/build-info-go v1.13.0 h1:bHedp1Gl+a8eR71xxP5JvkqwDj2X3r6e5NiIwNcIwRM= +github.com/jfrog/build-info-go v1.13.0/go.mod h1:+OCtMb22/D+u7Wne5lzkjJjaWr0LRZcHlDwTH86Mpwo= github.com/jfrog/gofrog v1.7.6 h1:QmfAiRzVyaI7JYGsB7cxfAJePAZTzFz0gRWZSE27c6s= github.com/jfrog/gofrog v1.7.6/go.mod h1:ntr1txqNOZtHplmaNd7rS4f8jpA5Apx8em70oYEe7+4= github.com/jfrog/jfrog-client-go v1.55.0 h1:dZq7sLjUJMps8X1I5coVUChprtR7xklp7oSfmZnI48w= @@ -830,8 +833,8 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-localereader v0.0.1 h1:ygSAOl7ZXTx4RdPYinUpg6W99U8jWvWi9Ye2JC/oIi4= github.com/mattn/go-localereader v0.0.1/go.mod h1:8fBrzywKY7BI3czFoHkuzRoWE9C+EiG4R1k4Cjx5p88= github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk= -github.com/mattn/go-runewidth v0.0.20 h1:WcT52H91ZUAwy8+HUkdM3THM6gXqXuLJi9O3rjcQQaQ= -github.com/mattn/go-runewidth v0.0.20/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= +github.com/mattn/go-runewidth v0.0.21 h1:jJKAZiQH+2mIinzCJIaIG9Be1+0NR+5sz/lYEEjdM8w= +github.com/mattn/go-runewidth v0.0.21/go.mod h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= @@ -848,8 +851,6 @@ github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa1 github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0 h1:i6ampVEEF4wQFF+bkYfwYgY+F/uYJDktmvLPf7qIgjc= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= github.com/mitchellh/hashstructure/v2 v2.0.2 h1:vGKWl0YJqUNxE8d+h8f6NJLcCJrgbhC4NcD46KavDd4= @@ -861,8 +862,8 @@ github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zx github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/modelcontextprotocol/go-sdk v1.4.0 h1:u0kr8lbJc1oBcawK7Df+/ajNMpIDFE41OEPxdeTLOn8= -github.com/modelcontextprotocol/go-sdk v1.4.0/go.mod h1:Nxc2n+n/GdCebUaqCOhTetptS17SXXNu9IfNTaLDi1E= +github.com/modelcontextprotocol/go-sdk v1.4.1 h1:M4x9GyIPj+HoIlHNGpK2hq5o3BFhC+78PkEaldQRphc= +github.com/modelcontextprotocol/go-sdk v1.4.1/go.mod h1:Bo/mS87hPQqHSRkMv4dQq1XCu6zv4INdXnFZabkNU6s= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -888,13 +889,13 @@ github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRW github.com/ncruces/go-strftime v1.0.0 h1:HMFp8mLCTPp341M/ZnA4qaf7ZlsbTc+miZjCLOFAw7w= github.com/ncruces/go-strftime v1.0.0/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nwaples/rardecode v1.1.3 h1:cWCaZwfM5H7nAD6PyEdcVnczzV8i/JtotnyW/dD9lEc= -github.com/nwaples/rardecode v1.1.3/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= +github.com/nwaples/rardecode/v2 v2.2.2 h1:/5oL8dzYivRM/tqX9VcTSWfbpwcbwKG1QtSJr3b3KcU= +github.com/nwaples/rardecode/v2 v2.2.2/go.mod h1:7uz379lSxPe6j9nvzxUZ+n7mnJNgjsRNb6IbvGVHRmw= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/onsi/gomega v1.34.1 h1:EUMJIKUjM8sKjYbtxQI9A4z2o+rruxnzNvpknOXie6k= github.com/onsi/gomega v1.34.1/go.mod h1:kU1QgUvBDLXBJq618Xvm2LUX6rSAfRaFRTcdOeDLwwY= -github.com/open-policy-agent/opa v1.14.0 h1:sdG94h9GrZQQcTaH70fJhOuU+/C2FAeeAo8mSPssV/U= -github.com/open-policy-agent/opa v1.14.0/go.mod h1:e+JSg7BVV9/vRcD5HYTUeyKIrvigPxYX6T1KcVUaHaM= +github.com/open-policy-agent/opa v1.14.1 h1:MhurLB9mSbXmojYFCmGbiC1Uagu1+aFAV4XVotDA86M= +github.com/open-policy-agent/opa v1.14.1/go.mod h1:B5gykwJ2l0g0wZS4ClCcpfSSEx51n4NHpTsWfuPwqnQ= github.com/openai/openai-go v1.12.0 h1:NBQCnXzqOTv5wsgNC36PrFEiskGfO5wccfCWDo9S1U0= github.com/openai/openai-go v1.12.0/go.mod h1:g461MYGXEXBVdV5SaR/5tNzNbSfwTBBefwc+LlDCK0Y= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -910,10 +911,11 @@ github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144T github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= github.com/pelletier/go-toml/v2 v2.2.4 h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4= github.com/pelletier/go-toml/v2 v2.2.4/go.mod h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY= -github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= -github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU= -github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/petermattis/goid v0.0.0-20250813065127-a731cc31b4fe/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/petermattis/goid v0.0.0-20260226131333-17d1149c6ac6 h1:rh2lKw/P/EqHa724vYH2+VVQ1YnW4u6EOXl0PMAovZE= +github.com/petermattis/goid v0.0.0-20260226131333-17d1149c6ac6/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/pierrec/lz4/v4 v4.1.26 h1:GrpZw1gZttORinvzBdXPUXATeqlJjqUG/D87TKMnhjY= +github.com/pierrec/lz4/v4 v4.1.26/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pjbgf/sha1cd v0.5.0 h1:a+UkboSi1znleCDUNT3M5YxjOnN1fz2FhN48FlwCxs0= @@ -930,13 +932,13 @@ github.com/pkg/xattr v0.4.10 h1:Qe0mtiNFHQZ296vRgUjRCoPHPqH7VdTOrZx3g0T+pGA= github.com/pkg/xattr v0.4.10/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= -github.com/playwright-community/playwright-go v0.5200.1 h1:Sm2oOuhqt0M5Y4kUi/Qh9w4cyyi3ZIWTBeGKImc2UVo= -github.com/playwright-community/playwright-go v0.5200.1/go.mod h1:UnnyQZaqUOO5ywAZu60+N4EiWReUqX1MQBBA3Oofvf8= +github.com/playwright-community/playwright-go v0.5700.1 h1:PNFb1byWqrTT720rEO0JL88C6Ju0EmUnR5deFLvtP/U= +github.com/playwright-community/playwright-go v0.5700.1/go.mod h1:MlSn1dZrx8rszbCxY6x3qK89ZesJUYVx21B2JnkoNF0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posthog/posthog-go v1.10.0 h1:wfoy7Jfb4LigCoHYyMZoiJmmEoCLOkSaYfDxM/NtCqY= -github.com/posthog/posthog-go v1.10.0/go.mod h1:wB3/9Q7d9gGb1P/yf/Wri9VBlbP8oA8z++prRzL5OcY= +github.com/posthog/posthog-go v1.11.1 h1:P0MHlerMW9rNpjW+1szNsJ5HbdYJUv/9lF2DWZCHztE= +github.com/posthog/posthog-go v1.11.1/go.mod h1:wB3/9Q7d9gGb1P/yf/Wri9VBlbP8oA8z++prRzL5OcY= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= @@ -965,11 +967,11 @@ github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsT github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.19.2 h1:zUMhqEW66Ex7OXIiDkll3tl9a1ZdilUOd/F6ZXw4Vws= -github.com/prometheus/procfs v0.19.2/go.mod h1:M0aotyiemPhBCM0z5w87kL22CxfcH05ZpYlu+b4J7mw= +github.com/prometheus/procfs v0.20.1 h1:XwbrGOIplXW/AU3YhIhLODXMJYyC1isLFfYCsTEycfc= +github.com/prometheus/procfs v0.20.1/go.mod h1:o9EMBZGRyvDrSPH1RqdxhojkuXstoe4UlK79eF5TGGo= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/protocolbuffers/txtpbfmt v0.0.0-20251124094003-fcb97cc64c7b h1:fPVI9E6QNFYI0Ph3XpKUDrcAvbCifHvqYJcntFLPog8= -github.com/protocolbuffers/txtpbfmt v0.0.0-20251124094003-fcb97cc64c7b/go.mod h1:JSbkp0BviKovYYt9XunS95M3mLPibE9bGg+Y95DsEEY= +github.com/protocolbuffers/txtpbfmt v0.0.0-20260217160748-a481f6a22f94 h1:2PC6Ql3jipz1KvBlqUHjjk6v4aMwE86mfDu1XMH0LR8= +github.com/protocolbuffers/txtpbfmt v0.0.0-20260217160748-a481f6a22f94/go.mod h1:JSbkp0BviKovYYt9XunS95M3mLPibE9bGg+Y95DsEEY= github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9 h1:bsUq1dX0N8AOIL7EB/X911+m4EHsnWEHeJ0c+3TTBrg= github.com/rcrowley/go-metrics v0.0.0-20250401214520-65e299d6c5c9/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/redis/go-redis/v9 v9.18.0 h1:pMkxYPkEbMPwRdenAzUNyFNrDgHx9U+DrBabWNfSRQs= @@ -998,18 +1000,18 @@ github.com/sagikazarmark/locafero v0.12.0 h1:/NQhBAkUb4+fH1jivKHWusDYFjMOOKU88ee github.com/sagikazarmark/locafero v0.12.0/go.mod h1:sZh36u/YSZ918v0Io+U9ogLYQJ9tLLBmM4eneO6WwsI= github.com/sahilm/fuzzy v0.1.1 h1:ceu5RHF8DGgoi+/dR5PsECjCDH1BE3Fnmpo7aVXOdRA= github.com/sahilm/fuzzy v0.1.1/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y= -github.com/samber/lo v1.52.0 h1:Rvi+3BFHES3A8meP33VPAxiBZX/Aws5RxrschYGjomw= -github.com/samber/lo v1.52.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= +github.com/samber/lo v1.53.0 h1:t975lj2py4kJPQ6haz1QMgtId2gtmfktACxIXArw3HM= +github.com/samber/lo v1.53.0/go.mod h1:4+MXEGsJzbKGaUEQFKBq2xtfuznW9oz/WrgyzMzRoM0= github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4= github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY= -github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= -github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= +github.com/sasha-s/go-deadlock v0.3.7 h1:i3KnHMAptD/cZ8JmDXQnD44luuRbOn+CFeXGnLnf+YU= +github.com/sasha-s/go-deadlock v0.3.7/go.mod h1:KuZj51ZFmx42q/mPaYbRk0P1xcwe697zsJKE03vD4/Y= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/segmentio/asm v1.2.1 h1:DTNbBqs57ioxAD4PrArqftgypG4/qNpXoJx8TVXxPR0= github.com/segmentio/asm v1.2.1/go.mod h1:BqMnlJP91P8d+4ibuonYZw9mfnzI9HfxselHZr5aAcs= -github.com/segmentio/encoding v0.5.3 h1:OjMgICtcSFuNvQCdwqMCv9Tg7lEOXGwm1J5RPQccx6w= -github.com/segmentio/encoding v0.5.3/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0= +github.com/segmentio/encoding v0.5.4 h1:OW1VRern8Nw6ITAtwSZ7Idrl3MXCFwXHPgqESYfvNt0= +github.com/segmentio/encoding v0.5.4/go.mod h1:HS1ZKa3kSN32ZHVZ7ZLPLXWvOVIiZtyJnO1gPH1sKt0= github.com/segmentio/ksuid v1.0.4 h1:sBo2BdShXjmcugAMwjugoGUdUV0pcxY5mW4xKRn3v4c= github.com/segmentio/ksuid v1.0.4/go.mod h1:/XUiZBD3kVx5SmUOl55voK5yeAbBNNIed+2O73XgrPE= github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw= @@ -1032,8 +1034,8 @@ github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9 github.com/smartystreets/goconvey v1.8.1 h1:qGjIddxOk4grTu9JPOU31tVfq3cNdBlNa5sSznIX1xY= github.com/smartystreets/goconvey v1.8.1/go.mod h1:+/u4qLyY6x1jReYOp7GOM2FSt8aP9CzCZL03bI28W60= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sourcegraph/jsonrpc2 v0.2.0 h1:KjN/dC4fP6aN9030MZCJs9WQbTOjWHhrtKVpzzSrr/U= -github.com/sourcegraph/jsonrpc2 v0.2.0/go.mod h1:ZafdZgk/axhT1cvZAPOhw+95nz2I/Ra5qMlU4gTRwIo= +github.com/sourcegraph/jsonrpc2 v0.2.1 h1:2GtljixMQYUYCmIg7W9aF2dFmniq/mOr2T9tFRh6zSQ= +github.com/sourcegraph/jsonrpc2 v0.2.1/go.mod h1:ZafdZgk/axhT1cvZAPOhw+95nz2I/Ra5qMlU4gTRwIo= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.2.0/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= @@ -1096,12 +1098,12 @@ 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/tliron/commonlog v0.2.19 h1:v1mOH1TyzFLqkshR03khw7ENAZPjAyZTQBQrqN+vX9c= -github.com/tliron/commonlog v0.2.19/go.mod h1:AcdhfcUqlAWukDrzTGyaPhUgYiNdZhS4dKzD/e0tjcY= +github.com/tliron/commonlog v0.2.21 h1:V1v+6opmzuOqDxxnxxM5RWtlHZmqZlDxkKeZGs6DpPg= +github.com/tliron/commonlog v0.2.21/go.mod h1:W6XVoS/zo7mHXv2Kz8HKnBq+U34dFysJ2KUh2Aboibw= github.com/tliron/glsp v0.2.2 h1:IKPfwpE8Lu8yB6Dayta+IyRMAbTVunudeauEgjXBt+c= github.com/tliron/glsp v0.2.2/go.mod h1:GMVWDNeODxHzmDPvYbYTCs7yHVaEATfYtXiYJ9w1nBg= -github.com/tliron/kutil v0.3.27 h1:Wb0V5jdbTci6Let1tiGY741J/9FIynmV/pCsPDPsjcM= -github.com/tliron/kutil v0.3.27/go.mod h1:AHeLNIFBSKBU39ELVHZdkw2f/ez2eKGAAGoxwBlhMi8= +github.com/tliron/go-kutil v0.4.0 h1:5JwcBacgnqS3XyhwCWZKvq8ftlbVttNXnt+kfCH+Y2E= +github.com/tliron/go-kutil v0.4.0/go.mod h1:hpHVq+CP1uci2M208UEjPiPwsRsz/QweGBnLB3CaQ24= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/trimble-oss/go-webauthn-client v0.3.0 h1:0OVFjd+xofIaI7iqHkEcAC14BL3QzxTcfl/an8UF0Pg= github.com/trimble-oss/go-webauthn-client v0.3.0/go.mod h1:/yHRnTttIjD0XbRnvEpt7SYWyOkLoO3HcL17saRY6a0= @@ -1112,12 +1114,12 @@ github.com/ugorji/go/codec v1.3.1/go.mod h1:pRBVtBSKl77K30Bv8R2P+cLSGaTtex6fsA2W github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY= github.com/ulikunitz/xz v0.5.15/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/valyala/fastjson v1.6.7 h1:ZE4tRy0CIkh+qDc5McjatheGX2czdn8slQjomexVpBM= -github.com/valyala/fastjson v1.6.7/go.mod h1:CLCAqky6SMuOcxStkYQvblddUtoRxhYMGLrsQns1aXY= +github.com/valyala/fastjson v1.6.10 h1:/yjJg8jaVQdYR3arGxPE2X5z89xrlhS0eGXdv+ADTh4= +github.com/valyala/fastjson v1.6.10/go.mod h1:e6FubmQouUNP73jtMLmcbxS6ydWIpOfhz34TSfO3JaE= github.com/vbatts/tar-split v0.12.2 h1:w/Y6tjxpeiFMR47yzZPlPj/FcPLpXbTUi/9H7d3CPa4= github.com/vbatts/tar-split v0.12.2/go.mod h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA= -github.com/vektah/gqlparser/v2 v2.5.31 h1:YhWGA1mfTjID7qJhd1+Vxhpk5HTgydrGU9IgkWBTJ7k= -github.com/vektah/gqlparser/v2 v2.5.31/go.mod h1:c1I28gSOVNzlfc4WuDlqU7voQnsqI6OG2amkBAFmgts= +github.com/vektah/gqlparser/v2 v2.5.32 h1:k9QPJd4sEDTL+qB4ncPLflqTJ3MmjB9SrVzJrawpFSc= +github.com/vektah/gqlparser/v2 v2.5.32/go.mod h1:c1I28gSOVNzlfc4WuDlqU7voQnsqI6OG2amkBAFmgts= github.com/versent/saml2aws/v2 v2.36.19 h1:LrELOG9AA4migQQMfihmmJ++H8bGevElRNzoNA2XflY= github.com/versent/saml2aws/v2 v2.36.19/go.mod h1:ti3sEknT847HYw3rY2MdQcpf8WzHCNTTsGjkGZW7a1w= github.com/wlynxg/chardet v1.0.4 h1:hkI71Dx8v3RiAz3XKV5lJEh9QfKo7xXKUmYJQeIMlpo= @@ -1169,30 +1171,30 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/auto/sdk v1.2.1 h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64= go.opentelemetry.io/auto/sdk v1.2.1/go.mod h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y= -go.opentelemetry.io/contrib/detectors/gcp v1.40.0 h1:Awaf8gmW99tZTOWqkLCOl6aw1/rxAWVlHsHIZ3fT2sA= -go.opentelemetry.io/contrib/detectors/gcp v1.40.0/go.mod h1:99OY9ZCqyLkzJLTh5XhECpLRSxcZl+ZDKBEO+jMBFR4= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0 h1:XmiuHzgJt067+a6kwyAzkhXooYVv3/TOw9cM2VfJgUM= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.65.0/go.mod h1:KDgtbWKTQs4bM+VPUr6WlL9m/WXcmkCcBlIzqxPGzmI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0 h1:7iP2uCb7sGddAr30RRS6xjKy7AZ2JtTOPA3oolgVSw8= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.65.0/go.mod h1:c7hN3ddxs/z6q9xwvfLPk+UHlWRQyaeR1LdgfL/66l0= -go.opentelemetry.io/otel v1.40.0 h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms= -go.opentelemetry.io/otel v1.40.0/go.mod h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g= +go.opentelemetry.io/contrib/detectors/gcp v1.42.0 h1:kpt2PEJuOuqYkPcktfJqWWDjTEd/FNgrxcniL7kQrXQ= +go.opentelemetry.io/contrib/detectors/gcp v1.42.0/go.mod h1:W9zQ439utxymRrXsUOzZbFX4JhLxXU4+ZnCt8GG7yA8= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0 h1:yI1/OhfEPy7J9eoa6Sj051C7n5dvpj0QX8g4sRchg04= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.67.0/go.mod h1:NoUCKYWK+3ecatC4HjkRktREheMeEtrXoQxrqYFeHSc= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0 h1:OyrsyzuttWTSur2qN/Lm0m2a8yqyIjUVBZcxFPuXq2o= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.67.0/go.mod h1:C2NGBr+kAB4bk3xtMXfZ94gqFDtg/GkI7e9zqGh5Beg= +go.opentelemetry.io/otel v1.42.0 h1:lSQGzTgVR3+sgJDAU/7/ZMjN9Z+vUip7leaqBKy4sho= +go.opentelemetry.io/otel v1.42.0/go.mod h1:lJNsdRMxCUIWuMlVJWzecSMuNjE7dOYyWlqOXWkdqCc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 h1:QKdN8ly8zEMrByybbQgv8cWBcdAarwmIPZ6FThrWXJs= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0/go.mod h1:bTdK1nhqF76qiPoCCdyFIV+N/sRHYXYCTQc+3VCi3MI= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 h1:DvJDOPmSWQHWywQS6lKL+pb8s3gBLOZUtw4N+mavW1I= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0/go.mod h1:EtekO9DEJb4/jRyN4v4Qjc2yA7AtfCBuz2FynRUWTXs= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0 h1:wVZXIWjQSeSmMoxF74LzAnpVQOAFDo3pPji9Y4SOFKc= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.40.0/go.mod h1:khvBS2IggMFNwZK/6lEeHg/W57h/IX6J4URh57fuI40= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0 h1:5gn2urDL/FBnK8OkCfD1j3/ER79rUuTYmCvlXBKeYL8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.39.0/go.mod h1:0fBG6ZJxhqByfFZDwSwpZGzJU671HkwpWaNe2t4VUPI= -go.opentelemetry.io/otel/metric v1.40.0 h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g= -go.opentelemetry.io/otel/metric v1.40.0/go.mod h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc= -go.opentelemetry.io/otel/sdk v1.40.0 h1:KHW/jUzgo6wsPh9At46+h4upjtccTmuZCFAc9OJ71f8= -go.opentelemetry.io/otel/sdk v1.40.0/go.mod h1:Ph7EFdYvxq72Y8Li9q8KebuYUr2KoeyHx0DRMKrYBUE= -go.opentelemetry.io/otel/sdk/metric v1.40.0 h1:mtmdVqgQkeRxHgRv4qhyJduP3fYJRMX4AtAlbuWdCYw= -go.opentelemetry.io/otel/sdk/metric v1.40.0/go.mod h1:4Z2bGMf0KSK3uRjlczMOeMhKU2rhUqdWNoKcYrtcBPg= -go.opentelemetry.io/otel/trace v1.40.0 h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw= -go.opentelemetry.io/otel/trace v1.40.0/go.mod h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0 h1:ZrPRak/kS4xI3AVXy8F7pipuDXmDsrO8Lg+yQjBLjw0= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.40.0/go.mod h1:3y6kQCWztq6hyW8Z9YxQDDm0Je9AJoFar2G0yDcmhRk= +go.opentelemetry.io/otel/metric v1.42.0 h1:2jXG+3oZLNXEPfNmnpxKDeZsFI5o4J+nz6xUlaFdF/4= +go.opentelemetry.io/otel/metric v1.42.0/go.mod h1:RlUN/7vTU7Ao/diDkEpQpnz3/92J9ko05BIwxYa2SSI= +go.opentelemetry.io/otel/sdk v1.42.0 h1:LyC8+jqk6UJwdrI/8VydAq/hvkFKNHZVIWuslJXYsDo= +go.opentelemetry.io/otel/sdk v1.42.0/go.mod h1:rGHCAxd9DAph0joO4W6OPwxjNTYWghRWmkHuGbayMts= +go.opentelemetry.io/otel/sdk/metric v1.42.0 h1:D/1QR46Clz6ajyZ3G8SgNlTJKBdGp84q9RKCAZ3YGuA= +go.opentelemetry.io/otel/sdk/metric v1.42.0/go.mod h1:Ua6AAlDKdZ7tdvaQKfSmnFTdHx37+J4ba8MwVCYM5hc= +go.opentelemetry.io/otel/trace v1.42.0 h1:OUCgIPt+mzOnaUTpOQcBiM/PLQ/Op7oq6g4LenLmOYY= +go.opentelemetry.io/otel/trace v1.42.0/go.mod h1:f3K9S+IFqnumBkKhRJMeaZeNk9epyhnCmQh/EysQCdc= go.opentelemetry.io/proto/otlp v1.9.0 h1:l706jCMITVouPOqEnii2fIAuO3IVGBRPV5ICjceRb/A= go.opentelemetry.io/proto/otlp v1.9.0/go.mod h1:xE+Cx5E/eEHw+ISFkwPLwCZefwVjY+pqKg1qcK03+/4= go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d h1:Ns9kd1Rwzw7t0BR8XMphenji4SmIoNZPn8zhYmaVKP8= @@ -1206,8 +1208,8 @@ go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y= go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0= -go.yaml.in/yaml/v2 v2.4.3/go.mod h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8= +go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ= +go.yaml.in/yaml/v2 v2.4.4/go.mod h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ= go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= go.yaml.in/yaml/v4 v4.0.0-rc.4 h1:UP4+v6fFrBIb1l934bDl//mmnoIZEDK0idg1+AIvX5U= @@ -1233,11 +1235,11 @@ golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliY golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= -golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= -golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= +golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4= +golang.org/x/crypto v0.49.0/go.mod h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a h1:ovFr6Z0MNmU7nH8VaX5xqw+05ST2uO1exVfZPVqRC5o= -golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90 h1:jiDhWWeC7jfWqR9c/uplMOqJ0sbNlNWv0UkzE0vX1MA= +golang.org/x/exp v0.0.0-20260312153236-7ab1446f8b90/go.mod h1:xE1HEv6b+1SCZ5/uscMRjUBKtIxworgEcEi+/n9NQDQ= golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a h1:Jw5wfR+h9mnIYH+OtGT2im5wV1YGGDora5vTv/aa5bE= golang.org/x/exp/typeparams v0.0.0-20221208152030-732eee02a75a/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1250,8 +1252,8 @@ golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= -golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= +golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI= +golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1277,12 +1279,12 @@ golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/net v0.33.0/go.mod h1:HXLR5J+9DxmrqMwG9qjGCxZ+zKXxBru04zlTvWlWuN4= -golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= -golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= +golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0= +golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= -golang.org/x/oauth2 v0.35.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-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1296,8 +1298,8 @@ golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -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/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-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1338,8 +1340,8 @@ golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= -golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo= +golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw= golang.org/x/telemetry v0.0.0-20240228155512-f48c80bd79b2/go.mod h1:TeRTkGYfJXctD9OcfyVLyj2J3IxLnKwHJR8f4D8a3YE= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= @@ -1350,8 +1352,8 @@ golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= golang.org/x/term v0.27.0/go.mod h1:iMsnZpn0cago0GOrHO2+Y7u7JPn5AylBrcoWkElMTSM= -golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= -golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= +golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU= +golang.org/x/term v0.41.0/go.mod h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A= 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= @@ -1364,11 +1366,11 @@ golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= -golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= +golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8= +golang.org/x/text v0.35.0/go.mod h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= -golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= +golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U= +golang.org/x/time v0.15.0/go.mod h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1384,8 +1386,8 @@ golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= -golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= -golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= +golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s= +golang.org/x/tools v0.43.0/go.mod h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0= 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= @@ -1394,29 +1396,29 @@ golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhS golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= -google.golang.org/api v0.269.0 h1:qDrTOxKUQ/P0MveH6a7vZ+DNHxJQjtGm/uvdbdGXCQg= -google.golang.org/api v0.269.0/go.mod h1:N8Wpcu23Tlccl0zSHEkcAZQKDLdquxK+l9r2LkwAauE= +google.golang.org/api v0.271.0 h1:cIPN4qcUc61jlh7oXu6pwOQqbJW2GqYh5PS6rB2C/JY= +google.golang.org/api v0.271.0/go.mod h1:CGT29bhwkbF+i11qkRUJb2KMKqcJ1hdFceEIRd9u64Q= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/genai v1.49.0 h1:Se+QJaH2GYK1aaR1o5S38mlU2GD5FnVvP76nfkV7LH0= -google.golang.org/genai v1.49.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= +google.golang.org/genai v1.50.0 h1:yHKV/vjoeN9PJ3iF0ur4cBZco4N3Kl7j09rMq7XSoWk= +google.golang.org/genai v1.50.0/go.mod h1:A3kkl0nyBjyFlNjgxIwKq70julKbIxpSxqKO5gw/gmk= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20260209200024-4cfbd4190f57 h1:uZSB/r2MjH9IsqpG2vRNSV1Juteix90oHe8oTcLW9tk= -google.golang.org/genproto v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:nGuPfp0lnDJcJD0J47StV0Skgnw3qMSQhjsLKiejq5Y= -google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57 h1:JLQynH/LBHfCTSbDWl+py8C+Rg/k1OVH3xfcaiANuF0= -google.golang.org/genproto/googleapis/api v0.0.0-20260209200024-4cfbd4190f57/go.mod h1:kSJwQxqmFXeo79zOmbrALdflXQeAYcUbgS7PbpMknCY= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d h1:t/LOSXPJ9R0B6fnZNyALBRfZBH0Uy0gT+uR+SJ6syqQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20260217215200-42d3e9bedb6d/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= +google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c h1:ZhFDeBMmFc/4g8/GwxnJ4rzB3O4GwQVNr+8Mh7Y5z4g= +google.golang.org/genproto v0.0.0-20260311181403-84a4fc48630c/go.mod h1:hf4r/rBuzaTkLUWRO03771Xvcs6P5hwdQK3UUEJjqo0= +google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c h1:OyQPd6I3pN/9gDxz6L13kYGJgqkpdrAohJRBeXyxlgI= +google.golang.org/genproto/googleapis/api v0.0.0-20260311181403-84a4fc48630c/go.mod h1:X2gu9Qwng7Nn009s/r3RUxqkzQNqOrAy79bluY7ojIg= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c h1:xgCzyF2LFIO/0X2UAoVRiXKU5Xg6VjToG4i2/ecSswk= +google.golang.org/genproto/googleapis/rpc v0.0.0-20260311181403-84a4fc48630c/go.mod h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.79.1 h1:zGhSi45ODB9/p3VAawt9a+O/MULLl9dpizzNNpq7flY= -google.golang.org/grpc v1.79.1/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= +google.golang.org/grpc v1.79.2 h1:fRMD94s2tITpyJGtBBn7MkMseNpOZU8ZxgC3MMBaXRU= +google.golang.org/grpc v1.79.2/go.mod h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1466,24 +1468,24 @@ honnef.co/go/tools v0.4.5 h1:YGD4H+SuIOOqsyoLOpZDWcieM28W47/zRO7f+9V3nvo= honnef.co/go/tools v0.4.5/go.mod h1:GUV+uIBCLpdf0/v6UhHHG/yzI/z6qPskBeQCjcNB96k= inet.af/netaddr v0.0.0-20230525184311-b8eac61e914a h1:1XCVEdxrvL6c0TGOhecLuB7U9zYNdxZEjvOqJreKZiM= inet.af/netaddr v0.0.0-20230525184311-b8eac61e914a/go.mod h1:e83i32mAQOW1LAqEIweALsuK2Uw4mhQadA5r7b0Wobo= -k8s.io/client-go v0.35.1 h1:+eSfZHwuo/I19PaSxqumjqZ9l5XiTEKbIaJ+j1wLcLM= -k8s.io/client-go v0.35.1/go.mod h1:1p1KxDt3a0ruRfc/pG4qT/3oHmUj1AhSHEcxNSGg+OA= +k8s.io/client-go v0.35.2 h1:YUfPefdGJA4aljDdayAXkc98DnPkIetMl4PrKX97W9o= +k8s.io/client-go v0.35.2/go.mod h1:4QqEwh4oQpeK8AaefZ0jwTFJw/9kIjdQi0jpKeYvz7g= k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU= k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= modernc.org/cc/v4 v4.27.1 h1:9W30zRlYrefrDV2JE2O8VDtJ1yPGownxciz5rrbQZis= modernc.org/cc/v4 v4.27.1/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0= -modernc.org/ccgo/v4 v4.30.1 h1:4r4U1J6Fhj98NKfSjnPUN7Ze2c6MnAdL0hWw6+LrJpc= -modernc.org/ccgo/v4 v4.30.1/go.mod h1:bIOeI1JL54Utlxn+LwrFyjCx2n2RDiYEaJVSrgdrRfM= -modernc.org/fileutil v1.3.40 h1:ZGMswMNc9JOCrcrakF1HrvmergNLAmxOPjizirpfqBA= -modernc.org/fileutil v1.3.40/go.mod h1:HxmghZSZVAz/LXcMNwZPA/DRrQZEVP9VX0V4LQGQFOc= +modernc.org/ccgo/v4 v4.32.0 h1:hjG66bI/kqIPX1b2yT6fr/jt+QedtP2fqojG2VrFuVw= +modernc.org/ccgo/v4 v4.32.0/go.mod h1:6F08EBCx5uQc38kMGl+0Nm0oWczoo1c7cgpzEry7Uc0= +modernc.org/fileutil v1.4.0 h1:j6ZzNTftVS054gi281TyLjHPp6CPHr2KCxEXjEbD6SM= +modernc.org/fileutil v1.4.0/go.mod h1:EqdKFDxiByqxLk8ozOxObDSfcVOv/54xDs/DUHdvCUU= modernc.org/gc/v2 v2.6.5 h1:nyqdV8q46KvTpZlsw66kWqwXRHdjIlJOhG6kxiV/9xI= modernc.org/gc/v2 v2.6.5/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito= -modernc.org/gc/v3 v3.1.1 h1:k8T3gkXWY9sEiytKhcgyiZ2L0DTyCQ/nvX+LoCljoRE= -modernc.org/gc/v3 v3.1.1/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= +modernc.org/gc/v3 v3.1.2 h1:ZtDCnhonXSZexk/AYsegNRV1lJGgaNZJuKjJSWKyEqo= +modernc.org/gc/v3 v3.1.2/go.mod h1:HFK/6AGESC7Ex+EZJhJ2Gni6cTaYpSMmU/cT9RmlfYY= modernc.org/goabi0 v0.2.0 h1:HvEowk7LxcPd0eq6mVOAEMai46V+i7Jrj13t4AzuNks= modernc.org/goabi0 v0.2.0/go.mod h1:CEFRnnJhKvWT1c1JTI3Avm+tgOWbkOu5oPA8eH8LnMI= -modernc.org/libc v1.67.6 h1:eVOQvpModVLKOdT+LvBPjdQqfrZq+pC39BygcT+E7OI= -modernc.org/libc v1.67.6/go.mod h1:JAhxUVlolfYDErnwiqaLvUqc8nfb2r6S6slAgZOnaiE= +modernc.org/libc v1.70.0 h1:U58NawXqXbgpZ/dcdS9kMshu08aiA6b7gusEusqzNkw= +modernc.org/libc v1.70.0/go.mod h1:OVmxFGP1CI/Z4L3E0Q3Mf1PDE0BucwMkcXjjLntvHJo= modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU= modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg= modernc.org/memory v1.11.0 h1:o4QC8aMQzmcwCK3t3Ux/ZHmwFPzE6hf2Y5LbkRs+hbI= @@ -1498,8 +1500,8 @@ modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0= modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A= modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y= modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -mvdan.cc/sh/v3 v3.12.0 h1:ejKUR7ONP5bb+UGHGEG/k9V5+pRVIyD+LsZz7o8KHrI= -mvdan.cc/sh/v3 v3.12.0/go.mod h1:Se6Cj17eYSn+sNooLZiEUnNNmNxg0imoYlTu4CyaGyg= +mvdan.cc/sh/v3 v3.13.0 h1:dSfq/MVsY4w0Vsi6Lbs0IcQquMVqLdKLESAOZjuHdLg= +mvdan.cc/sh/v3 v3.13.0/go.mod h1:KV1GByGPc/Ho0X1E6Uz9euhsIQEj4hwyKnodLlFLoDM= mvdan.cc/xurls/v2 v2.6.0 h1:3NTZpeTxYVWNSokW3MKeyVkz/j7uYXYiMtXRUfmjbgI= mvdan.cc/xurls/v2 v2.6.0/go.mod h1:bCvEZ1XvdA6wDnxY7jPPjEmigDtvtvPXAD/Exa9IMSk= oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc= diff --git a/internal/terraform_backend/terraform_backend_s3.go b/internal/terraform_backend/terraform_backend_s3.go index d8ba0472ed..2b8485a66e 100644 --- a/internal/terraform_backend/terraform_backend_s3.go +++ b/internal/terraform_backend/terraform_backend_s3.go @@ -13,7 +13,6 @@ import ( "time" "github.com/aws/aws-sdk-go-v2/aws" - _ "github.com/aws/aws-sdk-go-v2/feature/s3/manager" "github.com/aws/aws-sdk-go-v2/service/s3" "github.com/aws/aws-sdk-go-v2/service/s3/types" "github.com/aws/smithy-go" diff --git a/pkg/ai/analyze/analyze_test.go b/pkg/ai/analyze/analyze_test.go index 85786da760..3f9f963b8d 100644 --- a/pkg/ai/analyze/analyze_test.go +++ b/pkg/ai/analyze/analyze_test.go @@ -220,7 +220,7 @@ func TestBuildAnalysisPrompt_BothStreams(t *testing.T) { } func TestBuildAnalysisPrompt_ContainsSystemPrompt(t *testing.T) { - prompt := buildAnalysisPrompt(newInput("atmos version", "1.209.0", "", nil, "")) + prompt := buildAnalysisPrompt(newInput("atmos version", "1.210.0", "", nil, "")) assert.Contains(t, prompt, "Atmos AI") assert.Contains(t, prompt, "infrastructure-as-code") diff --git a/pkg/devcontainer/lifecycle_rebuild_test.go b/pkg/devcontainer/lifecycle_rebuild_test.go index c1be9f8e76..5f5616b7a2 100644 --- a/pkg/devcontainer/lifecycle_rebuild_test.go +++ b/pkg/devcontainer/lifecycle_rebuild_test.go @@ -409,7 +409,7 @@ func TestManager_Rebuild(t *testing.T) { Context: ".", Dockerfile: "Dockerfile", Args: map[string]string{ - "ATMOS_VERSION": "1.209.0", + "ATMOS_VERSION": "1.210.0", }, }, } @@ -431,7 +431,7 @@ func TestManager_Rebuild(t *testing.T) { assert.Equal(t, ".", buildConfig.Context) assert.Equal(t, "Dockerfile", buildConfig.Dockerfile) assert.Equal(t, []string{"atmos-devcontainer-geodesic"}, buildConfig.Tags) - assert.Equal(t, map[string]string{"ATMOS_VERSION": "1.209.0"}, buildConfig.Args) + assert.Equal(t, map[string]string{"ATMOS_VERSION": "1.210.0"}, buildConfig.Args) return nil }) // Pull is NOT called for locally built images since they don't exist From ea7e858a3cbff5e422c112adef27d418255a3691 Mon Sep 17 00:00:00 2001 From: aknysh Date: Sun, 15 Mar 2026 23:22:02 -0400 Subject: [PATCH 2/9] fix: derive stack name for locals so !terraform.state works (#2080) The 2-arg form of !terraform.state in locals failed with "stack is required" because extractLocalsFromRawYAML passed an empty string as the current stack. Add deriveStackNameForLocals() and computeStackFileName() to derive the stack name from the file path, vars, and atmos config before processing locals. Includes unit tests with mock StateGetter, integration tests for Go template conditionals with !env, a new locals-conditional fixture, and comprehensive architecture documentation. Co-Authored-By: Claude Opus 4.6 --- ...s-terraform-state-missing-stack-context.md | 508 ++++++++++++++++++ examples/locals/README.md | 10 +- internal/exec/stack_processor_utils.go | 71 ++- internal/exec/stack_processor_utils_test.go | 279 ++++++++++ tests/cli_locals_test.go | 59 ++ .../scenarios/locals-conditional/atmos.yaml | 20 + .../components/terraform/mock/main.tf | 14 + .../stacks/deploy/pr-empty.yaml | 18 + .../stacks/deploy/pr-set.yaml | 18 + 9 files changed, 988 insertions(+), 9 deletions(-) create mode 100644 docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md create mode 100644 tests/fixtures/scenarios/locals-conditional/atmos.yaml create mode 100644 tests/fixtures/scenarios/locals-conditional/components/terraform/mock/main.tf create mode 100644 tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-empty.yaml create mode 100644 tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-set.yaml diff --git a/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md b/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md new file mode 100644 index 0000000000..bd46fbeb2c --- /dev/null +++ b/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md @@ -0,0 +1,508 @@ +# Locals: `!terraform.state` Fails with "stack is required" Error + +**Date:** 2026-03-15 + +**Related Issues:** +- [#2080](https://github.com/cloudposse/atmos/issues/2080) — `!terraform.state` in catalog file `locals` + fails with "stack is required" error +- User report: `!terraform.state` in locals fails because stack context is not available + +**Affected Atmos Versions:** v1.200.0 through v1.209.0 + +**Severity:** High — `!terraform.state` and `!terraform.output` YAML functions are broken in +locals, despite being documented as supported + +--- + +## File-Scoped Locals Architecture + +### Overview + +File-scoped locals is a major feature in Atmos that provides Terraform-like local variables within stack +configuration files. Unlike `vars` which inherit across imports, **locals are strictly file-scoped** and never +propagate across file boundaries. This enables users to reduce repetition and define reusable computed values +within a single file using dependency resolution with cycle detection. + +### Processing Pipeline + +```text +1. Stack File Loading + Raw YAML file → Parse YAML → Extract locals sections (global, terraform, helmfile, packer) + +2. Locals Resolution (for each scope: global → section → component) + Extract "locals:" map + → Build template context (settings, vars, env from same file) + → Create Resolver with parent locals + → Build dependency graph (extract .locals.X references) + → Topological sort (Kahn's algorithm) + → Resolve in order (YAML functions first, then Go templates) + → Return merged locals (parent + resolved) + +3. Template Processing + Component vars/settings/env templates + → Template context includes .locals, .settings, .vars, .env + → Render template → Final value passed to Terraform/Helmfile + +4. Output (describe locals) + ProcessStackLocals() → LocalsContext + → If component: merge global + section + component locals + → If stack only: show stack-level locals with section overrides + → YAML/JSON output +``` + +### Core Package: pkg/locals/resolver.go + +#### Resolver Architecture + +```go +type Resolver struct { + locals map[string]any // Raw local definitions + resolved map[string]any // Resolved local values + dependencies map[string][]string // Dependency graph + filePath string // For error messages + templateContext map[string]any // Settings, vars, env context + yamlFunctionProcessor YamlFunctionProcessor // YAML function callback +} +``` + +#### Resolution Steps + +1. **Build Dependency Graph** (`buildDependencyGraph()`) + - Extracts `.locals.X` references from template strings using AST utilities. + - Handles strings, maps, and slices recursively. + - Uses `pkg/template.ExtractFieldRefsByPrefix(str, "locals")`. + +2. **Topological Sort with Cycle Detection** (`topologicalSort()`) + - Uses **Kahn's algorithm** with in-degree calculation. + - Detects cycles using **DFS** before outputting. + - Maintains deterministic order by sorting alphabetically at each step. + - Clear error messages showing the cycle path (e.g., `a -> b -> c -> a`). + +3. **Template Resolution** (`resolveLocal()` and `resolveString()`) + - Process YAML functions first (via callback) if string starts with `!`. + - Then process Go templates using Sprig function library. + - Template context includes: resolved locals, settings, vars, env. + - Error reporting includes available locals and context keys. + +#### Template Context + +```go +context := map[string]any{ + "settings": ..., // From same file + "vars": ..., // From same file + "env": ..., // Environment section + "locals": resolved, // Currently resolved locals +} +``` + +### Scope Hierarchy + +#### Multi-Level Scopes with Inheritance + +```text +Global (root level) + ↓ inherits +Component-Type (terraform/helmfile/packer section) + ↓ inherits +Component-Level (inside component definition) + ↓ inherits from base components via metadata.inherits +Final resolved locals +``` + +#### Merge Order (for a component) + +1. Global Locals (from root level) +2. Section Locals (from terraform/helmfile/packer section) +3. Base Component Locals (via `metadata.inherits`) +4. Component's Own Locals +5. Final merged locals available to templates + +#### File-Scoped vs Component-Level + +**File-Scoped Locals (Global + Section):** +- Defined once per file. +- Available to all components of compatible type. +- Cannot be overridden by individual components. +- Use for: common values, naming conventions, shared computed values. + +**Component-Level Locals:** +- Defined within each component block. +- Override file-scoped locals. +- Support inheritance from base components. +- Use for: component-specific customization, derived from inherited values. + +### Stack Processing: internal/exec/stack_processor_locals.go + +#### Main Functions + +**`ProcessStackLocals()`** — Top-level orchestrator: +1. Builds template context from stack config (settings, vars, env). +2. Resolves global locals (no parent). +3. Resolves terraform section locals (inherit from global). +4. Resolves helmfile section locals (inherit from global). +5. Resolves packer section locals (inherit from global). +6. Returns `LocalsContext` with all scope levels. + +**`ExtractAndResolveLocals()`** — Single scope resolver: +1. Check if locals section exists. +2. Validate it's a map. +3. Create `locals.Resolver` with template context (settings, vars, env from same file) and YAML function processor. +4. Call `Resolve(parentLocals)` for dependency ordering. + +**`createYamlFunctionProcessor()`** — YAML function support: +- Wraps value in a map. +- Calls `ProcessCustomYamlTags()` to handle `!terraform.state`, `!env`, etc. +- Extracts processed result. + +#### LocalsContext Struct + +```go +type LocalsContext struct { + Global map[string]any + Terraform map[string]any // Global + terraform section + Helmfile map[string]any // Global + helmfile section + Packer map[string]any // Global + packer section + HasTerraformLocals bool + HasHelmfileLocals bool + HasPackerLocals bool +} +``` + +**Methods:** +- `MergeForComponentType(type)` — Get merged locals for specific component type. +- `MergeForTemplateContext()` — Get all locals merged (Global -> Terraform -> Helmfile -> Packer). +- `GetForComponentType(type)` — Get finals for template usage. + +### CLI Command: atmos describe locals + +#### Usage + +```bash +atmos describe locals [component] -s +atmos describe locals --stack deploy/dev +atmos describe locals vpc -s prod +atmos describe locals -s dev --format json +``` + +#### Flags + +- `-s, --stack` (required) — Stack identifier (file path or logical name). +- `-f, --format` — Output format (yaml/json, default: yaml). +- `--file` — Write output to file. +- `--query` — YQ expression to filter results. + +#### Output Format + +**Stack-Level:** + +```yaml +locals: + namespace: acme +terraform: + locals: + backend_bucket: acme-tfstate +``` + +**Component-Level:** + +```yaml +components: + terraform: + vpc: + locals: + namespace: acme + backend_bucket: acme-tfstate +``` + +### Supported Features + +1. **Locals referencing other locals** with topological sort resolution. +2. **Circular dependency detection** with clear error formatting (`a -> b -> c -> a`). +3. **Multi-level scopes** with inheritance from outer to inner scopes. +4. **Component inheritance** — component-level locals inherit from base components. +5. **No cross-file inheritance** — intentionally file-scoped only. +6. **Complex values** — maps, nested structures, lists with templates. +7. **Sprig functions** — `upper`, `quote`, conditionals, etc. +8. **YAML functions** — `!env`, `!terraform.state`, `!store`, `!exec`, etc. +9. **Settings/vars/env access** — `{{ .settings.X }}`, `{{ .vars.X }}`, `{{ .env.X }}` from same file. + +### Key Design Decisions + +#### 1. File-Scoped, Not Inherited +- Locals do NOT cross file boundaries via imports. +- Predictability: you see exactly what locals are available by reading the file. +- No hidden dependencies across files. +- Safer refactoring: changing a local doesn't break other files. +- Clear separation: use `vars` for propagating values, `locals` for file convenience. + +#### 2. Topological Sort with Cycle Detection +- Kahn's algorithm for deterministic ordering. +- DFS catches cycles before processing. +- Deterministic output (alphabetical sorting at each step). +- Clear error messages showing cycle path. + +#### 3. Template Context Access +- Locals can access settings, vars, env from same file. +- Enables computed values based on other file sections. +- No need to duplicate values. + +#### 4. YAML Functions in Locals +- Support `!terraform.state`, `!env`, `!store`, etc. +- YAML functions resolved before templates. +- Enables sophisticated composed configurations. + +#### 5. Not in Output +- Locals stripped from component output (unlike settings). +- Strictly internal convenience tools. +- Not part of the Terraform/Helmfile input. + +### Limitations and Edge Cases + +1. **No cross-file access:** Cannot reference locals from imported files (intentional). +2. **No dynamic key names:** Locals keys must be literals. +3. **Settings/vars dependency:** If a local references an undefined setting/var, it will template error. +4. **Windows path escaping:** Need single quotes in YAML when locals reference env vars with backslashes. +5. **Template processing required:** If locals are defined, template processing is enabled for the whole file + (watch for `skip_templates_processing` in imports). +6. **Circular dependencies detected at resolution time:** Not at parse time. + +### Implementation File Summary + +| File | Lines | Purpose | +|-------------------------------------------|-------|-----------------------------------------------------------------| +| `pkg/locals/resolver.go` | ~527 | Core dependency resolution, topological sort, cycle detection | +| `pkg/locals/resolver_test.go` | ~727 | 31 comprehensive test cases covering all scenarios | +| `internal/exec/stack_processor_locals.go` | ~416 | Stack file processing, multi-scope extraction, template context | +| `internal/exec/describe_locals.go` | ~558 | CLI command execution, stack/component locals output | +| `cmd/describe_locals.go` | ~172 | Command registration, flag parsing, CLI interface | +| `docs/prd/file-scoped-locals.md` | ~3000 | Complete specification and design documentation | +| `examples/locals/` | - | Working example with dev/prod stacks | + +### Test Fixtures (13 Scenarios) + +| Fixture | What It Tests | +|------------------------------|------------------------------------------------------------------| +| `locals` | Basic locals usage and resolution | +| `locals-advanced` | Nested value access in settings/vars, section-specific locals | +| `locals-circular` | Circular dependency detection with clear error messages | +| `locals-component-level` | Component-level locals with inheritance via metadata.inherits | +| `locals-conditional` | Go template conditionals with !env in locals (new, for this fix) | +| `locals-deep-import-chain` | Locals don't propagate through multi-level import chains | +| `locals-env-test` | Environment variable access in locals | +| `locals-file-scoped` | File-scoping enforcement (locals stay within their file) | +| `locals-logical-names` | Logical stack names with name_template work correctly | +| `locals-not-inherited` | Explicit proof that locals are NOT inherited across imports | +| `locals-settings-access` | Locals can access settings from the same file | +| `locals-settings-cross-file` | Cross-file settings behavior with locals | +| `locals-yaml-functions` | YAML functions (!env, !terraform.state, etc.) in locals | + +--- + +## Issue Description + +### Issue 1: Go Template Conditionals in Locals (v1.200.0) + +A user reports that Go template conditionals in locals are too verbose: + +```yaml +locals: + pr_number: !env PR_NUMBER + datastream_name: '{{ if .locals.pr_number }}datastreampr{{ .locals.pr_number }}{{ else }}datastream{{ end }}' +``` + +**Status:** This works correctly in v1.205.0+ after the file-scoped-locals-fix release. The user was on +v1.200.0 which predated the fix. **No code change needed** — this is a version issue. + +### Issue 2: `!terraform.state` in Locals (GitHub #2080) + +When using `!terraform.state` with the 2-argument form in a `locals` block: + +```yaml +locals: + vpc_id: !terraform.state vpc .vpc_id + +components: + terraform: + eks: + vars: + vpc_id: "{{ .locals.vpc_id }}" +``` + +The error: + +```text +Error: invalid stack manifest: failed to process stack locals: failed to resolve global locals: + failed to process YAML function in local "vpc_id": + failed to describe component vpc in stack `` + in YAML function: !terraform.state vpc .vpc_id + stack is required; specify it on the command line using the flag --stack +``` + +### Issue 3: `!terraform.state` with Explicit Stack Template + +User tried workarounds: + +```yaml +# Attempt 1: Template in YAML function argument — invalid argument count +locals: + my_var: !terraform.state example/componentZero {{ .stack }} '.attr["key"]' + +# Attempt 2: Quoted template — hangs +locals: + my_var: !terraform.state example/componentZero "{{ .stack }}" '.attr["key"]' +``` + +--- + +## Root Cause Analysis + +### The Stack Context Gap + +The root cause is in `internal/exec/stack_processor_utils.go`, function `extractLocalsFromRawYAML`: + +```go +// Line 82-84: +// Note: At this early stage, stack name is not yet determined, so we pass empty string. +// YAML functions that require stack context won't work here, but Go templates will. +localsCtx, err := ProcessStackLocals(atmosConfig, rawConfig, filePath, "") +``` + +The stack name is passed as **empty string** (`""`) because locals extraction happens during early YAML +processing — before the stack context is fully formed. This is by design for the general case, but it +breaks YAML functions that require stack context. + +### How the Empty Stack Propagates + +1. `extractLocalsFromRawYAML()` passes `""` as `currentStack` +2. → `ProcessStackLocals()` passes it to `ExtractAndResolveLocals()` +3. → `createYamlFunctionProcessor()` captures the empty `currentStack` +4. → `processTagTerraformState()` receives empty `currentStack` +5. → For 2-arg form (`!terraform.state component .output`), uses `currentStack` as stack (line 82): + ```go + case 2: + component = strings.TrimSpace(parts[0]) + stack = currentStack // This is ""! + output = strings.TrimSpace(parts[1]) + ``` +6. → `stateGetter.GetState()` fails because stack is empty + +### Why This Is Different From `!env` + +`!env` works in locals because it doesn't need stack context — it reads environment variables directly. +`!terraform.state` with 2 args implicitly uses the current stack, which isn't available during early +processing. + +--- + +## Fix + +### Approach: Derive Stack Name from File Path Before Locals Processing + +The stack name can be derived from the file path using the same logic that `describe locals` uses +(`deriveStackName`). We need to: + +1. Parse the raw YAML to get the `vars` section +2. Derive the stack name from the file path + vars + atmos config +3. Pass the derived stack name to `ProcessStackLocals` + +### Implementation + +Two new helper functions added to `internal/exec/stack_processor_utils.go`: + +**`deriveStackNameForLocals()`** — extracts vars from raw config and calls `deriveStackName()` (from +`describe_locals.go`) to compute the stack name from file path + vars + atmos config. + +**`computeStackFileName()`** — strips the stacks base path prefix and file extension from an absolute +file path to produce a relative name like `deploy/dev` or `orgs/acme/plat/dev/us-east-1`. + +The fix in `extractLocalsFromRawYAML()` replaces the empty string `""` with the derived stack name: + +```go +// Before (broken): +localsCtx, err := ProcessStackLocals(atmosConfig, rawConfig, filePath, "") + +// After (fixed): +currentStack := deriveStackNameForLocals(atmosConfig, rawConfig, filePath) +localsCtx, err := ProcessStackLocals(atmosConfig, rawConfig, filePath, currentStack) +``` + +### File Changes + +| File | Change | +|------------------------------------------------|-------------------------------------------------------------------------------------| +| `internal/exec/stack_processor_utils.go` | Add `deriveStackNameForLocals()`, `computeStackFileName()`; pass derived stack name | +| `internal/exec/stack_processor_utils_test.go` | 7 new unit tests (see Test Results below) | +| `tests/cli_locals_test.go` | 2 new integration tests for Go template conditionals | +| `tests/fixtures/scenarios/locals-conditional/` | New fixture with isolated stacks for conditional tests | + +--- + +## Configuration Example + +After the fix, this will work correctly: + +```yaml +# stacks/catalog/eks/defaults.yaml +locals: + vpc_id: !terraform.state vpc .vpc_id + subnet_ids: !terraform.state vpc .private_subnet_ids + +components: + terraform: + eks: + vars: + vpc_id: "{{ .locals.vpc_id }}" + subnet_ids: "{{ .locals.subnet_ids }}" +``` + +```yaml +# stacks/orgs/acme/plat/dev/us-east-1.yaml +import: + - catalog/eks/defaults +``` + +```bash +atmos terraform plan eks --stack plat-ue1-dev +# Now works! !terraform.state resolves using the stack context from the importing stack. +``` + +--- + +## Backward Compatibility + +- All existing locals usage is unaffected +- `!env`, `!exec`, `!store` in locals continue to work as before +- `!terraform.state` with 3 args (explicit stack) was already working +- `!terraform.state` with 2 args (implicit stack) now works when the stack can be derived +- If the stack cannot be derived (e.g., catalog file processed without stack context), the error message + is improved to explain the limitation + +--- + +## Test Results + +All tests pass after the fix. + +### Unit Tests (`internal/exec/`) + +- `TestComputeStackFileName` — 4 cases (simple path, nested org path, yml extension, nil config) +- `TestDeriveStackNameForLocals` — 3 cases (name_pattern, nil config, no vars) +- `TestExtractLocalsFromRawYAML_StackNameDerived` — confirms `!env` + Go template conditionals work +- `TestExtractLocalsFromRawYAML_GoTemplateConditionalEmpty` — confirms empty env var takes else branch +- `TestExtractLocalsFromRawYAML_TerraformStateInLocals` — mock-based: verifies derived stack name + ("dev") is passed to `stateGetter.GetState()` instead of empty string (core fix for #2080) +- `TestExtractLocalsFromRawYAML_TerraformStateComposedLocals` — mock-based: verifies `!terraform.state` + results can be composed with Go templates in other locals +- `TestExtractLocalsFromRawYAML_TerraformState3ArgForm` — mock-based: verifies 3-arg form with explicit + stack still works correctly + +### Integration Tests (`tests/`) + +- `TestLocalsGoTemplateConditionalWithEnvSet` — end-to-end: Go template conditional with `!env` set +- `TestLocalsGoTemplateConditionalWithEnvEmpty` — end-to-end: Go template conditional with `!env` empty + +### Regression + +- All 20 existing `TestExtractLocals*` unit tests pass +- All `pkg/locals/` tests pass +- All 37 locals integration tests pass diff --git a/examples/locals/README.md b/examples/locals/README.md index b1e86b254b..4e5a5c58da 100644 --- a/examples/locals/README.md +++ b/examples/locals/README.md @@ -28,8 +28,8 @@ atmos describe locals myapp -s prod ## Key Files -| File | Purpose | -|------|---------| -| `stacks/deploy/dev.yaml` | Development stack with locals | -| `stacks/deploy/prod.yaml` | Production stack with locals | -| `components/terraform/myapp/main.tf` | Terraform component | +| File | Purpose | +|--------------------------------------|-------------------------------| +| `stacks/deploy/dev.yaml` | Development stack with locals | +| `stacks/deploy/prod.yaml` | Production stack with locals | +| `components/terraform/myapp/main.tf` | Terraform component | diff --git a/internal/exec/stack_processor_utils.go b/internal/exec/stack_processor_utils.go index ad30420449..98f16360fd 100644 --- a/internal/exec/stack_processor_utils.go +++ b/internal/exec/stack_processor_utils.go @@ -78,10 +78,13 @@ func extractLocalsFromRawYAML(atmosConfig *schema.AtmosConfiguration, yamlConten return &extractLocalsResult{}, nil } - // Use ProcessStackLocals which handles global and section-level scopes. - // Note: At this early stage, stack name is not yet determined, so we pass empty string. - // YAML functions that require stack context won't work here, but Go templates will. - localsCtx, err := ProcessStackLocals(atmosConfig, rawConfig, filePath, "") + // Derive the stack name from the file path so that YAML functions like + // !terraform.state (2-arg form) can resolve their implicit stack reference. + // Previously, an empty string was passed here, which caused !terraform.state + // to fail with "stack is required" (see GitHub issue #2080). + currentStack := deriveStackNameForLocals(atmosConfig, rawConfig, filePath) + + localsCtx, err := ProcessStackLocals(atmosConfig, rawConfig, filePath, currentStack) if err != nil { return nil, fmt.Errorf("%w: failed to process stack locals: %w", errUtils.ErrInvalidStackManifest, err) } @@ -89,6 +92,66 @@ func extractLocalsFromRawYAML(atmosConfig *schema.AtmosConfiguration, yamlConten return buildLocalsResult(rawConfig, localsCtx), nil } +// deriveStackNameForLocals derives the stack name from the file path and raw config +// so that YAML functions in locals (like !terraform.state) can use stack context. +// This uses the same logic as describe_locals.go (deriveStackName) to compute the +// stack name from the file path, vars section, and atmos config. +// Returns empty string if the stack name cannot be determined. +func deriveStackNameForLocals(atmosConfig *schema.AtmosConfiguration, rawConfig map[string]any, filePath string) string { + if atmosConfig == nil { + return "" + } + + // Extract vars section for stack name derivation. + var varsSection map[string]any + if vs, ok := rawConfig[cfg.VarsSectionName].(map[string]any); ok { + varsSection = vs + } + + // Compute relative stack file name from file path. + stackFileName := computeStackFileName(atmosConfig, filePath) + if stackFileName == "" { + return "" + } + + return deriveStackName(atmosConfig, stackFileName, varsSection, rawConfig) +} + +// computeStackFileName computes the relative stack file name from an absolute file path +// by stripping the stacks base path prefix and the file extension. +// This produces a name like "deploy/dev" or "orgs/acme/plat/dev/us-east-1". +func computeStackFileName(atmosConfig *schema.AtmosConfiguration, filePath string) string { + if atmosConfig == nil { + return "" + } + + // Get the absolute stacks base path. + stacksBasePath := filepath.Join(atmosConfig.BasePath, atmosConfig.Stacks.BasePath) + absStacksBasePath, err := filepath.Abs(stacksBasePath) + if err != nil { + return "" + } + + absFilePath, err := filepath.Abs(filePath) + if err != nil { + return "" + } + + // Strip the base path prefix. + rel, err := filepath.Rel(absStacksBasePath, absFilePath) + if err != nil { + return "" + } + + // Remove file extension (.yaml, .yml, etc.). + ext := filepath.Ext(rel) + if ext != "" { + rel = rel[:len(rel)-len(ext)] + } + + return rel +} + // buildLocalsResult builds an extractLocalsResult from raw config and resolved locals context. func buildLocalsResult(rawConfig map[string]any, localsCtx *LocalsContext) *extractLocalsResult { result := &extractLocalsResult{ diff --git a/internal/exec/stack_processor_utils_test.go b/internal/exec/stack_processor_utils_test.go index 32abb0e6a6..74f877e7db 100644 --- a/internal/exec/stack_processor_utils_test.go +++ b/internal/exec/stack_processor_utils_test.go @@ -9,6 +9,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "go.uber.org/mock/gomock" errUtils "github.com/cloudposse/atmos/errors" "github.com/cloudposse/atmos/pkg/schema" @@ -2605,3 +2606,281 @@ func TestAtmosProTemplateRegression(t *testing.T) { assert.Equal(t, "{{ .atmos_component }}", componentInput, "Template {{ .atmos_component }} should be preserved during import, not processed") } + +// TestComputeStackFileName tests that computeStackFileName correctly strips the +// stacks base path and file extension to produce a relative stack file name. +func TestComputeStackFileName(t *testing.T) { + tests := []struct { + name string + config *schema.AtmosConfiguration + filePath string + expected string + }{ + { + name: "simple deploy path with name_pattern", + config: &schema.AtmosConfiguration{ + BasePath: "/project", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + filePath: "/project/stacks/deploy/dev.yaml", + expected: filepath.Join("deploy", "dev"), + }, + { + name: "nested org path", + config: &schema.AtmosConfiguration{ + BasePath: "/project", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + filePath: "/project/stacks/orgs/acme/plat/dev/us-east-1.yaml", + expected: filepath.Join("orgs", "acme", "plat", "dev", "us-east-1"), + }, + { + name: "yml extension", + config: &schema.AtmosConfiguration{ + BasePath: "/project", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + filePath: "/project/stacks/deploy/prod.yml", + expected: filepath.Join("deploy", "prod"), + }, + { + name: "nil config returns empty", + config: nil, + filePath: "/project/stacks/deploy/dev.yaml", + expected: "", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if tt.config == nil { + result := computeStackFileName(tt.config, tt.filePath) + assert.Empty(t, result) + return + } + result := computeStackFileName(tt.config, tt.filePath) + assert.Equal(t, tt.expected, result) + }) + } +} + +// TestDeriveStackNameForLocals tests that deriveStackNameForLocals correctly +// derives the stack name from file path and raw config for locals processing. +func TestDeriveStackNameForLocals(t *testing.T) { + t.Run("derives stack name from name_pattern and vars", func(t *testing.T) { + config := &schema.AtmosConfiguration{ + BasePath: "/project", + Stacks: schema.Stacks{ + BasePath: "stacks", + NamePattern: "{stage}", + }, + } + rawConfig := map[string]any{ + "vars": map[string]any{ + "stage": "dev", + }, + } + result := deriveStackNameForLocals(config, rawConfig, "/project/stacks/deploy/dev.yaml") + assert.Equal(t, "dev", result) + }) + + t.Run("nil config returns empty", func(t *testing.T) { + rawConfig := map[string]any{ + "vars": map[string]any{"stage": "dev"}, + } + result := deriveStackNameForLocals(nil, rawConfig, "/project/stacks/deploy/dev.yaml") + assert.Empty(t, result) + }) + + t.Run("no vars uses filename as stack name", func(t *testing.T) { + config := &schema.AtmosConfiguration{ + BasePath: "/project", + Stacks: schema.Stacks{ + BasePath: "stacks", + }, + } + rawConfig := map[string]any{} + result := deriveStackNameForLocals(config, rawConfig, "/project/stacks/deploy/dev.yaml") + // Without name_pattern or name_template, falls back to file name. + assert.Equal(t, filepath.Join("deploy", "dev"), result) + }) +} + +// TestExtractLocalsFromRawYAML_StackNameDerived tests that extractLocalsFromRawYAML +// derives the stack name from the file path and passes it to ProcessStackLocals, +// rather than passing an empty string. This is the fix for GitHub issue #2080. +func TestExtractLocalsFromRawYAML_StackNameDerived(t *testing.T) { + // This test verifies that locals with Go template conditionals using !env work correctly. + // Issue 1 from the fix doc: Go template conditionals were broken in v1.200.0 but work now. + t.Setenv("PR_NUMBER", "42") + + atmosConfig := &schema.AtmosConfiguration{} + yamlContent := ` +locals: + pr_number: !env PR_NUMBER + datastream_name: '{{ if .locals.pr_number }}datastreampr{{ .locals.pr_number }}{{ else }}datastream{{ end }}' +` + result, err := extractLocalsFromRawYAML(atmosConfig, yamlContent, "test.yaml") + + require.NoError(t, err) + require.NotNil(t, result) + assert.Equal(t, "42", result.locals["pr_number"]) + assert.Equal(t, "datastreampr42", result.locals["datastream_name"]) +} + +// TestExtractLocalsFromRawYAML_GoTemplateConditionalEmpty tests Go template conditionals +// when the environment variable is empty (the else branch should be taken). +func TestExtractLocalsFromRawYAML_GoTemplateConditionalEmpty(t *testing.T) { + // When PR_NUMBER is empty, the else branch should produce "datastream". + t.Setenv("PR_NUMBER_EMPTY_TEST", "") + + atmosConfig := &schema.AtmosConfiguration{} + yamlContent := ` +locals: + pr_number: !env PR_NUMBER_EMPTY_TEST + datastream_name: '{{ if .locals.pr_number }}datastreampr{{ .locals.pr_number }}{{ else }}datastream{{ end }}' +` + result, err := extractLocalsFromRawYAML(atmosConfig, yamlContent, "test.yaml") + + require.NoError(t, err) + require.NotNil(t, result) + assert.Equal(t, "", result.locals["pr_number"]) + assert.Equal(t, "datastream", result.locals["datastream_name"]) +} + +// TestExtractLocalsFromRawYAML_TerraformStateInLocals tests that !terraform.state +// in locals correctly receives the derived stack name instead of empty string. +// This is the core test for the GitHub issue #2080 fix. +func TestExtractLocalsFromRawYAML_TerraformStateInLocals(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockStateGetterObj := NewMockTerraformStateGetter(ctrl) + originalGetter := stateGetter + stateGetter = mockStateGetterObj + defer func() { stateGetter = originalGetter }() + + // Create a temp directory structure that simulates a real Atmos project. + tmpDir := t.TempDir() + stacksDir := filepath.Join(tmpDir, "stacks", "deploy") + require.NoError(t, os.MkdirAll(stacksDir, 0o755)) + + stackFile := filepath.Join(stacksDir, "dev.yaml") + + atmosConfig := &schema.AtmosConfiguration{ + BasePath: tmpDir, + Stacks: schema.Stacks{ + BasePath: "stacks", + NamePattern: "{stage}", + }, + } + + // The mock expects to be called with stack="dev" (derived from file path + name_pattern + vars). + // Before the fix, stack would be "" causing the "stack is required" error. + mockStateGetterObj.EXPECT(). + GetState( + atmosConfig, + gomock.Any(), + "dev", // stack - derived from name_pattern {stage} + vars.stage=dev + "vpc", // component + ".vpc_id", // output + false, // skipCache + gomock.Any(), // authContext + gomock.Any(), // authManager + ). + Return("vpc-12345", nil) + + yamlContent := ` +vars: + stage: dev + +locals: + vpc_id: !terraform.state vpc .vpc_id +` + result, err := extractLocalsFromRawYAML(atmosConfig, yamlContent, stackFile) + + require.NoError(t, err) + require.NotNil(t, result) + assert.Equal(t, "vpc-12345", result.locals["vpc_id"]) +} + +// TestExtractLocalsFromRawYAML_TerraformStateComposedLocals tests that !terraform.state +// results can be used in composed locals via Go templates. +func TestExtractLocalsFromRawYAML_TerraformStateComposedLocals(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockStateGetterObj := NewMockTerraformStateGetter(ctrl) + originalGetter := stateGetter + stateGetter = mockStateGetterObj + defer func() { stateGetter = originalGetter }() + + tmpDir := t.TempDir() + stacksDir := filepath.Join(tmpDir, "stacks", "deploy") + require.NoError(t, os.MkdirAll(stacksDir, 0o755)) + + stackFile := filepath.Join(stacksDir, "prod.yaml") + + atmosConfig := &schema.AtmosConfiguration{ + BasePath: tmpDir, + Stacks: schema.Stacks{ + BasePath: "stacks", + NamePattern: "{stage}", + }, + } + + // Mock two separate !terraform.state calls. + mockStateGetterObj.EXPECT(). + GetState(atmosConfig, gomock.Any(), "prod", "vpc", ".vpc_id", false, gomock.Any(), gomock.Any()). + Return("vpc-prod-99", nil) + + mockStateGetterObj.EXPECT(). + GetState(atmosConfig, gomock.Any(), "prod", "vpc", ".private_subnet_ids", false, gomock.Any(), gomock.Any()). + Return("subnet-a,subnet-b", nil) + + yamlContent := ` +vars: + stage: prod + +locals: + vpc_id: !terraform.state vpc .vpc_id + subnet_ids: !terraform.state vpc .private_subnet_ids + vpc_info: "vpc={{ .locals.vpc_id }}, subnets={{ .locals.subnet_ids }}" +` + result, err := extractLocalsFromRawYAML(atmosConfig, yamlContent, stackFile) + + require.NoError(t, err) + require.NotNil(t, result) + assert.Equal(t, "vpc-prod-99", result.locals["vpc_id"]) + assert.Equal(t, "subnet-a,subnet-b", result.locals["subnet_ids"]) + assert.Equal(t, "vpc=vpc-prod-99, subnets=subnet-a,subnet-b", result.locals["vpc_info"]) +} + +// TestExtractLocalsFromRawYAML_TerraformState3ArgForm tests that !terraform.state +// with 3 args (explicit stack) still works correctly. +func TestExtractLocalsFromRawYAML_TerraformState3ArgForm(t *testing.T) { + ctrl := gomock.NewController(t) + defer ctrl.Finish() + + mockStateGetterObj := NewMockTerraformStateGetter(ctrl) + originalGetter := stateGetter + stateGetter = mockStateGetterObj + defer func() { stateGetter = originalGetter }() + + atmosConfig := &schema.AtmosConfiguration{} + + // 3-arg form uses the explicit stack "shared", not the derived stack. + mockStateGetterObj.EXPECT(). + GetState(atmosConfig, gomock.Any(), "shared", "vpc", ".vpc_id", false, gomock.Any(), gomock.Any()). + Return("vpc-shared-01", nil) + + yamlContent := ` +locals: + vpc_id: !terraform.state vpc shared .vpc_id +` + result, err := extractLocalsFromRawYAML(atmosConfig, yamlContent, "test.yaml") + + require.NoError(t, err) + require.NotNil(t, result) + assert.Equal(t, "vpc-shared-01", result.locals["vpc_id"]) +} diff --git a/tests/cli_locals_test.go b/tests/cli_locals_test.go index b834518037..85f51142b4 100644 --- a/tests/cli_locals_test.go +++ b/tests/cli_locals_test.go @@ -1316,3 +1316,62 @@ func TestLocalsWithYamlFunctionsEnv(t *testing.T) { assert.Equal(t, "static-test-value", vars["static_value"], "static_value should be passed through unchanged") } + +// TestLocalsGoTemplateConditionalWithEnvSet tests that Go template conditionals +// in locals work correctly when the !env var is set (if branch taken). +// This is the integration test for user-reported Issue 1 (GitHub #2080 related). +// Uses a separate fixture to avoid stack cache interference with other tests. +func TestLocalsGoTemplateConditionalWithEnvSet(t *testing.T) { + t.Setenv("ATMOS_TEST_CONDITIONAL_PR_SET", "42") + t.Setenv("ATMOS_TEST_CONDITIONAL_PR_EMPTY", "") + + t.Chdir("./fixtures/scenarios/locals-conditional") + + result, err := exec.ExecuteDescribeComponent(&exec.ExecuteDescribeComponentParams{ + Component: "conditional-pr-set", + Stack: "pr-set", + ProcessTemplates: true, + ProcessYamlFunctions: true, + }) + require.NoError(t, err) + require.NotNil(t, result) + + vars, ok := result["vars"].(map[string]any) + require.True(t, ok, "vars should be a map") + + assert.Equal(t, "datastreampr42", vars["datastream_name"], + "datastream_name should use pr_number when set") + assert.Equal(t, "preview", vars["deploy_env"], + "deploy_env should be 'preview' when pr_number is set") + assert.Equal(t, "42", vars["pr_number"], + "pr_number should be the env var value") +} + +// TestLocalsGoTemplateConditionalWithEnvEmpty tests that Go template conditionals +// in locals work correctly when the !env var is empty (else branch taken). +// Uses a separate fixture and env var to avoid stack cache interference. +func TestLocalsGoTemplateConditionalWithEnvEmpty(t *testing.T) { + t.Setenv("ATMOS_TEST_CONDITIONAL_PR_SET", "") + t.Setenv("ATMOS_TEST_CONDITIONAL_PR_EMPTY", "") + + t.Chdir("./fixtures/scenarios/locals-conditional") + + result, err := exec.ExecuteDescribeComponent(&exec.ExecuteDescribeComponentParams{ + Component: "conditional-pr-empty", + Stack: "pr-empty", + ProcessTemplates: true, + ProcessYamlFunctions: true, + }) + require.NoError(t, err) + require.NotNil(t, result) + + vars, ok := result["vars"].(map[string]any) + require.True(t, ok, "vars should be a map") + + assert.Equal(t, "datastream", vars["datastream_name"], + "datastream_name should use default when pr_number is empty") + assert.Equal(t, "production", vars["deploy_env"], + "deploy_env should be 'production' when pr_number is empty") + assert.Equal(t, "", vars["pr_number"], + "pr_number should be empty when env var is not set") +} diff --git a/tests/fixtures/scenarios/locals-conditional/atmos.yaml b/tests/fixtures/scenarios/locals-conditional/atmos.yaml new file mode 100644 index 0000000000..364c1328e9 --- /dev/null +++ b/tests/fixtures/scenarios/locals-conditional/atmos.yaml @@ -0,0 +1,20 @@ +# Test fixture for Go template conditionals in locals with !env. +base_path: "./" + +components: + terraform: + base_path: "components/terraform" + +stacks: + base_path: "stacks" + included_paths: + - "deploy/**/*" + name_template: "{{ .vars.stage }}" + +templates: + settings: + enabled: true + sprig: + enabled: true + gomplate: + enabled: true diff --git a/tests/fixtures/scenarios/locals-conditional/components/terraform/mock/main.tf b/tests/fixtures/scenarios/locals-conditional/components/terraform/mock/main.tf new file mode 100644 index 0000000000..14402bd164 --- /dev/null +++ b/tests/fixtures/scenarios/locals-conditional/components/terraform/mock/main.tf @@ -0,0 +1,14 @@ +variable "datastream_name" { + type = string + default = "" +} + +variable "deploy_env" { + type = string + default = "" +} + +variable "pr_number" { + type = string + default = "" +} diff --git a/tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-empty.yaml b/tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-empty.yaml new file mode 100644 index 0000000000..85a6b4ed89 --- /dev/null +++ b/tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-empty.yaml @@ -0,0 +1,18 @@ +# Test: Go template conditionals with !env when env var is NOT set. +vars: + stage: pr-empty + +locals: + pr_number: !env ATMOS_TEST_CONDITIONAL_PR_EMPTY + datastream_name: '{{ if .locals.pr_number }}datastreampr{{ .locals.pr_number }}{{ else }}datastream{{ end }}' + deploy_env: '{{ if .locals.pr_number }}preview{{ else }}production{{ end }}' + +components: + terraform: + conditional-pr-empty: + metadata: + component: mock + vars: + datastream_name: "{{ .locals.datastream_name }}" + deploy_env: "{{ .locals.deploy_env }}" + pr_number: "{{ .locals.pr_number }}" diff --git a/tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-set.yaml b/tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-set.yaml new file mode 100644 index 0000000000..76570994b1 --- /dev/null +++ b/tests/fixtures/scenarios/locals-conditional/stacks/deploy/pr-set.yaml @@ -0,0 +1,18 @@ +# Test: Go template conditionals with !env when env var IS set. +vars: + stage: pr-set + +locals: + pr_number: !env ATMOS_TEST_CONDITIONAL_PR_SET + datastream_name: '{{ if .locals.pr_number }}datastreampr{{ .locals.pr_number }}{{ else }}datastream{{ end }}' + deploy_env: '{{ if .locals.pr_number }}preview{{ else }}production{{ end }}' + +components: + terraform: + conditional-pr-set: + metadata: + component: mock + vars: + datastream_name: "{{ .locals.datastream_name }}" + deploy_env: "{{ .locals.deploy_env }}" + pr_number: "{{ .locals.pr_number }}" From 5a608695f56af91841b88ea54c24d153647f95e6 Mon Sep 17 00:00:00 2001 From: aknysh Date: Sun, 15 Mar 2026 23:40:14 -0400 Subject: [PATCH 3/9] Update locals example to showcase all features concisely Add Sprig functions (pipe upper), multiple components (myapp-worker with suffixed full_name), and file-scoped isolation commentary. Update README with feature sections and try-it commands. Add TestExampleLocalsWorkerComponent test. Co-Authored-By: Claude Opus 4.6 --- examples/locals/README.md | 80 ++++++++++++++++--- .../locals/components/terraform/myapp/main.tf | 31 ++++--- examples/locals/stacks/deploy/dev.yaml | 34 +++++--- examples/locals/stacks/deploy/prod.yaml | 12 ++- tests/cli_locals_test.go | 28 +++++++ 5 files changed, 146 insertions(+), 39 deletions(-) diff --git a/examples/locals/README.md b/examples/locals/README.md index 4e5a5c58da..eeb9334a69 100644 --- a/examples/locals/README.md +++ b/examples/locals/README.md @@ -6,10 +6,13 @@ Learn more about [Locals](https://atmos.tools/stacks/locals). ## What You'll See -- **Basic locals**: Define reusable values within a file -- **Dependency resolution**: Locals can reference other locals -- **Context access**: Locals can access `settings`, `vars`, and `env` from the same file -- **File-scoped isolation**: Each stack file has independent locals +- **Basic locals** — define reusable values within a file +- **Dependency resolution** — locals reference other locals, resolved via topological sort +- **Context access** — locals use `{{ .settings.X }}`, `{{ .vars.X }}` from the same file +- **Sprig functions** — pipe syntax like `{{ .locals.namespace | upper }}` +- **Complex values** — maps with templates for resource tags +- **Multiple components** — the same locals shared across components in a file +- **File-scoped isolation** — dev.yaml and prod.yaml have independent locals ## Try It @@ -22,14 +25,69 @@ atmos describe locals -s dev # View resolved locals for a specific component atmos describe locals myapp -s dev -# Compare dev vs prod -atmos describe locals myapp -s prod +# See how locals flow into component vars +atmos describe component myapp -s dev + +# Compare dev vs prod (same patterns, different values) +atmos describe component myapp -s prod + +# Worker component appends a suffix to locals +atmos describe component myapp-worker -s dev +``` + +## Features Demonstrated + +### 1. Basic Locals and References + +```yaml +locals: + namespace: acme + environment: development + name_prefix: "{{ .locals.namespace }}-{{ .locals.environment }}" +``` + +Locals are resolved in dependency order — `name_prefix` waits for `namespace` and `environment`. + +### 2. Settings and Vars Access + +```yaml +settings: + version: v1 +vars: + stage: dev +locals: + app_version: "{{ .settings.version }}" # → "v1" + stage_name: "{{ .vars.stage }}" # → "dev" ``` +### 3. Sprig Functions + +```yaml +locals: + namespace_upper: '{{ .locals.namespace | upper }}' # → "ACME" +``` + +### 4. Complex Values (Maps) + +```yaml +locals: + default_tags: + Namespace: "{{ .locals.namespace }}" + Environment: "{{ .locals.environment }}" + Team: "{{ .settings.team }}" + ManagedBy: Atmos +``` + +### 5. File-Scoped Isolation + +Each stack file has its own locals. Even though both `dev.yaml` and `prod.yaml` +define `namespace: acme`, they are completely separate — changing one never +affects the other. Locals never propagate across file boundaries via imports. + ## Key Files -| File | Purpose | -|--------------------------------------|-------------------------------| -| `stacks/deploy/dev.yaml` | Development stack with locals | -| `stacks/deploy/prod.yaml` | Production stack with locals | -| `components/terraform/myapp/main.tf` | Terraform component | +| File | Purpose | +|--------------------------------------|-------------------------------------------| +| `stacks/deploy/dev.yaml` | Dev stack: all locals features | +| `stacks/deploy/prod.yaml` | Prod stack: same patterns, different values | +| `components/terraform/myapp/main.tf` | Mock Terraform component | diff --git a/examples/locals/components/terraform/myapp/main.tf b/examples/locals/components/terraform/myapp/main.tf index e9a60fabca..8a93f4c374 100644 --- a/examples/locals/components/terraform/myapp/main.tf +++ b/examples/locals/components/terraform/myapp/main.tf @@ -1,7 +1,4 @@ # Mock component for locals demo. -# -# This component outputs the variables it receives, allowing you to see -# how locals are resolved and passed to components. variable "name" { type = string @@ -24,22 +21,30 @@ variable "tags" { default = {} } -output "name" { - description = "Application name" - value = var.name +variable "deploy_target" { + type = string + description = "Deployment target (computed from conditional locals)" + default = "stable" } -output "environment" { - description = "Environment name" - value = var.environment +variable "managed_by" { + type = string + description = "Tool that manages this resource" + default = "atmos" +} + +output "name" { + value = var.name } output "full_name" { - description = "Full application name" - value = var.full_name + value = var.full_name +} + +output "deploy_target" { + value = var.deploy_target } output "tags" { - description = "Resource tags" - value = var.tags + value = var.tags } diff --git a/examples/locals/stacks/deploy/dev.yaml b/examples/locals/stacks/deploy/dev.yaml index 8c0c6ba921..079342443d 100644 --- a/examples/locals/stacks/deploy/dev.yaml +++ b/examples/locals/stacks/deploy/dev.yaml @@ -1,7 +1,7 @@ # Development Environment Stack # -# This stack demonstrates locals for reducing repetition and building -# computed values. Locals are file-scoped (cannot be accessed from other files). +# Demonstrates locals features in one concise file. +# Locals are file-scoped: they never propagate across file boundaries. settings: version: v1 @@ -10,32 +10,33 @@ settings: vars: stage: dev -# Locals can reference other locals, settings, and vars. locals: - # Basic values + # 1. Basic values namespace: acme environment: development - # Reference other locals + # 2. Reference other locals (dependency-ordered via topological sort) name_prefix: "{{ .locals.namespace }}-{{ .locals.environment }}" - # Access settings + # 3. Access settings and vars from the same file app_version: "{{ .settings.version }}" - - # Access vars stage_name: "{{ .vars.stage }}" - # Build complex computed values + # 4. Build computed values from other locals full_name: "{{ .locals.name_prefix }}-{{ .locals.stage_name }}" - # Maps work too + # 5. Sprig functions (pipe syntax) + namespace_upper: '{{ .locals.namespace | upper }}' + + # 6. Complex values (maps with templates) default_tags: Namespace: "{{ .locals.namespace }}" Environment: "{{ .locals.environment }}" Team: "{{ .settings.team }}" ManagedBy: Atmos -# Components use the resolved locals +# Components use resolved locals via Go templates. +# Locals are NOT included in component output — they are strictly internal. components: terraform: myapp: @@ -44,3 +45,14 @@ components: environment: "{{ .locals.environment }}" full_name: "{{ .locals.full_name }}" tags: "{{ .locals.default_tags }}" + + # Section-level locals (under terraform:) inherit from global locals. + # This shows that you can also define locals here. + myapp-worker: + metadata: + component: myapp + vars: + name: "{{ .locals.namespace }}" + environment: "{{ .locals.environment }}" + full_name: "{{ .locals.full_name }}-worker" + tags: "{{ .locals.default_tags }}" diff --git a/examples/locals/stacks/deploy/prod.yaml b/examples/locals/stacks/deploy/prod.yaml index 412ae1c23b..fb58fc1e22 100644 --- a/examples/locals/stacks/deploy/prod.yaml +++ b/examples/locals/stacks/deploy/prod.yaml @@ -1,7 +1,8 @@ # Production Environment Stack # -# This stack shows locals with different values for production. -# Each file has its own isolated locals scope. +# Each file has its own independent locals scope. +# Even though both dev.yaml and prod.yaml define `namespace: acme`, +# they are completely separate — changing one never affects the other. settings: version: v2 @@ -14,11 +15,14 @@ locals: namespace: acme environment: production - # Same pattern, different values + # Same patterns as dev.yaml, different values. name_prefix: "{{ .locals.namespace }}-{{ .locals.environment }}" full_name: "{{ .locals.name_prefix }}-{{ .vars.stage }}" - # Production-specific tags + # Sprig pipe syntax works too. + namespace_upper: '{{ .locals.namespace | upper }}' + + # Production-specific tags with extra fields. default_tags: Namespace: "{{ .locals.namespace }}" Environment: "{{ .locals.environment }}" diff --git a/tests/cli_locals_test.go b/tests/cli_locals_test.go index 85f51142b4..a9d0aad841 100644 --- a/tests/cli_locals_test.go +++ b/tests/cli_locals_test.go @@ -1101,6 +1101,34 @@ func TestExampleLocalsDescribeLocals(t *testing.T) { assert.Equal(t, "acme-development-dev", locals["full_name"], "locals.full_name mismatch") assert.Equal(t, "v1", locals["app_version"], "locals.app_version should access settings.version") assert.Equal(t, "dev", locals["stage_name"], "locals.stage_name should access vars.stage") + + // Verify Sprig function results. + assert.Equal(t, "ACME", locals["namespace_upper"], "locals.namespace_upper should be uppercased via Sprig") +} + +// TestExampleLocalsWorkerComponent tests the myapp-worker component +// which uses locals to build a suffixed full_name. +func TestExampleLocalsWorkerComponent(t *testing.T) { + t.Chdir("../examples/locals") + + _, err := config.InitCliConfig(schema.ConfigAndStacksInfo{}, false) + require.NoError(t, err) + + result, err := exec.ExecuteDescribeComponent(&exec.ExecuteDescribeComponentParams{ + Component: "myapp-worker", + Stack: "dev", + ProcessTemplates: true, + ProcessYamlFunctions: true, + }) + require.NoError(t, err) + require.NotNil(t, result) + + vars, ok := result["vars"].(map[string]any) + require.True(t, ok, "vars should be a map") + + assert.Equal(t, "acme", vars["name"], "worker name should use locals.namespace") + assert.Equal(t, "acme-development-dev-worker", vars["full_name"], + "worker full_name should append -worker suffix") } // ============================================================================= From 614a278a0fe638e3e165ba296672b8b4c013c77e Mon Sep 17 00:00:00 2001 From: aknysh Date: Sun, 15 Mar 2026 23:56:43 -0400 Subject: [PATCH 4/9] Update locals documentation with processing pipeline and YAML function details Add comprehensive documentation for locals processing pipeline, cross-component references with !terraform.state, environment variable conditionals with !env, and updated best practices. Co-Authored-By: Claude Opus 4.6 --- website/docs/stacks/locals.mdx | 105 +++++++++++++-------------------- 1 file changed, 40 insertions(+), 65 deletions(-) diff --git a/website/docs/stacks/locals.mdx b/website/docs/stacks/locals.mdx index e1eb797dcc..ab8f909d64 100644 --- a/website/docs/stacks/locals.mdx +++ b/website/docs/stacks/locals.mdx @@ -20,23 +20,38 @@ The `locals` section defines file-scoped temporary variables for use within temp - **Reduce Repetition:** Define common values once and reference them throughout the file. - **Build Complex Values:** Construct naming conventions, tags, or resource identifiers from simpler components. -- **Improve Readability:** Give meaningful names to computed values instead of repeating expressions. -- **Template Composition:** Build values incrementally by referencing other locals. +- **Cross-Component References:** Use `!terraform.state` to pull outputs from other components into locals. +- **Conditional Logic:** Use Go template conditionals with `!env` results for environment-aware configuration. ## How Locals Work Locals are similar to [Terraform locals](https://developer.hashicorp.com/terraform/language/values/locals) and [Terragrunt locals](https://terragrunt.gruntwork.io/docs/reference/config-blocks-and-attributes/#locals): 1. **File-Scoped:** Locals are only available within the file where they are defined. They do not inherit across imports. -2. **Dependency Resolution:** Locals can reference other locals using `{{ .locals.name }}` syntax. Atmos automatically determines the correct resolution order. -3. **Cycle Detection:** Circular references are detected and reported with clear error messages. +2. **Dependency Resolution:** Locals can reference other locals using `{{ .locals.name }}` syntax. Atmos automatically determines the correct resolution order using topological sort. +3. **Cycle Detection:** Circular references are detected and reported with clear error messages showing the dependency path (e.g., `a -> b -> c -> a`). 4. **Template Support:** Locals support Go templates with [Sprig functions](http://masterminds.github.io/sprig/). +5. **YAML Functions:** Locals support `!env`, `!terraform.state`, `!store`, `!exec`, and other [YAML functions](/functions/yaml). + +### Processing Pipeline + +Locals are resolved in a specific order during stack configuration loading: + +```text +1. Parse raw YAML → extract locals sections (global, terraform, helmfile, packer) +2. Build dependency graph (extract {{ .locals.X }} references) +3. Topological sort with cycle detection +4. Resolve in order: YAML functions first (!env, !terraform.state), then Go templates +5. Make resolved locals available to component templates +``` + +YAML functions are always resolved before Go templates. This means you can fetch a value with `!env` or `!terraform.state` and then use it in a Go template expression in another local. ## Configuration Scopes Locals can be defined at three levels within a file, each inheriting from its parent: -``` +```text Global locals → Component-type locals (terraform/helmfile/packer) → Component-level locals ``` @@ -188,7 +203,7 @@ Locals support full Go template syntax with [Sprig functions](http://masterminds locals: name: myapp environment: production - upper_name: "{{ .locals.name | upper }}" + upper_name: '{{ .locals.name | upper }}' log_level: '{{ if eq .locals.environment "production" }}warn{{ else }}debug{{ end }}' ``` @@ -204,39 +219,40 @@ Locals support all Atmos [YAML functions](/functions/yaml), enabling dynamic val | `!terraform.state` | Terraform state queries | `!terraform.state vpc .vpc_id` | | `!terraform.output` | Terraform outputs | `!terraform.output vpc .vpc_id` | -### Example: Environment Variables +### Environment Variables with Conditionals -Use `!env` to inject environment-specific values into locals: +Use `!env` with Go template conditionals to build environment-aware values: ```yaml locals: - # Fetch from environment variables - api_endpoint: !env API_ENDPOINT - db_host: !env DATABASE_HOST + # Fetch PR number from CI environment (may or may not be set) + pr_number: !env PR_NUMBER - # Combine with Go templates - api_url: "https://{{ .locals.api_endpoint }}/api/v1" - connection_string: "postgresql://app@{{ .locals.db_host }}:5432/mydb" + # Conditional: use PR-specific name in CI, default otherwise + deploy_target: '{{ if .locals.pr_number }}preview-{{ .locals.pr_number }}{{ else }}stable{{ end }}' + datastream: '{{ if .locals.pr_number }}ds-pr{{ .locals.pr_number }}{{ else }}ds-main{{ end }}' components: terraform: - backend: + app: vars: - api_url: "{{ .locals.api_url }}" - database_url: "{{ .locals.connection_string }}" + deploy_target: "{{ .locals.deploy_target }}" ``` -### Example: Cross-Component References +### Cross-Component References -Use `!terraform.state` or `!terraform.output` to reference outputs from other components: +Use `!terraform.state` to reference outputs from other components. The 2-argument form uses the current stack automatically: ```yaml locals: - # Fetch VPC outputs from another component's state + # 2-arg form: component + output (uses current stack) vpc_id: !terraform.state vpc .vpc_id private_subnets: !terraform.state vpc .private_subnet_ids - # Build derived values + # 3-arg form: component + explicit stack + output + shared_vpc_id: !terraform.state vpc shared .vpc_id + + # Build derived values from state outputs cluster_name: "eks-{{ .locals.vpc_id }}" components: @@ -248,49 +264,6 @@ components: name: "{{ .locals.cluster_name }}" ``` -### Example: Secret Management - -Use `!store` to fetch secrets from your configured store: - -```yaml -locals: - # Fetch secrets from store - db_password: !store secrets/database .password - api_key: !store secrets/api .key - - # Build connection strings - database_url: "postgresql://app:{{ .locals.db_password }}@db.example.com/mydb" - -components: - terraform: - app: - vars: - database_url: "{{ .locals.database_url }}" - api_key: "{{ .locals.api_key }}" -``` - -### Example: Dynamic Values with Exec - -Use `!exec` to run commands and capture output: - -```yaml -locals: - # Get current git commit - git_commit: !exec git rev-parse --short HEAD - - # Get current timestamp - build_time: !exec date -u +%Y%m%d%H%M%S - - # Build version string - version: "{{ .locals.git_commit }}-{{ .locals.build_time }}" - -components: - terraform: - app: - vars: - image_tag: "{{ .locals.version }}" -``` - ### Combining YAML Functions with Templates YAML functions are resolved first, then Go templates are processed. This allows you to build complex values: @@ -423,7 +396,7 @@ locals: domain: "{{ .settings.region }}.example.com" # Error if no settings defined ``` -``` +```text Error: map has no entry for key "settings" ``` @@ -440,6 +413,7 @@ locals: 2. **Build incrementally**—compose complex values from simpler locals. 3. **Keep locals close** to where they're used (component-level when possible). 4. **Use vars for cross-file sharing**—locals are file-scoped by design. +5. **Use the 2-arg form** of `!terraform.state` in locals—the current stack is derived automatically. ## Try It @@ -451,3 +425,4 @@ locals: - [Environment Variables (env)](/stacks/env) - [Settings](/stacks/settings) - [Imports](/stacks/imports) +- [YAML Functions](/functions/yaml) From 574a66ba5500f594434b728af23554c39b4cfdb1 Mon Sep 17 00:00:00 2001 From: aknysh Date: Mon, 16 Mar 2026 00:09:02 -0400 Subject: [PATCH 5/9] update docs --- website/docs/stacks/locals.mdx | 59 ++++++++++++++++++---------------- 1 file changed, 31 insertions(+), 28 deletions(-) diff --git a/website/docs/stacks/locals.mdx b/website/docs/stacks/locals.mdx index ab8f909d64..942e00a722 100644 --- a/website/docs/stacks/locals.mdx +++ b/website/docs/stacks/locals.mdx @@ -11,7 +11,9 @@ import Experimental from '@site/src/components/Experimental' import EmbedExample from '@site/src/components/EmbedExample' -The `locals` section defines file-scoped temporary variables for use within templates. Unlike `vars`, `settings`, and `env`, locals do **not** inherit across file boundaries—they are resolved within a single file and can reference each other with automatic dependency resolution. +The `locals` section defines file-scoped temporary variables for use within templates. +Unlike `vars`, `settings`, and `env`, locals do **not** inherit across file boundaries—they are resolved within a +single file and can reference each other with automatic dependency resolution. @@ -30,7 +32,7 @@ Locals are similar to [Terraform locals](https://developer.hashicorp.com/terrafo 1. **File-Scoped:** Locals are only available within the file where they are defined. They do not inherit across imports. 2. **Dependency Resolution:** Locals can reference other locals using `{{ .locals.name }}` syntax. Atmos automatically determines the correct resolution order using topological sort. 3. **Cycle Detection:** Circular references are detected and reported with clear error messages showing the dependency path (e.g., `a -> b -> c -> a`). -4. **Template Support:** Locals support Go templates with [Sprig functions](http://masterminds.github.io/sprig/). +4. **Template Support:** Locals support Go templates with [Sprig functions](http://masterminds.github.io/sprig/), [Gomplate functions](https://docs.gomplate.ca/), and [Atmos template functions](/templates/functions). 5. **YAML Functions:** Locals support `!env`, `!terraform.state`, `!store`, `!exec`, and other [YAML functions](/functions/yaml). ### Processing Pipeline @@ -38,21 +40,22 @@ Locals are similar to [Terraform locals](https://developer.hashicorp.com/terrafo Locals are resolved in a specific order during stack configuration loading: ```text -1. Parse raw YAML → extract locals sections (global, terraform, helmfile, packer) +1. Parse raw YAML → extract locals sections (global, terraform, helmfile, packer, absible, etc.) 2. Build dependency graph (extract {{ .locals.X }} references) 3. Topological sort with cycle detection -4. Resolve in order: YAML functions first (!env, !terraform.state), then Go templates -5. Make resolved locals available to component templates +4. Resolve YAML functions (!env, !terraform.state) +5. Make resolved locals available to templates ``` -YAML functions are always resolved before Go templates. This means you can fetch a value with `!env` or `!terraform.state` and then use it in a Go template expression in another local. +YAML functions are always resolved before Go templates. +This means you can fetch a value with `!env` or `!terraform.state` and then use it in a Go template expression in another local. ## Configuration Scopes Locals can be defined at three levels within a file, each inheriting from its parent: ```text -Global locals → Component-type locals (terraform/helmfile/packer) → Component-level locals +Global locals → Component-type locals (terraform/helmfile/packer/absible) → Component-level locals ``` When the same key exists at multiple levels, the most specific scope wins. @@ -102,7 +105,7 @@ locals: ``` -This design ensures predictability—you can understand a file without tracing imports. +This design ensures predictability — you can understand a file without tracing imports.
How does processing work? @@ -143,7 +146,7 @@ flowchart TB ## Dependency Resolution -Locals can reference other locals in any order—Atmos resolves them automatically: +Locals can reference other locals in any order — Atmos resolves them automatically: ```yaml locals: @@ -160,12 +163,12 @@ Circular references are detected and reported with clear error messages showing Locals can access `settings`, `vars`, and `env` defined in the **same file**: -| Section | Syntax | Description | -|---------|--------|-------------| -| `locals` | `{{ .locals.name }}` | Other locals in the same file | -| `settings` | `{{ .settings.key }}` | Settings defined in the same file | -| `vars` | `{{ .vars.key }}` | Variables defined in the same file | -| `env` | `{{ .env.KEY }}` | Environment variables defined in the same file | +| Section | Syntax | Description | +|------------|-----------------------|------------------------------------------------| +| `locals` | `{{ .locals.name }}` | Other locals in the same file | +| `settings` | `{{ .settings.key }}` | Settings defined in the same file | +| `vars` | `{{ .vars.key }}` | Variables defined in the same file | +| `env` | `{{ .env.KEY }}` | Environment variables defined in the same file | ```yaml settings: @@ -197,7 +200,7 @@ vars: ## Using Templates -Locals support full Go template syntax with [Sprig functions](http://masterminds.github.io/sprig/): +Locals support full Go template syntax with [Sprig functions](http://masterminds.github.io/sprig/), [Gomplate functions](https://docs.gomplate.ca/), and [Atmos template functions](/templates/functions): ```yaml locals: @@ -211,13 +214,13 @@ locals: Locals support all Atmos [YAML functions](/functions/yaml), enabling dynamic value resolution from external sources: -| Function | Description | Example | -|----------|-------------|---------| -| `!env` | Environment variables | `!env API_ENDPOINT` | -| `!exec` | Command execution | `!exec echo hello` | -| `!store` | Store lookups | `!store secrets/db .password` | -| `!terraform.state` | Terraform state queries | `!terraform.state vpc .vpc_id` | -| `!terraform.output` | Terraform outputs | `!terraform.output vpc .vpc_id` | +| Function | Description | Example | +|---------------------|-------------------------|---------------------------------| +| `!env` | Environment variables | `!env API_ENDPOINT` | +| `!exec` | Command execution | `!exec echo hello` | +| `!store` | Store lookups | `!store secrets/db .password` | +| `!terraform.state` | Terraform state queries | `!terraform.state vpc .vpc_id` | +| `!terraform.output` | Terraform outputs | `!terraform.output vpc .vpc_id` | ### Environment Variables with Conditionals @@ -364,11 +367,11 @@ terraform: ## Locals vs Vars -| Aspect | `locals` | `vars` | -|--------|----------|--------| -| **Scope** | File-scoped only | Inherits across imports | -| **Purpose** | Temporary values for DRY | Input variables for components | -| **Output** | Not passed to components | Passed to Terraform/Helmfile/Packer | +| Aspect | `locals` | `vars` | +|-----------------------|-------------------------------|-------------------------------------------| +| **Scope** | File-scoped only | Inherits across imports | +| **Purpose** | Temporary values for DRY | Input variables for components | +| **Output** | Not passed to components | Passed to Terraform/Helmfile/Packer | | **Cross-File Access** | Cannot access imported values | Can access merged values from all imports | Use `locals` for intermediate computations within a single file, and `vars` for values that need to be passed to components or shared across files. From da7a38d41d2721123cb7ecebb811c329a97c0a67 Mon Sep 17 00:00:00 2001 From: "autofix-ci[bot]" <114827586+autofix-ci[bot]@users.noreply.github.com> Date: Mon, 16 Mar 2026 04:14:32 +0000 Subject: [PATCH 6/9] [autofix.ci] apply automated fixes --- NOTICE | 220 ++++++++++++++++++++++++++++----------------------------- 1 file changed, 110 insertions(+), 110 deletions(-) diff --git a/NOTICE b/NOTICE index dcc84b367e..45cdbbbb2e 100644 --- a/NOTICE +++ b/NOTICE @@ -51,11 +51,11 @@ APACHE 2.0 LICENSED DEPENDENCIES - cloud.google.com/go/storage License: Apache-2.0 - URL: https://github.com/googleapis/google-cloud-go/blob/storage/v1.60.0/storage/LICENSE + URL: https://github.com/googleapis/google-cloud-go/blob/storage/v1.61.3/storage/LICENSE - cuelang.org/go License: Apache-2.0 - URL: https://github.com/cue-lang/cue/blob/v0.15.4/LICENSE + URL: https://github.com/cue-lang/cue/blob/v0.16.0/LICENSE - github.com/Azure/go-autorest/autorest/to License: Apache-2.0 @@ -63,7 +63,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/CycloneDX/cyclonedx-go License: Apache-2.0 - URL: https://github.com/CycloneDX/cyclonedx-go/blob/v0.9.2/LICENSE + URL: https://github.com/CycloneDX/cyclonedx-go/blob/v0.10.0/LICENSE - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp License: Apache-2.0 @@ -99,99 +99,99 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/aws/aws-sdk-go-v2 License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/v1.41.3/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/v1.41.4/LICENSE.txt - github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/aws/protocol/eventstream/v1.7.6/aws/protocol/eventstream/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/aws/protocol/eventstream/v1.7.7/aws/protocol/eventstream/LICENSE.txt - github.com/aws/aws-sdk-go-v2/config License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/config/v1.32.11/config/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/config/v1.32.12/config/LICENSE.txt - github.com/aws/aws-sdk-go-v2/credentials License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/credentials/v1.19.11/credentials/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/credentials/v1.19.12/credentials/LICENSE.txt - github.com/aws/aws-sdk-go-v2/feature/ec2/imds License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/feature/ec2/imds/v1.18.19/feature/ec2/imds/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/feature/ec2/imds/v1.18.20/feature/ec2/imds/LICENSE.txt - github.com/aws/aws-sdk-go-v2/feature/s3/manager License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/feature/s3/manager/v1.22.6/feature/s3/manager/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/feature/s3/manager/v1.22.8/feature/s3/manager/LICENSE.txt - github.com/aws/aws-sdk-go-v2/internal/configsources License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/configsources/v1.4.19/internal/configsources/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/configsources/v1.4.20/internal/configsources/LICENSE.txt - github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/endpoints/v2.7.19/internal/endpoints/v2/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/endpoints/v2.7.20/internal/endpoints/v2/LICENSE.txt - github.com/aws/aws-sdk-go-v2/internal/ini License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/ini/v1.8.5/internal/ini/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/ini/v1.8.6/internal/ini/LICENSE.txt - github.com/aws/aws-sdk-go-v2/internal/v4a License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/v4a/v1.4.20/internal/v4a/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/internal/v4a/v1.4.21/internal/v4a/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/bedrockruntime License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/bedrockruntime/v1.50.1/service/bedrockruntime/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/bedrockruntime/v1.50.2/service/bedrockruntime/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/ecr License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/ecr/v1.55.3/service/ecr/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/ecr/v1.56.1/service/ecr/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/internal/accept-encoding License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/accept-encoding/v1.13.6/service/internal/accept-encoding/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/accept-encoding/v1.13.7/service/internal/accept-encoding/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/internal/checksum License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/checksum/v1.9.11/service/internal/checksum/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/checksum/v1.9.12/service/internal/checksum/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/internal/presigned-url License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/presigned-url/v1.13.19/service/internal/presigned-url/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/presigned-url/v1.13.20/service/internal/presigned-url/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/internal/s3shared License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/s3shared/v1.19.19/service/internal/s3shared/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/internal/s3shared/v1.19.20/service/internal/s3shared/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/organizations License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/organizations/v1.50.4/service/organizations/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/organizations/v1.50.5/service/organizations/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/s3 License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/s3/v1.96.4/service/s3/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/s3/v1.97.1/service/s3/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/secretsmanager License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/secretsmanager/v1.41.1/service/secretsmanager/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/secretsmanager/v1.41.4/service/secretsmanager/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/signin License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/signin/v1.0.7/service/signin/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/signin/v1.0.8/service/signin/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/ssm License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/ssm/v1.67.8/service/ssm/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/ssm/v1.68.3/service/ssm/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/sso License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/sso/v1.30.12/service/sso/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/sso/v1.30.13/service/sso/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/ssooidc License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/ssooidc/v1.35.16/service/ssooidc/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/ssooidc/v1.35.17/service/ssooidc/LICENSE.txt - github.com/aws/aws-sdk-go-v2/service/sts License: Apache-2.0 - URL: https://github.com/aws/aws-sdk-go-v2/blob/service/sts/v1.41.8/service/sts/LICENSE.txt + URL: https://github.com/aws/aws-sdk-go-v2/blob/service/sts/v1.41.9/service/sts/LICENSE.txt - github.com/aws/smithy-go License: Apache-2.0 @@ -219,11 +219,11 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/cockroachdb/redact License: Apache-2.0 - URL: https://github.com/cockroachdb/redact/blob/v1.1.6/LICENSE + URL: https://github.com/cockroachdb/redact/blob/v1.1.8/LICENSE - github.com/containerd/containerd/v2 License: Apache-2.0 - URL: https://github.com/containerd/containerd/blob/v2.2.1/LICENSE + URL: https://github.com/containerd/containerd/blob/v2.2.2/LICENSE - github.com/containerd/errdefs License: Apache-2.0 @@ -251,7 +251,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/docker/cli/cli/config License: Apache-2.0 - URL: https://github.com/docker/cli/blob/v29.2.1/LICENSE + URL: https://github.com/docker/cli/blob/v29.3.0/LICENSE - github.com/docker/distribution/registry/client/auth/challenge License: Apache-2.0 @@ -267,7 +267,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/envoyproxy/protoc-gen-validate/validate License: Apache-2.0 - URL: https://github.com/envoyproxy/protoc-gen-validate/blob/v1.3.0/LICENSE + URL: https://github.com/envoyproxy/protoc-gen-validate/blob/v1.3.3/LICENSE - github.com/go-git/go-billy/v5 License: Apache-2.0 @@ -299,7 +299,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/google/go-containerregistry License: Apache-2.0 - URL: https://github.com/google/go-containerregistry/blob/v0.21.1/LICENSE + URL: https://github.com/google/go-containerregistry/blob/v0.21.2/LICENSE - github.com/google/renameio/v2 License: Apache-2.0 @@ -315,7 +315,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/googleapis/enterprise-certificate-proxy/client License: Apache-2.0 - URL: https://github.com/googleapis/enterprise-certificate-proxy/blob/v0.3.12/LICENSE + URL: https://github.com/googleapis/enterprise-certificate-proxy/blob/v0.3.14/LICENSE - github.com/gosimple/unidecode License: Apache-2.0 @@ -327,7 +327,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/jfrog/build-info-go License: Apache-2.0 - URL: https://github.com/jfrog/build-info-go/blob/v1.11.0/LICENSE + URL: https://github.com/jfrog/build-info-go/blob/v1.13.0/LICENSE - github.com/jfrog/gofrog License: Apache-2.0 @@ -363,7 +363,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/modelcontextprotocol/go-sdk License: Apache-2.0 - URL: https://github.com/modelcontextprotocol/go-sdk/blob/v1.4.0/LICENSE + URL: https://github.com/modelcontextprotocol/go-sdk/blob/v1.4.1/LICENSE - github.com/modern-go/concurrent License: Apache-2.0 @@ -375,15 +375,15 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/open-policy-agent/opa License: Apache-2.0 - URL: https://github.com/open-policy-agent/opa/blob/v1.14.0/LICENSE + URL: https://github.com/open-policy-agent/opa/blob/v1.14.1/LICENSE - github.com/open-policy-agent/opa/internal/gojsonschema License: Apache-2.0 - URL: https://github.com/open-policy-agent/opa/blob/v1.14.0/internal/gojsonschema/LICENSE-APACHE-2.0.txt + URL: https://github.com/open-policy-agent/opa/blob/v1.14.1/internal/gojsonschema/LICENSE-APACHE-2.0.txt - github.com/open-policy-agent/opa/internal/semver License: Apache-2.0 - URL: https://github.com/open-policy-agent/opa/blob/v1.14.0/internal/semver/LICENSE + URL: https://github.com/open-policy-agent/opa/blob/v1.14.1/internal/semver/LICENSE - github.com/openai/openai-go License: Apache-2.0 @@ -399,7 +399,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/petermattis/goid License: Apache-2.0 - URL: https://github.com/petermattis/goid/blob/4fcff4a6cae7/LICENSE + URL: https://github.com/petermattis/goid/blob/17d1149c6ac6/LICENSE - github.com/pjbgf/sha1cd License: Apache-2.0 @@ -419,11 +419,11 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/prometheus/procfs License: Apache-2.0 - URL: https://github.com/prometheus/procfs/blob/v0.19.2/LICENSE + URL: https://github.com/prometheus/procfs/blob/v0.20.1/LICENSE - github.com/protocolbuffers/txtpbfmt License: Apache-2.0 - URL: https://github.com/protocolbuffers/txtpbfmt/blob/fcb97cc64c7b/LICENSE + URL: https://github.com/protocolbuffers/txtpbfmt/blob/a481f6a22f94/LICENSE - github.com/santhosh-tekuri/jsonschema/v5 License: Apache-2.0 @@ -431,7 +431,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/sasha-s/go-deadlock License: Apache-2.0 - URL: https://github.com/sasha-s/go-deadlock/blob/v0.3.5/LICENSE + URL: https://github.com/sasha-s/go-deadlock/blob/v0.3.7/LICENSE - github.com/skeema/knownhosts License: Apache-2.0 @@ -451,15 +451,15 @@ APACHE 2.0 LICENSED DEPENDENCIES - github.com/tliron/commonlog License: Apache-2.0 - URL: https://github.com/tliron/commonlog/blob/v0.2.19/LICENSE + URL: https://github.com/tliron/commonlog/blob/v0.2.21/LICENSE - github.com/tliron/glsp License: Apache-2.0 URL: https://github.com/tliron/glsp/blob/v0.2.2/LICENSE - - github.com/tliron/kutil + - github.com/tliron/go-kutil License: Apache-2.0 - URL: https://github.com/tliron/kutil/blob/v0.3.27/LICENSE + URL: https://github.com/tliron/go-kutil/blob/v0.4.0/LICENSE - github.com/xanzy/ssh-agent License: Apache-2.0 @@ -491,35 +491,35 @@ APACHE 2.0 LICENSED DEPENDENCIES - go.opentelemetry.io/contrib/detectors/gcp License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go-contrib/blob/detectors/gcp/v1.40.0/detectors/gcp/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go-contrib/blob/detectors/gcp/v1.42.0/detectors/gcp/LICENSE - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go-contrib/blob/instrumentation/google.golang.org/grpc/otelgrpc/v0.65.0/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go-contrib/blob/instrumentation/google.golang.org/grpc/otelgrpc/v0.67.0/instrumentation/google.golang.org/grpc/otelgrpc/LICENSE - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go-contrib/blob/instrumentation/net/http/otelhttp/v0.65.0/instrumentation/net/http/otelhttp/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go-contrib/blob/instrumentation/net/http/otelhttp/v0.67.0/instrumentation/net/http/otelhttp/LICENSE - go.opentelemetry.io/otel License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go/blob/v1.40.0/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go/blob/v1.42.0/LICENSE - go.opentelemetry.io/otel/metric License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go/blob/metric/v1.40.0/metric/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go/blob/metric/v1.42.0/metric/LICENSE - go.opentelemetry.io/otel/sdk License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go/blob/sdk/v1.40.0/sdk/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go/blob/sdk/v1.42.0/sdk/LICENSE - go.opentelemetry.io/otel/sdk/metric License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go/blob/sdk/metric/v1.40.0/sdk/metric/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go/blob/sdk/metric/v1.42.0/sdk/metric/LICENSE - go.opentelemetry.io/otel/trace License: Apache-2.0 - URL: https://github.com/open-telemetry/opentelemetry-go/blob/trace/v1.40.0/trace/LICENSE + URL: https://github.com/open-telemetry/opentelemetry-go/blob/trace/v1.42.0/trace/LICENSE - go.uber.org/mock/gomock License: Apache-2.0 @@ -527,7 +527,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - go.yaml.in/yaml/v2 License: Apache-2.0 - URL: https://github.com/yaml/go-yaml/blob/v2.4.3/LICENSE + URL: https://github.com/yaml/go-yaml/blob/v2.4.4/LICENSE - go.yaml.in/yaml/v4 License: Apache-2.0 @@ -539,23 +539,23 @@ APACHE 2.0 LICENSED DEPENDENCIES - google.golang.org/genai License: Apache-2.0 - URL: https://github.com/googleapis/go-genai/blob/v1.49.0/LICENSE + URL: https://github.com/googleapis/go-genai/blob/v1.50.0/LICENSE - google.golang.org/genproto/googleapis License: Apache-2.0 - URL: https://github.com/googleapis/go-genproto/blob/4cfbd4190f57/LICENSE + URL: https://github.com/googleapis/go-genproto/blob/84a4fc48630c/LICENSE - google.golang.org/genproto/googleapis/api License: Apache-2.0 - URL: https://github.com/googleapis/go-genproto/blob/4cfbd4190f57/googleapis/api/LICENSE + URL: https://github.com/googleapis/go-genproto/blob/84a4fc48630c/googleapis/api/LICENSE - google.golang.org/genproto/googleapis/rpc License: Apache-2.0 - URL: https://github.com/googleapis/go-genproto/blob/42d3e9bedb6d/googleapis/rpc/LICENSE + URL: https://github.com/googleapis/go-genproto/blob/84a4fc48630c/googleapis/rpc/LICENSE - google.golang.org/grpc License: Apache-2.0 - URL: https://github.com/grpc/grpc-go/blob/v1.79.1/LICENSE + URL: https://github.com/grpc/grpc-go/blob/v1.79.2/LICENSE - gopkg.in/ini.v1 License: Apache-2.0 @@ -567,7 +567,7 @@ APACHE 2.0 LICENSED DEPENDENCIES - k8s.io/client-go/util/jsonpath License: Apache-2.0 - URL: https://github.com/kubernetes/client-go/blob/v0.35.1/LICENSE + URL: https://github.com/kubernetes/client-go/blob/v0.35.2/LICENSE - k8s.io/utils/strings/slices License: Apache-2.0 @@ -592,11 +592,11 @@ BSD LICENSED DEPENDENCIES - github.com/ProtonMail/go-crypto License: BSD-3-Clause - URL: https://github.com/ProtonMail/go-crypto/blob/v1.3.0/LICENSE + URL: https://github.com/ProtonMail/go-crypto/blob/v1.4.0/LICENSE - github.com/PuerkitoBio/goquery License: BSD-3-Clause - URL: https://github.com/PuerkitoBio/goquery/blob/v1.11.0/LICENSE + URL: https://github.com/PuerkitoBio/goquery/blob/v1.12.0/LICENSE - github.com/andybalholm/cascadia License: BSD-2-Clause @@ -608,7 +608,7 @@ BSD LICENSED DEPENDENCIES - github.com/aws/aws-sdk-go-v2/internal/sync/singleflight License: BSD-3-Clause - URL: https://github.com/aws/aws-sdk-go-v2/blob/v1.41.3/internal/sync/singleflight/LICENSE + URL: https://github.com/aws/aws-sdk-go-v2/blob/v1.41.4/internal/sync/singleflight/LICENSE - github.com/aws/aws-sdk-go/internal/sync/singleflight License: BSD-3-Clause @@ -676,7 +676,7 @@ BSD LICENSED DEPENDENCIES - github.com/golang/snappy License: BSD-3-Clause - URL: https://github.com/golang/snappy/blob/v0.0.4/LICENSE + URL: https://github.com/golang/snappy/blob/v1.0.0/LICENSE - github.com/google/go-cmp/cmp License: BSD-3-Clause @@ -688,7 +688,7 @@ BSD LICENSED DEPENDENCIES - github.com/google/go-querystring/query License: BSD-3-Clause - URL: https://github.com/google/go-querystring/blob/v1.1.0/LICENSE + URL: https://github.com/google/go-querystring/blob/v1.2.0/LICENSE - github.com/google/uuid License: BSD-3-Clause @@ -696,7 +696,7 @@ BSD LICENSED DEPENDENCIES - github.com/googleapis/gax-go/v2 License: BSD-3-Clause - URL: https://github.com/googleapis/gax-go/blob/v2.17.0/v2/LICENSE + URL: https://github.com/googleapis/gax-go/blob/v2.18.0/v2/LICENSE - github.com/gorilla/css/scanner License: BSD-3-Clause @@ -726,17 +726,17 @@ BSD LICENSED DEPENDENCIES License: BSD-3-Clause URL: https://github.com/munnerz/goautoneg/blob/a7dc8b61c822/LICENSE - - github.com/nwaples/rardecode + - github.com/nwaples/rardecode/v2 License: BSD-2-Clause - URL: https://github.com/nwaples/rardecode/blob/v1.1.3/LICENSE + URL: https://github.com/nwaples/rardecode/blob/v2.2.2/LICENSE - github.com/open-policy-agent/opa/internal/edittree/bitvector License: BSD-3-Clause - URL: https://github.com/open-policy-agent/opa/blob/v1.14.0/internal/edittree/bitvector/license.txt + URL: https://github.com/open-policy-agent/opa/blob/v1.14.1/internal/edittree/bitvector/license.txt - github.com/pierrec/lz4/v4 License: BSD-3-Clause - URL: https://github.com/pierrec/lz4/blob/v4.1.22/LICENSE + URL: https://github.com/pierrec/lz4/blob/v4.1.26/LICENSE - github.com/pkg/browser License: BSD-2-Clause @@ -796,43 +796,43 @@ BSD LICENSED DEPENDENCIES - golang.org/x/crypto License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/crypto/+/v0.48.0:LICENSE + URL: https://cs.opensource.google/go/x/crypto/+/v0.49.0:LICENSE - golang.org/x/exp License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/exp/+/81e46e3d:LICENSE + URL: https://cs.opensource.google/go/x/exp/+/7ab1446f:LICENSE - golang.org/x/mod/semver License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/mod/+/v0.33.0:LICENSE + URL: https://cs.opensource.google/go/x/mod/+/v0.34.0:LICENSE - golang.org/x/net License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/net/+/v0.50.0:LICENSE + URL: https://cs.opensource.google/go/x/net/+/v0.52.0:LICENSE - golang.org/x/oauth2 License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/oauth2/+/v0.35.0:LICENSE + URL: https://cs.opensource.google/go/x/oauth2/+/v0.36.0:LICENSE - golang.org/x/sync License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/sync/+/v0.19.0:LICENSE + URL: https://cs.opensource.google/go/x/sync/+/v0.20.0:LICENSE - golang.org/x/sys License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/sys/+/v0.41.0:LICENSE + URL: https://cs.opensource.google/go/x/sys/+/v0.42.0:LICENSE - golang.org/x/term License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/term/+/v0.40.0:LICENSE + URL: https://cs.opensource.google/go/x/term/+/v0.41.0:LICENSE - golang.org/x/text License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/text/+/v0.34.0:LICENSE + URL: https://cs.opensource.google/go/x/text/+/v0.35.0:LICENSE - golang.org/x/time/rate License: BSD-3-Clause - URL: https://cs.opensource.google/go/x/time/+/v0.14.0:LICENSE + URL: https://cs.opensource.google/go/x/time/+/v0.15.0:LICENSE - golang.org/x/xerrors License: BSD-3-Clause @@ -840,11 +840,11 @@ BSD LICENSED DEPENDENCIES - google.golang.org/api License: BSD-3-Clause - URL: https://github.com/googleapis/google-api-go-client/blob/v0.269.0/LICENSE + URL: https://github.com/googleapis/google-api-go-client/blob/v0.271.0/LICENSE - google.golang.org/api/internal/third_party/uritemplates License: BSD-3-Clause - URL: https://github.com/googleapis/google-api-go-client/blob/v0.269.0/internal/third_party/uritemplates/LICENSE + URL: https://github.com/googleapis/google-api-go-client/blob/v0.271.0/internal/third_party/uritemplates/LICENSE - google.golang.org/protobuf License: BSD-3-Clause @@ -864,7 +864,7 @@ BSD LICENSED DEPENDENCIES - k8s.io/client-go/third_party/forked/golang/template License: BSD-3-Clause - URL: https://github.com/kubernetes/client-go/blob/v0.35.1/third_party/forked/golang/LICENSE + URL: https://github.com/kubernetes/client-go/blob/v0.35.2/third_party/forked/golang/LICENSE - modernc.org/memory License: BSD-3-Clause @@ -876,7 +876,7 @@ BSD LICENSED DEPENDENCIES - mvdan.cc/sh/v3 License: BSD-3-Clause - URL: https://github.com/mvdan/sh/blob/v3.12.0/LICENSE + URL: https://github.com/mvdan/sh/blob/v3.13.0/LICENSE - mvdan.cc/xurls/v2 License: BSD-3-Clause @@ -897,11 +897,11 @@ MOZILLA PUBLIC LICENSE (MPL) 2.0 DEPENDENCIES - github.com/hashicorp/aws-sdk-go-base/v2/endpoints License: MPL-2.0 - URL: https://github.com/hashicorp/aws-sdk-go-base/blob/v2.0.0-beta.70/LICENSE + URL: https://github.com/hashicorp/aws-sdk-go-base/blob/v2.0.0-beta.71/LICENSE - github.com/hashicorp/consul/api License: MPL-2.0 - URL: https://github.com/hashicorp/consul/blob/api/v1.33.2/api/LICENSE + URL: https://github.com/hashicorp/consul/blob/api/v1.33.4/api/LICENSE - github.com/hashicorp/errwrap License: MPL-2.0 @@ -913,7 +913,7 @@ MOZILLA PUBLIC LICENSE (MPL) 2.0 DEPENDENCIES - github.com/hashicorp/go-getter License: MPL-2.0 - URL: https://github.com/hashicorp/go-getter/blob/v1.8.4/LICENSE + URL: https://github.com/hashicorp/go-getter/blob/v1.8.5/LICENSE - github.com/hashicorp/go-immutable-radix License: MPL-2.0 @@ -1062,7 +1062,7 @@ MIT LICENSED DEPENDENCIES - github.com/AzureAD/microsoft-authentication-library-for-go/apps License: MIT - URL: https://github.com/AzureAD/microsoft-authentication-library-for-go/blob/v1.6.0/LICENSE + URL: https://github.com/AzureAD/microsoft-authentication-library-for-go/blob/v1.7.0/LICENSE - github.com/BurntSushi/toml License: MIT @@ -1106,11 +1106,11 @@ MIT LICENSED DEPENDENCIES - github.com/andybalholm/brotli License: MIT - URL: https://github.com/andybalholm/brotli/blob/v1.1.1/LICENSE + URL: https://github.com/andybalholm/brotli/blob/v1.2.0/LICENSE - github.com/anthropics/anthropic-sdk-go License: MIT - URL: https://github.com/anthropics/anthropic-sdk-go/blob/v1.22.1/LICENSE + URL: https://github.com/anthropics/anthropic-sdk-go/blob/v1.26.0/LICENSE - github.com/apparentlymart/go-cidr/cidr License: MIT @@ -1174,11 +1174,11 @@ MIT LICENSED DEPENDENCIES - github.com/charmbracelet/colorprofile License: MIT - URL: https://github.com/charmbracelet/colorprofile/blob/v0.4.2/LICENSE + URL: https://github.com/charmbracelet/colorprofile/blob/v0.4.3/LICENSE - github.com/charmbracelet/glamour License: MIT - URL: https://github.com/charmbracelet/glamour/blob/v0.10.0/LICENSE + URL: https://github.com/charmbracelet/glamour/blob/v1.0.0/LICENSE - github.com/charmbracelet/harmonica License: MIT @@ -1186,7 +1186,7 @@ MIT LICENSED DEPENDENCIES - github.com/charmbracelet/huh License: MIT - URL: https://github.com/charmbracelet/huh/blob/v0.8.0/LICENSE + URL: https://github.com/charmbracelet/huh/blob/v1.0.0/LICENSE - github.com/charmbracelet/lipgloss License: MIT @@ -1194,7 +1194,7 @@ MIT LICENSED DEPENDENCIES - github.com/charmbracelet/log License: MIT - URL: https://github.com/charmbracelet/log/blob/v0.4.2/LICENSE + URL: https://github.com/charmbracelet/log/blob/v1.0.0/LICENSE - github.com/charmbracelet/x/ansi License: MIT @@ -1206,7 +1206,7 @@ MIT LICENSED DEPENDENCIES - github.com/charmbracelet/x/exp/slice License: MIT - URL: https://github.com/charmbracelet/x/blob/536eb63c1f4c/exp/slice/LICENSE + URL: https://github.com/charmbracelet/x/blob/bbd79dac4a98/exp/slice/LICENSE - github.com/charmbracelet/x/exp/strings License: MIT @@ -1218,7 +1218,7 @@ MIT LICENSED DEPENDENCIES - github.com/clipperhouse/displaywidth License: MIT - URL: https://github.com/clipperhouse/displaywidth/blob/v0.10.0/LICENSE + URL: https://github.com/clipperhouse/displaywidth/blob/v0.11.0/LICENSE - github.com/clipperhouse/uax29/v2/graphemes License: MIT @@ -1254,7 +1254,7 @@ MIT LICENSED DEPENDENCIES - github.com/docker/docker-credential-helpers License: MIT - URL: https://github.com/docker/docker-credential-helpers/blob/v0.9.3/LICENSE + URL: https://github.com/docker/docker-credential-helpers/blob/v0.9.5/LICENSE - github.com/dustin/go-humanize License: MIT @@ -1298,7 +1298,7 @@ MIT LICENSED DEPENDENCIES - github.com/forPelevin/gomoji License: MIT - URL: https://github.com/forPelevin/gomoji/blob/v1.3.0/LICENSE + URL: https://github.com/forPelevin/gomoji/blob/v1.4.1/LICENSE - github.com/gabriel-vasile/mimetype License: MIT @@ -1326,7 +1326,7 @@ MIT LICENSED DEPENDENCIES - github.com/goccy/go-json License: MIT - URL: https://github.com/goccy/go-json/blob/v0.10.5/LICENSE + URL: https://github.com/goccy/go-json/blob/v0.10.6/LICENSE - github.com/goccy/go-yaml License: MIT @@ -1346,7 +1346,7 @@ MIT LICENSED DEPENDENCIES - github.com/gookit/color License: MIT - URL: https://github.com/gookit/color/blob/v1.5.4/LICENSE + URL: https://github.com/gookit/color/blob/v1.6.0/LICENSE - github.com/gsterjov/go-libsecret License: MIT @@ -1418,7 +1418,7 @@ MIT LICENSED DEPENDENCIES - github.com/jfrog/archiver/v3 License: MIT - URL: https://github.com/jfrog/archiver/blob/v3.6.1/LICENSE + URL: https://github.com/jfrog/archiver/blob/v3.6.3/LICENSE - github.com/jinzhu/copier License: MIT @@ -1514,7 +1514,7 @@ MIT LICENSED DEPENDENCIES - github.com/mattn/go-runewidth License: MIT - URL: https://github.com/mattn/go-runewidth/blob/v0.0.20/LICENSE + URL: https://github.com/mattn/go-runewidth/blob/v0.0.21/LICENSE - github.com/mgutz/ansi License: MIT @@ -1578,11 +1578,11 @@ MIT LICENSED DEPENDENCIES - github.com/playwright-community/playwright-go License: MIT - URL: https://github.com/playwright-community/playwright-go/blob/v0.5200.1/LICENSE + URL: https://github.com/playwright-community/playwright-go/blob/v0.5700.1/LICENSE - github.com/posthog/posthog-go License: MIT - URL: https://github.com/posthog/posthog-go/blob/v1.10.0/LICENSE.md + URL: https://github.com/posthog/posthog-go/blob/v1.11.1/LICENSE.md - github.com/rivo/uniseg License: MIT @@ -1606,11 +1606,11 @@ MIT LICENSED DEPENDENCIES - github.com/samber/lo License: MIT - URL: https://github.com/samber/lo/blob/v1.52.0/LICENSE + URL: https://github.com/samber/lo/blob/v1.53.0/LICENSE - github.com/segmentio/encoding License: MIT - URL: https://github.com/segmentio/encoding/blob/v0.5.3/LICENSE + URL: https://github.com/segmentio/encoding/blob/v0.5.4/LICENSE - github.com/segmentio/ksuid License: MIT @@ -1630,7 +1630,7 @@ MIT LICENSED DEPENDENCIES - github.com/sourcegraph/jsonrpc2 License: MIT - URL: https://github.com/sourcegraph/jsonrpc2/blob/v0.2.0/LICENSE + URL: https://github.com/sourcegraph/jsonrpc2/blob/v0.2.1/LICENSE - github.com/spf13/cast License: MIT @@ -1682,11 +1682,11 @@ MIT LICENSED DEPENDENCIES - github.com/valyala/fastjson License: MIT - URL: https://github.com/valyala/fastjson/blob/v1.6.7/LICENSE + URL: https://github.com/valyala/fastjson/blob/v1.6.10/LICENSE - github.com/vektah/gqlparser/v2 License: MIT - URL: https://github.com/vektah/gqlparser/blob/v2.5.31/LICENSE + URL: https://github.com/vektah/gqlparser/blob/v2.5.32/LICENSE - github.com/versent/saml2aws/v2 License: MIT @@ -1742,7 +1742,7 @@ MIT LICENSED DEPENDENCIES - modernc.org/libc License: MIT - URL: https://gitlab.com/cznic/libc/blob/v1.67.6/LICENSE-3RD-PARTY.md + URL: https://gitlab.com/cznic/libc/blob/v1.70.0/LICENSE-3RD-PARTY.md ================================================================================ From 5d17db70de33f1896a08761c0c06b532ff8f8ab5 Mon Sep 17 00:00:00 2001 From: aknysh Date: Mon, 16 Mar 2026 00:27:43 -0400 Subject: [PATCH 7/9] Fix broken link and add Gomplate/Atmos template function references in locals docs Co-Authored-By: Claude Opus 4.6 --- website/docs/stacks/locals.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/website/docs/stacks/locals.mdx b/website/docs/stacks/locals.mdx index 942e00a722..a92025d524 100644 --- a/website/docs/stacks/locals.mdx +++ b/website/docs/stacks/locals.mdx @@ -32,7 +32,7 @@ Locals are similar to [Terraform locals](https://developer.hashicorp.com/terrafo 1. **File-Scoped:** Locals are only available within the file where they are defined. They do not inherit across imports. 2. **Dependency Resolution:** Locals can reference other locals using `{{ .locals.name }}` syntax. Atmos automatically determines the correct resolution order using topological sort. 3. **Cycle Detection:** Circular references are detected and reported with clear error messages showing the dependency path (e.g., `a -> b -> c -> a`). -4. **Template Support:** Locals support Go templates with [Sprig functions](http://masterminds.github.io/sprig/), [Gomplate functions](https://docs.gomplate.ca/), and [Atmos template functions](/templates/functions). +4. **Template Support:** Locals support Go templates with [Sprig functions](http://masterminds.github.io/sprig/), [Gomplate functions](https://docs.gomplate.ca/), and [Atmos template functions](/functions/template). 5. **YAML Functions:** Locals support `!env`, `!terraform.state`, `!store`, `!exec`, and other [YAML functions](/functions/yaml). ### Processing Pipeline @@ -200,7 +200,7 @@ vars: ## Using Templates -Locals support full Go template syntax with [Sprig functions](http://masterminds.github.io/sprig/), [Gomplate functions](https://docs.gomplate.ca/), and [Atmos template functions](/templates/functions): +Locals support full Go template syntax with [Sprig functions](http://masterminds.github.io/sprig/), [Gomplate functions](https://docs.gomplate.ca/), and [Atmos template functions](/functions/template): ```yaml locals: From b9bc572402689a2fb1ec143a0c0ca75143acefaf Mon Sep 17 00:00:00 2001 From: aknysh Date: Mon, 16 Mar 2026 01:13:52 -0400 Subject: [PATCH 8/9] Improve test coverage and address PR review feedback MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Handle .yaml.tmpl/.yml.tmpl extensions in computeStackFileName (longest suffix first) - Add test cases for .yaml.tmpl, .yml.tmpl, no extension, and unknown extension - Use filepath.Join() for all test paths (cross-platform compliance) - Fix absible → ansible typo in locals docs - Fix misleading comment in dev.yaml example - Fix override semantics contradiction in fix doc Co-Authored-By: Claude Opus 4.6 --- ...s-terraform-state-missing-stack-context.md | 2 +- examples/locals/stacks/deploy/dev.yaml | 4 +- internal/exec/stack_processor_utils.go | 16 +++-- internal/exec/stack_processor_utils_test.go | 60 +++++++++++++++---- website/docs/stacks/locals.mdx | 4 +- 5 files changed, 65 insertions(+), 21 deletions(-) diff --git a/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md b/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md index bd46fbeb2c..c1d7606704 100644 --- a/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md +++ b/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md @@ -122,7 +122,7 @@ Final resolved locals **File-Scoped Locals (Global + Section):** - Defined once per file. - Available to all components of compatible type. -- Cannot be overridden by individual components. +- Can be overridden by component-level locals (more specific scope wins). - Use for: common values, naming conventions, shared computed values. **Component-Level Locals:** diff --git a/examples/locals/stacks/deploy/dev.yaml b/examples/locals/stacks/deploy/dev.yaml index 079342443d..c26e2a67a7 100644 --- a/examples/locals/stacks/deploy/dev.yaml +++ b/examples/locals/stacks/deploy/dev.yaml @@ -46,8 +46,8 @@ components: full_name: "{{ .locals.full_name }}" tags: "{{ .locals.default_tags }}" - # Section-level locals (under terraform:) inherit from global locals. - # This shows that you can also define locals here. + # Another component reusing global locals. + # Section-level locals can also be defined under `terraform.locals` when needed. myapp-worker: metadata: component: myapp diff --git a/internal/exec/stack_processor_utils.go b/internal/exec/stack_processor_utils.go index 98f16360fd..44fcb879ca 100644 --- a/internal/exec/stack_processor_utils.go +++ b/internal/exec/stack_processor_utils.go @@ -143,10 +143,18 @@ func computeStackFileName(atmosConfig *schema.AtmosConfiguration, filePath strin return "" } - // Remove file extension (.yaml, .yml, etc.). - ext := filepath.Ext(rel) - if ext != "" { - rel = rel[:len(rel)-len(ext)] + // Remove known stack/template suffixes (longest first to handle .yaml.tmpl correctly). + for _, suffix := range []string{ + u.YamlTemplateExtension, // .yaml.tmpl + u.YmlTemplateExtension, // .yml.tmpl + u.YamlFileExtension, // .yaml + u.YmlFileExtension, // .yml + } { + if strings.HasSuffix(rel, suffix) { + rel = strings.TrimSuffix(rel, suffix) + + break + } } return rel diff --git a/internal/exec/stack_processor_utils_test.go b/internal/exec/stack_processor_utils_test.go index 74f877e7db..04d61b7e89 100644 --- a/internal/exec/stack_processor_utils_test.go +++ b/internal/exec/stack_processor_utils_test.go @@ -2619,34 +2619,70 @@ func TestComputeStackFileName(t *testing.T) { { name: "simple deploy path with name_pattern", config: &schema.AtmosConfiguration{ - BasePath: "/project", + BasePath: "project", Stacks: schema.Stacks{BasePath: "stacks"}, }, - filePath: "/project/stacks/deploy/dev.yaml", + filePath: filepath.Join("project", "stacks", "deploy", "dev.yaml"), expected: filepath.Join("deploy", "dev"), }, { name: "nested org path", config: &schema.AtmosConfiguration{ - BasePath: "/project", + BasePath: "project", Stacks: schema.Stacks{BasePath: "stacks"}, }, - filePath: "/project/stacks/orgs/acme/plat/dev/us-east-1.yaml", + filePath: filepath.Join("project", "stacks", "orgs", "acme", "plat", "dev", "us-east-1.yaml"), expected: filepath.Join("orgs", "acme", "plat", "dev", "us-east-1"), }, { name: "yml extension", config: &schema.AtmosConfiguration{ - BasePath: "/project", + BasePath: "project", Stacks: schema.Stacks{BasePath: "stacks"}, }, - filePath: "/project/stacks/deploy/prod.yml", + filePath: filepath.Join("project", "stacks", "deploy", "prod.yml"), expected: filepath.Join("deploy", "prod"), }, + { + name: "yaml.tmpl extension", + config: &schema.AtmosConfiguration{ + BasePath: "project", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + filePath: filepath.Join("project", "stacks", "deploy", "dev.yaml.tmpl"), + expected: filepath.Join("deploy", "dev"), + }, + { + name: "yml.tmpl extension", + config: &schema.AtmosConfiguration{ + BasePath: "project", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + filePath: filepath.Join("project", "stacks", "deploy", "dev.yml.tmpl"), + expected: filepath.Join("deploy", "dev"), + }, + { + name: "no known extension returns path as-is", + config: &schema.AtmosConfiguration{ + BasePath: "project", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + filePath: filepath.Join("project", "stacks", "deploy", "dev.json"), + expected: filepath.Join("deploy", "dev.json"), + }, + { + name: "file with no extension", + config: &schema.AtmosConfiguration{ + BasePath: "project", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + filePath: filepath.Join("project", "stacks", "deploy", "dev"), + expected: filepath.Join("deploy", "dev"), + }, { name: "nil config returns empty", config: nil, - filePath: "/project/stacks/deploy/dev.yaml", + filePath: filepath.Join("project", "stacks", "deploy", "dev.yaml"), expected: "", }, } @@ -2669,7 +2705,7 @@ func TestComputeStackFileName(t *testing.T) { func TestDeriveStackNameForLocals(t *testing.T) { t.Run("derives stack name from name_pattern and vars", func(t *testing.T) { config := &schema.AtmosConfiguration{ - BasePath: "/project", + BasePath: "project", Stacks: schema.Stacks{ BasePath: "stacks", NamePattern: "{stage}", @@ -2680,7 +2716,7 @@ func TestDeriveStackNameForLocals(t *testing.T) { "stage": "dev", }, } - result := deriveStackNameForLocals(config, rawConfig, "/project/stacks/deploy/dev.yaml") + result := deriveStackNameForLocals(config, rawConfig, filepath.Join("project", "stacks", "deploy", "dev.yaml")) assert.Equal(t, "dev", result) }) @@ -2688,19 +2724,19 @@ func TestDeriveStackNameForLocals(t *testing.T) { rawConfig := map[string]any{ "vars": map[string]any{"stage": "dev"}, } - result := deriveStackNameForLocals(nil, rawConfig, "/project/stacks/deploy/dev.yaml") + result := deriveStackNameForLocals(nil, rawConfig, filepath.Join("project", "stacks", "deploy", "dev.yaml")) assert.Empty(t, result) }) t.Run("no vars uses filename as stack name", func(t *testing.T) { config := &schema.AtmosConfiguration{ - BasePath: "/project", + BasePath: "project", Stacks: schema.Stacks{ BasePath: "stacks", }, } rawConfig := map[string]any{} - result := deriveStackNameForLocals(config, rawConfig, "/project/stacks/deploy/dev.yaml") + result := deriveStackNameForLocals(config, rawConfig, filepath.Join("project", "stacks", "deploy", "dev.yaml")) // Without name_pattern or name_template, falls back to file name. assert.Equal(t, filepath.Join("deploy", "dev"), result) }) diff --git a/website/docs/stacks/locals.mdx b/website/docs/stacks/locals.mdx index a92025d524..66ab2e79f0 100644 --- a/website/docs/stacks/locals.mdx +++ b/website/docs/stacks/locals.mdx @@ -40,7 +40,7 @@ Locals are similar to [Terraform locals](https://developer.hashicorp.com/terrafo Locals are resolved in a specific order during stack configuration loading: ```text -1. Parse raw YAML → extract locals sections (global, terraform, helmfile, packer, absible, etc.) +1. Parse raw YAML → extract locals sections (global, terraform, helmfile, packer, ansible, etc.) 2. Build dependency graph (extract {{ .locals.X }} references) 3. Topological sort with cycle detection 4. Resolve YAML functions (!env, !terraform.state) @@ -55,7 +55,7 @@ This means you can fetch a value with `!env` or `!terraform.state` and then use Locals can be defined at three levels within a file, each inheriting from its parent: ```text -Global locals → Component-type locals (terraform/helmfile/packer/absible) → Component-level locals +Global locals → Component-type locals (terraform/helmfile/packer/ansible) → Component-level locals ``` When the same key exists at multiple levels, the most specific scope wins. From a5a10d3ee21ac9fcefca54b316d0f95a55467c11 Mon Sep 17 00:00:00 2001 From: aknysh Date: Mon, 16 Mar 2026 09:22:13 -0400 Subject: [PATCH 9/9] Address PR review: fix test count, remove ansible from locals scopes - Update TestComputeStackFileName case count from 4 to 8 in fix doc - Remove ansible from locals pipeline/scope docs (only terraform/helmfile/packer supported) Co-Authored-By: Claude Opus 4.6 --- ...2026-03-15-locals-terraform-state-missing-stack-context.md | 2 +- website/docs/stacks/locals.mdx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md b/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md index c1d7606704..eb857d955a 100644 --- a/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md +++ b/docs/fixes/2026-03-15-locals-terraform-state-missing-stack-context.md @@ -485,7 +485,7 @@ All tests pass after the fix. ### Unit Tests (`internal/exec/`) -- `TestComputeStackFileName` — 4 cases (simple path, nested org path, yml extension, nil config) +- `TestComputeStackFileName` — 8 cases (simple path, nested org, yml, yaml.tmpl, yml.tmpl, unknown extension, no extension, nil config) - `TestDeriveStackNameForLocals` — 3 cases (name_pattern, nil config, no vars) - `TestExtractLocalsFromRawYAML_StackNameDerived` — confirms `!env` + Go template conditionals work - `TestExtractLocalsFromRawYAML_GoTemplateConditionalEmpty` — confirms empty env var takes else branch diff --git a/website/docs/stacks/locals.mdx b/website/docs/stacks/locals.mdx index 66ab2e79f0..c4707bee3d 100644 --- a/website/docs/stacks/locals.mdx +++ b/website/docs/stacks/locals.mdx @@ -40,7 +40,7 @@ Locals are similar to [Terraform locals](https://developer.hashicorp.com/terrafo Locals are resolved in a specific order during stack configuration loading: ```text -1. Parse raw YAML → extract locals sections (global, terraform, helmfile, packer, ansible, etc.) +1. Parse raw YAML → extract locals sections (global, terraform, helmfile, packer) 2. Build dependency graph (extract {{ .locals.X }} references) 3. Topological sort with cycle detection 4. Resolve YAML functions (!env, !terraform.state) @@ -55,7 +55,7 @@ This means you can fetch a value with `!env` or `!terraform.state` and then use Locals can be defined at three levels within a file, each inheriting from its parent: ```text -Global locals → Component-type locals (terraform/helmfile/packer/ansible) → Component-level locals +Global locals → Component-type locals (terraform/helmfile/packer) → Component-level locals ``` When the same key exists at multiple levels, the most specific scope wins.