From 9f69ef12ad1ae539589cc84100eacea217506838 Mon Sep 17 00:00:00 2001 From: Ryan Wilson-Perkin Date: Tue, 27 Aug 2019 15:58:14 -0400 Subject: [PATCH] Feature: Exempt labels from action (#11) * Change name to isLabeled for re-use with "exempt" * Add args for exempt labels * Skip operation if labeled exempt * Only check for exempt label if defined Since the exempt label parameter is not required, we don't want to both checking for it if it was not defined. * Don't reduce operationsLeft if exempt This variable just tracks the number of operations we're using to avoid rate limiting. Since the exempt check wouldn't result in a rate-limited request, we don't need to reduce the variable. * Update the action.yml with new exempt values * Update README with example of exempt labels * Remove redundant defaults --- README.md | 2 ++ action.yml | 4 ++++ src/main.ts | 11 +++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 67c4ba3f..f930eb1a 100644 --- a/README.md +++ b/README.md @@ -60,5 +60,7 @@ jobs: stale-issue-message: 'Stale issue message' stale-pr-message: 'Stale issue message' stale-issue-label: 'no-issue-activity' + exempt-issue-label: 'awaiting-approval' stale-pr-label: 'no-pr-activity' + exempt-pr-label: 'awaiting-approval' ``` diff --git a/action.yml b/action.yml index a03cfa9c..b2bb534d 100644 --- a/action.yml +++ b/action.yml @@ -18,9 +18,13 @@ inputs: stale-issue-label: description: 'The label to apply when an issue is stale' default: 'Stale' + exempt-issue-label: + description: 'The label to apply when an issue is exempt from being marked stale' stale-pr-label: description: 'The label to apply when a pull request is stale' default: 'Stale' + exempt-pr-label: + description: 'The label to apply when a pull request is exempt from being marked stale' operations-per-run: description: 'The maximum number of operations per run, used to control rate limiting' default: 30 diff --git a/src/main.ts b/src/main.ts index e2524b93..b24d6287 100644 --- a/src/main.ts +++ b/src/main.ts @@ -12,7 +12,9 @@ type Args = { daysBeforeStale: number; daysBeforeClose: number; staleIssueLabel: string; + exemptIssueLabel: string; stalePrLabel: string; + exemptPrLabel: string; operationsPerRun: number; }; @@ -59,8 +61,11 @@ async function processIssues( } let staleLabel = isPr ? args.stalePrLabel : args.staleIssueLabel; + let exemptLabel = isPr ? args.exemptPrLabel : args.exemptIssueLabel; - if (isLabeledStale(issue, staleLabel)) { + if (exemptLabel && isLabeled(issue, exemptLabel)) { + continue; + } else if (isLabeled(issue, staleLabel)) { if (wasLastUpdatedBefore(issue, args.daysBeforeClose)) { operationsLeft -= await closeIssue(client, issue); } else { @@ -85,7 +90,7 @@ async function processIssues( return await processIssues(client, args, operationsLeft, page + 1); } -function isLabeledStale(issue: Issue, label: string): boolean { +function isLabeled(issue: Issue, label: string): boolean { const labelComparer: (l: IssueLabel) => boolean = l => label.localeCompare(l.name, undefined, {sensitivity: 'accent'}) === 0; return issue.labels.filter(labelComparer).length > 0; @@ -151,7 +156,9 @@ function getAndValidateArgs(): Args { core.getInput('days-before-close', {required: true}) ), staleIssueLabel: core.getInput('stale-issue-label', {required: true}), + exemptIssueLabel: core.getInput('exempt-issue-label'), stalePrLabel: core.getInput('stale-pr-label', {required: true}), + exemptPrLabel: core.getInput('exempt-pr-label'), operationsPerRun: parseInt( core.getInput('operations-per-run', {required: true}) )