Files
finance/reset-environment.sh

113 lines
2.7 KiB
Bash
Executable File

#!/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."