Files
mandelstudio/scripts/run_remote_multilingual_audit.sh

63 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
: "${STAGING_AUDIT_PROJECT_NAME:?STAGING_AUDIT_PROJECT_NAME is required}"
: "${STAGING_AUDIT_PROJECT_DIR:?STAGING_AUDIT_PROJECT_DIR is required}"
: "${STAGING_AUDIT_MANAGE:?STAGING_AUDIT_MANAGE is required}"
AUDIT_TIMEOUT_SECONDS=${AUDIT_TIMEOUT_SECONDS:-300}
ARTIFACT_DIR=${ARTIFACT_DIR:-artifacts}
OUTPUT_JSON=${OUTPUT_JSON:-${ARTIFACT_DIR}/multilingual-audit.json}
mkdir -p "${ARTIFACT_DIR}"
TMP_FILE=$(mktemp)
trap 'rm -f "$TMP_FILE"' EXIT
REMOTE_CMD="cd '${STAGING_AUDIT_PROJECT_DIR}' && '${STAGING_AUDIT_MANAGE}' audit_locales --format=json"
set +e
STAGING_AUDIT_PROJECT_NAME="$STAGING_AUDIT_PROJECT_NAME" REMOTE_CMD="$REMOTE_CMD" AUDIT_TIMEOUT_SECONDS="$AUDIT_TIMEOUT_SECONDS" python3 - <<'PY2' > "$TMP_FILE"
import json
import os
import subprocess
import sys
project = os.environ["STAGING_AUDIT_PROJECT_NAME"]
remote_cmd = os.environ["REMOTE_CMD"]
timeout_seconds = int(os.environ["AUDIT_TIMEOUT_SECONDS"])
cmd = [
"sudo", "-n", "-u", "mandel", "-g", "www-data",
"/srv/apps/mandel-dashboard/.venv/bin/python",
"/srv/apps/mandel-dashboard/bin/deploy_stg_from_jenkins.py",
project,
"--command",
remote_cmd,
]
try:
result = subprocess.run(cmd, capture_output=True, text=True, timeout=timeout_seconds, check=False)
except subprocess.TimeoutExpired:
print(json.dumps({
"error": "audit_failed",
"details": f"Audit command timed out after {timeout_seconds} seconds",
"exit_code": 124,
}, indent=2))
sys.exit(2)
stdout = result.stdout.strip()
stderr = result.stderr.strip()
if result.returncode != 0:
if stdout:
print(stdout)
else:
print(json.dumps({
"error": "audit_failed",
"details": stderr or f"Audit command failed with exit status {result.returncode}",
"exit_code": result.returncode,
}, indent=2))
sys.exit(2)
print(stdout)
PY2
status=$?
set -e
cp "$TMP_FILE" "$OUTPUT_JSON"
cat "$OUTPUT_JSON"
exit $status