Closes #415 ## Summary - Adds missing `timeout-minutes` to `ci.yml` (`check` job, 60 min) and `windows-nightly.yml` (90 min, ready for when the Windows runner is registered) - Wraps `ssh-keyscan` and `ssh -f -N -L` tunnel creation in `setup_dagger_remote.sh` with `timeout 30`; emits a `::warning::` annotation when either takes more than 10 s - Adds `timeout --kill-after=10 <N>` to all bare `dagger call` invocations in `Taskfile.yml`: 600 s for test/query tasks, 1800 s for build/deploy tasks, 60 s for `ci-graph`; `stalwart` and `check-dagger` (already protected) left untouched - Adds `timeout --kill-after=10 2400` per attempt in `run_firebase_test.sh`; emits `::warning::` on exit 124 instead of silently retrying ## Test plan - CI passes on this PR (the `check` job now has `timeout-minutes: 60` and will self-enforce) - All `dagger call` lines in `Taskfile.yml` now have a `timeout` prefix (visible in the diff) - `setup_dagger_remote.sh` logic is unchanged — only the two network calls are wrapped Co-authored-by: Thomas SharedInbox <sharedinbox@thomas-guettler.de> Reviewed-on: https://codeberg.org/guettli/sharedinbox/pulls/432
59 lines
1.7 KiB
Bash
Executable File
59 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Runs the Firebase Test Lab Dagger pipeline with Gradle/Dagger noise filtered out.
|
|
# Retries up to 3 times on transient Dagger engine connectivity errors.
|
|
set -uo pipefail
|
|
|
|
OUT=$(mktemp)
|
|
RC_FILE=$(mktemp)
|
|
trap 'rm -f "$OUT" "$RC_FILE"' EXIT
|
|
|
|
_strip_ansi() {
|
|
sed 's/\x1b\[[0-9;]*[mGKHFJ]//g'
|
|
}
|
|
|
|
_filter_noise() {
|
|
grep -vE \
|
|
'> Task :.+(UP-TO-DATE|NO-SOURCE|SKIPPED)'\
|
|
'|[0-9]+ files found for path '\''lib/'\
|
|
'|^Inputs:'\
|
|
'|^[[:space:]]+-[[:space:]]/'\
|
|
'|\[Incubating\]'\
|
|
'|Deprecated Gradle features'\
|
|
'|warning-mode all'\
|
|
'|please refer to https://docs\.gradle'\
|
|
'|[0-9]+ actionable tasks'\
|
|
'|^warning: \[options\]'\
|
|
'|^Note: Some input files'\
|
|
'|Starting a Gradle Daemon'\
|
|
'|Have questions, feedback, or issues'\
|
|
'|https://firebase\.google\.com/support'\
|
|
'|^\s*[┆│]\s*$' \
|
|
|| true
|
|
}
|
|
|
|
_run() {
|
|
: > "$OUT" ; : > "$RC_FILE"
|
|
{
|
|
timeout --kill-after=10 2400 dagger call --progress=plain -q -m ci --source=. test-android-firebase \
|
|
--service-account-key env:FIREBASE_TEST_LAB_SERVICE_ACCOUNT_KEY \
|
|
--project-id "$FIREBASE_PROJECT_ID"
|
|
echo $? > "$RC_FILE"
|
|
} 2>&1 | tee "$OUT" | _strip_ansi | _filter_noise
|
|
}
|
|
|
|
for attempt in 1 2 3; do
|
|
_run && break
|
|
RC=$(cat "$RC_FILE" 2>/dev/null || echo 1)
|
|
if [ "$RC" -eq 124 ]; then
|
|
echo "::warning::[firebase] attempt $attempt/3 timed out after 2400s" >&2
|
|
exit 124
|
|
fi
|
|
if [ "$attempt" -lt 3 ] && grep -qE "connection reset|context canceled|connection refused|No Dagger server responded" "$OUT"; then
|
|
echo "[firebase] dagger connectivity error on attempt $attempt/3, retrying..." >&2
|
|
else
|
|
exit "$RC"
|
|
fi
|
|
done
|
|
|
|
exit "$(cat "$RC_FILE" 2>/dev/null || echo 0)"
|