Files
xamxam/justfile
Pontoporeia 37111eaac4 fix: add missing remote DB migrations and deploy-migrate recipe
Four ALTER TABLE / CREATE TABLE statements were applied locally but never
deployed to the remote production database, causing:

- acces.php → 500: share_links.is_archived missing (ShareLink::listActive/listArchived)
- parametres.php → 500: smtp_settings.notify_email missing (SmtpRelay::getSettings)
- /tfe?id=N → redirect-to-home: thesis_files.sort_order missing (getThesisFiles ORDER BY)
- admin_audit_log table missing (AdminLogger::insertDb, best-effort but noisy)

Adds four pending migrations (008–011) covering all missing schema changes.
Adds 'deploy-migrate' just recipe to run migrations on the remote after deploy.
2026-05-05 11:04:52 +02:00

152 lines
4.6 KiB
Makefile

default:
@just --list
# XAMXAM Justfile
# ============================================================================
# Development
# ============================================================================
[group('dev')]
setup:
@bash scripts/setup-dev.sh
[group('dev')]
serve: migrate
@xdg-open http://127.0.0.1:8000 &
@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)'
[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-migrate:
# Run pending DB migrations on the remote production database
ssh xamxam "cd /var/www/xamxam && php migrations/run.php /var/www/xamxam/storage/xamxam.db"
[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')]
lint-biome:
@biome lint app/public/assets/js/file-preview.js app/public/assets/js/file-upload-queue.js
[group('test')]
phpstan:
@vendor/bin/phpstan analyse --memory-limit=512M
[group('test')]
cs-check:
@vendor/bin/php-cs-fixer check --no-interaction
[group('test')]
cs-fix:
@vendor/bin/php-cs-fixer fix --no-interaction
[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