#!/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