fix-version-gaps/fixGaps.js (87 lines of code) (raw):

"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.fixGaps = exports.getCommentFromLabels = exports.getVersionLabelsToAdd = exports.getVersionsFromBackportConfig = exports.getLowestVersionsOnPr = void 0; const rest_1 = require("@octokit/rest"); function getLowestVersionsOnPr(pr) { const lowestVersionsOnPr = {}; for (const label of pr.labels) { const matches = label.name.match(/^v([0-9.]+)$/); if (matches) { const [major, minor] = matches[1].split('.'); if (!lowestVersionsOnPr[major]) { lowestVersionsOnPr[major] = minor; } else if (parseInt(lowestVersionsOnPr[major], 10) > parseInt(minor, 10)) { lowestVersionsOnPr[major] = minor; } } } return lowestVersionsOnPr; } exports.getLowestVersionsOnPr = getLowestVersionsOnPr; function getVersionsFromBackportConfig(config) { const highestVersions = []; for (const label in config.branchLabelMapping) { const matches = label.match(/^\^v([0-9.]+)\$$/); if (matches) { const version = matches[1]; highestVersions.push(version); } } return highestVersions; } exports.getVersionsFromBackportConfig = getVersionsFromBackportConfig; function getVersionLabelsToAdd(config, pr) { const versionsFromBackportConfig = getVersionsFromBackportConfig(config); const lowestVersionsOnPr = getLowestVersionsOnPr(pr); const allLabels = pr.labels.map((label) => label.name); const versionLabelsToAdd = []; for (const version of versionsFromBackportConfig) { const [major, minor] = version.split('.'); const nextVersion = parseInt(lowestVersionsOnPr[major], 10) + 1; for (let i = nextVersion; i <= parseInt(minor, 10); i++) { const label = `v${major}.${i}.0`; if (!allLabels.find((labelToCheck) => labelToCheck.match(`^v${major}\\.${i}\\.`))) { versionLabelsToAdd.push(label); } } } return versionLabelsToAdd; } exports.getVersionLabelsToAdd = getVersionLabelsToAdd; function getCommentFromLabels(labelsToAdd) { return [ 'The following labels were identified as gaps in your version labels and will be added automatically:', ...labelsToAdd.map((label) => `- ${label}`), '', 'If any of these should not be on your pull request, please manually remove them.', ].join('\n'); } exports.getCommentFromLabels = getCommentFromLabels; function createComment(octokit, pr, labelsToAdd) { return octokit.issues.createComment({ owner: pr.base.repo.owner.login, repo: pr.base.repo.name, issue_number: pr.number, body: getCommentFromLabels(labelsToAdd), }); } function addLabels(octokit, pr, labelsToAdd) { return octokit.issues.addLabels({ owner: pr.base.repo.owner.login, repo: pr.base.repo.name, issue_number: pr.number, labels: labelsToAdd, }); } async function fixGaps(accessToken, config, pr) { const labelsToAdd = getVersionLabelsToAdd(config, pr); if (labelsToAdd.length > 0) { const octokit = new rest_1.Octokit({ auth: accessToken, }); await createComment(octokit, pr, labelsToAdd); await addLabels(octokit, pr, labelsToAdd); } } exports.fixGaps = fixGaps; //# sourceMappingURL=fixGaps.js.map