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 ================================================================================ 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..eb857d955a --- /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. +- Can be overridden by component-level locals (more specific scope wins). +- 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` — 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 +- `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..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..c26e2a67a7 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 }}" + + # Another component reusing global locals. + # Section-level locals can also be defined under `terraform.locals` when needed. + 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/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/exec/stack_processor_utils.go b/internal/exec/stack_processor_utils.go index ad30420449..44fcb879ca 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,74 @@ 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 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 +} + // 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..04d61b7e89 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,317 @@ 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: filepath.Join("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: 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", + Stacks: schema.Stacks{BasePath: "stacks"}, + }, + 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: filepath.Join("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, filepath.Join("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, 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", + Stacks: schema.Stacks{ + BasePath: "stacks", + }, + } + rawConfig := map[string]any{} + 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) + }) +} + +// 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/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 diff --git a/tests/cli_locals_test.go b/tests/cli_locals_test.go index b834518037..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") } // ============================================================================= @@ -1316,3 +1344,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 }}" diff --git a/website/docs/stacks/locals.mdx b/website/docs/stacks/locals.mdx index e1eb797dcc..c4707bee3d 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. @@ -20,23 +22,39 @@ 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. -4. **Template Support:** Locals support Go templates with [Sprig functions](http://masterminds.github.io/sprig/). +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](/functions/template). +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 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. ## 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 ``` @@ -87,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? @@ -128,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: @@ -145,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: @@ -182,13 +200,13 @@ 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](/functions/template): ```yaml 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 }}' ``` @@ -196,47 +214,48 @@ 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` | -### 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 +267,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: @@ -391,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. @@ -423,7 +399,7 @@ locals: domain: "{{ .settings.region }}.example.com" # Error if no settings defined ``` -``` +```text Error: map has no entry for key "settings" ``` @@ -440,6 +416,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 +428,4 @@ locals: - [Environment Variables (env)](/stacks/env) - [Settings](/stacks/settings) - [Imports](/stacks/imports) +- [YAML Functions](/functions/yaml)