diff --git a/RebuildBdd/bootstrap-target-host.sh b/RebuildBdd/bootstrap-target-host.sh index 94938bb..64379f3 100755 --- a/RebuildBdd/bootstrap-target-host.sh +++ b/RebuildBdd/bootstrap-target-host.sh @@ -5,6 +5,12 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" CONFIG_DIR="${SCRIPT_DIR}/Config" GLOBAL_ENV_FILE_DEFAULT="${CONFIG_DIR}/global.env" TARGETS_DIR_DEFAULT="${CONFIG_DIR}/Targets" +GIT_TOPLEVEL="$(git -C "$SCRIPT_DIR" rev-parse --show-toplevel 2>/dev/null || true)" +LOCAL_REPO_SUBDIR_DEFAULT="" + +if [[ -n "$GIT_TOPLEVEL" && "$SCRIPT_DIR" == "$GIT_TOPLEVEL"/* ]]; then + LOCAL_REPO_SUBDIR_DEFAULT="${SCRIPT_DIR#"$GIT_TOPLEVEL"/}" +fi GLOBAL_ENV_FILE="${GLOBAL_ENV_FILE:-$GLOBAL_ENV_FILE_DEFAULT}" TARGETS_DIR="${TARGETS_DIR:-$TARGETS_DIR_DEFAULT}" @@ -157,6 +163,7 @@ BOOTSTRAP_SSH_KEY="${TARGET_BOOTSTRAP_SSH_KEY:-}" TARGET_REPO_URL="${TARGET_REPO_URL:-${GLOBAL_REPO_URL:-}}" TARGET_REPO_BRANCH="${TARGET_REPO_BRANCH:-${GLOBAL_REPO_BRANCH:-}}" TARGET_REPO_DIR="${TARGET_REPO_DIR:-}" +TARGET_REPO_SUBDIR="${TARGET_REPO_SUBDIR:-$LOCAL_REPO_SUBDIR_DEFAULT}" TARGET_ENV_FILE_PATH="${TARGET_ENV_FILE:-}" TARGET_ENV_NAME_VALUE="${TARGET_ENV_NAME:-}" @@ -201,6 +208,19 @@ TARGET_BOOTSTRAP_ALLOW_PASSWORDLESS_SUDO_VALUE="${TARGET_BOOTSTRAP_ALLOW_PASSWOR [[ -n "$TARGET_REPO_DIR" ]] || fail "TARGET_REPO_DIR manquante" [[ -n "$TARGET_ENV_FILE_PATH" ]] || fail "TARGET_ENV_FILE manquante" +TARGET_REPO_SUBDIR="${TARGET_REPO_SUBDIR#/}" +TARGET_REPO_SUBDIR="${TARGET_REPO_SUBDIR%/}" + +TARGET_CLONE_DIR="$TARGET_REPO_DIR" +TARGET_SCRIPT_DIR="$TARGET_REPO_DIR" +if [[ -n "$TARGET_REPO_SUBDIR" ]]; then + if [[ "$TARGET_REPO_DIR" == */"$TARGET_REPO_SUBDIR" ]]; then + TARGET_CLONE_DIR="$(dirname "$TARGET_REPO_DIR")" + else + TARGET_SCRIPT_DIR="${TARGET_REPO_DIR}/${TARGET_REPO_SUBDIR}" + fi +fi + [[ -n "$TARGET_ENV_NAME_VALUE" ]] || fail "TARGET_ENV_NAME manquante" [[ -n "$TARGET_PGHOST_VALUE" ]] || fail "TARGET_PGHOST/GLOBAL_PGHOST manquant" [[ -n "$TARGET_PGPORT_VALUE" ]] || fail "TARGET_PGPORT/GLOBAL_PGPORT manquant" @@ -279,7 +299,8 @@ fi run_root apt-get update run_root apt-get install -y bash git python3 sudo curl openssh-client ca-certificates postgresql-client -mkdir -p $(shell_quote "$(dirname "$TARGET_REPO_DIR")") +mkdir -p $(shell_quote "$(dirname "$TARGET_CLONE_DIR")") +mkdir -p $(shell_quote "$(dirname "$TARGET_SCRIPT_DIR")") mkdir -p $(shell_quote "$(dirname "$TARGET_ENV_FILE_PATH")") mkdir -p $(shell_quote "$TARGET_BACKUP_LOG_DIR_VALUE") mkdir -p $(shell_quote "$TARGET_LOCAL_RESTORE_BASE_DIR_VALUE") @@ -461,28 +482,28 @@ fi REMOTE_REPO_CMD=" set -euo pipefail -if [[ ! -d $(shell_quote "${TARGET_REPO_DIR}/.git") ]]; then - rm -rf $(shell_quote "$TARGET_REPO_DIR") - git clone --branch $(shell_quote "$TARGET_REPO_BRANCH") --single-branch $(shell_quote "$TARGET_REPO_URL") $(shell_quote "$TARGET_REPO_DIR") +if [[ ! -d $(shell_quote "${TARGET_CLONE_DIR}/.git") ]]; then + rm -rf $(shell_quote "$TARGET_CLONE_DIR") + git clone --branch $(shell_quote "$TARGET_REPO_BRANCH") --single-branch $(shell_quote "$TARGET_REPO_URL") $(shell_quote "$TARGET_CLONE_DIR") else - git -C $(shell_quote "$TARGET_REPO_DIR") fetch --prune origin - git -C $(shell_quote "$TARGET_REPO_DIR") checkout -f $(shell_quote "$TARGET_REPO_BRANCH") - git -C $(shell_quote "$TARGET_REPO_DIR") reset --hard origin/$(shell_quote "$TARGET_REPO_BRANCH") + git -C $(shell_quote "$TARGET_CLONE_DIR") fetch --prune origin + git -C $(shell_quote "$TARGET_CLONE_DIR") checkout -f $(shell_quote "$TARGET_REPO_BRANCH") + git -C $(shell_quote "$TARGET_CLONE_DIR") reset --hard origin/$(shell_quote "$TARGET_REPO_BRANCH") fi -chmod 700 $(shell_quote "$TARGET_REPO_DIR/run-rebuild-bdd.sh") 2>/dev/null || true -chmod 700 $(shell_quote "$TARGET_REPO_DIR/rebuild-bdd-core.sh") 2>/dev/null || true -chmod 700 $(shell_quote "$TARGET_REPO_DIR/Checkup/check-postgresql.sh") 2>/dev/null || true -chmod 700 $(shell_quote "$TARGET_REPO_DIR/Checkup/check-target-readiness.sh") 2>/dev/null || true +chmod 700 $(shell_quote "$TARGET_SCRIPT_DIR/run-rebuild-bdd.sh") 2>/dev/null || true +chmod 700 $(shell_quote "$TARGET_SCRIPT_DIR/rebuild-bdd-core.sh") 2>/dev/null || true +chmod 700 $(shell_quote "$TARGET_SCRIPT_DIR/Checkup/check-postgresql.sh") 2>/dev/null || true +chmod 700 $(shell_quote "$TARGET_SCRIPT_DIR/Checkup/check-target-readiness.sh") 2>/dev/null || true for required_file in \ - $(shell_quote "$TARGET_REPO_DIR/run-rebuild-bdd.sh") \ - $(shell_quote "$TARGET_REPO_DIR/rebuild-bdd-core.sh") \ - $(shell_quote "$TARGET_REPO_DIR/Checkup/check-postgresql.sh") \ - $(shell_quote "$TARGET_REPO_DIR/Checkup/check-target-readiness.sh"); do + $(shell_quote "$TARGET_SCRIPT_DIR/run-rebuild-bdd.sh") \ + $(shell_quote "$TARGET_SCRIPT_DIR/rebuild-bdd-core.sh") \ + $(shell_quote "$TARGET_SCRIPT_DIR/Checkup/check-postgresql.sh") \ + $(shell_quote "$TARGET_SCRIPT_DIR/Checkup/check-target-readiness.sh"); do if [[ ! -f \"\$required_file\" ]]; then echo \"fichier requis absent après synchronisation du dépôt : \$required_file\" >&2 - echo \"vérifier TARGET_REPO_DIR=$(shell_quote "$TARGET_REPO_DIR"), TARGET_REPO_URL=$(shell_quote "$TARGET_REPO_URL"), TARGET_REPO_BRANCH=$(shell_quote "$TARGET_REPO_BRANCH")\" >&2 + echo \"vérifier TARGET_REPO_DIR=$(shell_quote "$TARGET_REPO_DIR"), TARGET_REPO_SUBDIR=$(shell_quote "$TARGET_REPO_SUBDIR"), TARGET_REPO_URL=$(shell_quote "$TARGET_REPO_URL"), TARGET_REPO_BRANCH=$(shell_quote "$TARGET_REPO_BRANCH")\" >&2 exit 1 fi done @@ -511,12 +532,12 @@ ssh "${SSH_OPTS[@]}" "$REMOTE" "$REMOTE_VALIDATE_SUDO_ROOT_CMD" \ REMOTE_RUN_CHECK_PG_CMD=" set -euo pipefail -CHECK_SCRIPT=$(shell_quote "${TARGET_REPO_DIR}/Checkup/check-postgresql.sh") +CHECK_SCRIPT=$(shell_quote "${TARGET_SCRIPT_DIR}/Checkup/check-postgresql.sh") ENV_FILE=$(shell_quote "$TARGET_ENV_FILE_PATH") [[ -f \"\$CHECK_SCRIPT\" ]] || { echo \"script PostgreSQL introuvable : \$CHECK_SCRIPT\" >&2 - echo \"vérifier TARGET_REPO_DIR=$(shell_quote "$TARGET_REPO_DIR")\" >&2 + echo \"vérifier TARGET_REPO_DIR=$(shell_quote "$TARGET_REPO_DIR") et TARGET_REPO_SUBDIR=$(shell_quote "$TARGET_REPO_SUBDIR")\" >&2 exit 1 } [[ -x \"\$CHECK_SCRIPT\" ]] || chmod 700 \"\$CHECK_SCRIPT\"