Merge pull request #3464 from peaklabs-dev/remove-labels-assinges-on-close
Feat: GitHub action that removes labels and assignees on close
This commit is contained in:
		
							
								
								
									
										75
									
								
								.github/workflows/remove-labels-and-assignees-on-close.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										75
									
								
								.github/workflows/remove-labels-and-assignees-on-close.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,75 @@ | |||||||
|  | name: Remove Labels and Assignees on Issue Close | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   issues: | ||||||
|  |     types: [closed] | ||||||
|  |   pull_request: | ||||||
|  |     types: [closed] | ||||||
|  |   pull_request_target: | ||||||
|  |     types: [closed] | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   remove-labels-and-assignees: | ||||||
|  |     runs-on: ubuntu-latest | ||||||
|  |     steps: | ||||||
|  |       - name: Remove labels and assignees | ||||||
|  |         uses: actions/github-script@v7 | ||||||
|  |         with: | ||||||
|  |           github-token: ${{ secrets.GITHUB_TOKEN }} | ||||||
|  |           script: | | ||||||
|  |             const { owner, repo } = context.repo; | ||||||
|  |              | ||||||
|  |             async function processIssue(issueNumber) { | ||||||
|  |               try { | ||||||
|  |                 const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ | ||||||
|  |                   owner, | ||||||
|  |                   repo, | ||||||
|  |                   issue_number: issueNumber | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 const labelsToKeep = currentLabels | ||||||
|  |                   .filter(label => label.name === '⏱︎ Stale') | ||||||
|  |                   .map(label => label.name); | ||||||
|  |  | ||||||
|  |                 await github.rest.issues.setLabels({ | ||||||
|  |                   owner, | ||||||
|  |                   repo, | ||||||
|  |                   issue_number: issueNumber, | ||||||
|  |                   labels: labelsToKeep | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 const { data: issue } = await github.rest.issues.get({ | ||||||
|  |                   owner, | ||||||
|  |                   repo, | ||||||
|  |                   issue_number: issueNumber | ||||||
|  |                 }); | ||||||
|  |  | ||||||
|  |                 if (issue.assignees && issue.assignees.length > 0) { | ||||||
|  |                   await github.rest.issues.removeAssignees({ | ||||||
|  |                     owner, | ||||||
|  |                     repo, | ||||||
|  |                     issue_number: issueNumber, | ||||||
|  |                     assignees: issue.assignees.map(assignee => assignee.login) | ||||||
|  |                   }); | ||||||
|  |                 } | ||||||
|  |               } catch (error) { | ||||||
|  |                 if (error.status !== 404) { | ||||||
|  |                   console.error(`Error processing issue ${issueNumber}:`, error); | ||||||
|  |                 } | ||||||
|  |               } | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (context.eventName === 'issues' || context.eventName === 'pull_request' || context.eventName === 'pull_request_target') { | ||||||
|  |               const issue = context.payload.issue || context.payload.pull_request; | ||||||
|  |               await processIssue(issue.number); | ||||||
|  |             } | ||||||
|  |  | ||||||
|  |             if (context.eventName === 'pull_request' || context.eventName === 'pull_request_target') { | ||||||
|  |               const { data: closedIssues } = await github.rest.search.issuesAndPullRequests({ | ||||||
|  |                 q: `repo:${owner}/${repo} is:issue is:closed linked:${context.payload.pull_request.number}`, | ||||||
|  |                 per_page: 100 | ||||||
|  |               }); | ||||||
|  |               for (const issue of closedIssues.items) { | ||||||
|  |                 await processIssue(issue.number); | ||||||
|  |               } | ||||||
|  |             } | ||||||
		Reference in New Issue
	
	Block a user
	 Andras Bacsai
					Andras Bacsai