feat: add runner conversion scripts and strengthen cutover automation
This commit is contained in:
99
runners-conversion/periodVault/validate-ios-skipped-tests.sh
Executable file
99
runners-conversion/periodVault/validate-ios-skipped-tests.sh
Executable file
@@ -0,0 +1,99 @@
|
||||
#!/usr/bin/env bash
|
||||
# validate-ios-skipped-tests.sh — Fail when iOS test results contain non-allowlisted skipped tests.
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||||
PROJECT_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
|
||||
|
||||
usage() {
|
||||
cat <<'EOF'
|
||||
Usage:
|
||||
scripts/validate-ios-skipped-tests.sh <xcresult_path> [allowlist_file]
|
||||
|
||||
Arguments:
|
||||
xcresult_path Path to .xcresult bundle generated by xcodebuild test
|
||||
allowlist_file Optional allowlist of skipped test names (one per line, # comments allowed)
|
||||
Default: audit/ios-skipped-tests-allowlist.txt
|
||||
EOF
|
||||
}
|
||||
|
||||
if [[ "${1:-}" == "--help" || "${1:-}" == "-h" ]]; then
|
||||
usage
|
||||
exit 0
|
||||
fi
|
||||
|
||||
RESULT_PATH="${1:-}"
|
||||
if [[ -z "$RESULT_PATH" ]]; then
|
||||
usage
|
||||
exit 1
|
||||
fi
|
||||
|
||||
ALLOWLIST_PATH="${2:-$PROJECT_ROOT/audit/ios-skipped-tests-allowlist.txt}"
|
||||
|
||||
require_cmd() {
|
||||
if ! command -v "$1" >/dev/null 2>&1; then
|
||||
echo "Missing required command: $1" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
require_cmd xcrun
|
||||
require_cmd jq
|
||||
require_cmd sort
|
||||
require_cmd comm
|
||||
require_cmd mktemp
|
||||
|
||||
if [[ ! -d "$RESULT_PATH" ]]; then
|
||||
echo "xcresult bundle not found: $RESULT_PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
TMP_JSON="$(mktemp)"
|
||||
TMP_SKIPPED="$(mktemp)"
|
||||
TMP_ALLOWLIST="$(mktemp)"
|
||||
TMP_UNALLOWED="$(mktemp)"
|
||||
|
||||
cleanup() {
|
||||
rm -f "$TMP_JSON" "$TMP_SKIPPED" "$TMP_ALLOWLIST" "$TMP_UNALLOWED"
|
||||
}
|
||||
trap cleanup EXIT
|
||||
|
||||
if ! xcrun xcresulttool get test-results tests --path "$RESULT_PATH" --format json > "$TMP_JSON" 2>/dev/null; then
|
||||
echo "Failed to parse xcresult test results: $RESULT_PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
jq -r '
|
||||
.. | objects
|
||||
| select((.result == "Skipped") or (.status == "Skipped") or (.outcome == "Skipped") or (.testStatus == "Skipped"))
|
||||
| (.name // .identifier // empty)
|
||||
' "$TMP_JSON" | sed '/^[[:space:]]*$/d' | sort -u > "$TMP_SKIPPED"
|
||||
|
||||
if [[ -f "$ALLOWLIST_PATH" ]]; then
|
||||
{
|
||||
grep -vE '^[[:space:]]*(#|$)' "$ALLOWLIST_PATH" || true
|
||||
} | sed 's/[[:space:]]*$//' | sed '/^[[:space:]]*$/d' | sort -u > "$TMP_ALLOWLIST"
|
||||
else
|
||||
: > "$TMP_ALLOWLIST"
|
||||
fi
|
||||
|
||||
if [[ ! -s "$TMP_SKIPPED" ]]; then
|
||||
echo "Skipped-test gate: PASS (no skipped iOS tests)"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
comm -23 "$TMP_SKIPPED" "$TMP_ALLOWLIST" > "$TMP_UNALLOWED"
|
||||
|
||||
if [[ -s "$TMP_UNALLOWED" ]]; then
|
||||
echo "Skipped-test gate: FAIL (non-allowlisted skipped iOS tests found)"
|
||||
cat "$TMP_UNALLOWED" | sed 's/^/ - /'
|
||||
if [[ -s "$TMP_ALLOWLIST" ]]; then
|
||||
echo "Allowlist used: $ALLOWLIST_PATH"
|
||||
else
|
||||
echo "Allowlist is empty: $ALLOWLIST_PATH"
|
||||
fi
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Skipped-test gate: PASS (all skipped iOS tests are allowlisted)"
|
||||
exit 0
|
||||
Reference in New Issue
Block a user