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
Jeff Brown 945acf6c38 feat(nuget): update lock files when Directory.Build.props is changed (#42735)
fix(nuget): update lock files when Directory.Build.props is changed

Directory.Build.props is a standard MSBuild import file that can contain
PackageReference elements. When Renovate updates packages in this file,
lock file regeneration was skipped because updateArtifacts only handled
.csproj/.vbproj/.fsproj, Directory.Packages.props/Packages.props, and
global.json.

This extends the existing logic to treat Directory.Build.props the same
way as central management files — all project files under its parent
directory are restored to regenerate their lock files.

Also renames the isCentralManagement parameter to isPropsFile for
clarity, since it now covers both central management and
Directory.Build.props files.

Relates to #15696, #8010
2026-04-20 15:48:19 +00:00
Sergei Zharinov 930cf6633c refactor: Rewrite imports with .ts extensions (#40700)
fix: Additional vi.mock path corrections and prettier formatting
2026-01-26 22:48:17 +00:00
RahulGautamSingh 76f911041a refactor: use named exports (#39196)
* use named exports

* fix test

* add missing imnport

* fix prettier
2025-11-10 12:00:35 +00:00
Michael Kriese 930fb7cd8d fix(nuget): restore all projects if global.json changes (#37450) 2025-08-12 13:08:53 +00:00
Ben Thompson 4b9bc1d21d fix(nuget): Optimize NuGet dependency resolution (#35018) 2025-03-26 16:08:35 +00:00
renovate[bot] 55845508b6 chore(deps): update eslint monorepo to v9 (major) (#33573)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2025-02-20 11:31:13 +00:00
renovate[bot] cb2066655a build(deps): update dependency graph-data-structure to v4 (#32320)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2024-11-20 08:50:42 +00:00
Marc Mognol 5b8fb1f5a6 chore: fix nuget typo (#27976) 2024-03-17 20:06:33 +00:00
RahulGautamSingh 0cbd22006f refactor: use util minimatch (#25842) 2023-11-17 19:59:56 +00:00
Sergei Zharinov b69416ce17 refactor(prettier): Force trailing commas (#25631) 2023-11-07 15:50:29 +00:00
Rhys Arkins 9276a54069 refactor(scm): use scm for getFileList, checkoutBranch (#22006) 2023-05-07 04:12:15 +00:00
renovate[bot] 58aa841d69 build(deps): update dependency minimatch to v9 (#21923)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2023-05-02 13:00:40 +00:00
renovate[bot] 0940582336 build(deps): update dependency graph-data-structure to v3 (#19684)
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2023-01-24 06:57:58 +00:00
Michael Kriese 1959edc262 feat(nuget): skip restore non-leaf projects (#19097) 2022-11-25 13:43:44 +00:00
Michael Kriese 17387fcf48 fix(manager/nuget): skip invalid xml files (#16758) 2022-07-25 14:54:46 +02:00
Michael Kriese 13027fd4f5 fix(manager/nuget): optimize xml error handling (#16681)
* fix(manager/nuget): optimize xml error handling

* Update lib/modules/manager/nuget/package-tree.spec.ts

Co-authored-by: Sergei Zharinov <zharinov@users.noreply.github.com>

Co-authored-by: Sergei Zharinov <zharinov@users.noreply.github.com>
2022-07-22 09:15:25 +02:00
Rhys Arkins 92057df4b4 fix(nuget): filter project references for non empty strings (#16232)
Closes #16231
2022-06-25 10:39:37 +02:00
Michael Kriese e5c6f38d75 refactor: enable strict checks (#16168)
* refactor:  enable strict checks

* chore: revert changes

* chore: fix tsconfig
2022-06-21 13:00:21 +02:00
Michael Kriese 0a582d31c7 refactor: fix nullable types (#16156)
* refactor: fix nullable types

* chore: revert changes

* chore: fix lint comments

* chore: revert changes
2022-06-20 16:15:40 +00:00
Michael Kriese c1da6b948d feat(manager:nuget): support central version management (#15698) 2022-05-24 16:29:28 +02:00
Matthew Vaughan 6fd86edb32 feat(manager/nuget): Restore all dependent project files to generate new lock files (#14312)
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2022-04-07 21:45:24 +00:00