From f59fa106f614977114878068facd607b29f48627 Mon Sep 17 00:00:00 2001 From: Mandel Olaiya Date: Fri, 10 Apr 2026 20:12:58 +0200 Subject: [PATCH] Use dashboard deploy helper for multilingual audit --- Jenkinsfile | 7 +- Jenkinsfile.multilingual-nightly | 7 +- scripts/run_remote_multilingual_audit.sh | 87 +++++++++++------------- 3 files changed, 44 insertions(+), 57 deletions(-) diff --git a/Jenkinsfile b/Jenkinsfile index 48cb378..b515ea7 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -16,11 +16,9 @@ pipeline { environment { PYENVPIPELINE_VIRTUALENV = '1' GIT_SSH_COMMAND = 'ssh -o StrictHostKeyChecking=accept-new' - STAGING_AUDIT_HOST = 'root@49.12.204.96' STAGING_AUDIT_PROJECT_NAME = 'mandelstudio' STAGING_AUDIT_PROJECT_DIR = '/home/www-mandelstudio/mandelstudio' STAGING_AUDIT_MANAGE = '/var/lib/virtualenv/mandelstudio/bin/manage.py' - STAGING_AUDIT_SSH_CREDENTIALS_ID = 'staging-root-ssh' } stages { @@ -147,10 +145,7 @@ PY timeout(time: 10, unit: 'MINUTES') } steps { - withCredentials([ - sshUserPrivateKey(credentialsId: 'gitea-ssh', keyFileVariable: 'GIT_KEYFILE'), - sshUserPrivateKey(credentialsId: env.STAGING_AUDIT_SSH_CREDENTIALS_ID, keyFileVariable: 'STAGING_SSH_KEYFILE') - ]) { + withCredentials([sshUserPrivateKey(credentialsId: 'gitea-ssh', keyFileVariable: 'GIT_KEYFILE')]) { sh ''' export GIT_SSH_COMMAND="ssh -i $GIT_KEYFILE -o StrictHostKeyChecking=accept-new" if [ -d .git ]; then diff --git a/Jenkinsfile.multilingual-nightly b/Jenkinsfile.multilingual-nightly index f6893c7..0d71b6c 100644 --- a/Jenkinsfile.multilingual-nightly +++ b/Jenkinsfile.multilingual-nightly @@ -10,10 +10,9 @@ pipeline { skipDefaultCheckout(true) } environment { - STAGING_AUDIT_HOST = 'root@49.12.204.96' + STAGING_AUDIT_PROJECT_NAME = 'mandelstudio' STAGING_AUDIT_PROJECT_DIR = '/home/www-mandelstudio/mandelstudio' STAGING_AUDIT_MANAGE = '/var/lib/virtualenv/mandelstudio/bin/manage.py' - STAGING_AUDIT_SSH_CREDENTIALS_ID = 'staging-root-ssh' } stages { stage('Checkout') { @@ -45,9 +44,7 @@ pipeline { } steps { sh 'mkdir -p artifacts && [ -f artifacts/multilingual-audit.json ] && cp artifacts/multilingual-audit.json artifacts/previous-multilingual-audit.json || true' - withCredentials([sshUserPrivateKey(credentialsId: env.STAGING_AUDIT_SSH_CREDENTIALS_ID, keyFileVariable: 'STAGING_SSH_KEYFILE')]) { - sh './scripts/run_remote_multilingual_audit.sh' - } + sh './scripts/run_remote_multilingual_audit.sh' script { int status = sh(script: 'python3 scripts/multilingual_audit_ci.py --json artifacts/multilingual-audit.json --previous-json artifacts/previous-multilingual-audit.json', returnStatus: true) if (status == 2) { diff --git a/scripts/run_remote_multilingual_audit.sh b/scripts/run_remote_multilingual_audit.sh index 90cfd32..520644b 100755 --- a/scripts/run_remote_multilingual_audit.sh +++ b/scripts/run_remote_multilingual_audit.sh @@ -1,72 +1,67 @@ #!/usr/bin/env bash set -euo pipefail -: "${STAGING_AUDIT_HOST:?STAGING_AUDIT_HOST is required}" +: "${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}" -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 - < "$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 -} +ARTIFACT_DIR=${ARTIFACT_DIR:-artifacts} +OUT_FILE="${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 -SSH_OPTS="$SSH_OPTS" STAGING_AUDIT_HOST="$STAGING_AUDIT_HOST" REMOTE_CMD="$REMOTE_CMD" AUDIT_TIMEOUT_SECONDS="$AUDIT_TIMEOUT_SECONDS" python3 - <<'PY' > "$TMP_FILE" +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 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"]] +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=True, + check=False, 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) +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 -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 +cp "$TMP_FILE" "$OUT_FILE" +cat "$OUT_FILE" exit $rc