Skip to content

Commit 290af3b

Browse files
committed
Fix ABLD-471 with gazelle:resolve_regexp directives
### What does this PR do? Replace the 39 individual `gazelle:resolve` lines in `deps/go.MODULE.bazel` with two `gazelle:resolve_regexp` directives: one general rule, and one covering its one naming exception. Together they cover every current and future datadog-agent submodule import from external Go modules. ### Motivation [ABLD-471](https://datadoghq.atlassian.net/browse/ABLD-471): external modules that import a `datadog-agent` submodule end up depending on two copies of the same Go package: - our in-tree `//<path>` target, - a `go_deps`-generated external repo. The Go linker rightfully rejects the duplicate. This happens because `go_deps.gazelle_default_attributes` directives run inside each external module's own, **separate Gazelle invocation**, which never sees our root `BUILD.bazel`'s `prefix = "github.com/DataDog/datadog-agent"`: that prefix only scopes our own `//:gazelle` invocation. Each occurrence had its own `gazelle:resolve` line redirecting the import to the in-tree target, growing by one entry every time a new external importer surfaced. This is exactly the repetition bazel-contrib/bazel-gazelle#817 introduced `resolve_regexp` to avoid. Every entry follows one of two shapes, though: 1. in the general case, the target name is just the last path segment, so Bazel's `//x/y/z` == `//x/y/z:z` shorthand covers it, 2. but, when a package's own directory is a bare major-version suffix, Gazelle then names the `go_library` after the parent directory instead, e.g. `.../installers/v2` gets target `:installers`, not `:v2`. As for any Gazelle override, last encountered matching definition wins: the general case is therefore defined first, and the more specific version-suffix case next. ### Describe how you validated your changes A full `bazel build //...` passes with no `datadog-agent`-related or Gazelle resolution failures, matching the 39 explicit entries this replaces, for both the common and the version-suffix case. ### Additional Notes `gazelle:resolve_regexp` parses its label template as a `label.Label` before substituting capture groups, so the template must already contain a literal `//`.
1 parent c87f5dc commit 290af3b

1 file changed

Lines changed: 3 additions & 47 deletions

File tree

deps/go.MODULE.bazel

Lines changed: 3 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -23,53 +23,9 @@ go_deps.gazelle_default_attributes(
2323
# We don't want to generate code from protos from dependencies, as this most often fails
2424
# and is different behavior from the default with go tooling
2525
"gazelle:proto disable",
26-
# ABLD-471: third-party modules that import datadog-agent submodules would
27-
# otherwise generate `@com_github_datadog_datadog_agent_*` labels (because
28-
# go_deps materializes our local go.work modules as external repos),
29-
# while the same Go package is also reachable in-tree at `//<path>`. The linker
30-
# then sees two copies of the package. Redirect every such import to the in-tree
31-
# label so both build contexts agree. The list grows as new third-party imports
32-
# surface — long-term fix is unifying label spaces.
33-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/proto/pbgo/trace @@//pkg/proto/pbgo/trace:trace",
34-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/trace/traceutil/normalize @@//pkg/trace/traceutil/normalize:normalize",
35-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/metrics/event @@//pkg/metrics/event:event",
36-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/metrics/servicecheck @@//pkg/metrics/servicecheck:servicecheck",
37-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/otlp/attributes/source @@//pkg/opentelemetry-mapping-go/otlp/attributes/source:source",
38-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/serializer/marshaler @@//pkg/serializer/marshaler:marshaler",
39-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/serializer/types @@//pkg/serializer/types:types",
40-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/util/hostname/validate @@//pkg/util/hostname/validate:validate",
41-
"gazelle:resolve go github.com/DataDog/datadog-agent/comp/core/config @@//comp/core/config:config",
42-
"gazelle:resolve go github.com/DataDog/datadog-agent/comp/core/log/def @@//comp/core/log/def:def",
43-
"gazelle:resolve go github.com/DataDog/datadog-agent/comp/core/tagger/types @@//comp/core/tagger/types:types",
44-
"gazelle:resolve go github.com/DataDog/datadog-agent/comp/forwarder/defaultforwarder @@//comp/forwarder/defaultforwarder:defaultforwarder",
45-
"gazelle:resolve go github.com/DataDog/datadog-agent/comp/logs/agent/config @@//comp/logs/agent/config:config",
46-
"gazelle:resolve go github.com/DataDog/datadog-agent/comp/otelcol/otlp/components/metricsclient @@//comp/otelcol/otlp/components/metricsclient:metricsclient",
47-
"gazelle:resolve go github.com/DataDog/datadog-agent/comp/otelcol/otlp/testutil @@//comp/otelcol/otlp/testutil:testutil",
48-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/config/create @@//pkg/config/create:create",
49-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/config/model @@//pkg/config/model:model",
50-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/config/setup @@//pkg/config/setup:setup",
51-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/config/utils @@//pkg/config/utils:utils",
52-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/fleet/installer/telemetry @@//pkg/fleet/installer/telemetry:telemetry",
53-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/metrics @@//pkg/metrics:metrics",
54-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/obfuscate @@//pkg/obfuscate:obfuscate",
55-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/inframetadata @@//pkg/opentelemetry-mapping-go/inframetadata:inframetadata",
56-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/inframetadata/gohai @@//pkg/opentelemetry-mapping-go/inframetadata/gohai:gohai",
57-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/inframetadata/payload @@//pkg/opentelemetry-mapping-go/inframetadata/payload:payload",
58-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/otlp/attributes @@//pkg/opentelemetry-mapping-go/otlp/attributes:attributes",
59-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/otlp/attributes/azure @@//pkg/opentelemetry-mapping-go/otlp/attributes/azure:azure",
60-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/otlp/attributes/ec2 @@//pkg/opentelemetry-mapping-go/otlp/attributes/ec2:ec2",
61-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/otlp/attributes/gcp @@//pkg/opentelemetry-mapping-go/otlp/attributes/gcp:gcp",
62-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/opentelemetry-mapping-go/otlp/metrics @@//pkg/opentelemetry-mapping-go/otlp/metrics:metrics",
63-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/serializer @@//pkg/serializer:serializer",
64-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/tagset @@//pkg/tagset:tagset",
65-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/trace/config @@//pkg/trace/config:config",
66-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/trace/log @@//pkg/trace/log:log",
67-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/trace/otel/stats @@//pkg/trace/otel/stats:stats",
68-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/trace/stats @@//pkg/trace/stats:stats",
69-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/util/compression/impl-zlib @@//pkg/util/compression/impl-zlib:impl-zlib",
70-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/util/option @@//pkg/util/option:option",
71-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/remoteconfig/state @@//pkg/remoteconfig/state:state",
72-
"gazelle:resolve go github.com/DataDog/datadog-agent/pkg/network/driver @@//pkg/network/driver:driver",
26+
# Map external imports of datadog-agent submodules to in-tree labels: as for any override, last match wins
27+
"gazelle:resolve_regexp go ^github[.]com/DataDog/datadog-agent/(.+)$ @@//$1", # general (fallback)
28+
"gazelle:resolve_regexp go ^github[.]com/DataDog/datadog-agent/(.+/([^/]+)/v[0-9]+)$ @@//$1:$2", # versioned
7329
],
7430
)
7531
go_deps.gazelle_override(

0 commit comments

Comments
 (0)