diff --git a/scripts/bootstrap.sh b/scripts/bootstrap.sh index da59178..07890e4 100644 --- a/scripts/bootstrap.sh +++ b/scripts/bootstrap.sh @@ -1,6 +1,20 @@ #!/usr/bin/env bash # Bootstrap script for POSIX (Linux/macOS) to create a Python venv and install the project. # Usage: scripts/bootstrap.sh [--editable] [--venv ] [--python ] [--desktop] [--no-install] + +# Ensure script is running under Bash. Some users invoke this script with `sh` (dash) +# which does not support the Bash features used below (e.g., [[ ]], arrays, read -p). +# If not running under Bash, re-exec using a discovered bash binary. +if [ -z "${BASH_VERSION:-}" ]; then + if command -v bash >/dev/null 2>&1; then + echo "This script requires Bash; re-execing as 'bash $0'..." + exec bash "$0" "$@" + else + echo "ERROR: This script requires Bash. Please run with 'bash $0' or install Bash." >&2 + exit 2 + fi +fi + set -euo pipefail VENV_PATH=".venv" @@ -60,6 +74,17 @@ fi echo "Using Python: $PY" +# Operate from the repository root (parent of the scripts dir) so relative +# operations (like creating the venv and pip install) act on the project root +# regardless of where this script was invoked from. +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +REPO="$(cd "$SCRIPT_DIR/.." && pwd)" +if ! cd "$REPO"; then + echo "ERROR: Failed to change to repo root: $REPO" >&2 + exit 2 +fi +echo "Operating from repo root: $REPO" + if [[ -d "$VENV_PATH" ]]; then # Detect whether the existing venv has a working python executable VENV_PY="" @@ -119,10 +144,10 @@ if [[ "$NOINSTALL" != "true" ]]; then if [[ "$EDITABLE" == "true" ]]; then echo "Installing project in editable mode..." - "$VENV_PY" -m pip install -e . + "$VENV_PY" -m pip install -e "$REPO" else echo "Installing project..." - "$VENV_PY" -m pip install . + "$VENV_PY" -m pip install "$REPO" fi # Verify the installed CLI module can be imported. This helps catch packaging