function resolveTargets()

in on-merge/backportTargets.js [12:52]


function resolveTargets(versions, versionMap, labelsOriginal) {
    const targets = new Set();
    const labels = labelsOriginal.map((label) => label.toLowerCase());
    if (labels.includes('backport:prev-minor')) {
        targets.add(versions.previousMinor.branch);
    }
    if (labels.includes('backport:prev-major')) {
        versions.all.filter((version) => version.previousMajor).forEach((version) => targets.add(version.branch));
    }
    if (labels.includes('backport:current-major')) {
        versions.all
            .filter((version) => version.currentMajor && version.branch !== 'main')
            .forEach((version) => targets.add(version.branch));
    }
    if (labels.includes('backport:all-open')) {
        versions.all
            .filter((version) => version.branch !== 'main')
            .forEach((version) => targets.add(version.branch));
    }
    labels
        .filter((label) => label.match(/^v[0-9]+\.[0-9]+\.[0-9]+$/))
        .forEach((label) => {
        let branch = null;
        for (const [regex, replacement] of Object.entries(versionMap)) {
            const matcher = new RegExp(regex);
            if (matcher.test(label)) {
                branch = label.replace(matcher, replacement);
                break;
            }
        }
        if (branch && branch !== 'main') {
            targets.add(branch);
            if (!labels.includes('backport:version') && !labels.includes('auto-backport')) {
                // Fill in gaps, e.g. if `v8.1.0` is specified, add everything that is currently open between 8.1 and <main>
                const version = label.substring(1);
                getBranchesAfter(versions, version).forEach((branch) => targets.add(branch));
            }
        }
    });
    return [...targets].sort();
}