73 lines
2.0 KiB
Bash
Executable File
73 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
: "${STAGING_AUDIT_HOST:?STAGING_AUDIT_HOST is required}"
|
|
: "${STAGING_AUDIT_PROJECT_DIR:?STAGING_AUDIT_PROJECT_DIR is required}"
|
|
: "${STAGING_AUDIT_MANAGE:?STAGING_AUDIT_MANAGE is required}"
|
|
|
|
mkdir -p artifacts
|
|
SSH_OPTS=${SSH_OPTS:-"-o StrictHostKeyChecking=accept-new"}
|
|
if [[ -n "${STAGING_SSH_KEYFILE:-}" ]]; then
|
|
SSH_OPTS="$SSH_OPTS -i ${STAGING_SSH_KEYFILE}"
|
|
fi
|
|
AUDIT_TIMEOUT_SECONDS=${AUDIT_TIMEOUT_SECONDS:-300}
|
|
OUT_FILE="artifacts/multilingual-audit.json"
|
|
TMP_FILE="${OUT_FILE}.tmp"
|
|
|
|
write_failure_json() {
|
|
python3 - <<PY > "$OUT_FILE"
|
|
import json
|
|
print(json.dumps({
|
|
"run_id": None,
|
|
"total_urls_checked": 0,
|
|
"issues_found": 0,
|
|
"summary": {},
|
|
"issues": {},
|
|
"error": ${1@Q}
|
|
}, indent=2))
|
|
PY
|
|
}
|
|
|
|
REMOTE_CMD="cd '${STAGING_AUDIT_PROJECT_DIR}' && '${STAGING_AUDIT_MANAGE}' audit_locales --format=json"
|
|
set +e
|
|
SSH_OPTS="$SSH_OPTS" STAGING_AUDIT_HOST="$STAGING_AUDIT_HOST" REMOTE_CMD="$REMOTE_CMD" AUDIT_TIMEOUT_SECONDS="$AUDIT_TIMEOUT_SECONDS" python3 - <<'PY' > "$TMP_FILE"
|
|
import os
|
|
import shlex
|
|
import subprocess
|
|
import sys
|
|
|
|
ssh_opts = shlex.split(os.environ["SSH_OPTS"])
|
|
cmd = ["ssh", *ssh_opts, os.environ["STAGING_AUDIT_HOST"], os.environ["REMOTE_CMD"]]
|
|
try:
|
|
proc = subprocess.run(
|
|
cmd,
|
|
check=True,
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.PIPE,
|
|
text=True,
|
|
timeout=int(os.environ["AUDIT_TIMEOUT_SECONDS"]),
|
|
)
|
|
sys.stdout.write(proc.stdout)
|
|
sys.stderr.write(proc.stderr)
|
|
except subprocess.TimeoutExpired as exc:
|
|
sys.stderr.write(exc.stderr or "")
|
|
raise SystemExit(124)
|
|
except subprocess.CalledProcessError as exc:
|
|
sys.stdout.write(exc.stdout or "")
|
|
sys.stderr.write(exc.stderr or "")
|
|
raise SystemExit(exc.returncode)
|
|
PY
|
|
rc=$?
|
|
set -e
|
|
if [[ $rc -eq 0 ]]; then
|
|
mv "$TMP_FILE" "$OUT_FILE"
|
|
exit 0
|
|
fi
|
|
rm -f "$TMP_FILE"
|
|
if [[ $rc -eq 124 ]]; then
|
|
write_failure_json "Remote multilingual audit timed out after ${AUDIT_TIMEOUT_SECONDS}s"
|
|
else
|
|
write_failure_json "Remote multilingual audit failed with exit status ${rc}"
|
|
fi
|
|
exit $rc
|