feat: append script lifecycle events to smart_ide logs/ia_dev.log when embedded

This commit is contained in:
Nicolas Cantu 2026-04-03 17:50:35 +02:00
parent e8c0db2200
commit 756bab0cd8
26 changed files with 192 additions and 2 deletions

View File

@ -8,6 +8,12 @@ cat > /dev/null
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
IA_DEV="$(cd "${SCRIPT_DIR}/../.." && pwd)" IA_DEV="$(cd "${SCRIPT_DIR}/../.." && pwd)"
if [[ -f "${IA_DEV}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../../lib/smart_ide_logs.sh
source "${IA_DEV}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV" "$0" "$*"
smart_ide_logs_register_exit_trap
fi
CONTENT="" CONTENT=""
for spool in "${IA_DEV}/projects/"*/data/issues; do for spool in "${IA_DEV}/projects/"*/data/issues; do

View File

@ -30,3 +30,10 @@ export DATA_NOTARY_AI_RESPONDED_DIR
export PROJECT_ID export PROJECT_ID
export IA_DEV_ROOT export IA_DEV_ROOT
export PROJECT_ROOT export PROJECT_ROOT
if [[ -f "${IA_DEV_ROOT}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "${BASH_SOURCE[1]}" "$*"
smart_ide_logs_register_exit_trap
fi

View File

@ -7,6 +7,10 @@ SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BA
DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)" IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
# Optional first arg: project id (must exist as projects/<id>/conf.json); then re-exec from project root # Optional first arg: project id (must exist as projects/<id>/conf.json); then re-exec from project root
if [[ -n "${1:-}" && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" && ! "$1" =~ ^(main|test|pprod|prod)$ ]]; then if [[ -n "${1:-}" && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" && ! "$1" =~ ^(main|test|pprod|prod)$ ]]; then
export IA_PROJECT_ID="$1" export IA_PROJECT_ID="$1"
@ -90,6 +94,8 @@ tmp1="$(mktemp -t branch-align-test.XXXXXX)"
tmp2="$(mktemp -t branch-align-pprod.XXXXXX)" tmp2="$(mktemp -t branch-align-pprod.XXXXXX)"
tmp3="$(mktemp -t branch-align-prod.XXXXXX)" tmp3="$(mktemp -t branch-align-prod.XXXXXX)"
cleanup() { cleanup() {
local ec=$?
smart_ide_log_end_with_status "$ec"
rm -f "$tmp1" "$tmp2" "$tmp3" rm -f "$tmp1" "$tmp2" "$tmp3"
} }
trap cleanup EXIT trap cleanup EXIT

View File

@ -8,6 +8,11 @@ SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BA
DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)" IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
smart_ide_logs_register_exit_trap
# Optional first arg: project id (must exist as projects/<id>/conf.json) # Optional first arg: project id (must exist as projects/<id>/conf.json)
if [[ -n "${1:-}" && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" && "$1" != *.* ]]; then if [[ -n "${1:-}" && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" && "$1" != *.* ]]; then
export IA_PROJECT_ID="$1" export IA_PROJECT_ID="$1"

View File

@ -7,6 +7,11 @@ SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BA
DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)" IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
smart_ide_logs_register_exit_trap
# Optional first arg: project id (must exist as projects/<id>/conf.json); then re-exec from project root # Optional first arg: project id (must exist as projects/<id>/conf.json); then re-exec from project root
if [[ -n "${1:-}" && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" ]]; then if [[ -n "${1:-}" && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" ]]; then
export IA_PROJECT_ID="$1" export IA_PROJECT_ID="$1"

View File

@ -8,6 +8,11 @@ SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BA
DEPLOY_IA="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_IA="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_IA/.." && pwd)" IA_DEV_ROOT="$(cd "$DEPLOY_IA/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
smart_ide_logs_register_exit_trap
# Optional first arg: project id (must exist as projects/<id>/conf.json) # Optional first arg: project id (must exist as projects/<id>/conf.json)
if [[ -n "${1:-}" && ! "$1" =~ ^(pprod|prod)$ && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" ]]; then if [[ -n "${1:-}" && ! "$1" =~ ^(pprod|prod)$ && -f "${IA_DEV_ROOT}/projects/${1}/conf.json" ]]; then
export IA_PROJECT_ID="$1" export IA_PROJECT_ID="$1"

View File

@ -8,6 +8,10 @@ SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BA
DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)" IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
# shellcheck source=lib/deploy-methodology.sh # shellcheck source=lib/deploy-methodology.sh
source "${DEPLOY_DIR}/lib/deploy-methodology.sh" source "${DEPLOY_DIR}/lib/deploy-methodology.sh"

View File

@ -3,7 +3,7 @@
## `ssh.sh` ## `ssh.sh`
Canonical SSH/SCP helpers (`ssh_run`, `scp_copy`, `require_ssh_key`, `ssh_common_opts`) used across projects. Canonical SSH/SCP helpers (`ssh_run`, `scp_copy`, `require_ssh_key`, `ssh_common_opts`) used across projects.
**LeCoffre** : `deploy/scripts_v2/_lib/ssh.sh` sources `ia_dev/deploy/lib/ssh.sh` when the submodule path `ia_dev/deploy/lib/ssh.sh` exists from the repo root; otherwise it embeds the same implementation. **LeCoffre** : `deploy/scripts_v2/_lib/ssh.sh` sources `ia_dev/deploy/lib/ssh.sh` when the path `ia_dev/deploy/lib/ssh.sh` exists from the repo root; otherwise it embeds the same implementation.
## `deploy-log.sh` ## `deploy-log.sh`

View File

@ -21,6 +21,12 @@ deploy_script_tee_log_if_requested() {
printf '%s\n' "=== LeCoffre deploy log ===" printf '%s\n' "=== LeCoffre deploy log ==="
printf '%s\n' "environment=${deploy_env:-<unset>} started_at=${DEPLOY_STARTED_AT:-} project_root=${project_root}" printf '%s\n' "environment=${deploy_env:-<unset>} started_at=${DEPLOY_STARTED_AT:-} project_root=${project_root}"
} >"$log_file" } >"$log_file"
_IA_DEV_DEPLOY_LOG="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
if [[ -f "${_IA_DEV_DEPLOY_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../../lib/smart_ide_logs.sh
SMART_IDE_LOG_IA_DEV_ROOT="$_IA_DEV_DEPLOY_LOG" source "${_IA_DEV_DEPLOY_LOG}/lib/smart_ide_logs.sh"
smart_ide_log_event "deploy_script_tee_log project_root=${project_root} log_file=${log_file}"
fi
exec > >(tee -a "$log_file") exec > >(tee -a "$log_file")
info "[deploy] Teeing output to ${log_file}" info "[deploy] Teeing output to ${log_file}"
} }

View File

@ -1,6 +1,6 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# Shared SSH/SCP helpers for deploy scripts (ProxyJump, BatchMode, keepalive). # Shared SSH/SCP helpers for deploy scripts (ProxyJump, BatchMode, keepalive).
# Sourced by project deploy/_lib/ssh.sh when ia_dev is present as submodule/sibling. # Sourced by project deploy/_lib/ssh.sh when ia_dev is present under the repo root (or sibling layout).
set -euo pipefail set -euo pipefail

View File

@ -10,6 +10,11 @@ SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BA
DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)" IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
smart_ide_logs_register_exit_trap
_ORCH_TAG="[orchestrator]" _ORCH_TAG="[orchestrator]"
# shellcheck source=lib/deploy-methodology.sh # shellcheck source=lib/deploy-methodology.sh
@ -60,6 +65,7 @@ if [[ -n "$PROJECT_ORCH_REL" && "$PROJECT_ORCH_REL" != "null" ]]; then
echo "${_ORCH_TAG}[WARN] deploy.hooks.phases is non-empty but project_orchestrator_path takes precedence; phases are ignored." >&2 echo "${_ORCH_TAG}[WARN] deploy.hooks.phases is non-empty but project_orchestrator_path takes precedence; phases are ignored." >&2
fi fi
echo "${_ORCH_TAG} Project orchestrator: ${PROJECT_ORCH_REL} $*" echo "${_ORCH_TAG} Project orchestrator: ${PROJECT_ORCH_REL} $*"
smart_ide_log_event "HANDOFF project_orchestrator ${PROJECT_ORCH_ABS} $*"
exec bash "$PROJECT_ORCH_ABS" "$@" exec bash "$PROJECT_ORCH_ABS" "$@"
fi fi
@ -71,12 +77,14 @@ fi
PHASE_COUNT="$(jq '.deploy.hooks.phases // [] | length' "$CONF")" PHASE_COUNT="$(jq '.deploy.hooks.phases // [] | length' "$CONF")"
if [[ "$PHASE_COUNT" == "0" ]]; then if [[ "$PHASE_COUNT" == "0" ]]; then
echo "${_ORCH_TAG}[WARN] deploy.project_orchestrator_path unset; falling back to deploy_script_path only." >&2 echo "${_ORCH_TAG}[WARN] deploy.project_orchestrator_path unset; falling back to deploy_script_path only." >&2
smart_ide_log_event "HANDOFF deploy_script_path ${DEPLOY_SCRIPT_PATH} $*"
exec bash "$DEPLOY_SCRIPT_PATH" "$@" exec bash "$DEPLOY_SCRIPT_PATH" "$@"
fi fi
mapfile -t PHASE_SCRIPTS < <(jq -r '.deploy.hooks.phases[]? | if type == "string" then . elif type == "object" and (.run | type == "string") then .run else empty end' "$CONF") mapfile -t PHASE_SCRIPTS < <(jq -r '.deploy.hooks.phases[]? | if type == "string" then . elif type == "object" and (.run | type == "string") then .run else empty end' "$CONF")
if [[ ${#PHASE_SCRIPTS[@]} -eq 0 ]]; then if [[ ${#PHASE_SCRIPTS[@]} -eq 0 ]]; then
smart_ide_log_event "HANDOFF deploy_script_path ${DEPLOY_SCRIPT_PATH} $*"
exec bash "$DEPLOY_SCRIPT_PATH" "$@" exec bash "$DEPLOY_SCRIPT_PATH" "$@"
fi fi

View File

@ -11,6 +11,10 @@ SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BA
DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)" IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
# Optional project id: --project <id> or first positional if projects/<id>/conf.json exists # Optional project id: --project <id> or first positional if projects/<id>/conf.json exists
while [[ $# -gt 0 ]]; do while [[ $# -gt 0 ]]; do
if [[ "$1" == --project ]]; then if [[ "$1" == --project ]]; then
@ -151,6 +155,8 @@ fi
msg_file="$(mktemp -t pousse-commit-msg.XXXXXX)" msg_file="$(mktemp -t pousse-commit-msg.XXXXXX)"
cleanup() { cleanup() {
local ec=$?
smart_ide_log_end_with_status "$ec"
rm -f "$msg_file" rm -f "$msg_file"
} }
trap cleanup EXIT trap cleanup EXIT

View File

@ -6,4 +6,8 @@ set -euo pipefail
SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")" SCRIPT_REAL="$(readlink -f "${BASH_SOURCE[0]:-$0}" 2>/dev/null || realpath "${BASH_SOURCE[0]:-$0}" 2>/dev/null || echo "${BASH_SOURCE[0]:-$0}")"
DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)" DEPLOY_DIR="$(cd "$(dirname "$SCRIPT_REAL")" && pwd)"
IA_DEV_ROOT="$(cd "$DEPLOY_DIR/.." && pwd)"
# shellcheck source=../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
exec "$DEPLOY_DIR/orchestrator.sh" "$@" exec "$DEPLOY_DIR/orchestrator.sh" "$@"

View File

@ -6,6 +6,13 @@ set -euo pipefail
SCRIPT_DIR="${BASH_SOURCE%/*}" SCRIPT_DIR="${BASH_SOURCE%/*}"
[[ -d "$SCRIPT_DIR" ]] || SCRIPT_DIR=. [[ -d "$SCRIPT_DIR" ]] || SCRIPT_DIR=.
IA_DEV_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
if [[ -f "${IA_DEV_ROOT}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
smart_ide_logs_register_exit_trap
fi
LIB_DIR="$(cd "$SCRIPT_DIR/../_lib" && pwd)" LIB_DIR="$(cd "$SCRIPT_DIR/../_lib" && pwd)"
# shellcheck source=../_lib/ssh.sh # shellcheck source=../_lib/ssh.sh
source "$LIB_DIR/ssh.sh" source "$LIB_DIR/ssh.sh"

View File

@ -4,6 +4,12 @@
set -euo pipefail set -euo pipefail
IA_DEV_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" IA_DEV_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
if [[ -f "${IA_DEV_ROOT}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../../lib/smart_ide_logs.sh
source "${IA_DEV_ROOT}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$IA_DEV_ROOT" "$0" "$*"
smart_ide_logs_register_exit_trap
fi
# shellcheck source=deploy/_lib/ssh.sh # shellcheck source=deploy/_lib/ssh.sh
source "${IA_DEV_ROOT}/deploy/_lib/ssh.sh" source "${IA_DEV_ROOT}/deploy/_lib/ssh.sh"

View File

@ -33,6 +33,14 @@ fi
export PROJECT_LOGS_DIR export PROJECT_LOGS_DIR
export DATA_ISSUES_DIR export DATA_ISSUES_DIR
if [[ -f "${GITEA_ISSUES_DIR}/../lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${GITEA_ISSUES_DIR}/../lib/smart_ide_logs.sh"
_IA_DEV_ROOT_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
smart_ide_logs_begin "$_IA_DEV_ROOT_FOR_LOG" "${BASH_SOURCE[1]}" "$*"
smart_ide_logs_register_exit_trap
fi
# Load token: GITEA_TOKEN env, then project config git.token_file (path relative to ia_dev root), then default # Load token: GITEA_TOKEN env, then project config git.token_file (path relative to ia_dev root), then default
load_gitea_token() { load_gitea_token() {
if [[ -n "${GITEA_TOKEN:-}" ]]; then if [[ -n "${GITEA_TOKEN:-}" ]]; then

View File

@ -5,4 +5,10 @@ set -euo pipefail
GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
export GITEA_ISSUES_DIR export GITEA_ISSUES_DIR
export REPO_ROOT="${GITEA_ISSUES_DIR}/.." export REPO_ROOT="${GITEA_ISSUES_DIR}/.."
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/mail-create-issue-from-email.py" "$@" exec python3 "${GITEA_ISSUES_DIR}/mail-create-issue-from-email.py" "$@"

View File

@ -9,4 +9,10 @@ if [ $# -lt 1 ]; then
echo "Usage: $0 <uid>" >&2 echo "Usage: $0 <uid>" >&2
exit 1 exit 1
fi fi
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/mail-get-thread.py" "$1" exec python3 "${GITEA_ISSUES_DIR}/mail-get-thread.py" "$1"

View File

@ -5,4 +5,10 @@ GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && p
# REPO_ROOT = ia_dev so mail_common.repo_root() finds .secrets under ia_dev # REPO_ROOT = ia_dev so mail_common.repo_root() finds .secrets under ia_dev
export GITEA_ISSUES_DIR export GITEA_ISSUES_DIR
export REPO_ROOT="${GITEA_ISSUES_DIR}/.." export REPO_ROOT="${GITEA_ISSUES_DIR}/.."
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/mail-list-unread.py" exec python3 "${GITEA_ISSUES_DIR}/mail-list-unread.py"

View File

@ -5,4 +5,10 @@ set -euo pipefail
GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
export GITEA_ISSUES_DIR export GITEA_ISSUES_DIR
export REPO_ROOT="${GITEA_ISSUES_DIR}/.." export REPO_ROOT="${GITEA_ISSUES_DIR}/.."
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/mail-mark-read.py" "$@" exec python3 "${GITEA_ISSUES_DIR}/mail-mark-read.py" "$@"

View File

@ -5,4 +5,10 @@ set -euo pipefail
GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
export GITEA_ISSUES_DIR export GITEA_ISSUES_DIR
export REPO_ROOT="${GITEA_ISSUES_DIR}/.." export REPO_ROOT="${GITEA_ISSUES_DIR}/.."
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/mail-send-reply.py" "$@" exec python3 "${GITEA_ISSUES_DIR}/mail-send-reply.py" "$@"

View File

@ -10,4 +10,10 @@ set -euo pipefail
GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
export GITEA_ISSUES_DIR export GITEA_ISSUES_DIR
export REPO_ROOT="${GITEA_ISSUES_DIR}/.." export REPO_ROOT="${GITEA_ISSUES_DIR}/.."
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/mail-thread-log.py" "$@" exec python3 "${GITEA_ISSUES_DIR}/mail-thread-log.py" "$@"

View File

@ -9,4 +9,10 @@ set -euo pipefail
GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
export GITEA_ISSUES_DIR export GITEA_ISSUES_DIR
export REPO_ROOT="${GITEA_ISSUES_DIR}/.." export REPO_ROOT="${GITEA_ISSUES_DIR}/.."
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/mail-to-issue.py" exec python3 "${GITEA_ISSUES_DIR}/mail-to-issue.py"

View File

@ -5,4 +5,10 @@ set -euo pipefail
GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}" GITEA_ISSUES_DIR="${GITEA_ISSUES_DIR:-$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)}"
export GITEA_ISSUES_DIR export GITEA_ISSUES_DIR
export REPO_ROOT="${GITEA_ISSUES_DIR}/.." export REPO_ROOT="${GITEA_ISSUES_DIR}/.."
_IA_FOR_LOG="$(cd "${GITEA_ISSUES_DIR}/.." && pwd)"
if [[ -f "${_IA_FOR_LOG}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_FOR_LOG}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_FOR_LOG" "$0" "$*"
fi
exec python3 "${GITEA_ISSUES_DIR}/write-response-spooler.py" "$@" exec python3 "${GITEA_ISSUES_DIR}/write-response-spooler.py" "$@"

51
lib/smart_ide_logs.sh Normal file
View File

@ -0,0 +1,51 @@
#!/usr/bin/env bash
# Append one line per event to <smart_ide>/logs/ia_dev.log when ia_dev lives inside smart_ide.
# Usage: export SMART_IDE_LOG_IA_DEV_ROOT after cd to ia_dev root, then smart_ide_log_event / smart_ide_logs_begin.
smart_ide_logs_resolve_root_for_ia_dev() {
local ia_root="${1:?}"
local parent base_name
base_name="$(basename "$ia_root")"
if [[ "$base_name" != "ia_dev" ]]; then
return 1
fi
parent="$(cd "$ia_root/.." && pwd)"
if [[ -f "${parent}/cron/git-pull-wrapper.sh" ]] || [[ -d "${parent}/projects/smart_ide" ]]; then
printf '%s\n' "$parent"
return 0
fi
return 1
}
smart_ide_log_event() {
local ia_root="${SMART_IDE_LOG_IA_DEV_ROOT:-}"
if [[ -z "$ia_root" ]]; then
return 0
fi
local smart_root logf
smart_root="$(smart_ide_logs_resolve_root_for_ia_dev "$ia_root" 2>/dev/null)" || return 0
logf="${smart_root}/logs/ia_dev.log"
mkdir -p "$(dirname "$logf")"
printf '%s %s\n' "$(date -Iseconds)" "$*" >>"$logf"
}
smart_ide_logs_begin() {
export SMART_IDE_LOG_IA_DEV_ROOT="${1:?}"
export SMART_IDE_LOG_SCRIPT_PATH="${2:?}"
shift 2
smart_ide_log_event "START ${SMART_IDE_LOG_SCRIPT_PATH} $*"
}
smart_ide_logs_register_exit_trap() {
trap 'smart_ide_logs_on_exit_trap' EXIT
}
smart_ide_logs_on_exit_trap() {
local ec=$?
smart_ide_log_event "END ${SMART_IDE_LOG_SCRIPT_PATH:-?} exit=${ec}"
}
smart_ide_log_end_with_status() {
local ec="${1:?}"
smart_ide_log_event "END ${SMART_IDE_LOG_SCRIPT_PATH:-${0:-?}} exit=${ec}"
}

View File

@ -5,6 +5,14 @@
# Syslog identifier: lpldf-https-watch (for SIEM / Wazuh-style log collection). # Syslog identifier: lpldf-https-watch (for SIEM / Wazuh-style log collection).
set -euo pipefail set -euo pipefail
_IA_DEV_TOOLS="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
if [[ -f "${_IA_DEV_TOOLS}/lib/smart_ide_logs.sh" ]]; then
# shellcheck source=../lib/smart_ide_logs.sh
source "${_IA_DEV_TOOLS}/lib/smart_ide_logs.sh"
smart_ide_logs_begin "$_IA_DEV_TOOLS" "$0" "$*"
smart_ide_logs_register_exit_trap
fi
readonly WATCH_URL="${WATCH_URL:-https://xn--lespetitesleonsdefrdric-89b1db.fr/}" readonly WATCH_URL="${WATCH_URL:-https://xn--lespetitesleonsdefrdric-89b1db.fr/}"
readonly STATE_DIR="${STATE_DIR:-/var/lib/lpldf-https-watch}" readonly STATE_DIR="${STATE_DIR:-/var/lib/lpldf-https-watch}"
readonly STATE_FILE="${STATE_DIR}/last_state" readonly STATE_FILE="${STATE_DIR}/last_state"