44 lines
1.4 KiB
Bash
Executable File
44 lines
1.4 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SHA="${GITHUB_SHA}"
|
|
API_URL="https://api.github.com/repos/${GITHUB_REPOSITORY}/actions/workflows/ci.yml/runs?head_sha=${SHA}&event=push&per_page=20"
|
|
WAIT_INTERVAL_SECONDS=20
|
|
MAX_ATTEMPTS=990 # 5 hours 30 minutes max wait
|
|
|
|
STATUS=""
|
|
CONCLUSION=""
|
|
|
|
echo "Waiting for CI on main for ${SHA} (up to 5 hours 30 minutes)..."
|
|
for attempt in $(seq 1 "${MAX_ATTEMPTS}"); do
|
|
RESPONSE="$(curl -fsSL \
|
|
-H "Authorization: Bearer ${GH_TOKEN}" \
|
|
-H "Accept: application/vnd.github+json" \
|
|
"${API_URL}")"
|
|
|
|
STATUS="$(printf '%s' "${RESPONSE}" | jq -r '.workflow_runs[] | select(.head_branch=="main") | .status' | head -n1)"
|
|
CONCLUSION="$(printf '%s' "${RESPONSE}" | jq -r '.workflow_runs[] | select(.head_branch=="main") | .conclusion' | head -n1)"
|
|
|
|
if [[ -n "${STATUS}" ]]; then
|
|
echo "CI status=${STATUS} conclusion=${CONCLUSION:-none} (attempt ${attempt}/${MAX_ATTEMPTS})"
|
|
else
|
|
echo "No CI run for main found yet (attempt ${attempt}/${MAX_ATTEMPTS})"
|
|
fi
|
|
|
|
if [[ "${STATUS}" == "completed" ]]; then
|
|
if [[ "${CONCLUSION}" == "success" ]]; then
|
|
echo "CI succeeded for ${SHA}."
|
|
break
|
|
fi
|
|
echo "CI failed for ${SHA} (conclusion=${CONCLUSION})."
|
|
exit 1
|
|
fi
|
|
|
|
sleep "${WAIT_INTERVAL_SECONDS}"
|
|
done
|
|
|
|
if [[ "${STATUS}" != "completed" || "${CONCLUSION}" != "success" ]]; then
|
|
echo "Timed out waiting for successful CI on main for ${SHA}."
|
|
exit 1
|
|
fi
|