From 9a93d0e86c6df68e8f4dcd221f06194a888f5098 Mon Sep 17 00:00:00 2001 From: Prayas248 Date: Sat, 23 Mar 2024 15:28:58 +0530 Subject: [PATCH] chore: updated setup --- .github/pull_request_template.md | 19 ++++++++++++++ .github/workflows/checklabels.yaml | 21 +++++++++++++++ .github/workflows/label-checker.js | 42 ++++++++++++++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 .github/pull_request_template.md create mode 100644 .github/workflows/checklabels.yaml create mode 100644 .github/workflows/label-checker.js diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..655c7ff --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,19 @@ + +## Description + +> Give a brief description of the pull request. + +## Semver Changes + +- [ ] Patch (bug fix, no new features) +- [ ] Minor (new features, no breaking changes) +- [ ] Major (breaking changes) + +## Issues + +> List any issues that this pull request closes. + +## Checklist + +- [ ] I have read the [Contributing Guidelines](../Contributor_Guide/Contruting.md). + diff --git a/.github/workflows/checklabels.yaml b/.github/workflows/checklabels.yaml new file mode 100644 index 0000000..1b752ff --- /dev/null +++ b/.github/workflows/checklabels.yaml @@ -0,0 +1,21 @@ +name: Label Checker + +on: + pull_request: + types: [opened, edited, synchronize, reopened, labeled, unlabeled] + +jobs: + check-labels: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: Install dependencies + run: npm install @actions/github @actions/core + - name: Run Label Checker + run: node .github/workflows/label-checker.js + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/label-checker.js b/.github/workflows/label-checker.js new file mode 100644 index 0000000..aae7358 --- /dev/null +++ b/.github/workflows/label-checker.js @@ -0,0 +1,42 @@ +import { getOctokit, context } from '@actions/github'; +import { setFailed } from '@actions/core'; + +async function run() { + try { + const token = process.env.GITHUB_TOKEN; + const octokit = new getOctokit(token); + + const pullRequest = context.payload.pull_request; + const owner = pullRequest.base.repo.owner.login; + const repo = pullRequest.base.repo.name; + const pullNumber = pullRequest.number; + + const { data: labels } = await octokit.rest.issues.listLabelsOnIssue({ + owner, + repo, + issue_number: pullNumber, + }); + + const labelNames = labels.map((label) => label.name); + + const requiredLabels = [ + ['Type:Easy', 'Type:Medium', 'Type:Hard'], + ['Semver:major', 'Semver:minor', 'Semver:patch'], + ['PR:Accept'], + ]; + + const hasRequiredLabels = requiredLabels.every((labelGroup) => + labelGroup.some((label) => labelNames.includes(label)) + ); + + if (!hasRequiredLabels) { + setFailed( + 'This pull request must have at least one label from each of the following groups: Type (Easy, Medium, Hard), Semver (Major, Minor, Patch), and PR:Accept.' + ); + } + } catch (error) { + setFailed(error.message); + } +} + +run(); \ No newline at end of file