Skip to content

Commit 697dd5b

Browse files
committed
pr review
1 parent 39f18ee commit 697dd5b

1 file changed

Lines changed: 77 additions & 0 deletions

File tree

.github/workflows/pr_review.yml

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
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+
pull-requests: write
11+
12+
concurrency:
13+
group: ${{ github.workflow }}-${{ github.ref }}
14+
cancel-in-progress: true
15+
16+
jobs:
17+
notify:
18+
runs-on: ubuntu-latest
19+
if: github.event.pull_request.draft != true
20+
env:
21+
MM_USERS_JSON: "${{ secrets.MM_USERS }}"
22+
DEFAULT_REVIEWER: "${{ secrets.DEFAULT_REVIEWER }}"
23+
PR_AUTHOR: "${{ github.event.pull_request.user.login }}"
24+
REQUESTED_REVIEWERS_JSON: "${{ toJson(github.event.pull_request.requested_reviewers) }}"
25+
GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
26+
steps:
27+
- name: Get Available Reviewers
28+
run: |
29+
AVAILABLE_REVIEWERS_ENTRIES=$(
30+
echo "$MM_USERS_JSON" |
31+
jq -c --arg exclude "$PR_AUTHOR" 'to_entries | map(select(.key != $exclude))'
32+
)
33+
echo "::add-mask::$AVAILABLE_REVIEWERS_ENTRIES"
34+
echo "AVAILABLE_REVIEWERS_ENTRIES=$AVAILABLE_REVIEWERS_ENTRIES" >> $GITHUB_ENV
35+
- name: Check Requested Reviewers
36+
run: |
37+
REQUESTED_REVIEWERS_LOGIN_LIST=$(echo "$REQUESTED_REVIEWERS_JSON" | jq 'map(.login)')
38+
SELECTED_REVIEWER_ENTRY=$(
39+
echo "$AVAILABLE_REVIEWERS_ENTRIES" |
40+
jq -c --argjson requested "$REQUESTED_REVIEWERS_LOGIN_LIST" 'first(.[] | select(.key as $gh_login | $requested | index($gh_login)))'
41+
)
42+
echo "::add-mask::$SELECTED_REVIEWER_ENTRY"
43+
echo "SELECTED_REVIEWER_ENTRY=$SELECTED_REVIEWER_ENTRY" >> $GITHUB_ENV
44+
45+
- name: Assign Reviewer
46+
run: |
47+
if [ -z "$SELECTED_REVIEWER_ENTRY" ]; then
48+
AVAILABLE_REVIEWERS_LENGTH=$(echo "$AVAILABLE_REVIEWERS_ENTRIES" | jq 'length')
49+
SELECTED_REVIEWER_INDEX=$((RANDOM % AVAILABLE_REVIEWERS_LENGTH))
50+
SELECTED_REVIEWER_ENTRY=$(echo "$AVAILABLE_REVIEWERS_ENTRIES" | jq -c --argjson index "$SELECTED_REVIEWER_INDEX" '.[$index]')
51+
fi
52+
53+
REVIEWER_GH=$(echo "$SELECTED_REVIEWER_ENTRY" | jq -r '.key')
54+
REVIEWER_MM=$(echo "$SELECTED_REVIEWER_ENTRY" | jq -r '.value')
55+
56+
gh pr edit ${{ github.event.pull_request.number }} --repo ${{ github.repository }} --add-reviewer "$REVIEWER_GH"
57+
58+
echo "::add-mask::$REVIEWER_GH"
59+
echo "REVIEWER_GH=$REVIEWER_GH" >> $GITHUB_ENV
60+
61+
echo "::add-mask::$REVIEWER_MM"
62+
echo "REVIEWER_MM=$REVIEWER_MM" >> $GITHUB_ENV
63+
- name: "Notify Reviewer"
64+
run: |
65+
BRANCH_URL="${{ github.event.pull_request.head.repo.html_url }}/tree/${{ github.event.pull_request.head.ref }}"
66+
67+
MESSAGE="MR [!${{ github.event.pull_request.number }}](${{ github.event.pull_request.html_url }})"
68+
MESSAGE+=" от [${{ github.event.pull_request.user.login }} ${USER_NAME}]"
69+
MESSAGE+="(${{ github.event.pull_request.user.html_url }})"
70+
MESSAGE+="(ветка: [${{ github.event.pull_request.head.ref }}](${BRANCH_URL})) готов на ревью.\n"
71+
MESSAGE+="Выбран ревьюер: @${REVIEWER_MM}.\n"
72+
MESSAGE+="Ссылка на MR: ${{ github.event.pull_request.html_url }}"
73+
74+
curl -X POST \
75+
-H "Content-Type: application/json" \
76+
-d "{\"text\": \"$MESSAGE\"}" \
77+
"${{ secrets.BUILD_CHAT_WEBHOOK }}"

0 commit comments

Comments
 (0)