renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
62 lines (61 loc) • 2.7 kB
JavaScript
import { parseLine } from "./line-parser.js";
import { diffLines } from "diff";
import { markdownTable } from "markdown-table";
//#region lib/modules/manager/gomod/artifacts-extra.ts
function getExtraDeps(goModBefore, goModAfter, excludeDeps) {
const result = [];
const diff = diffLines(goModBefore, goModAfter, { newlineIsToken: true });
const addDeps = {};
const rmDeps = {};
for (const { added, removed, value } of diff) {
if (!added && !removed) continue;
const res = parseLine(value);
if (!res) continue;
const { depName, depType, currentValue } = res;
if (!depName || !currentValue) continue;
let expandedDepName = depName;
if (depType === "toolchain") expandedDepName = `${depName} (${depType})`;
if (added) addDeps[expandedDepName] = currentValue;
else rmDeps[expandedDepName] = currentValue;
}
for (const [depName, currentValue] of Object.entries(rmDeps)) {
if (excludeDeps.includes(depName)) continue;
const newValue = addDeps[depName];
if (newValue) result.push({
depName,
currentValue,
newValue
});
}
return result;
}
function extraDepsTable(extraDeps) {
const tableLines = [];
tableLines.push(["**Package**", "**Change**"]);
for (const { depName, currentValue, newValue } of extraDeps) {
const depNameQuoted = `\`${depName}\``;
const versionChangeQuoted = `\`${currentValue}\` -> \`${newValue}\``;
tableLines.push([depNameQuoted, versionChangeQuoted]);
}
return markdownTable(tableLines, { align: ["l", "l"] });
}
function getExtraDepsNotice(goModBefore, goModAfter, excludeDeps) {
if (!goModBefore || !goModAfter) return null;
const extraDeps = getExtraDeps(goModBefore, goModAfter, excludeDeps);
if (extraDeps.length === 0) return null;
const noticeLines = ["In order to perform the update(s) described in the table above, Renovate ran the `go get` command, which resulted in the following additional change(s):", "\n"];
const goUpdated = extraDeps.some(({ depName }) => depName === "go");
const toolchainUpdated = extraDeps.some(({ depName }) => depName === "go (toolchain)");
const otherDepsCount = extraDeps.length - (goUpdated ? 1 : 0) - (toolchainUpdated ? 1 : 0);
if (otherDepsCount === 1) noticeLines.push(`- ${otherDepsCount} additional dependency was updated`);
else if (otherDepsCount > 1) noticeLines.push(`- ${otherDepsCount} additional dependencies were updated`);
if (goUpdated) noticeLines.push("- The `go` directive was updated for compatibility reasons");
noticeLines.push("\n");
noticeLines.push("Details:");
noticeLines.push("\n");
noticeLines.push(extraDepsTable(extraDeps));
return noticeLines.join("\n");
}
//#endregion
export { getExtraDepsNotice };
//# sourceMappingURL=artifacts-extra.js.map