Skip to content

Commit 3a67769

Browse files
committed
feat(ci): Add advance velox actions
1 parent fc36697 commit 3a67769

File tree

3 files changed

+465
-0
lines changed

3 files changed

+465
-0
lines changed
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
name: Advance velox PR check
2+
3+
on:
4+
workflow_run:
5+
workflows: [test, prestocpp-linux-build, prestocpp-linux-build-and-unit-test]
6+
types: [completed]
7+
branches: [velox-update]
8+
workflow_dispatch: {}
9+
10+
env:
11+
NOTIFICATION_GROUP: ${{ vars.VELOX_UPDATE_NOTIFICATION_GROUP || '@prestodb/team-velox' }}
12+
VELOX_UPDATE_BRANCH: ${{ vars.VELOX_UPDATE_BRANCH || 'velox-update' }}
13+
14+
jobs:
15+
check-pr-status:
16+
runs-on: ubuntu-latest
17+
permissions:
18+
pull-requests: write
19+
steps:
20+
- name: Checkout repository
21+
uses: actions/checkout@v4
22+
with:
23+
ref: ${{ env.VELOX_UPDATE_BRANCH }}
24+
persist-credentials: false
25+
26+
- name: Get PR info
27+
id: pr_info
28+
env:
29+
GH_TOKEN: ${{ secrets.PRESTODB_CI_TOKEN }}
30+
VELOX_UPDATE_BRANCH: ${{ env.VELOX_UPDATE_BRANCH }}
31+
run: |
32+
PR_JSON=$(gh pr view "$VELOX_UPDATE_BRANCH" --json number,url 2>/dev/null)
33+
34+
if [ -n "$PR_JSON" ] && [ "$PR_JSON" != "null" ]; then
35+
PR_NUMBER=$(echo "$PR_JSON" | jq -r '.number')
36+
PR_URL=$(echo "$PR_JSON" | jq -r '.url')
37+
38+
echo "pr_number=$PR_NUMBER" >> $GITHUB_OUTPUT
39+
echo "pr_url=$PR_URL" >> $GITHUB_OUTPUT
40+
echo "pr_found=true" >> $GITHUB_OUTPUT
41+
echo "Found PR #$PR_NUMBER: $PR_URL"
42+
else
43+
echo "pr_found=false" >> $GITHUB_OUTPUT
44+
echo "No PR found for branch $VELOX_UPDATE_BRANCH"
45+
fi
46+
47+
- name: Monitor CI status
48+
if: steps.pr_info.outputs.pr_found == 'true'
49+
id: ci_status
50+
env:
51+
GH_TOKEN: ${{ secrets.PRESTODB_CI_TOKEN }}
52+
PR_NUMBER: ${{ steps.pr_info.outputs.pr_number }}
53+
run: |
54+
CHECKS_JSON=$(gh pr checks $PR_NUMBER --json state,name,workflow 2>&1)
55+
56+
if [ -z "$CHECKS_JSON" ] || [ "$CHECKS_JSON" = "[]" ]; then
57+
echo "ci_result=no_checks" >> $GITHUB_OUTPUT
58+
echo "No CI checks found"
59+
exit 0
60+
fi
61+
62+
STATES=$(echo "$CHECKS_JSON" | jq -r '.[].state' | sort -u)
63+
64+
if echo "$STATES" | grep -qE "PENDING|QUEUED|IN_PROGRESS"; then
65+
echo "ci_result=still_running" >> $GITHUB_OUTPUT
66+
echo "CI checks still running, cannot determine final result"
67+
exit 0
68+
fi
69+
70+
if echo "$STATES" | grep -qE "FAILURE|CANCELLED|TIMED_OUT|ERROR"; then
71+
echo "ci_result=failure" >> $GITHUB_OUTPUT
72+
echo "CI checks failed"
73+
elif echo "$STATES" | grep -q "SUCCESS"; then
74+
FAILED_COUNT=$(echo "$CHECKS_JSON" | jq '[.[] | select(.state != "SUCCESS")] | length')
75+
if [ "$FAILED_COUNT" -eq 0 ]; then
76+
echo "ci_result=success" >> $GITHUB_OUTPUT
77+
echo "All CI checks passed"
78+
else
79+
echo "ci_result=failure" >> $GITHUB_OUTPUT
80+
echo "Some CI checks failed"
81+
fi
82+
else
83+
echo "ci_result=failure" >> $GITHUB_OUTPUT
84+
echo "CI checks completed with non-success states: $STATES"
85+
fi
86+
87+
- name: Notify on CI success
88+
if: steps.ci_status.outputs.ci_result == 'success'
89+
env:
90+
GH_TOKEN: ${{ secrets.PRESTODB_CI_TOKEN }}
91+
PR_NUMBER: ${{ steps.pr_info.outputs.pr_number }}
92+
NOTIFICATION_GROUP: ${{ env.NOTIFICATION_GROUP }}
93+
run: |
94+
gh pr comment "$PR_NUMBER" --body "✅ **CI Checks Passed**
95+
96+
All CI checks have completed successfully for this Velox submodule update.
97+
98+
$NOTIFICATION_GROUP This PR is ready for review."
99+
100+
- name: Notify on CI failure
101+
if: steps.ci_status.outputs.ci_result == 'failure'
102+
env:
103+
GH_TOKEN: ${{ secrets.PRESTODB_CI_TOKEN }}
104+
PR_NUMBER: ${{ steps.pr_info.outputs.pr_number }}
105+
NOTIFICATION_GROUP: ${{ env.NOTIFICATION_GROUP }}
106+
run: |
107+
gh pr comment "$PR_NUMBER" --body "❌ **CI Checks Failed**
108+
109+
Some CI checks have failed for this Velox submodule update.
110+
111+
$NOTIFICATION_GROUP Please review the failed checks and take appropriate action."
112+
113+
- name: Summary
114+
if: always() && steps.pr_info.outputs.pr_found == 'true'
115+
env:
116+
CI_RESULT: ${{ steps.ci_status.outputs.ci_result }}
117+
PR_URL: ${{ steps.pr_info.outputs.pr_url }}
118+
run: |
119+
echo "## Check Status Job Summary" >> $GITHUB_STEP_SUMMARY
120+
echo "" >> $GITHUB_STEP_SUMMARY
121+
echo "📝 Pull Request: $PR_URL" >> $GITHUB_STEP_SUMMARY
122+
echo "" >> $GITHUB_STEP_SUMMARY
123+
124+
if [ "$CI_RESULT" = "success" ]; then
125+
echo "✅ CI Status: All checks passed" >> $GITHUB_STEP_SUMMARY
126+
elif [ "$CI_RESULT" = "failure" ]; then
127+
echo "❌ CI Status: Some checks failed" >> $GITHUB_STEP_SUMMARY
128+
exit 1
129+
elif [ "$CI_RESULT" = "still_running" ]; then
130+
echo "⏳ CI Status: Checks still running" >> $GITHUB_STEP_SUMMARY
131+
elif [ "$CI_RESULT" = "no_checks" ]; then
132+
echo "⚠️ CI Status: No checks found" >> $GITHUB_STEP_SUMMARY
133+
fi

0 commit comments

Comments
 (0)