fix(ci): build cicd notification payload without python
All checks were successful
Code Review / ai-code-review (push) Successful in 11s
All checks were successful
Code Review / ai-code-review (push) Successful in 11s
This commit is contained in:
@@ -15,23 +15,20 @@ WORKFLOW_URL="${AWOOI_CICD_WORKFLOW_URL:-${AWOOOI_CICD_WORKFLOW_URL:-http://192.
|
||||
DURATION_SECONDS="${AWOOI_CICD_DURATION_SECONDS:-${AWOOOI_CICD_DURATION_SECONDS:-0}}"
|
||||
SUMMARY="${AWOOI_CICD_SUMMARY:-${AWOOOI_CICD_SUMMARY:-}}"
|
||||
|
||||
if ! command -v python3 >/dev/null 2>&1; then
|
||||
echo "python3 missing; cannot build Alertmanager JSON payload" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
payload_file="$(mktemp)"
|
||||
trap 'rm -f "$payload_file"' EXIT
|
||||
|
||||
JOB_NAME="$JOB_NAME" \
|
||||
STATUS_RAW="$STATUS_RAW" \
|
||||
STAGE="$STAGE" \
|
||||
COMMIT_SHA="$COMMIT_SHA" \
|
||||
TRIGGERED_BY="$TRIGGERED_BY" \
|
||||
WORKFLOW_URL="$WORKFLOW_URL" \
|
||||
DURATION_SECONDS="$DURATION_SECONDS" \
|
||||
SUMMARY="$SUMMARY" \
|
||||
python3 - <<'PY' > "$payload_file"
|
||||
export JOB_NAME
|
||||
export STATUS_RAW
|
||||
export STAGE
|
||||
export COMMIT_SHA
|
||||
export TRIGGERED_BY
|
||||
export WORKFLOW_URL
|
||||
export DURATION_SECONDS
|
||||
export SUMMARY
|
||||
|
||||
build_payload_with_python() {
|
||||
python3 - <<'PY'
|
||||
from __future__ import annotations
|
||||
|
||||
import datetime as dt
|
||||
@@ -84,6 +81,69 @@ payload = {
|
||||
}
|
||||
print(json.dumps(payload, ensure_ascii=False))
|
||||
PY
|
||||
}
|
||||
|
||||
build_payload_with_node() {
|
||||
node <<'JS'
|
||||
const statusCandidates = new Set(["running", "success", "failed", "pending"]);
|
||||
let status = (process.env.STATUS_RAW || "running").trim().toLowerCase();
|
||||
if (!statusCandidates.has(status)) {
|
||||
status = "running";
|
||||
}
|
||||
|
||||
let severity = "info";
|
||||
if (status === "failed") {
|
||||
severity = "critical";
|
||||
} else if (status === "pending") {
|
||||
severity = "warning";
|
||||
}
|
||||
|
||||
const stage = (process.env.STAGE || "ci").trim().slice(0, 40);
|
||||
const safeStage = stage.replace(/[^A-Za-z0-9_]+/g, "_").replace(/^_+|_+$/g, "") || "ci";
|
||||
const alertname = `CI_${safeStage}_${status}`;
|
||||
|
||||
const payload = {
|
||||
version: "4",
|
||||
status: "firing",
|
||||
receiver: "awoooi-cicd",
|
||||
groupLabels: { alertname },
|
||||
commonLabels: { alertname, severity },
|
||||
commonAnnotations: {},
|
||||
externalURL: process.env.WORKFLOW_URL || "",
|
||||
alerts: [
|
||||
{
|
||||
status: "firing",
|
||||
labels: {
|
||||
alertname,
|
||||
severity,
|
||||
stage,
|
||||
status,
|
||||
commit: process.env.COMMIT_SHA || "",
|
||||
triggered_by: process.env.TRIGGERED_BY || "CI",
|
||||
duration_seconds: process.env.DURATION_SECONDS || "0",
|
||||
},
|
||||
annotations: {
|
||||
summary: process.env.JOB_NAME || "CI/CD Pipeline",
|
||||
description: process.env.SUMMARY || "",
|
||||
workflow_url: process.env.WORKFLOW_URL || "",
|
||||
},
|
||||
startsAt: new Date().toISOString(),
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
process.stdout.write(JSON.stringify(payload));
|
||||
JS
|
||||
}
|
||||
|
||||
if command -v python3 >/dev/null 2>&1; then
|
||||
build_payload_with_python > "$payload_file"
|
||||
elif command -v node >/dev/null 2>&1; then
|
||||
build_payload_with_node > "$payload_file"
|
||||
else
|
||||
echo "python3 and node missing; cannot build Alertmanager JSON payload" >&2
|
||||
exit 2
|
||||
fi
|
||||
|
||||
if [ "${AWOOI_CICD_DRY_RUN:-${AWOOOI_CICD_DRY_RUN:-0}}" = "1" ]; then
|
||||
cat "$payload_file"
|
||||
|
||||
Reference in New Issue
Block a user