From b6429e9bc790d845dcb6ca1a0aa0db8ca7c344b5 Mon Sep 17 00:00:00 2001 From: jamesread Date: Mon, 30 Dec 2024 01:45:51 +0000 Subject: [PATCH] cicd: Add issue responsibility labels --- .github/workflows/issue-responsibility.yml | 78 ++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 .github/workflows/issue-responsibility.yml diff --git a/.github/workflows/issue-responsibility.yml b/.github/workflows/issue-responsibility.yml new file mode 100644 index 0000000..e926864 --- /dev/null +++ b/.github/workflows/issue-responsibility.yml @@ -0,0 +1,78 @@ +--- +name: Issue Responsibility + +on: + issue_comment: + types: [created] + +jobs: + update-responsibility-labels: + runs-on: ubuntu-latest + steps: + - name: Update responsibility labels + uses: actions/github-script@v7 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + const core = require("@actions/core"); + const github = require("@actions/github"); + + const { context } = github; + + const commentAuthor = context.payload.comment.user.login; + const issueNumber = context.payload.issue.number; + const owner = context.repo.owner; + const repo = context.repo.repo; + + const skipAction = context.payload.comment.body.includes("/skip-responsibility"); + + if (skipAction) { + core.info("Skipping responsibility label update"); + return; + } + + const developers = ["jamesread"] + const commenterIsDeveloper = developers.includes(commentAuthor); + const commentorIsUser = !commenterIsDeveloper; + + const issueLabels = context.payload.issue.labels.map(label => label.name); + + if (issueLabels.includes("waiting-on-developer") { + if (commenterIsDeveloper) { + await github.rest.issues.removeLabel({ + owner, + repo, + issue_number: issueNumber, + name: "waiting-on-developer", + }); + + await github.rest.issues.addLabels({ + owner, + repo, + issue_number: issueNumber, + labels: ["waiting-on-requestor"], + }); + + core.info(`Switched responsibility to user for issue #${issueNumber}`); + } + } + + if (issueLabels.includes("waiting-on-requestor") { + if (commenterIsUser) { + await github.rest.issues.removeLabel({ + owner, + repo, + issue_number: issueNumber, + name: "waiting-on-requestor", + }); + + await github.rest.issues.addLabels({ + owner, + repo, + issue_number: issueNumber, + labels: ["waiting-on-developer"], + }); + + core.info(`Switched responsibility to developer for issue #${issueNumber}`); + } + }