#!/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} OUT_FILE="${ARTIFACT_DIR}/multilingual-audit.json" DEBUG_FILE="${ARTIFACT_DIR}/template-debug.txt" mkdir -p "${ARTIFACT_DIR}" TMP_FILE=$(mktemp) TMP_DEBUG=$(mktemp) trap 'rm -f "$TMP_FILE" "$TMP_DEBUG"' EXIT REMOTE_DEBUG_CMD="cd '${STAGING_AUDIT_PROJECT_DIR}' && '${STAGING_AUDIT_MANAGE}' shell -c \"\ from django.template.loader import get_template; \ from django.template import Context; \ import pathlib; \ import os; \ import mandelstudio; \ print('DJANGO_SETTINGS_MODULE=' + os.environ.get('DJANGO_SETTINGS_MODULE','')); \ troot = pathlib.Path(mandelstudio.__file__).resolve().parent; \ print('mandelstudio_path=' + str(troot)); \ print('has_override_carbasa_header=' + str((troot / 'templates/carbasa/headers/header.html').exists())); \ tproj = pathlib.Path('${STAGING_AUDIT_PROJECT_DIR}').resolve(); \ print('repo_templates_dir=' + str(tproj / 'templates')); \ print('has_repo_override_carbasa_header=' + str((tproj / 'templates/carbasa/headers/header.html').exists())); \ t1=get_template('carbasa/headers/header.html'); \ t2=get_template('engine/pages/base_home_page.html'); \ print('carbasa/headers/header.html -> ' + getattr(getattr(t1,'origin',None),'name','(no origin)')); \ print('engine/pages/base_home_page.html -> ' + getattr(getattr(t2,'origin',None),'name','(no origin)')); \ try: \ t3=get_template('layout.html'); \ t3.render(Context({'request': None})); \ print('render_layout_ok=True'); \ except Exception as exc: \ print('render_layout_ok=False'); \ print('render_layout_error=' + repr(exc)); \ \"" 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_DEBUG_CMD" AUDIT_TIMEOUT_SECONDS="$AUDIT_TIMEOUT_SECONDS" python3 - <<'PY' > "$TMP_DEBUG" import os import subprocess import sys 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", os.environ["STAGING_AUDIT_PROJECT_NAME"], "--command", os.environ["REMOTE_CMD"], ] proc = subprocess.run( cmd, check=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=int(os.environ["AUDIT_TIMEOUT_SECONDS"]), ) if proc.stdout: sys.stdout.write(proc.stdout) if proc.stderr: sys.stdout.write("\n[stderr]\n" + proc.stderr) raise SystemExit(proc.returncode) PY debug_rc=$? set -e cp "$TMP_DEBUG" "$DEBUG_FILE" if [ "$debug_rc" -ne 0 ]; then echo "WARNING: template debug command failed (rc=${debug_rc})" >> "$DEBUG_FILE" fi echo "---- TEMPLATE DEBUG (staging) ----" cat "$DEBUG_FILE" echo "---- END TEMPLATE DEBUG ----" set +e STAGING_AUDIT_PROJECT_NAME="$STAGING_AUDIT_PROJECT_NAME" REMOTE_CMD="$REMOTE_CMD" AUDIT_TIMEOUT_SECONDS="$AUDIT_TIMEOUT_SECONDS" python3 - <<'PY' > "$TMP_FILE" import json import os import subprocess import sys 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", os.environ["STAGING_AUDIT_PROJECT_NAME"], "--command", os.environ["REMOTE_CMD"], ] try: proc = subprocess.run( cmd, check=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, timeout=int(os.environ["AUDIT_TIMEOUT_SECONDS"]), ) except subprocess.TimeoutExpired: print(json.dumps({ "error": "audit_failed", "details": f"Audit command timed out after {os.environ['AUDIT_TIMEOUT_SECONDS']} seconds", "exit_code": 124, }, indent=2)) raise SystemExit(2) stdout = proc.stdout.strip() stderr = proc.stderr.strip() if proc.returncode != 0: if stdout: print(stdout) else: print(json.dumps({ "error": "audit_failed", "details": stderr or f"Audit command failed with exit status {proc.returncode}", "exit_code": proc.returncode, }, indent=2)) raise SystemExit(2) print(stdout) PY rc=$? set -e cp "$TMP_FILE" "$OUT_FILE" cat "$OUT_FILE" exit $rc