You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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 `//`.
# 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
0 commit comments