Skip to content

Commit 0bf950b

Browse files
authored
Merge pull request #2 from abpframework/ci-action-update
Update ci.yml
2 parents ddd2b69 + da81d5b commit 0bf950b

1 file changed

Lines changed: 120 additions & 1 deletion

File tree

.github/workflows/ci.yml

Lines changed: 120 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,4 +76,123 @@ jobs:
7676
with:
7777
name: validation-results
7878
path: output/
79-
79+
80+
- name: Notify abp.io of validation result
81+
if: always()
82+
env:
83+
ABPIO_VALIDATION_API_KEY: ${{ secrets.ABPIO_VALIDATION_API_KEY }}
84+
ABPIO_REPORT_BASE_URL: ${{ secrets.ABPIO_REPORT_BASE_URL }}
85+
DEFAULT_TUTORIAL_URL: ${{ github.event.inputs.tutorial_url || 'https://abp.io/docs/latest/tutorials/book-store?UI=MVC&DB=EF' }}
86+
run: |
87+
SUMMARY_FILE="./output/summary.json"
88+
BASE_URL="${ABPIO_REPORT_BASE_URL:-https://abp.io}"
89+
BASE_URL="${BASE_URL%/}"
90+
RESPONSE_FILE="$(mktemp)"
91+
92+
echo "=========================================="
93+
echo " Tutorial Validation Notification"
94+
echo "=========================================="
95+
96+
if [ ! -f "$SUMMARY_FILE" ]; then
97+
echo "No summary.json found at $SUMMARY_FILE"
98+
ls -la ./output/ 2>/dev/null || echo "Directory not found"
99+
exit 0
100+
fi
101+
102+
if [ -z "$ABPIO_VALIDATION_API_KEY" ]; then
103+
echo "ABPIO_VALIDATION_API_KEY not set, skipping notification"
104+
exit 0
105+
fi
106+
107+
if ! jq empty "$SUMMARY_FILE" >/dev/null 2>&1; then
108+
echo "summary.json is not valid JSON"
109+
cat "$SUMMARY_FILE"
110+
exit 0
111+
fi
112+
113+
OVERALL_STATUS=$(jq -r '.overallStatus // .OverallStatus // empty' "$SUMMARY_FILE")
114+
TUTORIAL_URL=$(jq -r '.tutorialUrl // .TutorialUrl // empty' "$SUMMARY_FILE")
115+
TUTORIAL_NAME=$(jq -r '.tutorialName // .TutorialName // "Unknown Tutorial"' "$SUMMARY_FILE")
116+
117+
if [ -z "$TUTORIAL_URL" ] || [ "$TUTORIAL_URL" = "null" ]; then
118+
TUTORIAL_URL="$DEFAULT_TUTORIAL_URL"
119+
echo "summary.json had no tutorialUrl; using workflow default URL"
120+
fi
121+
122+
if [ -z "$OVERALL_STATUS" ] || [ "$OVERALL_STATUS" = "null" ]; then
123+
echo "summary.json missing overall status field"
124+
exit 0
125+
fi
126+
127+
OS_LOWER=$(echo "$OVERALL_STATUS" | tr '[:upper:]' '[:lower:]')
128+
PASSED=false
129+
if [ "$OS_LOWER" = "passed" ]; then
130+
PASSED=true
131+
fi
132+
133+
echo "Tutorial: $TUTORIAL_NAME"
134+
echo "URL: $TUTORIAL_URL"
135+
echo "Status: $OVERALL_STATUS"
136+
echo "Passed (query): $PASSED"
137+
138+
REPORT_QUERY=$(python3 -c "import sys, urllib.parse; print(urllib.parse.urlencode({'tutorialUrl': sys.argv[1], 'passed': sys.argv[2]}))" "$TUTORIAL_URL" "$PASSED")
139+
REPORT_URL="${BASE_URL}/api/tutorial-validation/report?${REPORT_QUERY}"
140+
141+
MAX_RETRIES=3
142+
RETRY_DELAY=5
143+
SUCCESS=false
144+
145+
for i in $(seq 1 $MAX_RETRIES); do
146+
echo ""
147+
echo "Attempt $i/$MAX_RETRIES: POST ${BASE_URL}/api/tutorial-validation/report"
148+
149+
HTTP_CODE=$(curl -sS \
150+
--connect-timeout 10 \
151+
--max-time 30 \
152+
-o "$RESPONSE_FILE" \
153+
-w "%{http_code}" \
154+
-X POST "$REPORT_URL" \
155+
-H "X-Api-Key: ${ABPIO_VALIDATION_API_KEY}")
156+
157+
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "201" ]; then
158+
echo "Successfully reported to abp.io (HTTP $HTTP_CODE)"
159+
SUCCESS=true
160+
break
161+
elif [ "$HTTP_CODE" = "401" ]; then
162+
echo "Authentication failed - check ABPIO_VALIDATION_API_KEY"
163+
cat "$RESPONSE_FILE" 2>/dev/null || true
164+
break
165+
elif [ "$HTTP_CODE" = "400" ]; then
166+
echo "Bad request (invalid tutorialUrl or unsupported host?)"
167+
cat "$RESPONSE_FILE" 2>/dev/null || true
168+
break
169+
elif [ "$HTTP_CODE" = "409" ]; then
170+
echo "Report lock contention (HTTP 409)"
171+
cat "$RESPONSE_FILE" 2>/dev/null || true
172+
if [ $i -lt $MAX_RETRIES ]; then
173+
echo "Retrying in ${RETRY_DELAY}s..."
174+
sleep $RETRY_DELAY
175+
fi
176+
else
177+
echo "Attempt $i/$MAX_RETRIES failed (HTTP $HTTP_CODE)"
178+
cat "$RESPONSE_FILE" 2>/dev/null || true
179+
if [ $i -lt $MAX_RETRIES ]; then
180+
echo "Retrying in ${RETRY_DELAY}s..."
181+
sleep $RETRY_DELAY
182+
fi
183+
fi
184+
done
185+
186+
rm -f "$RESPONSE_FILE"
187+
188+
if [ "$SUCCESS" = false ]; then
189+
echo ""
190+
echo "Failed to report to abp.io after $MAX_RETRIES attempts"
191+
echo "Final HTTP Code: $HTTP_CODE"
192+
exit 1
193+
fi
194+
195+
echo ""
196+
echo "=========================================="
197+
echo " Notification Complete"
198+
echo "=========================================="

0 commit comments

Comments
 (0)