Commit Graph

22 Commits

Author SHA1 Message Date
Thinh Nguyen ab105e6e42 feat(gomod): add gomodTidyAll option for indirect dependency updates in Go monorepos (#37138)
* feat(gomod): add `gomodTidyAll` option for indirect dependency updates in Go monorepos

In Go monorepos it is common for one module to depend on another in the
same repo via a local `replace` directive (e.g. `replace example.com/shared
=> ../shared`). When Renovate updates the shared module, today `go mod
tidy` runs only in that module, leaving dependent `go.sum` files stale.

Add a new `gomodTidyAll` post-update option that:

- Discovers every `go.mod` in the repo and parses its local `replace`
  directives (both inline and block form).
- Builds a dependency graph with `graph-data-structure`, with edges from
  dependency → dependent, matching the existing NuGet convention.
- Runs `go mod tidy` on every transitive dependent in topological order,
  propagating any `gomodTidy1.17` / `gomodTidyE` flags to the dependent
  commands.
- Collects updated `go.mod` and `go.sum` files from each dependent
  directory into the artifact result.
- Implies `gomodTidy` so users only need to enable one option.

Supporting changes:

- Extract `getMatchingFiles` and `resolveRelativePathToRoot` into
  `lib/util/fs/util.ts` so NuGet and gomod can share them instead of
  each having its own glob/resolve helper.
- Refactor `lib/modules/manager/nuget/package-tree.ts` to use the
  shared `getMatchingFiles` helper and rename local variables for
  clarity (`deps` → `visited`, `dep` → `dependent`) per review feedback.

Docs and config:

- Register `gomodTidyAll` in `postUpdateOptions` `allowedValues`.
- Add a row for `gomodTidyAll` to the `postUpdateOptions` table in
  `docs/usage/configuration-options.md`.
- Add a "Monorepo tidying for local `replace` directives" subsection
  to `docs/usage/golang.md` describing when to use the option.

Tests and coverage:

- `lib/modules/manager/gomod/package-tree.spec.ts` — parse/graph/topo
  order, 100% line/branch/function coverage.
- `lib/modules/manager/gomod/artifacts-gomodtidyall.spec.ts` — six
  integration cases covering subshell commands, `tidyOpts` propagation,
  result collection, no-op with no dependents, error handling, and
  the disabled path.
- Full `lib/modules/manager/gomod` suite (151 tests) and NuGet
  package-tree suite (9 tests) pass; new code is fully covered.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* refactor(gomod): use named capture groups and direct fs util imports

* fix(gomod): use `go -C` for dependent module tidy commands

A subshell only works in Docker mode, where all commands are concatenated
into a single `bash -l -c`. With `binarySource=install` or `global` each
command is split with shlex and run without a shell, so `(cd dir && ...)`
is treated as the name of a binary.

* refactor(gomod): simplify parsing of local `replace` directives

A single regex now covers both the single line form and the lines inside
a `replace (...)` block. The previous block pattern stopped at the first
`)`, so a block containing a comment with a bracket was skipped, and the
single line pattern did not allow a trailing comment.

Also keeps the NuGet package tree unchanged apart from the two helpers it
now shares.

* docs(gomod): warn against combining `gomodTidyAll` with `gomodMassage`

Massaging comments out the relative `replace` directives that
`gomodTidyAll` follows, so the two options work against each other.

* refactor(fs): use `matchRegexOrGlob` in `getMatchingFiles`

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-13 08:35:38 +00:00
Sebastian Poxhofer 9a27d7aa78 ci(prettier): add prettier plugin for admonitions (#43615)
* ci: add local mkdocs-admonitions plugin for prettier to allow admonition preservation

* docs: remove uses of `prettier-ignore` for admonitions

* test: rather use await expect

* chore: use named group exclusively
2026-05-27 09:39:52 +00:00
Jamie Tanna 33e857e04a docs: migrate all admonitions and lists to using 2-space indents (#43607)
* docs: ensure 2 spaces used for generated admonitions

As a follow-up to 4b0146ab7b and
1844916259b6dc17f532e491eb93f6116327c324., this correctly renders
admonitions with 2 spaces (1 indent).

* fixup! docs: use 2-space indentation for Markdown (#43537)

Plus using 3-space for mixed-style `<ul>` and `<ol>`s.

* fixup! docs: use 2-space indentation for Markdown (#43537)

As otherwise it breaks the rendering of the table.
2026-05-26 20:03:23 +00:00
Jamie Tanna dfe0938b42 feat(datasource/go): conditionally expose constraints (#42569)
* feat(datasource/go): conditionally expose `constraints`

As noted in #42567, some Go modules are constrained by their
compatibility with the source compatibility with the Go language as per
the `go` directive.

Bumping the `go` directive will result in all of a library's consumers
also needing to bump their own `go`, which can be something library
authors will attempt to avoid.

Previously, Renovate users would receive an update from any modules that
have a new release, regardless of whether they will bump the `go`
directive.

With this change, users who use `constraintsFiltering=strict` will have
the filtering applied, so they only receive updates for Go modules in
their current minor version.

Due to the additional API calls needed, this is an opt-in feature, and
only includes the API calls when the using
`constraintsFiltering=strict`.

We can also add an integration test to build our confidence in the
end-to-end flow.

* fix(datasource/go): correctly check Go directive for major version bumps

As we weren't passing around the `pkg` (which included the Semantic
Module Import Path), we were incorrectly lacking major version upgrades.

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>

* chore: remove `fallback`

As it's unnecessary.

* docs(gomod): rephrase

---------

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>
2026-04-29 14:48:53 +00:00
Jamie Tanna 783002c7de docs: correct references to binarySource=install for Mend-hosted (#40740) 2026-01-28 11:38:18 +00:00
Mike Glazer 8557157edb feat: add support for go:generate directives in gomod (#39163)
* feat: add support for go:generate directives in gomod

This change adds a `goGenerate` postUpdateOption which enables
running `go generate ./...` after a dependency update.

Frequently when dependencies are brought in via tools or using
vendored code, and those dependencies are used for go:generate
instructions, we want to update the generated code after the dependency
has been updated.

Adding this as a postUpdateCommand wasn't really satisfactory since that
necessarily requires making a change in two spots (one in the allowed
commands, one in the postUpdateCommand). The other reason this was
undesirable was it would cause generate to run after every dependency
update, regardless of language.

* Updates

* Update fixes

* Self PR

* Fix docs link

* Trying to find the right path

* Fix

* Add deleted

* Fix

* And fix test...

* docs: tweak wording for `goGenerate`

* fix(types): don't default GlobalConfig

In a future change, `GlobalConfig.get` will correctly pull in the
defaults.

---------

Co-authored-by: Jamie Tanna <jamie.tanna@mend.io>
2025-12-12 12:43:54 +00:00
Maxime Brunet c4c37a6253 feat(gomod): support tool directive (#35078) 2025-04-01 17:33:55 +00:00
Rhys Arkins 3b7a2a02d3 docs(gomod): add info on go.mod directive (#34713) 2025-03-09 09:56:47 +00:00
Ed Harrod 894250d392 chore(manager/gomod): Update go version to 1.23.3 in tests/examples (#32514)
Co-authored-by: Rhys Arkins <rhys@arkins.net>
2024-11-13 15:45:18 +00:00
Rhys Arkins 0831777729 docs(gomod): clarify major updates limitations (#31119) 2024-08-30 17:05:18 +00:00
Jason Sipula 1408dd1604 docs: workaround nested list format conflict (#30857) 2024-08-18 08:08:57 +00:00
Tobias 095afcd0ba feat(git/auth): Support hostrules with username and password when authenticating git commands (#24081) 2023-09-04 09:48:17 +00:00
HonkingGoose 124c1e636c docs: refer to the app as the Mend Renovate app (#23336)
Co-authored-by: Rhys Arkins <rhys@arkins.net>
2023-07-13 14:24:43 +00:00
Rhys Arkins c41cfdbef6 docs: gomod artifacts hostRules (#20222)
Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com>
2023-03-04 07:38:17 +01:00
Alexander Birkner fbceff1397 feat(gomod): support -e option (#20199)
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com>
2023-02-07 14:00:16 +01:00
Jamie Tanna d19effc48d feat(manager/gomod): update indirect dependencies for Go Modules (#19431) 2022-12-15 18:55:08 +00:00
HonkingGoose 5f21c63ba5 docs: replace word therefore, plus other small changes (#15694) 2022-06-02 16:58:52 +02:00
Rhys Arkins 4b0102f08b fix(gomod): default to not massaging replace statements (#15767) 2022-05-28 10:19:36 +02:00
Rhys Arkins afd96e7b8a fix: whitesource -> mend (#15729) 2022-05-25 15:23:28 +02:00
Rhys Arkins e79813d32e feat: gomodNoMassage (#15462) 2022-05-05 11:33:50 +02:00
HonkingGoose 5a52b04c96 docs: replace contain(s) with has or have (#14692) 2022-03-16 14:50:20 +01:00
Rhys Arkins dca3418bbd refactor: lib/modules (#14488)
Moves datasource, manager, platform and versioning code from lib/ into new lib/modules/

BREAKING CHANGE: External tools must update paths to datasource, manager, platform and versioning
2022-03-04 09:04:02 +01:00