Skip to content

Commit d6afaf5

Browse files
committed
pr review
1 parent 39f18ee commit d6afaf5

File tree

1 file changed

+72
-0
lines changed

1 file changed

+72
-0
lines changed

.github/workflows/pr_review.yml

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
name: PR Notifications
2+
3+
on:
4+
pull_request_target:
5+
branches: [main]
6+
types: [opened, synchronize, edited, reopened, ready_for_review]
7+
8+
permissions:
9+
contents: read
10+
11+
concurrency:
12+
group: ${{ github.workflow }}-${{ github.ref }}
13+
cancel-in-progress: true
14+
15+
jobs:
16+
notify:
17+
runs-on: ubuntu-latest
18+
if: github.event.pull_request.draft != true
19+
env:
20+
MM_USERS_JSON: "${{ secrets.MM_USERS }}"
21+
DEFAULT_REVIEWER: "${{ secrets.DEFAULT_REVIEWER }}"
22+
PR_AUTHOR: "${{ github.event.pull_request.user.login }}"
23+
REQUESTED_REVIEWERS_JSON: "${{ toJson(github.event.pull_request.requested_reviewers) }}"
24+
steps:
25+
- name: Get Available Reviewers
26+
run: |
27+
AVAILABLE_REVIEWERS_ENTRIES=$(
28+
echo "$MM_USERS_JSON" |
29+
jq -c --arg exclude "$PR_AUTHOR" 'to_entries | map(select(.key != $exclude))'
30+
)
31+
echo "::add-mask::$AVAILABLE_REVIEWERS_ENTRIES"
32+
echo "AVAILABLE_REVIEWERS_ENTRIES=$AVAILABLE_REVIEWERS_ENTRIES" >> $GITHUB_ENV
33+
- name: Check Requested Reviewers
34+
run: |
35+
REQUESTED_REVIEWERS_LOGIN_LIST=$(echo "$REQUESTED_REVIEWERS_JSON" | jq '.users | map(.login)')
36+
SELECTEDREVIEWER_ENTRY=$(
37+
echo "$AVAILABLE_REVIEWERS_ENTRIES" |
38+
jq -c --argjson requested "$REQUESTED_REVIEWERS_LOGIN_LIST" 'first(.[] | select(.key as $gh_login | $requested | index($gh_login)))'
39+
)
40+
echo "::add-mask::$SELECTEDREVIEWER_ENTRY"
41+
echo "SELECTEDREVIEWER_ENTRY=$SELECTEDREVIEWER_ENTRY" >> $GITHUB_ENV
42+
43+
- name: Select Reviewer
44+
run: |
45+
if [ -n "$SELECTEDREVIEWER_ENTRY" ]; then
46+
REVIEWER_GH=$(echo "$SELECTEDREVIEWER_ENTRY" | jq -r '.key')
47+
REVIEWER_MM=$(echo "$SELECTEDREVIEWER_ENTRY" | jq -r '.value')
48+
else
49+
REVIEWER_INDEX=$(echo "$AVAILABLE_REVIEWERS_ENTRIES" | jq ".[$RANDOM % length]")
50+
REVIEWER_GH=$(echo "$AVAILABLE_REVIEWERS_ENTRIES" | jq -r ".[$REVIEWER_INDEX].key")
51+
REVIEWER_MM=$(echo "$AVAILABLE_REVIEWERS_ENTRIES" | jq -r ".[$REVIEWER_INDEX].value")
52+
fi
53+
54+
echo "::add-mask::$REVIEWER_GH"
55+
echo "REVIEWER_GH=$REVIEWER_GH" >> $GITHUB_ENV
56+
57+
echo "::add-mask::$REVIEWER_MM"
58+
echo "REVIEWER_MM=$REVIEWER_MM" >> $GITHUB_ENV
59+
- name: "Notify Reviewer"
60+
run: |
61+
BRANCH_URL="${{ github.event.pull_request.head.repo.html_url }}/tree/${{ github.event.pull_request.head.ref }}"
62+
63+
MESSAGE="MR [!${{ github.event.pull_request.number }}](${{ github.event.pull_request.html_url }})"
64+
MESSAGE+=" от [${{ github.event.pull_request.user.login }} ${USER_NAME}]"
65+
MESSAGE+="(${{ github.event.pull_request.user.html_url }})"
66+
MESSAGE+="(ветка: [${{ github.event.pull_request.head.ref }}](${BRANCH_URL})) готов на ревью.\n"
67+
MESSAGE+="Выбран ревьюер: @${REVIEWER_MM}."
68+
69+
curl -X POST \
70+
-H "Content-Type: application/json" \
71+
-d "{\"text\": \"$MESSAGE\"}" \
72+
"${{ secrets.BUILD_CHAT_WEBHOOK }}"

0 commit comments

Comments
 (0)