Files
renovate/lib/modules/manager/composer/update-locked.ts
Bram Rongen 98b7710df5 fix(composer): detect already-updated lockfile updates for dev dependencies (#44805)
updateLockedDependency() only searched the packages section of
composer.lock, so updates to packages-dev dependencies were never
recognized as already committed to the branch. Every Renovate run then
fell back to a full artifact update and rebuilt the branch from a clean
base, force-pushing grouped composer PRs containing dev dependencies
whenever the base branch had moved - even with identical content.
2026-07-30 12:57:30 +00:00

31 lines
1.1 KiB
TypeScript

import { logger } from '../../../logger/index.ts';
import { Json } from '../../../util/schema-utils/index.ts';
import { api as composer } from '../../versioning/composer/index.ts';
import type { UpdateLockedConfig, UpdateLockedResult } from '../types.ts';
import { Lockfile } from './schema.ts';
export function updateLockedDependency(
config: UpdateLockedConfig,
): UpdateLockedResult {
const { depName, currentVersion, newVersion, lockFile, lockFileContent } =
config;
logger.debug(
`composer.updateLockedDependency: ${depName}@${currentVersion} -> ${newVersion} [${lockFile}]`,
);
try {
const lockfile = Json.pipe(Lockfile).parse(lockFileContent);
if (
[...lockfile.packages, ...lockfile.packagesDev].find(
({ name, version }) =>
name === depName && composer.equals(version, newVersion),
)
) {
return { status: 'already-updated' };
}
return { status: 'unsupported' };
} catch (err) /* istanbul ignore next */ {
logger.debug({ err }, 'composer.updateLockedDependency() error');
return { status: 'update-failed' };
}
}