diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 67a3aee1..d80c2d98 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,6 +1,6 @@ ## Description - + ## Related Issues diff --git a/.github/workflows/assignlabel.yml b/.github/workflows/assignlabel.yml new file mode 100644 index 00000000..831dc8db --- /dev/null +++ b/.github/workflows/assignlabel.yml @@ -0,0 +1,55 @@ +name: Assign Issue to Creator + +on: + issue_comment: + types: [created] + +jobs: + assign-issue: + runs-on: ubuntu-latest + if: contains(github.event.comment.body, '/assign') + steps: + - name: Check commenter permissions + id: check-permissions + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const { owner, repo } = context.repo; + const commenter = context.payload.comment.user.login; + + const { data: repoPermission } = await github.rest.repos.getCollaboratorPermissionLevel({ + owner, + repo, + username: commenter, + }); + + const allowedPermissions = ['admin', 'maintain', 'write']; + const hasPermission = allowedPermissions.includes(repoPermission.permission); + + return hasPermission; + - name: Assign issue to creator + if: steps.check-permissions.outputs.result == 'true' + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const { owner, repo } = context.repo; + const issue_number = context.issue.number; + + const { data: issue } = await github.rest.issues.get({ + owner, + repo, + issue_number, + }); + + const creator = issue.user.login; + + await github.rest.issues.addAssignees({ + owner, + repo, + issue_number, + assignees: [creator], + }); + + console.log(`Assigned issue #${issue_number} to creator ${creator}`); \ No newline at end of file diff --git a/.github/workflows/auto-label-pr.yml b/.github/workflows/auto-label-pr.yml index a858a7af..25824c74 100644 --- a/.github/workflows/auto-label-pr.yml +++ b/.github/workflows/auto-label-pr.yml @@ -1,51 +1,53 @@ - -name: Auto Label PR +name: Auto Label PRs on: pull_request: - types: [opened, reopened, edited,synchronize] + types: [opened, edited] jobs: label_pr: runs-on: ubuntu-latest - permissions: - pull-requests: write steps: - - name: Label PR + - uses: actions/labeler@v4 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + configuration-path: .github/labeler.yml + + - name: Add GSSOC label uses: actions/github-script@v6 with: github-token: ${{secrets.GITHUB_TOKEN}} script: | - const pr = context.payload.pull_request; - - // Add gssoc label to all PRs - await github.rest.issues.addLabels({ + github.rest.issues.addLabels({ + issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - issue_number: pr.number, labels: ['gssoc'] - }); + }) + + - name: Add additional labels based on title + uses: actions/github-script@v6 + with: + github-token: ${{secrets.GITHUB_TOKEN}} + script: | + const title = context.payload.pull_request.title.toLowerCase(); + const labelsToAdd = []; - const prBody = pr.body ? pr.body.toLowerCase() : ''; - const prTitle = pr.title.toLowerCase(); + if (title.includes('documentation')) { + labelsToAdd.push('documentation'); + } + if (title.includes('feature')) { + labelsToAdd.push('feature'); + } + if (title.includes('bug')) { + labelsToAdd.push('bug'); + } - const addLabel = async (label) => { - await github.rest.issues.addLabels({ + if (labelsToAdd.length > 0) { + github.rest.issues.addLabels({ + issue_number: context.issue.number, owner: context.repo.owner, repo: context.repo.repo, - issue_number: pr.number, - labels: [label] + labels: labelsToAdd }); - }; - - if (prBody.includes('documentation') || prTitle.includes('doc') || prBody.includes('readme')) { - await addLabel('documentation'); - } - - if (prBody.includes('feature') || prBody.includes('enhancement') || prTitle.includes('add') || prTitle.includes('implement')) { - await addLabel('enhancement'); - } - - if (prBody.includes('bug') || prBody.includes('fix') || prTitle.includes('fix') || prTitle.includes('resolve')) { - await addLabel('bug'); } \ No newline at end of file