aboutsummaryrefslogtreecommitdiff
path: root/.github/workflows
diff options
context:
space:
mode:
authorYasin <a.piri@hotmail.de>2024-02-26 23:56:06 +0100
committerYasin <a.piri@hotmail.de>2024-02-26 23:56:06 +0100
commit336801ade2835666e7b9527e8da1db265258a5b5 (patch)
tree63bf32ca7a2207a6ede600d651fe61ea14318628 /.github/workflows
parentecb507502c3278408571e94095e1f9c24c7b2a40 (diff)
downloadSkyblocker-336801ade2835666e7b9527e8da1db265258a5b5.tar.gz
Skyblocker-336801ade2835666e7b9527e8da1db265258a5b5.tar.bz2
Skyblocker-336801ade2835666e7b9527e8da1db265258a5b5.zip
Create labeler.yml
Diffstat (limited to '.github/workflows')
-rw-r--r--.github/workflows/labeler.yml77
1 files changed, 77 insertions, 0 deletions
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
new file mode 100644
index 00000000..0a004528
--- /dev/null
+++ b/.github/workflows/labeler.yml
@@ -0,0 +1,77 @@
+name: Automatic Labeling
+
+on:
+ pull_request:
+ types: [opened, synchronize, reopened, ready_for_review, converted_to_draft, closed]
+ pull_request_review:
+ types: [submitted, dismissed]
+
+jobs:
+ labeler:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout code
+ uses: actions/checkout@v4
+
+ - name: Set Labels
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{ secrets.GH_LABELER }}
+ script: |
+ const { owner, repo, number: pull_number } = context.issue;
+ const { data: pullRequest } = await github.rest.pulls.get({ owner, repo, pull_number });
+ const labels = pullRequest.labels.map(label => label.name);
+
+ let label = '';
+
+ if (pullRequest.draft) {
+ label = 'wip';
+ } else if (pullRequest.mergeable_state === 'dirty') {
+ label = 'merge conflicts';
+ } else if (pullRequest.merged) {
+ label = ''
+ } else {
+ const { data: reviews } = await github.rest.pulls.listReviews({ owner, repo, pull_number });
+ const { data: commits } = await github.rest.pulls.listCommits({ owner, repo, pull_number });
+
+ const filteredReviews = reviews.filter(review => review.state === 'CHANGES_REQUESTED' || review.state === 'APPROVED');
+ const lastReview = filteredReviews.sort((a, b) => new Date(b.submitted_at) - new Date(a.submitted_at))[0];
+ const lastCommit = commits.sort((a, b) => new Date(b.commit.committer.date) - new Date(a.commit.committer.date))[0];
+
+ if (!lastReview || new Date(lastReview.submitted_at) < new Date(lastCommit.commit.committer.date)) {
+ label = 'reviews needed';
+ } else if (lastReview.state === 'CHANGES_REQUESTED') {
+ label = 'changes requested';
+ } else if (lastReview.state === 'APPROVED') {
+ label = 'merge me please';
+ }
+ }
+
+ // if label is not set change the label
+ if (!labels.includes(label)) {
+ // list of labels to be removed
+ const labelsToRemove = ['merge me please', 'reviews needed', 'merge conflicts', 'wip', 'changes requested'];
+
+ // remove all label from list
+ const { data: currentLabels } = await github.rest.issues.listLabelsOnIssue({ owner, repo, issue_number: pull_number });
+ for (const { name } of currentLabels) {
+ if (labelsToRemove.includes(name)) {
+ await github.rest.issues.removeLabel({
+ owner,
+ repo,
+ issue_number: pull_number,
+ name
+ });
+ }
+ }
+
+ // add label
+ if (label) {
+ await github.rest.issues.addLabels({
+ owner,
+ repo,
+ issue_number: pull_number,
+ labels: [label]
+ });
+ }
+ } \ No newline at end of file