Files
AR-Autopilot/scripts/dev.sh
T
alro65 0ec4ba3cda add(scripts): dev convenience runner (PowerShell + Bash)
Wrap the most common day-to-day commands so we stop typing
.venv/Scripts/python.exe -m ... by hand. Mirrors the same tasks on both
shells; binaries always resolved from the project's .venv so the host
machine's globally-installed Python doesn't leak in.

Tasks (both shells):
  install     create .venv, install arautopilot[dev] in editable mode
  test        run pytest (extra args forwarded: e.g. test -k roundtrip)
  test-cov    pytest with branch coverage + HTML report
  lint        ruff check (read-only)
  fix         ruff check --fix + ruff format
  format      ruff format
  typecheck   mypy --strict over core/library/shared
  check       full quality gate: lint + typecheck + test
  demo        run examples/sprint0_demo.py
  clean       remove build/cache artefacts + examples/output

Usage:
  .\scripts\dev.ps1 check          (Windows PowerShell)
  bash scripts/dev.sh check        (Git Bash / WSL / Linux)

Verification: `bash scripts/dev.sh check` runs lint + typecheck + 80 tests
all green in ~0.5s on this machine.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-18 07:29:27 -04:00

132 lines
4.1 KiB
Bash

#!/usr/bin/env bash
# =============================================================================
# AR-Autopilot — developer convenience script (Git Bash / WSL / Linux)
# =============================================================================
#
# Mirror of scripts/dev.ps1 for Bash environments. From the repo root:
#
# bash scripts/dev.sh <task> [args...]
#
# Tasks: install | test | test-cov | lint | fix | format | typecheck
# check | demo | clean | help
# =============================================================================
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
cd "$REPO_ROOT"
VENV_DIR="$REPO_ROOT/.venv"
if [[ -x "$VENV_DIR/Scripts/python.exe" ]]; then
# Windows-style venv (Git Bash on Windows)
PYTHON="$VENV_DIR/Scripts/python.exe"
PYTEST="$VENV_DIR/Scripts/pytest.exe"
RUFF="$VENV_DIR/Scripts/ruff.exe"
MYPY="$VENV_DIR/Scripts/mypy.exe"
else
PYTHON="$VENV_DIR/bin/python"
PYTEST="$VENV_DIR/bin/pytest"
RUFF="$VENV_DIR/bin/ruff"
MYPY="$VENV_DIR/bin/mypy"
fi
assert_venv() {
if [[ ! -x "$PYTHON" ]]; then
echo "Virtual environment not found at $VENV_DIR" >&2
echo "Run: bash scripts/dev.sh install" >&2
exit 1
fi
}
task_install() {
if [[ ! -x "$PYTHON" ]]; then
echo "[install] Creating virtual environment at $VENV_DIR ..."
python -m venv "$VENV_DIR" || py -m venv "$VENV_DIR"
fi
echo "[install] Upgrading pip ..."
"$PYTHON" -m pip install --upgrade pip
echo "[install] Installing arautopilot[dev] in editable mode ..."
"$PYTHON" -m pip install -e ".[dev]"
echo "[install] OK"
}
task_test() { assert_venv; "$PYTEST" "$@"; }
task_test_cov() { assert_venv; "$PYTEST" --cov=arautopilot --cov-report=term-missing --cov-report=html "$@"; }
task_lint() { assert_venv; "$RUFF" check arautopilot/; }
task_fix() { assert_venv; "$RUFF" check arautopilot/ --fix; "$RUFF" format arautopilot/; }
task_format() { assert_venv; "$RUFF" format arautopilot/; }
task_typecheck() { assert_venv; "$MYPY" arautopilot/core arautopilot/library arautopilot/shared; }
task_check() {
assert_venv
echo "[check] (1/3) lint ..."
"$RUFF" check arautopilot/
echo "[check] (2/3) typecheck ..."
"$MYPY" arautopilot/core arautopilot/library arautopilot/shared
echo "[check] (3/3) tests ..."
"$PYTEST"
echo "[check] OK"
}
task_demo() { assert_venv; "$PYTHON" examples/sprint0_demo.py; }
task_clean() {
find . -type d \( \
-name '__pycache__' -o \
-name '.pytest_cache' -o \
-name '.mypy_cache' -o \
-name '.ruff_cache' -o \
-name 'build' -o \
-name 'dist' -o \
-name '*.egg-info' -o \
-name 'htmlcov' \
\) -not -path './.venv/*' -prune -exec rm -rf {} + 2>/dev/null || true
find . -type f -name '*.pyc' -not -path './.venv/*' -delete 2>/dev/null || true
rm -f .coverage
rm -rf examples/output
echo "[clean] OK"
}
task_help() {
cat <<'HELP'
AR-Autopilot — dev tasks
Usage: bash scripts/dev.sh <task> [args...]
Tasks:
install Install package + dev deps into .venv
test Run pytest
test-cov Run pytest with coverage report
lint Run ruff check (read-only)
fix Run ruff check --fix + ruff format
format Run ruff format
typecheck Run mypy --strict
check lint + typecheck + test (full quality gate)
demo Run examples/sprint0_demo.py
clean Remove build / cache artefacts
help Show this message
HELP
}
task="${1:-help}"
shift || true
case "$task" in
install) task_install "$@" ;;
test) task_test "$@" ;;
test-cov) task_test_cov "$@" ;;
lint) task_lint "$@" ;;
fix) task_fix "$@" ;;
format) task_format "$@" ;;
typecheck) task_typecheck "$@" ;;
check) task_check "$@" ;;
demo) task_demo "$@" ;;
clean) task_clean "$@" ;;
help|-h|--help) task_help ;;
*)
echo "Unknown task: $task" >&2
task_help
exit 2
;;
esac