From 47277a68ec8dd2be18877af1e698ed7a4de00ff1 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Fri, 13 Sep 2024 18:24:37 +0200 Subject: [PATCH 1/4] Create remove-labels-assignees-on-close.yml --- .../remove-labels-assignees-on-close.yml | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 .github/workflows/remove-labels-assignees-on-close.yml diff --git a/.github/workflows/remove-labels-assignees-on-close.yml b/.github/workflows/remove-labels-assignees-on-close.yml new file mode 100644 index 000000000..584842290 --- /dev/null +++ b/.github/workflows/remove-labels-assignees-on-close.yml @@ -0,0 +1,38 @@ +name: Remove Labels and Assignees on Issue Close + +on: + issues: + types: [closed] + pull_request: + types: [closed] + +jobs: + remove-labels-and-assignees: + runs-on: ubuntu-latest + steps: + - name: Remove all labels and assignees + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const issue = context.payload.issue || context.payload.pull_request; + const repo = context.repo; + + // Remove all labels + await github.rest.issues.removeAllLabels({ + owner: repo.owner, + repo: repo.name, + issue_number: issue.number + }); + + // Remove all assignees + if (issue.assignees && issue.assignees.length > 0) { + await github.rest.issues.removeAssignees({ + owner: repo.owner, + repo: repo.name, + issue_number: issue.number, + assignees: issue.assignees.map(assignee => assignee.login) + }); + } + + console.log(`Removed all labels and assignees from issue/PR #${issue.number}`); \ No newline at end of file From 7948a0309fbff8a1f3615170ff9a532b22e21706 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Fri, 13 Sep 2024 18:42:38 +0200 Subject: [PATCH 2/4] Feat: remove labels and assignees on issue close --- .../remove-labels-and-assignees-on-close.yml | 57 +++++++++++++++++++ .../remove-labels-assignees-on-close.yml | 38 ------------- 2 files changed, 57 insertions(+), 38 deletions(-) create mode 100644 .github/workflows/remove-labels-and-assignees-on-close.yml delete mode 100644 .github/workflows/remove-labels-assignees-on-close.yml diff --git a/.github/workflows/remove-labels-and-assignees-on-close.yml b/.github/workflows/remove-labels-and-assignees-on-close.yml new file mode 100644 index 000000000..a2291f7f9 --- /dev/null +++ b/.github/workflows/remove-labels-and-assignees-on-close.yml @@ -0,0 +1,57 @@ +name: Remove Labels and Assignees on Issue Close + +on: + issues: + types: [closed] + pull_request: + 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 issue = context.payload.issue || context.payload.pull_request; + const { owner, repo } = context.repo; + + try { + const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ + owner, + repo, + issue_number: issue.number + }); + + const labelsToKeep = currentLabels + .filter(label => label.name === '⏱︎ Stale') + .map(label => label.name); + + await github.rest.issues.setLabels({ + owner, + repo, + issue_number: issue.number, + labels: labelsToKeep + }); + } catch (error) { + if (error.status !== 404) { + throw error; + } + } + + if (issue.assignees && issue.assignees.length > 0) { + try { + await github.rest.issues.removeAssignees({ + owner, + repo, + issue_number: issue.number, + assignees: issue.assignees.map(assignee => assignee.login) + }); + } catch (error) { + if (error.status !== 404) { + throw error; + } + } + } diff --git a/.github/workflows/remove-labels-assignees-on-close.yml b/.github/workflows/remove-labels-assignees-on-close.yml deleted file mode 100644 index 584842290..000000000 --- a/.github/workflows/remove-labels-assignees-on-close.yml +++ /dev/null @@ -1,38 +0,0 @@ -name: Remove Labels and Assignees on Issue Close - -on: - issues: - types: [closed] - pull_request: - types: [closed] - -jobs: - remove-labels-and-assignees: - runs-on: ubuntu-latest - steps: - - name: Remove all labels and assignees - uses: actions/github-script@v6 - with: - github-token: ${{secrets.GITHUB_TOKEN}} - script: | - const issue = context.payload.issue || context.payload.pull_request; - const repo = context.repo; - - // Remove all labels - await github.rest.issues.removeAllLabels({ - owner: repo.owner, - repo: repo.name, - issue_number: issue.number - }); - - // Remove all assignees - if (issue.assignees && issue.assignees.length > 0) { - await github.rest.issues.removeAssignees({ - owner: repo.owner, - repo: repo.name, - issue_number: issue.number, - assignees: issue.assignees.map(assignee => assignee.login) - }); - } - - console.log(`Removed all labels and assignees from issue/PR #${issue.number}`); \ No newline at end of file From 1c6450da24557dbdffd513db3af3a8fae14bd248 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 16 Sep 2024 10:23:05 +0200 Subject: [PATCH 3/4] Feat: Make sure this action is also triggered on PR issue close --- .../remove-labels-and-assignees-on-close.yml | 87 ++++++++++++------- 1 file changed, 58 insertions(+), 29 deletions(-) diff --git a/.github/workflows/remove-labels-and-assignees-on-close.yml b/.github/workflows/remove-labels-and-assignees-on-close.yml index a2291f7f9..81f7d35f3 100644 --- a/.github/workflows/remove-labels-and-assignees-on-close.yml +++ b/.github/workflows/remove-labels-and-assignees-on-close.yml @@ -5,6 +5,11 @@ on: types: [closed] pull_request: types: [closed] + pull_request_target: + types: [closed] + workflow_run: + workflows: ["*"] + types: [completed] jobs: remove-labels-and-assignees: @@ -15,43 +20,67 @@ jobs: with: github-token: ${{ secrets.GITHUB_TOKEN }} script: | - const issue = context.payload.issue || context.payload.pull_request; const { owner, repo } = context.repo; - try { - const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ - owner, - repo, - issue_number: issue.number - }); - - const labelsToKeep = currentLabels - .filter(label => label.name === '⏱︎ Stale') - .map(label => label.name); - - await github.rest.issues.setLabels({ - owner, - repo, - issue_number: issue.number, - labels: labelsToKeep - }); - } catch (error) { - if (error.status !== 404) { - throw error; - } - } - - if (issue.assignees && issue.assignees.length > 0) { + async function processIssue(issueNumber) { try { - await github.rest.issues.removeAssignees({ + const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ owner, repo, - issue_number: issue.number, - assignees: issue.assignees.map(assignee => assignee.login) + 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) { - throw error; + 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); + } else if (context.eventName === 'workflow_run') { + const { data: closedIssues } = await github.rest.search.issuesAndPullRequests({ + q: `repo:${owner}/${repo} is:issue is:closed closed:${context.payload.workflow_run.updated_at}`, + per_page: 100 + }); + for (const issue of closedIssues.items) { + 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); + } + } From 7037c779e2e1be4be95d72ea4326be45b0d02833 Mon Sep 17 00:00:00 2001 From: peaklabs-dev <122374094+peaklabs-dev@users.noreply.github.com> Date: Mon, 16 Sep 2024 11:13:56 +0200 Subject: [PATCH 4/4] Update remove-labels-and-assignees-on-close.yml --- .../remove-labels-and-assignees-on-close.yml | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.github/workflows/remove-labels-and-assignees-on-close.yml b/.github/workflows/remove-labels-and-assignees-on-close.yml index 81f7d35f3..04d62623c 100644 --- a/.github/workflows/remove-labels-and-assignees-on-close.yml +++ b/.github/workflows/remove-labels-and-assignees-on-close.yml @@ -7,9 +7,6 @@ on: types: [closed] pull_request_target: types: [closed] - workflow_run: - workflows: ["*"] - types: [completed] jobs: remove-labels-and-assignees: @@ -65,14 +62,6 @@ jobs: 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); - } else if (context.eventName === 'workflow_run') { - const { data: closedIssues } = await github.rest.search.issuesAndPullRequests({ - q: `repo:${owner}/${repo} is:issue is:closed closed:${context.payload.workflow_run.updated_at}`, - per_page: 100 - }); - for (const issue of closedIssues.items) { - await processIssue(issue.number); - } } if (context.eventName === 'pull_request' || context.eventName === 'pull_request_target') {