49 lines
2.1 KiB
Bash
49 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
||
set -Eeuo pipefail
|
||
|
||
readonly DASHBOARD_APP_DIR="${DASHBOARD_APP_DIR:-/opt/manus-deploy/apps/manus-dashboard}"
|
||
readonly DASHBOARD_ENV_FILE="${DASHBOARD_ENV_FILE:-${DASHBOARD_APP_DIR}/.env}"
|
||
readonly REFERENTIEL_CONTAINER="${REFERENTIEL_CONTAINER:-referentiel-ia}"
|
||
readonly REFERENTIEL_URL="${IA_REFERENTIEL_URL:-https://referentiel-ia.recette.santinova-soft.org}"
|
||
|
||
backup="$(mktemp /tmp/manus-dashboard-env-backup.XXXXXX)"
|
||
temporary="$(mktemp /tmp/manus-dashboard-env-next.XXXXXX)"
|
||
chmod 0600 "${backup}" "${temporary}"
|
||
cp "${DASHBOARD_ENV_FILE}" "${backup}"
|
||
|
||
cleanup() {
|
||
rm -f "${backup}" "${temporary}"
|
||
unset token result
|
||
}
|
||
trap cleanup EXIT
|
||
|
||
result="$(docker exec "${REFERENTIEL_CONTAINER}" sh -lc 'cd /app && corepack pnpm exec tsx scripts/dashboard-alert-token.ts prepare')"
|
||
token="${result%%$'\t'*}"
|
||
token_id="${result##*$'\t'}"
|
||
[[ -n "${token}" && "${token_id}" =~ ^[0-9]+$ ]] || { echo "Le Référentiel IA n’a pas retourné un jeton exploitable." >&2; exit 1; }
|
||
|
||
awk -v value="${token}" '
|
||
BEGIN { replaced = 0 }
|
||
/^IA_REFERENTIEL_TOKEN=/ { print "IA_REFERENTIEL_TOKEN=" value; replaced = 1; next }
|
||
{ print }
|
||
END { if (!replaced) print "IA_REFERENTIEL_TOKEN=" value }
|
||
' "${DASHBOARD_ENV_FILE}" > "${temporary}"
|
||
mv "${temporary}" "${DASHBOARD_ENV_FILE}"
|
||
chmod 0600 "${DASHBOARD_ENV_FILE}"
|
||
|
||
if ! (cd "${DASHBOARD_APP_DIR}" && docker compose up -d --force-recreate dashboard >/dev/null); then
|
||
cp "${backup}" "${DASHBOARD_ENV_FILE}"
|
||
exit 1
|
||
fi
|
||
sleep 8
|
||
health="$(curl -sS -o /dev/null -w '%{http_code}' -H "Authorization: Bearer ${token}" "${REFERENTIEL_URL}/api/integration/v1/alerts/ci/health")"
|
||
if [[ "${health}" != "204" ]]; then
|
||
cp "${backup}" "${DASHBOARD_ENV_FILE}"
|
||
(cd "${DASHBOARD_APP_DIR}" && docker compose up -d --force-recreate dashboard >/dev/null) || true
|
||
echo "Le nouveau jeton d’alerte a échoué au contrôle HTTP (${health}); rollback effectué." >&2
|
||
exit 1
|
||
fi
|
||
|
||
docker exec "${REFERENTIEL_CONTAINER}" sh -lc "cd /app && corepack pnpm exec tsx scripts/dashboard-alert-token.ts finalize ${token_id}" >/dev/null
|
||
echo "DASHBOARD_ALERT_TOKEN_PROVISIONED"
|