Create a new Go module in the datadog-agent multi-module repository. This repo has 100+ Go modules managed via modules.yml and inter-module replace directives.
Instructions
Step 1: Gather information from the user
Use AskUserQuestion to collect the following. If $ARGUMENTS provides the path, skip that question.
Module path: The path relative to the repo root (e.g.
comp/core/mything/def,pkg/util/mypkg). This becomesgithub.com/DataDog/datadog-agent/<path>.Does the directory already contain Go code?: If yes, the tool will also update dependent modules. If no, it just creates the
go.modand registers the module.
Step 2: Ensure clean git state
The create-module task requires all changes to be committed. Check with git status and warn the user if there are uncommitted changes.
Step 3: Run the create-module task
dda inv create-module --path=<module-path>
This task automatically:
- Creates
go.modwith the correct module path and Go version - Adds
replacedirectives for inter-module dependencies - Registers the module in
modules.ymlasindependent: true - Runs
tidyacross all modules - Runs linters (
internal-deps-checker,check-mod-tidy,check-go-mod-replaces)
Step 4: Adjust modules.yml if needed
Read modules.yml and review the new entry. The task sets independent: true by default. Adjust if needed:
| Field | Values | Notes |
|---|---|---|
independent |
true/false |
true = tagged and tested independently |
used_by_otel |
true |
Set if the module is used by the OTel agent build |
should_tag |
false |
Set for internal tooling modules that shouldn't be tagged |
should_test_condition |
never/always |
Override test behavior |
lint_targets / test_targets |
list of paths | Override default targets |
Most modules use default (no special config) or just set used_by_otel: true.
Step 5: Report results
Report whether the task succeeded or failed. If it failed, read the error output and help fix the issue.
Important Notes
- All changes must be committed before running
create-module— the task may restore files on failure. - After creation, the module is automatically added to
go.workand all necessaryreplacedirectives are set up. - To see the current module list:
modules.ymlordda inv modules.show.
Usage
/create-go-module— Interactive: prompts for the module path/create-go-module comp/core/mything/def— Pre-fills the path