-
Notifications
You must be signed in to change notification settings - Fork 8
106 lines (91 loc) · 3.84 KB
/
kube-actions.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
name: PR Actions
on:
issue_comment:
types: [created]
pull_request:
types: [labeled]
env:
GH_TOKEN: ${{ secrets.AGENT_TOKEN }}
jobs:
handle-comments:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Python
uses: actions/setup-python@v4
with:
python-version: '3.x'
- name: Install yq
run: pip install yq
- name: Handle PR Comments
run: |
COMMENT_BODY=$(jq -r '.comment.body' $GITHUB_EVENT_PATH)
PR_NUMBER=$(jq -r '.issue.number' $GITHUB_EVENT_PATH)
COMMENT_USER=$(jq -r '.comment.user.login' $GITHUB_EVENT_PATH)
echo $COMMENT_BODY
while IFS= read -r COMMENT_LINE; do
COMMENT_LINE=$(echo "$COMMENT_LINE" | tr -d '\n')
COMMENT_LINE=$(echo "$COMMENT_LINE" | awk '{$1=$1};1')
echo $COMMENT_LINE
if [[ "$COMMENT_LINE" == "/lgtm" ]]; then
gh pr edit $PR_NUMBER --add-label lgtm
echo "Add label: lgtm"
elif [[ "$COMMENT_LINE" == "/approve" ]]; then
if yq ".approvers[] | select(. == \"$COMMENT_USER\") " OWNERS | grep -q "$COMMENT_USER"; then
gh pr edit $PR_NUMBER --add-label approved
echo "Add label: approved"
else
gh pr comment $PR_NUMBER --body "User @$COMMENT_USER is not authorized to approve this PR."
echo "User $COMMENT_USER is not authorized to approve"
fi
elif [[ "$COMMENT_LINE" == "/lgtm cancel" ]]; then
if gh pr view $PR_NUMBER --json labels --jq '.labels[].name' | grep -q "lgtm"; then
gh pr edit $PR_NUMBER --remove-label lgtm
echo "Remove label: lgtm"
else
echo "Label 'lgtm' does not exist"
fi
elif [[ "$COMMENT_LINE" == "/approve cancel" ]]; then
if gh pr view $PR_NUMBER --json labels --jq '.labels[].name' | grep -q "approved"; then
if yq ".approvers[] | select(. == \"$COMMENT_USER\") " OWNERS | grep -q "$COMMENT_USER"; then
gh pr edit $PR_NUMBER --remove-label approved
echo "Remove label: approved"
else
gh pr comment $PR_NUMBER --body "User @$COMMENT_USER is not authorized to cancel the approval."
echo "User $COMMENT_USER is not authorized to cancel the approval"
fi
else
echo "Label 'approved' does not exist"
fi
elif [[ "$COMMENT_LINE" =~ ^/kind ]]; then
LABEL=$(echo "$COMMENT_LINE" | awk '{print $2}')
if [[ "$LABEL" == "lgtm" || "$LABEL" == "approve" ]]; then
echo "The label '$LABEL' cannot be added using /kind."
else
gh pr edit $PR_NUMBER --add-label $LABEL
echo "Add label: '$LABEL'"
fi
elif [[ "$COMMENT_LINE" =~ ^/remove-kind ]]; then
LABEL=$(echo "$COMMENT_LINE" | awk '{print $2}')
if [[ "$LABEL" == "lgtm" || "$LABEL" == "approve" ]]; then
echo "The label '$LABEL' cannot be removed using /remove-kind."
else
if gh pr view $PR_NUMBER --json labels --jq '.labels[].name' | grep -q $LABEL; then
gh pr edit $PR_NUMBER --remove-label $LABEL
echo "Remove label: '$LABEL'"
fi
fi
else
echo "$COMMENT_LINE is not supported"
fi
done <<< "$COMMENT_BODY"
- name: Merge PR if LGTMed and approved
run: |
PR_NUMBER=$(jq -r '.issue.number' $GITHUB_EVENT_PATH)
LABELS=$(gh pr view $PR_NUMBER --json labels --jq '.labels[].name')
if [[ "$LABELS" == *"lgtm"* && "$LABELS" == *"approved"* ]]; then
gh pr merge $PR_NUMBER --merge
else
echo "Not ready to merge"
fi