mirror of
https://github.com/acedanger/finance.git
synced 2025-12-05 22:50:12 -08:00
108 lines
2.5 KiB
Bash
Executable File
108 lines
2.5 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="/home/acedanger/dev/finance"
|
|
readonly REQUIRED_NODE_VERSION="20.19.0" # Match the version from devcontainer
|
|
|
|
# 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)
|
|
if [[ "$current_version" != "$REQUIRED_NODE_VERSION" ]]; then
|
|
error "Node.js version mismatch. Required: $REQUIRED_NODE_VERSION, Found: $current_version"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
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." |