Files
renovate/lib/modules/datasource/postprocess-release.ts
T
Sebastian Poxhofer c41b46bac3 feat(logging): do not use dynamic fields in log messages with severity WARN or higher (#44560)
* ci(linter): add renovate/logger-static-message rule

Adds a custom oxlint rule that enforces a static msg component for
logger.warn/error/fatal calls (including logger.once variants) so the
messages can be grouped in metrics and error catching services, per
docs/development/best-practices.md. It also flags metadata properties
named 'error' that hold error-ish values, because the bunyan serializer
only handles the 'err' key.

The rule is enabled as an error for lib/ production code and disabled
for spec files. All 33 pre-existing violations are fixed by moving
interpolated values into the metadata object, making messages static,
and renaming 'error' metadata keys to 'err'. Affected log-message
assertions in co-located specs are updated accordingly.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* ci: ignore validator output

* fixup new merged in log messages

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-07-16 06:53:37 +00:00

71 lines
1.6 KiB
TypeScript

import { logger } from '../../logger/index.ts';
import type {
LookupUpdateConfig,
UpdateResult,
} from '../../workers/repository/process/lookup/types.ts';
import { getDatasourceFor } from './common.ts';
import { Datasource } from './datasource.ts';
import type { Release } from './types.ts';
type Config = Partial<LookupUpdateConfig & UpdateResult>;
export async function postprocessRelease(
config: Config,
release: Release,
): Promise<Release | null> {
const { datasource } = config;
const ds = datasource && getDatasourceFor(datasource);
if (!ds) {
logger.once.warn(
{ datasource },
'Failed to resolve datasource during release postprocessing',
);
return release;
}
if (
ds.constructor.prototype.postprocessRelease ===
Datasource.prototype.postprocessRelease
) {
return release;
}
const { packageName } = config;
if (!packageName) {
logger.once.warn(
{ datasource },
'Release postprocessing is not supported for empty `packageName` field',
);
return release;
}
const registryUrl = config.registryUrl ?? config.registryUrls?.at(0) ?? null;
try {
const result = await ds.postprocessRelease(
{ packageName, registryUrl },
release,
);
if (result === 'reject') {
logger.debug(
{
datasource,
packageName,
registryUrl,
version: release.version,
versionOrig: release.versionOrig,
},
'Rejected release',
);
return null;
}
return result;
} catch (err) {
logger.once.warn({ err, datasource }, 'Release interceptor failed');
return release;
}
}