#!/usr/bin/env bash # Safety settings set -o errexit # Exit on error set -o errtrace # Exit on error inside functions set -o nounset # Error on undefined variables set -o pipefail # Error if any command in a pipe fails # Constants readonly SCRIPT_NAME="$(basename "$0")" readonly WORK_DIR="$(dirname "$(realpath "$0")")" readonly REQUIRED_NODE_VERSION="20.19.0" # Minimum required version # Functions log() { echo "$(date '+%Y-%m-%d %H:%M:%S') - $*" } error() { echo "ERROR: $*" >&2 } validate_node_version() { local current_version current_version=$(node -v | cut -d 'v' -f 2) # Use sort -V for version comparison if [[ "$(printf '%s\n' "$REQUIRED_NODE_VERSION" "$current_version" | sort -V | head -n1)" != "$REQUIRED_NODE_VERSION" ]]; then # If the first entry is not the required version, it means current < required error "Node.js version too old. Minimum required: $REQUIRED_NODE_VERSION, Found: $current_version" exit 1 fi log "Node.js version check passed. Required: $REQUIRED_NODE_VERSION+, Found: $current_version" } validate_dependencies() { local missing_deps=() # Check core dependencies for cmd in npx docker npm node git; do if ! command -v "$cmd" >/dev/null; then missing_deps+=("$cmd") fi done # Check for biome in node_modules if [[ ! -f "node_modules/@biomejs/biome/bin/biome" ]]; then missing_deps+=("biome.js") fi # Check for husky hooks if [[ ! -f ".husky/pre-commit" ]]; then missing_deps+=("husky pre-commit hook") fi if [[ ${#missing_deps[@]} -ne 0 ]]; then error "Missing dependencies: ${missing_deps[*]}" exit 1 fi } # Main script logic log "Resetting finance development environment..." cd "$WORK_DIR" || { error "Failed to change directory to $WORK_DIR" exit 1 } validate_dependencies validate_node_version if ! npx prisma migrate reset --force; then error "Prisma migration reset failed" exit 1 fi docker compose down || { error "Failed to take down Docker containers" exit 1 } # Clean up generated files and dependencies log "Cleaning up generated files and dependencies..." rm -f package-lock.json [[ -d dist ]] && rm -rf dist || true [[ -d node_modules ]] && rm -rf node_modules || true [[ -d .prisma ]] && rm -rf .prisma || true # Clean Prisma generated files [[ -f prisma/migrations/migration_lock.toml ]] && rm -f prisma/migrations/migration_lock.toml || true npm install || { error "Failed to install npm dependencies" exit 1 } # Verify Husky hooks are installed npm run prepare || { error "Failed to install Husky hooks" exit 1 } npm run build || { error "Failed to build the project" exit 1 } docker compose -f docker-compose.yml up -d || { error "Failed to bring up Docker containers" exit 1 } log "Environment reset complete."