renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
68 lines (67 loc) • 2.26 kB
JavaScript
import { logger } from "../../../../logger/index.js";
//#region lib/workers/repository/process/lookup/rollback.ts
function getRollbackUpdate(config, versions, versioningApi) {
const { packageFile, versioning, packageName, depName, currentValue, datasource } = config;
// istanbul ignore if
if (!("isLessThanRange" in versioningApi)) {
logger.debug({ versioning }, "Current versioning does not support isLessThanRange()");
return null;
}
const lessThanVersions = versions.filter((v) => {
try {
return versioningApi.isLessThanRange(v.version, currentValue);
} catch /* istanbul ignore next */ {
return false;
}
});
// istanbul ignore if
if (!lessThanVersions.length) {
logger.debug({
packageFile,
depName,
currentValue
}, "Missing version has nothing to roll back to");
return null;
}
logger.debug({
packageFile,
depName,
currentValue
}, `Current version not found - rolling back`);
logger.debug({
dependency: depName,
versions
}, "Versions found before rolling back");
lessThanVersions.sort((a, b) => versioningApi.sortVersions(a.version, b.version));
let newRelease;
if (currentValue && versioningApi.isStable(currentValue)) newRelease = lessThanVersions.filter((v) => versioningApi.isStable(v.version)).pop();
let newVersion = newRelease?.version;
let registryUrl = newRelease?.registryUrl;
if (!newVersion) {
newRelease = lessThanVersions.pop();
newVersion = newRelease?.version;
registryUrl = newRelease?.registryUrl;
}
// istanbul ignore if
if (!newVersion) {
logger.debug("No newVersion to roll back to");
return null;
}
const newValue = versioningApi.getNewValue({
currentValue,
rangeStrategy: "replace",
newVersion
});
return {
bucket: "rollback",
newMajor: versioningApi.getMajor(newVersion),
newValue,
newVersion,
registryUrl,
updateType: "rollback",
prBodyNotes: [`The version of \`${depName ?? packageName}\` in use (\`${currentValue}\`) was not found once Renovate filtered the dependencies. The ${datasource} datasource returned ${versions.length} entries, but when Renovate applied its filtering, none were left, so Renovate will roll back to a supported version`]
};
}
//#endregion
export { getRollbackUpdate };
//# sourceMappingURL=rollback.js.map