(options: {
number: number;
labels: readonly string[];
mergeRiskLabels: readonly MergeRiskLabelName[];
dryRun: boolean;
})
| 10890 | } |
| 10891 | |
| 10892 | function syncMergeRiskLabels(options: { |
| 10893 | number: number; |
| 10894 | labels: readonly string[]; |
| 10895 | mergeRiskLabels: readonly MergeRiskLabelName[]; |
| 10896 | dryRun: boolean; |
| 10897 | }): { labels: string[]; changed: boolean } { |
| 10898 | const nextLabels = nextMergeRiskLabels(options.labels, options.mergeRiskLabels); |
| 10899 | const currentLabelKeys = new Set(options.labels.map((label) => label.toLowerCase())); |
| 10900 | const nextLabelKeys = new Set(nextLabels.map((label) => label.toLowerCase())); |
| 10901 | const labelsToAdd = nextLabels.filter( |
| 10902 | (label): label is MergeRiskLabelName => |
| 10903 | MERGE_RISK_LABEL_NAMES.has(label) && !currentLabelKeys.has(label.toLowerCase()), |
| 10904 | ); |
| 10905 | const labelsToRemove = options.labels.filter( |
| 10906 | (label) => MERGE_RISK_LABEL_NAMES.has(label) && !nextLabelKeys.has(label.toLowerCase()), |
| 10907 | ); |
| 10908 | const changed = labelsToAdd.length > 0 || labelsToRemove.length > 0; |
| 10909 | if (!changed) return { labels: nextLabels, changed }; |
| 10910 | if (options.dryRun) return { labels: nextLabels, changed }; |
| 10911 | for (const label of labelsToRemove) { |
| 10912 | ghWithRetry(["issue", "edit", String(options.number), "--remove-label", label]); |
| 10913 | } |
| 10914 | const syncedLabels = options.labels.filter((label) => !labelsToRemove.includes(label)); |
| 10915 | let added = false; |
| 10916 | for (const label of labelsToAdd) { |
| 10917 | ensureMergeRiskLabel(label); |
| 10918 | if (tryAddOptionalLabel({ number: options.number, label, currentLabels: syncedLabels })) { |
| 10919 | syncedLabels.push(label); |
| 10920 | added = true; |
| 10921 | } |
| 10922 | } |
| 10923 | return { labels: syncedLabels, changed: labelsToRemove.length > 0 || added }; |
| 10924 | } |
| 10925 | |
| 10926 | function syncIssueAdvisoryLabels(options: { |
| 10927 | number: number; |
no test coverage detected