mirror of
https://github.com/renovatebot/renovate.git
synced 2026-10-24 14:34:21 +00:00
f711fd46e2
* test(workers/repository): mark seven unreachable guards for v8 These are defensive paths that no input reaches, and the guards stay as they are. What changes is that v8 now knows to skip them: the existing `istanbul ignore` comments are inert under the v8 provider, so the branches behind them were still being counted. - `versioning/index`: a string input can only fail the schema with the custom issue its own transform raises - `versioning/conda`: pep440 always answers for a well-formed `==X.Y.*` - `versioning/ruby`: callers only pass versions that have already parsed - `repository/index`: only called when the repository logged a problem - `config-migration/branch/rebase`: JSON5 output is always serializable back to JSON - `onboarding/pr/pr-list`: base branches are unique Record keys, so the sort never compares one with itself - `changelog/release-notes`: a matched release always carries its own url - `changelog/source`: `getInRangeReleases` only returns null on paths it already ignores Two notes on the hints. They have to be a single-line comment directly above the statement -- a two-line reason, or anything in between such as an oxlint directive, breaks the association silently. And `v8 ignore else` covers an `if` with no else, while `v8 ignore next` covers an expression-level branch such as `??` or a ternary. `versioning/index` also swaps `issue && issue.code` for `issue?.code`, which is what the oxlint directive sitting in the way was suppressing. Co-authored-by: Claude Opus 5 <michael.kriese+claude-code@mend.io> * test(workers/repository): cover the last five pr worker guards None of these needed an ignore comment; each has a real input: - `updatePrDebugData` gets a describe of its own. It is exported but was only reached through a pr whose debug data already carried labels, so the case where an existing pr has none went untaken. - a `not-pending` branch whose status is no longer yellow - a changelog error that is not a missing GitHub token - an existing pr updated because a rebase was requested - a platform that answers `createPr` with null, so assignees and reviewers are skipped With these, `update/pr/index.ts` is fully covered. Co-authored-by: Claude Opus 5 <michael.kriese+claude-code@mend.io> * test(workers/repository): cover the last four branch update guards - `bump-versions` reads the current version off disk when the pending change for that file carries no contents. All three guards involved are covered by one case where the file is pending in both the package file and the artifact list with no contents on either entry. An earlier attempt at this looked like it failed: the bump does happen, but the result is appended to `updatedPackageFiles` rather than `updatedArtifacts`, because the file is already pending there. - `get-updated` keeps a package file another upgrade already wrote, for a manager that is asked for a lockfile-only update but has no `updateLockedDependency`. With these, `lib/workers/repository` is fully covered. Co-authored-by: Claude Opus 5 <michael.kriese+claude-code@mend.io> * ci: pin the branch coverage threshold at 100 A full run on this branch reports 100% on all four metrics: statements (49435/49435), branches (25727/25727), functions (7414/7414) and lines (48924/48924). Branches joins the other three at 100 rather than taking another rounding-down step. There is no longer a margin to leave: any new uncovered branch is a regression, and the threshold should say so. Co-authored-by: Claude Opus 5 <michael.kriese+claude-code@mend.io> --------- Co-authored-by: Claude Opus 5 <michael.kriese+claude-code@mend.io>
40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
import versionings from './api.ts';
|
|
import { Versioning } from './schema.ts';
|
|
import * as semverCoerced from './semver-coerced/index.ts';
|
|
import type { VersioningApi, VersioningApiConstructor } from './types.ts';
|
|
|
|
export * from './types.ts';
|
|
|
|
export const defaultVersioning = semverCoerced;
|
|
|
|
export function getVersioningList(): string[] {
|
|
return Array.from(versionings.keys());
|
|
}
|
|
|
|
/**
|
|
* Get versioning map. Can be used to dynamically add new versioning type
|
|
*/
|
|
export function getVersionings(): Map<
|
|
string,
|
|
VersioningApi | VersioningApiConstructor
|
|
> {
|
|
return versionings;
|
|
}
|
|
|
|
export function get(versioning: string | null | undefined): VersioningApi {
|
|
const res = Versioning.safeParse(versioning ?? defaultVersioning.id);
|
|
|
|
if (!res.success) {
|
|
const [issue] = res.error.issues;
|
|
// v8 ignore else -- a string input can only fail with the custom issue
|
|
if (issue?.code === 'custom' && issue.params?.error) {
|
|
throw issue.params.error;
|
|
}
|
|
|
|
// istanbul ignore next: should never happen
|
|
throw res.error;
|
|
}
|
|
|
|
return res.data;
|
|
}
|