# XAMXAM Justfile # ============================================================================ # Development # ============================================================================ [group('dev')] setup: @bash scripts/setup-dev.sh [group('dev')] serve: migrate @php \ -d upload_max_filesize=512M \ -d post_max_size=520M \ -d memory_limit=256M \ -d max_execution_time=300 \ -d max_input_time=300 \ -S 127.0.0.1:8000 -t app/public/ app/router.php 2>&1 \ | stdbuf -oL grep -Ev '(Accepted|Closing|live-reload\.php|assets/|favicon)' || true [group('dev')] stop: @pkill -f "php -S 127.0.0.1:8000" 2>/dev/null && echo "stopped" || echo "no server running" [group('dev')] logs: @tail -n 20 error.log 2>/dev/null || echo "no error log" # ============================================================================ # Deploy # ============================================================================ [group('deploy')] deploy: # Main deploy (code + assets) rsync -vur --progress --delete \ --chown="www-data:xamxam" \ --exclude 'vendor' \ --exclude 'tests' \ --exclude '*.md' \ --exclude '.git*' \ --exclude '.jj' \ --exclude '.claude' \ --exclude '.pi' \ --exclude '.DS_Store' \ --exclude 'storage/xamxam.db' \ --exclude 'storage/theses' \ --exclude 'storage/covers' \ --exclude 'storage/backup_*' \ --exclude 'storage/cache/*' \ --exclude 'storage/fixtures' \ --exclude 'storage/docs' \ --exclude 'var/cache/*' \ --exclude 'var/logs/*' \ app/ xamxam:/var/www/xamxam/ ssh xamxam "mkdir -p /var/www/xamxam/var/{cache,logs,tmp}" [group('deploy')] deploy-db: @ssh xamxam '[ ! -f /var/www/xamxam/storage/xamxam.db ]' || (echo "ERROR: remote database already exists. Remove it manually if you intend to overwrite." && exit 1) rsync -v --progress app/storage/xamxam.db xamxam:/var/www/xamxam/storage/xamxam.db ssh xamxam "chown www-data:xamxam /var/www/xamxam/storage/xamxam.db && chmod 660 /var/www/xamxam/storage/xamxam.db" [group('deploy')] deploy-script script_name: # Generic script deployer (e.g., just deploy-script setup-server) rsync -v scripts/{{script_name}}.sh xamxam:/tmp/{{script_name}}.sh @echo "" @echo "Script uploaded. SSH into the server and run:" @echo "" @echo " sudo DEPLOY_USER=\$USER bash /tmp/{{script_name}}.sh" @echo "" # ============================================================================ # Testing # ============================================================================ [group('test')] test: # Run all tests. To run a subset, use: # php app/tests/Unit/DatabaseTest.php # php app/tests/Integration/SearchTest.php @php app/tests/run-tests.php [group('test')] syntax: @find app/ -name '*.php' -exec php -l {} \; 2>/dev/null | grep -v 'No syntax errors' || true @echo '✅ Syntax OK' # ============================================================================ # Database # ============================================================================ [group('database')] migrate: @echo "Running migrations…" @bash scripts/migrate.sh [group('database')] init-db: @sqlite3 app/storage/xamxam.db < app/storage/schema.sql @sqlite3 app/storage/xamxam.db "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';" [group('database')] reset-db: @rm -f app/storage/xamxam.db @just init-db [group('database')] query: @sqlite3 app/storage/xamxam.db [group('database')] backup: @sqlite3 app/storage/xamxam.db .dump > app/storage/backup_$(date +%Y%m%d_%H%M%S).sql # ============================================================================ # Utils # ============================================================================ [group('utils')] clean: @rm -f app/error.log @rm -rf app/storage/cache/rate_limit/* @rm -f /tmp/xamxam-*.log /tmp/xamxam-*.pid