@@ -28076,6 +28076,12 @@ function run() {
2807628076 const winningAreaData = issue.getWinningAreaData(issue.determineArea());
2807728077 if (winningAreaData.area === '') {
2807828078 console.log("Keywords not included in this issue");
28079+ if (issue.defaultArea) {
28080+ if (issue.defaultArea.assignees)
28081+ github.setIssueAssignees(issue.defaultArea.assignees);
28082+ if (issue.defaultArea.labels)
28083+ github.setIssueLabels(issue.defaultArea.labels);
28084+ }
2807928085 }
2808028086 else {
2808128087 if (winningAreaData.assignees)
@@ -28143,6 +28149,7 @@ class Issue {
2814328149 this.bodyIssueWords = body.split(/ |\(|\)|\./);
2814428150 }
2814528151 this.parameters = JSON.parse(core.getInput("parameters", { required: true }));
28152+ this.defaultArea = JSON.parse(core.getInput("default-area", { required: false }));
2814628153 this.similarity = +core.getInput("similarity", { required: false });
2814728154 this.bodyValue = +core.getInput("body-value", { required: false });
2814828155 }
@@ -28167,31 +28174,11 @@ class Issue {
2816728174 potentialAreas = this.scoreArea(content, potentialAreas, this.bodyValue);
2816828175 });
2816928176 }
28170- console.log("Area scores: ", ...potentialAreas);
28171- let winningArea = '';
28172- let winners = new Map();
28173- for (let area of potentialAreas.entries()) {
28174- if (winners.size === 0) {
28175- winners.set(area[0], area[1]);
28176- }
28177- else if (area[1] > winners.values().next().value) {
28178- winners = new Map();
28179- winners.set(area[0], area[1]);
28180- }
28181- else if (area[1] === winners.values().next().value) {
28182- winners.set(area[0], area[1]);
28183- }
28184- }
28185- // tiebreaker goes to the area with more *exact* keyword matches
28186- if (winners.size > 1 && this.similarity !== 0) {
28187- this.similarity = 0;
28188- winningArea = this.determineArea();
28189- }
28190- else if (winners.size > 0) {
28191- winningArea = winners.keys().next().value;
28192- }
28193- winningArea = winners.keys().next().value;
28194- console.log("Winning area: " + winningArea);
28177+ if (potentialAreas.size > 0)
28178+ console.log("Area scores: ", ...potentialAreas);
28179+ const winningArea = this.decideWinner(potentialAreas);
28180+ if (winningArea)
28181+ console.log("Winning area: " + winningArea);
2819528182 return winningArea;
2819628183 }
2819728184 getWinningAreaData(winningArea) {
@@ -28220,6 +28207,31 @@ class Issue {
2822028207 });
2822128208 return potentialAreas;
2822228209 }
28210+ decideWinner(potentialAreas) {
28211+ let winningArea = '';
28212+ let winners = new Map();
28213+ for (let area of potentialAreas.entries()) {
28214+ if (winners.size === 0) {
28215+ winners.set(area[0], area[1]);
28216+ }
28217+ else if (area[1] > winners.values().next().value) {
28218+ winners = new Map();
28219+ winners.set(area[0], area[1]);
28220+ }
28221+ else if (area[1] === winners.values().next().value) {
28222+ winners.set(area[0], area[1]);
28223+ }
28224+ }
28225+ // tiebreaker goes to the area with more *exact* keyword matches
28226+ if (winners.size > 1 && this.similarity !== 0) {
28227+ this.similarity = 0;
28228+ winningArea = this.determineArea();
28229+ }
28230+ else if (winners.size > 0) {
28231+ winningArea = winners.keys().next().value;
28232+ }
28233+ return winningArea;
28234+ }
2822328235 isSimilar(str1, str2) {
2822428236 return (((str1.length + str2.length) / 2) * this.similarity);
2822528237 }
0 commit comments