diff --git a/.gitignore b/.gitignore index 8c7863e..170e465 100644 --- a/.gitignore +++ b/.gitignore @@ -41,3 +41,6 @@ nb-configuration.xml # Plugin directory /.quarkus/cli/plugins/ + +# deploy-services.sh summary logs +deploy-*.log diff --git a/scripts/README.md b/scripts/README.md index 41fce91..ca4be64 100644 --- a/scripts/README.md +++ b/scripts/README.md @@ -201,6 +201,8 @@ Opcional: instala `xmllint` para que el script lea el POM con XPath (`libxml2-ut Script independiente, en el mismo directorio que `build-and-push.sh`. No lo modifica: lo ejecuta una vez por cada servicio de un archivo de lista. Si un servicio falla, sigue con el resto y al terminar indica cuáles fallaron. El código de salida es `1` si alguno falló. +Al terminar el lote, ese resumen queda también en `deploy-YYYYMMDD-HHMMSS.log` en el directorio desde el que se lanzó el script (hora local de inicio). Si ese nombre ya existe, se añade el PID. Si no se puede escribir el archivo, el script avisa y conserva el código de salida del lote. + No hay lista por defecto. `--services` es obligatorio, así cada proyecto puede tener su propio archivo. ```shell diff --git a/scripts/deploy-services.sh b/scripts/deploy-services.sh index cb0b3c9..4dc3d57 100755 --- a/scripts/deploy-services.sh +++ b/scripts/deploy-services.sh @@ -2,6 +2,8 @@ # # Run scripts/build-and-push.sh once per service listed in a project file. # Continues after a failure and prints a summary when the batch finishes. +# That summary is also written to deploy-YYYYMMDD-HHMMSS.log in the directory +# from which the script was launched. # # The list path is required (--services). Relative service paths are resolved # against the directory that contains that file, not the caller's cwd. @@ -48,6 +50,9 @@ Usage: $(basename "$0") --remote TARGET --services FILE [options] Run build-and-push.sh once for every service listed in FILE. One list file per project: pass a different --services path to deploy another project. A failure does not stop the batch. The exit code is 1 if any service failed. +When the batch finishes, that summary is written to deploy-YYYYMMDD-HHMMSS.log +in the current directory (local start time). If that name already exists, the +process id is appended. Required: --remote TARGET SSH destination forwarded to build-and-push.sh @@ -193,12 +198,60 @@ normalize_path() { printf '%s' "$joined" } +# Plain-text summary in the directory from which the batch was launched. +# A write failure is reported and does not change the batch exit code. +write_summary_log() { + local finished="" summary_index=0 note="" path="" status="" + local -a lines=() + + finished="$(date '+%Y-%m-%d %H:%M:%S %z')" || { + warn "Could not write log file: ${log_path}" + return 0 + } + + lines+=("started: ${run_started}") + lines+=("finished: ${finished}") + lines+=("remote: ${REMOTE}") + lines+=("services_file: ${SERVICES_FILE}") + lines+=("") + + while [[ "$summary_index" -lt "$total" ]]; do + note="${result_notes[$summary_index]}" + path="${result_paths[$summary_index]}" + if [[ "$note" == "0" ]]; then + status="ok" + else + status="$note" + fi + lines+=("${path} ${status}") + summary_index=$((summary_index + 1)) + done + + lines+=("") + lines+=("succeeded: ${ok_count}") + lines+=("failed: ${fail_count}") + + if ! printf '%s\n' "${lines[@]}" >"$log_path"; then + warn "Could not write log file: ${log_path}" + return 0 + fi + + log "Log file: ${log_path}" +} + total="${#services[@]}" index=0 ok_count=0 fail_count=0 result_paths=() result_notes=() +launch_dir="$(pwd)" +run_started="$(date '+%Y-%m-%d %H:%M:%S %z')" +log_stamp="$(date '+%Y%m%d-%H%M%S')" +log_path="${launch_dir}/deploy-${log_stamp}.log" +if [[ -e "$log_path" ]]; then + log_path="${launch_dir}/deploy-${log_stamp}-$$.log" +fi log "Services file: ${SERVICES_FILE}" log "Remote: ${REMOTE}" @@ -251,10 +304,13 @@ while [[ "$summary_index" -lt "$total" ]]; do summary_index=$((summary_index + 1)) done +batch_exit=0 if [[ "$fail_count" -gt 0 ]]; then err "${ok_count} succeeded, ${fail_count} failed." - exit 1 + batch_exit=1 +else + ok "${ok_count} succeeded, 0 failed." fi -ok "${ok_count} succeeded, 0 failed." -exit 0 +write_summary_log +exit "$batch_exit"