Commit Graph

38 Commits

Author SHA1 Message Date
renovate[bot] 9d74625d93 build(deps): update dependency prettier to v3.9.6 (main) (#45815)
* build(deps): update dependency prettier to v3.9.6

| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.8.1 | 3.9.6 |

* chore: prettier fixes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@mend.io>
2026-09-09 13:50:03 +00:00
Sebastian Poxhofer 3412de84ce refactor(linters): enable oxlint rule prefer-named-capture-group (#44714)
* refactor(lint): enable oxlint prefer-named-capture-group at error

Numbered capture groups (m[1], $1) break silently when a regex is
edited and group order shifts. Named groups (?<name>...) make intent
explicit and accesses (m.groups.name) resilient to reordering.

This enables the built-in eslint rule prefer-named-capture-group,
surfacing 321 pre-existing unnamed-group violations across ~121
files to be burned down incrementally in follow-up commits.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(versioning): name capture groups for prefer-named-capture-group

Burns down all prefer-named-capture-group violations in
lib/modules/versioning/. Unused capture groups (only reachable via
.test() or whole-match) become non-capturing (?:...); groups whose
value is read become named (?<name>...), with accesses rewritten to
match.groups!.<name> (or destructured from .groups!) instead of
positional match[n]/$n so a future edit that reorders groups cannot
silently break the reader.

Two cases needed extra care to preserve behavior:
- semver/common.ts and poetry/patterns.ts split() on a regex whose
  capture group is relied upon by String.prototype.split to keep the
  separator in the output array; the group is kept capturing and
  named, not converted to non-capturing.
- hashicorp/convertor.ts's semverRegex is only ever embedded via
  .source into a named `(?<version>...)` group elsewhere and never
  matched directly, so its internal groups are safe to make
  non-capturing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(datasource): name capture groups for prefer-named-capture-group

Burns down all prefer-named-capture-group violations under
lib/modules/datasource/. Same treatment as the versioning module:
unused groups become non-capturing, used groups get names, and
positional match[n] reads move to match.groups!.<name>.

docker/ecr.ts and pypi/common.ts keep their positional destructuring
(`const [, region] = ...`, `!!m &&`) working unchanged since a named
capture group is still addressable by its numeric index in
JavaScript — only pypi/common.ts's access was rewritten to
m.groups!.owner for clarity since it read a single group directly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(platform): name capture groups for prefer-named-capture-group

Burns down all prefer-named-capture-group violations under
lib/modules/platform/. Uses the repo's established idiom of
`match.groups?.<name>` after an optional-chained exec()/match() (see
bitbucket/index.ts hostnameWithoutApiPrefix, gerrit/utils.ts
extractSourceBranch) and `$<name>` in String.replace replacement
strings. Unused groups (markdown/HTML massaging regexes matched only
to be stripped) become non-capturing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(manager): name capture groups in ansible-galaxy for prefer-named-capture-group

Burns down prefer-named-capture-group violations in
lib/modules/manager/ansible-galaxy/. newBlockRegEx and blockLineRegEx
dropped their unused outer wrapping group (only the inner key/value
groups were ever read) and named the key/value groups; nameMatchRegex's
remaining unused groups (protocol/user-info/port alternatives) become
non-capturing since only source/hostname/depName/version are read via
.groups. Accesses in collections.ts and roles.ts move from
lineMatch[2]/lineMatch[3] to lineMatch.groups!.key/value.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(manager): name capture groups for prefer-named-capture-group (batch 1)

Burns down prefer-named-capture-group violations across the first
alphabetical slice of lib/modules/manager/ (ansible through mix).
Used groups get names with accesses rewritten to match.groups!.<name>
(or $<name> in replacement strings); groups whose value is never read
become non-capturing (?:...). Two String.split() call sites
(git-submodules/extract.ts, meteor/extract.ts) keep the established
"named group still readable positionally from the split() result
array" idiom instead of restructuring the destructuring.

bazel/rules/go.ts and buildpacks/extract.ts dockerRef verified
byte-for-byte equivalent before/after via a quick node script since
several nested groups collapsed to non-capturing at once.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(manager): name capture groups for prefer-named-capture-group (batch 2)

Burns down prefer-named-capture-group violations across the remaining
alphabetical slice of lib/modules/manager/ (npm through terragrunt).
Same treatment as batch 1: used groups get names with accesses moved
to match.groups!.<name> or $<name> replacement strings; unused groups
(wrapping alternations, quantifier repetition groups only consumed via
.test(), or values never read from a match) become non-capturing.

terraform/extractors/others/modules.ts and terragrunt/modules.ts share
near-identical URL-parsing regexes (github/bitbucket/git/azure-devops
ref matchers) — the same set of always-unused `depth=`/`&depth=`
query-string groups is converted to non-capturing in both files.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(config): name capture groups for prefer-named-capture-group

Burns down prefer-named-capture-group violations in lib/config/.
Used groups get names with replacement strings switched from $1/$2 to
$<name>; the unused separator group in schedule-migration.ts's
afterBeforeRegex becomes non-capturing. presets/parse.ts keeps
assigning through the already-declared `repo` variable rather than
array-destructuring the exec() result, matching this file's existing
style for the other named-group regexes just above it.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(util): name capture groups for prefer-named-capture-group

Burns down prefer-named-capture-group violations across lib/util/ and
lib/logger/. Same treatment as previous batches: named groups for
values that are read (via $<name> replacement strings, .groups!.<name>,
or destructured from .groups), non-capturing groups where nothing reads
the captured value (e.g. semantic.ts's angular-commit .test()-only
regex). www-authenticate.ts's tokenizer entries each get their own
named group but keep accessing the match generically via match[1],
since a positionally-indexed named group is still readable by index.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(workers): name capture groups for prefer-named-capture-group

Burns down prefer-named-capture-group violations in lib/workers/.
Used groups get names with $<name> replacement strings; unused
wrapper/alternation groups (e.g. semantic-commit-message.ts's optional
scope/issue wrappers, release-notes.ts's date-heading and
horizontal-rule matchers that are only probed with .search()/replaced
wholesale) become non-capturing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* refactor(test,tools): name capture groups for prefer-named-capture-group

Finishes the prefer-named-capture-group burndown: test/, tools/, and
vitest.config.mts. Groups whose value is read get names ($<name>
replacement strings or .groups.<name> access); groups only used via
.test()/.search() or that feed a .match(/…/g) call (whose return value
is the array of whole matches, not captured groups) become
non-capturing.

This is the last remaining slice of pre-existing violations, so the
rule (already enabled at error repo-wide) now passes with zero
findings across the whole codebase.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017RxHFNsSworLcv23xXk9Hk

* fix prettier failure

* refactor(lint): use a named capture group in `v8-ignore-no-count`

New rule from main trips the newly enabled `prefer-named-capture-group` oxlint rule.

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-09-03 09:54:40 +00:00
Sebastian Poxhofer c32e2391a0 refactor(linters): add prefer-coerce-object rule (#45493)
Refs #45216

The object counterpart to `prefer-coerce-array`: `x ?? {}` becomes
`coerceObject(x)`. The rule flags a `??` whose default is a bare `{}`
literal, so a populated default or an asserted `({} as Foo)` still
passes; a `x ?? y ?? {}` chain maps onto `coerceObject(x, y)`.

Every hit across `lib/` converted cleanly, so no disable comments were
needed.
2026-08-28 09:27:59 +00:00
Quentin BERTRAND d83651c8de fix(gerrit): use max available Code-Review vote value for autoApprove (#44425)
* fix(gerrit): use max available Code-Review vote value for autoApprove

* Update lib/modules/platform/gerrit/scm.ts

Co-authored-by: Felipe Santos <felipecassiors@gmail.com>

* refactor(gerrit): extract Code-Review label name into a constant

* fix(gerrit): skip Code-Review vote and warn if label is not defined on project

* test(gerrit): restore Code-Review+2 auto-approve test with a defined label

* docs(gerrit): shorten getAutoApproveLabelValue() comment

* fix(gerrit): use static log message with metadata object for logger.warn

* refactor(gerrit): extract GerritLabels type alias

---------

Co-authored-by: Felipe Santos <felipecassiors@gmail.com>
2026-07-27 19:35:42 +00:00
Felipe Santos 18c9c9340e feat(gerrit): rework scm implementation (#38966)
* fix(gerrit): remove memCache to fix prNo coming as null when pr-created

* perf(gerrit): remove custom scm functions

* Fully remove login parameter from configureScm()

* Fetch refspecs in batches

* Remove unnecessary error handling

* Add tests

* Throw if branch init fails

* Simplify tests a little

* Reduce more the tests

* More test changes

* Reuse the existing test setup more

* Undo test import change

* Improve initializeBranchesFromRefspecs JSDoc

* The same for deleteBranchCreatedFromRefspec

* Reduce a log to trace level

* Abandon Code-Review -2 changes before initializing repository

* Simply initialize the branches after git.initRepo()

* Rework approach to be more generic

* Add TODO comment about commitAndPush()

* fix(gerrit): defer change creation to `createPr()`

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>

* Refactor hashtags handling

* Add prTitle to all missing commitAndPush()

* Fix type check

* Fix test issue

* Fix gerrit tests

* Add warning when prTitle is set in updatePr

* Remove now useless labels from commitAndPush

* Fix gerrit client coverage

* Fix gerrit scm coverage

* Fix rebase coverage

* Improve TODO about assignees

* Fix formatting

* Fix review comment

* Extract to a pushForReview function

* Fix after #41382

* Fix onboarding

* Cleanup code

* Fix ESLint

* Fix tests

* Restore gitRetry for git.merge

* Fix tests

* Simplify hashtags code

* Delete pendingChangeBranch in pushForReview()

* Fix test name

* Remove unnecessary test comments

* Improve test name again

* Fix another test name

* Delete local branch in Gerrit SCM

* Add test for deleting pending branch

* Add tests for pushForReview()

* Simplify/optimize commitAndPush

* Align jsdoc terminology on virtual branches

* Remove no longer relevant TODO

* Update virtal branch on push

* Simplify deleteVirtualBranch

* Fix test case name

* Improve another test name

* Restore test deleted by mistake

* Fix another small test inconsistency

* Fix coverage

* Fix Renovate not detecting modified commits

* Simplify Gerrit commitAndPush by leveraging git.commitFiles

* Fix some code style issues

* Revert "Simplify Gerrit commitAndPush by leveraging git.commitFiles"

This reverts commit d71edcc279.

* Fix another small code style issue

* Use isUndefined instead

* Fix one small test style issue

* Fix more code style issues

* Fix Gerrit mergeToLocal trying to fetch (and probably failing)

* Extract refs/remotes/origin to a function

* Rename virtualBranchRef to remoteBranchRef

* Fix remoteBranchRef tsc

* Consistently use currentRevision in Gerrit tests

* Remove unnecessary type assertion

* Instrument "fetch virtual branches"

* Remove pendingChangeBranches, avoid overriding deleteBranch and mergeToLocal

* Optimize virtual branches fetch (no longer requires update-ref), convert virtualBranches to Record, rename setVirtualBranch to registerVirtualBranch

* Combine registerVirtualBranch and updateVirtualBranch into a single setVirtualBranch, and update ref in virtual branch too

* Fix virtualBranches not being initialized

* Add some debug logs

* Simplify mergeToLocal for virtual branches

* Revert "Simplify mergeToLocal for virtual branches"

This reverts commit 375d57a474.

* Remove useless isVirtual const

* test(git): add toThrow message for virtualBranches fetch error

Satisfy vitest/require-to-throw-message so oxlint passes.

* Update lib/util/git/types.ts

Co-authored-by: RahulGautamSingh <rahultesnik@gmail.com>

* Address review feedback

---------

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>
Co-authored-by: RahulGautamSingh <rahultesnik@gmail.com>
2026-07-17 21:47:08 +00:00
Felipe Santos b3a21cfc51 fix(gerrit): enforce username in SSH Git URLs (#43651) 2026-07-14 18:21:10 +00:00
Sebastian Poxhofer dfe806f9ac refactor(gerrit): use schema validated getJson instead of getJsonUnchecked (#43777)
* fix(platform/gerrit): replace getJsonUnchecked with validated getJson

Migrate all getJsonUnchecked calls in lib/modules/platform/gerrit/client.ts
to use Zod-validated getJson. Co-locate schemas in schema.ts with lenient
optional fields to ensure backward compatibility with all existing API responses.

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

* strictly follow previous interfaces

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-09 17:23:04 +00:00
Sebastian Poxhofer 73b90e958b refactor: remove string concetation for production code (#43442)
refactor: prefer templates rather than `+`
2026-05-19 13:31:27 +00:00
Sergei Zharinov 9bf2f6b4be fix(gerrit): Use addMessageIfNotAlreadyExists in updatePr (#43155) 2026-05-07 20:13:25 +00:00
Felipe Santos 1bbe82400e fix(gerrit): defer change creation to createPr() (#39250)
* fix(gerrit): defer change creation to `createPr()`

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>

* Refactor hashtags handling

* Add prTitle to all missing commitAndPush()

* Fix gerrit tests

* Add warning when prTitle is set in updatePr

* Remove now useless labels from commitAndPush

* Fix gerrit client coverage

* Fix gerrit scm coverage

* Fix rebase coverage

* Improve TODO about assignees

* Fix formatting

* Fix review comment

* Extract to a pushForReview function

* Fix after #41382

* Fix onboarding

* Cleanup code

* Fix ESLint

* Fix tests

* Restore gitRetry for git.merge

* Fix tests

* Simplify hashtags code

* Delete pendingChangeBranch in pushForReview()

* Fix test name

* Remove unnecessary test comments

* Improve test name again

* Fix another test name

* Delete local branch in Gerrit SCM

* Add test for deleting pending branch

* Add tests for pushForReview()

* Fix test case name

* Improve another test name

* Fix another small test inconsistency

* Fix some code style issues

* Use isUndefined instead

* Fix one small test style issue

---------

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>
2026-04-28 08:29:26 +00:00
spmiller 777b884a38 feat(gerrit): Add gitUrl support (#42672)
* feat: Gerrit supports gitUrl

This change adds support for the gitUrl parameter to the gerrit platform.

It queries the gerrit server to check what download options are available. If ssh is selected but not available, it will throw an error.

* feat: Gerrit supports gitUrl

This removes support for querying the supported download schemes and
instead hard-codes the default ssh port.

* fix: Review feedback

Addresses feedback left in review:
- constants for ports
- better SSH url creation
- more consistent util method usage

* fix: Review feedback

Addresses feedback left in review:
- Reverts SSH URL creation to ensure coverage target

* fix: Review feedback

Addresses feedback left in review:
- Convert switch statement to if/else
- Move endpointURL check into getGerritResponse

This makes the parse/clone calls unnecessary.

* fix: Review feedback

Addresses feedback left in review:
- Simplify ssh url creation
2026-04-21 21:36:37 +00:00
Michael Kriese 912c623d60 test: full coverage for platforms (#41318)
chore: full coverage for platforms
2026-02-19 11:05:15 +00:00
Jamie Tanna a300036a1c refactor(platform): programatically mark Platforms as experimental (#41220)
* refactor(platform): programatically mark Platforms as experimental

As part of future changes, we'll want to be able to more
straightforwardly determine whether a given Platform is experimental.

To do this, we can add a new optional `experimental` flag to the
`Platform`.

As part of having this available, we can refactor how our docs for
Platforms are built, and replace a hand-authored experimental notice, we
can automagically insert it into the built docs.

To make sure that we don't break the rendering of the Markdown for
Mkdocs, we need to insert the experimental notice after the page
heading.

As we're now using the Platform itself, not only the ID, we need to
refactor how `tools/docs/platforms.ts` renders the pages.

* docs(platforms): clarify which Platforms are experimental (#41249)

* chore: format code block

---------

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2026-02-18 09:07:25 +00:00
Felipe Santos 5db0218ec1 fix(gerrit): not cloning submodules (#40089) 2026-01-28 22:25:16 +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
renovate[bot] acacad57c6 chore(deps): update linters (main) (#40277)
* chore(deps): update linters

| datasource | package              | from   | to     |
| ---------- | -------------------- | ------ | ------ |
| npm        | eslint-plugin-oxlint | 1.36.0 | 1.38.0 |
| npm        | typescript-eslint    | 8.50.1 | 8.52.0 |

* chore: enable oxlint gha format

* chore: fix lint

* chore: fix lint

* chore: fix lint

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2026-01-14 15:32:48 +00:00
travisshivers 32bf2bf5c6 fix(gerrit): pass credentials to api calls in initPlatform (#39970)
We need to explicitly pass the gerrit credentials to the api calls
in initPlaform since the host rules for the platform aren't set up
until later on, so the standard http library won't find any credentials
for the gerrit platform yet.

This follows the same pattern as many of the other platforms on renovate
where they also explicitly pass credentials for the api calls made
during their initPlatform.

This appears to have been broken recently due to the recent addition
of an authenticated version api call in
https://github.com/renovatebot/renovate/pull/39223

See https://github.com/renovatebot/renovate/discussions/39969
2025-12-15 08:43:14 +00:00
Felipe Santos c1b45a56b7 feat(gerrit): use most efficient search operators based on Gerrit version (#39223)
* fix(gerrit): use most efficient search operators based on Gerrit version

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>

* Address review comments

* Use ignore if instead

* Rename client.version to client.gerritVersion

* Update lib/modules/platform/gerrit/client.spec.ts

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>

---------

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-12-12 18:49:01 +00:00
Felipe Santos 28116f7d40 feat(gerrit): support moving changes to different target branches (#39046)
* feat(gerrit): support moving changes to different target branches

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>

* Update lib/modules/platform/types.ts

---------

Signed-off-by: Felipe Santos <felipe.santos@ericsson.com>
Co-authored-by: Michael Kriese <michael.kriese@gmx.de>
2025-12-11 15:58:45 +00:00
Felipe Santos fe4823678d fix(gerrit): correct comment normalization (#39016) 2025-12-10 22:17:02 +00:00
Felipe Santos 84633f1e56 fix(gerrit): avoid retrieving messages in updatePr and createPr (#39015)
* fix(gerrit): avoid retrieving change messages in updatePr and createPr

* Remove more of now unnecessary code

* Remove useless TODOs
2025-11-12 15:42:22 +00:00
Felipe Santos fc3f7a8ee7 fix(gerrit): remove memCache to fix prNo coming as null when pr-created (#38957) 2025-10-31 07:47:19 +00:00
Felipe Santos 3ea1611e87 feat(gerrit): handle pagination when querying changes (#38535)
* feat(gerrit): handle pagination when querying changes

* Add noPagination option, rename pageLimit to limit, and JSDoc them

* Rename limit to pageLimit

* Rename test references
2025-10-27 17:36:50 +00:00
Felipe Santos 30b0599efe feat(gerrit): suggest use of rebase hashtag (#36955) 2025-07-11 13:29:24 +00:00
Felipe Santos 6e4f334d2b fix(gerrit): use change instead of change-request terminology (#35908) 2025-07-04 17:41:14 +00:00
Felipe Santos 8db486bf2e feat(gerrit): add support for labels through hashtags (#35900) 2025-07-04 08:44:34 +00:00
Felipe Santos 21042b226a fix(gerrit): various fixes and optimizations (#35661) 2025-06-06 07:27:27 +00:00
Felipe Santos 664b8fe30c feat(gerrit): add message when abandoning change due to Code-Review -2 (#36207) 2025-05-29 10:39:46 +00:00
Felipe Santos 3d68582b8a fix(gerrit): auto-approve without calling gerrit api (#35315) 2025-04-17 13:43:11 +00:00
Michael Kriese 9756cd9c15 docs(gitea): fix gitUrl support (#34038) 2025-02-05 09:17:36 +00:00
Felipe Santos e22b96e7b3 fix(gerrit): getBranchStatus not returning red for failed checks (#32812) 2024-11-30 09:49:26 +00:00
Felipe Santos 73821c6c73 feat(gerrit): Reduce email notifications (#32817) 2024-11-30 05:51:52 +00:00
Felipe Santos f7e4668eff fix(gerrit): improve commit message vs pr title workaround (#32115) 2024-11-12 05:54:01 +00:00
RahulGautamSingh 4b502025fe refactor: rename platformOptions -> platformPrOptions (#30173) 2024-07-16 07:33:55 +00:00
Michael Kriese a02c850453 fix(dependency-dashboard): fix truncated issue body (#30081) 2024-07-08 12:14:27 +00:00
Felipe Santos 9841fa00c9 fix(gerrit): commitBody option not being effective (#28774) 2024-05-02 08:39:28 +00:00
Rhys Arkins 59df10183a feat(platform): getRepoForceRebase -> getBranchForceRebase (#27052)
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2024-02-06 09:14:11 +00:00
Markus Schulz b2422d86fd feat: Support for Platform "Gerrit" (#18961)
Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
Co-authored-by: Rhys Arkins <rhys@arkins.net>
2023-12-29 17:55:25 +00:00