Release exempt labels
This commit is contained in:
		
							parent
							
								
									48efd1a8de
								
							
						
					
					
						commit
						c201d45ef4
					
				| @ -60,5 +60,7 @@ jobs: | |||||||
|         stale-issue-message: 'Stale issue message' |         stale-issue-message: 'Stale issue message' | ||||||
|         stale-pr-message: 'Stale issue message' |         stale-pr-message: 'Stale issue message' | ||||||
|         stale-issue-label: 'no-issue-activity' |         stale-issue-label: 'no-issue-activity' | ||||||
|  |         exempt-issue-label: 'awaiting-approval' | ||||||
|         stale-pr-label: 'no-pr-activity' |         stale-pr-label: 'no-pr-activity' | ||||||
|  |         exempt-pr-label: 'awaiting-approval' | ||||||
| ``` | ``` | ||||||
|  | |||||||
							
								
								
									
										14
									
								
								action.yml
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								action.yml
									
									
									
									
									
								
							| @ -6,24 +6,28 @@ inputs: | |||||||
|     description: 'Token for the repo. Can be passed in using {{ secrets.GITHUB_TOKEN }}' |     description: 'Token for the repo. Can be passed in using {{ secrets.GITHUB_TOKEN }}' | ||||||
|     required: true |     required: true | ||||||
|   stale-issue-message: |   stale-issue-message: | ||||||
|     description: 'The message to post on the issue when tagging it. If none provided, will not mark iusses stale.' |     description: 'The message to post on the issue when tagging it. If none provided, will not mark issues stale.' | ||||||
|   stale-pr-message: |   stale-pr-message: | ||||||
|     description: 'The message to post on the pr when tagging it. If none provided, will not mark prs stale.' |     description: 'The message to post on the pr when tagging it. If none provided, will not mark pull requests stale.' | ||||||
|   days-before-stale: |   days-before-stale: | ||||||
|     description: 'The number of days old an issue can be before marking it stale' |     description: 'The number of days old an issue can be before marking it stale' | ||||||
|     default: 60 |     default: 60 | ||||||
|   days-before-close: |   days-before-close: | ||||||
|     description: 'The number of days to wait to close an issue or pr after it being marked stale' |     description: 'The number of days to wait to close an issue or pull request after it being marked stale' | ||||||
|     default: 7 |     default: 7 | ||||||
|   stale-issue-label: |   stale-issue-label: | ||||||
|     description: 'The label to apply when an issue is stale' |     description: 'The label to apply when an issue is stale' | ||||||
|     default: 'Stale' |     default: 'Stale' | ||||||
|  |   exempt-issue-label: | ||||||
|  |     description: 'The label to apply when an issue is exempt from being marked stale' | ||||||
|   stale-pr-label: |   stale-pr-label: | ||||||
|     description: 'The label to apply when a pr is stale' |     description: 'The label to apply when a pull request is stale' | ||||||
|     default: 'Stale' |     default: 'Stale' | ||||||
|  |   exempt-pr-label: | ||||||
|  |     description: 'The label to apply when a pull request is exempt from being marked stale' | ||||||
|   operations-per-run: |   operations-per-run: | ||||||
|     description: 'The maximum number of operations per run, used to control rate limiting' |     description: 'The maximum number of operations per run, used to control rate limiting' | ||||||
|     default: 30 |     default: 30 | ||||||
| runs: | runs: | ||||||
|   using: 'node12' |   using: 'node12' | ||||||
|   main: 'lib/main.js' |   main: 'lib/main.js' | ||||||
|  | |||||||
							
								
								
									
										10
									
								
								lib/main.js
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								lib/main.js
									
									
									
									
									
								
							| @ -52,7 +52,11 @@ function processIssues(client, args, operationsLeft, page = 1) { | |||||||
|                 continue; |                 continue; | ||||||
|             } |             } | ||||||
|             let staleLabel = isPr ? args.stalePrLabel : args.staleIssueLabel; |             let staleLabel = isPr ? args.stalePrLabel : args.staleIssueLabel; | ||||||
|             if (isLabeledStale(issue, staleLabel)) { |             let exemptLabel = isPr ? args.exemptPrLabel : args.exemptIssueLabel; | ||||||
|  |             if (exemptLabel && isLabeled(issue, exemptLabel)) { | ||||||
|  |                 continue; | ||||||
|  |             } | ||||||
|  |             else if (isLabeled(issue, staleLabel)) { | ||||||
|                 if (wasLastUpdatedBefore(issue, args.daysBeforeClose)) { |                 if (wasLastUpdatedBefore(issue, args.daysBeforeClose)) { | ||||||
|                     operationsLeft -= yield closeIssue(client, issue); |                     operationsLeft -= yield closeIssue(client, issue); | ||||||
|                 } |                 } | ||||||
| @ -71,7 +75,7 @@ function processIssues(client, args, operationsLeft, page = 1) { | |||||||
|         return yield processIssues(client, args, operationsLeft, page + 1); |         return yield processIssues(client, args, operationsLeft, page + 1); | ||||||
|     }); |     }); | ||||||
| } | } | ||||||
| function isLabeledStale(issue, label) { | function isLabeled(issue, label) { | ||||||
|     const labelComparer = l => label.localeCompare(l.name, undefined, { sensitivity: 'accent' }) === 0; |     const labelComparer = l => label.localeCompare(l.name, undefined, { sensitivity: 'accent' }) === 0; | ||||||
|     return issue.labels.filter(labelComparer).length > 0; |     return issue.labels.filter(labelComparer).length > 0; | ||||||
| } | } | ||||||
| @ -118,7 +122,9 @@ function getAndValidateArgs() { | |||||||
|         daysBeforeStale: parseInt(core.getInput('days-before-stale', { required: true })), |         daysBeforeStale: parseInt(core.getInput('days-before-stale', { required: true })), | ||||||
|         daysBeforeClose: parseInt(core.getInput('days-before-close', { required: true })), |         daysBeforeClose: parseInt(core.getInput('days-before-close', { required: true })), | ||||||
|         staleIssueLabel: core.getInput('stale-issue-label', { required: true }), |         staleIssueLabel: core.getInput('stale-issue-label', { required: true }), | ||||||
|  |         exemptIssueLabel: core.getInput('exempt-issue-label'), | ||||||
|         stalePrLabel: core.getInput('stale-pr-label', { required: true }), |         stalePrLabel: core.getInput('stale-pr-label', { required: true }), | ||||||
|  |         exemptPrLabel: core.getInput('exempt-pr-label'), | ||||||
|         operationsPerRun: parseInt(core.getInput('operations-per-run', { required: true })) |         operationsPerRun: parseInt(core.getInput('operations-per-run', { required: true })) | ||||||
|     }; |     }; | ||||||
|     for (var numberInput of [ |     for (var numberInput of [ | ||||||
|  | |||||||
							
								
								
									
										11
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								src/main.ts
									
									
									
									
									
								
							| @ -12,7 +12,9 @@ type Args = { | |||||||
|   daysBeforeStale: number; |   daysBeforeStale: number; | ||||||
|   daysBeforeClose: number; |   daysBeforeClose: number; | ||||||
|   staleIssueLabel: string; |   staleIssueLabel: string; | ||||||
|  |   exemptIssueLabel: string; | ||||||
|   stalePrLabel: string; |   stalePrLabel: string; | ||||||
|  |   exemptPrLabel: string; | ||||||
|   operationsPerRun: number; |   operationsPerRun: number; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| @ -59,8 +61,11 @@ async function processIssues( | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     let staleLabel = isPr ? args.stalePrLabel : args.staleIssueLabel; |     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)) { |       if (wasLastUpdatedBefore(issue, args.daysBeforeClose)) { | ||||||
|         operationsLeft -= await closeIssue(client, issue); |         operationsLeft -= await closeIssue(client, issue); | ||||||
|       } else { |       } else { | ||||||
| @ -85,7 +90,7 @@ async function processIssues( | |||||||
|   return await processIssues(client, args, operationsLeft, page + 1); |   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 => |   const labelComparer: (l: IssueLabel) => boolean = l => | ||||||
|     label.localeCompare(l.name, undefined, {sensitivity: 'accent'}) === 0; |     label.localeCompare(l.name, undefined, {sensitivity: 'accent'}) === 0; | ||||||
|   return issue.labels.filter(labelComparer).length > 0; |   return issue.labels.filter(labelComparer).length > 0; | ||||||
| @ -151,7 +156,9 @@ function getAndValidateArgs(): Args { | |||||||
|       core.getInput('days-before-close', {required: true}) |       core.getInput('days-before-close', {required: true}) | ||||||
|     ), |     ), | ||||||
|     staleIssueLabel: core.getInput('stale-issue-label', {required: true}), |     staleIssueLabel: core.getInput('stale-issue-label', {required: true}), | ||||||
|  |     exemptIssueLabel: core.getInput('exempt-issue-label'), | ||||||
|     stalePrLabel: core.getInput('stale-pr-label', {required: true}), |     stalePrLabel: core.getInput('stale-pr-label', {required: true}), | ||||||
|  |     exemptPrLabel: core.getInput('exempt-pr-label'), | ||||||
|     operationsPerRun: parseInt( |     operationsPerRun: parseInt( | ||||||
|       core.getInput('operations-per-run', {required: true}) |       core.getInput('operations-per-run', {required: true}) | ||||||
|     ) |     ) | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 damccorm
						damccorm