# Default recipe - show available commands default: @just --list # ============================================================================ # Deploy Group # ============================================================================ # Note: Regular deploy recipes exclude test.db and all *.db files by default # Use test-deploy explicitly to deploy the test database [group('deploy')] deploy-public: rsync -vur --progress --exclude 'test.db' --exclude '*.db' --exclude 'tests/' --exclude 'cache/' --exclude '*.md' --exclude 'run-tests.php' ./apps/public/ posterg:/var/www/html/ rsync -vur --progress --exclude 'test.db' ./shared/ posterg:/var/www/html/shared/ @echo "Fixing shared library paths for production..." ssh posterg "cd /var/www/html && find . -maxdepth 1 -name '*.php' -type f -exec sed -i \"s|__DIR__ \. '/\.\./\.\./shared/|__DIR__ . '/shared/|g\" {} \;" @echo "Fixing permissions..." ssh posterg "chgrp -R posterg /var/www/html/inc && chmod 755 /var/www/html/inc && chmod 644 /var/www/html/inc/*" @echo "✓ Deployment complete" [group('deploy')] deploy-admin: rsync -vur --progress --exclude 'test.db' --exclude '*.db' --exclude 'cache/' --exclude '*.md' ./apps/admin/ posterg:/var/www/html/admin/ rsync -vur --progress --exclude 'test.db' ./shared/ posterg:/var/www/html/shared/ @echo "Fixing shared library paths for production (admin)..." ssh posterg "cd /var/www/html/formulaire && find . -maxdepth 1 -name '*.php' -type f -exec sed -i \"s|__DIR__ \. '/\.\./\.\./shared/|__DIR__ . '/../shared/|g\" {} \;" @echo "✓ Admin paths fixed" [group('deploy')] deploy: deploy-public deploy-admin @echo "" @echo "✅ Deployment complete (test.db excluded)" @echo "To deploy test database, run: just test-deploy" [group('deploy')] deploy-database: @echo "Deploying database directory (excludes test.db by default)..." rsync -vur --progress --exclude 'test.db' --exclude '*.db-journal' ./database/ posterg:/var/www/html/database/ @echo "✅ Database directory deployed (schema, fixtures, docs only)" [group('deploy')] test-deploy: @echo "⚠️ Deploying test database (will overwrite remote test.db)" @echo "Creating database directory if needed..." ssh posterg "mkdir -p /var/www/html/database" rsync -vur --progress ./database/test.db posterg:/var/www/html/database/test.db @echo "Setting correct permissions..." ssh posterg "chgrp posterg /var/www/html/database /var/www/html/database/test.db && chmod 775 /var/www/html/database && chmod 660 /var/www/html/database/test.db" @echo "✅ Test database deployed and configured" [group('deploy')] deploy-nginx: @echo "🚀 Deploying production nginx configuration..." rsync -vur --progress ./nginx/posterg.conf posterg:/tmp/posterg.conf rsync -vur --progress ./nginx/deploy-production.sh posterg:/tmp/deploy-production.sh @echo "✅ Files uploaded to server" @echo "" @echo "Next steps on the server:" @echo " ssh posterg" @echo " sudo bash /tmp/deploy-production.sh" @echo "" @echo "This will:" @echo " • Fix file permissions (posterg group)" @echo " • Install nginx configuration" @echo " • Set up admin password (if needed)" @echo " • Test and reload nginx" [group('deploy')] deploy-admin-tools: @echo "📤 Uploading admin user management tools..." rsync -vur --progress ./nginx/manage-admin-users.sh posterg:/tmp/manage-admin-users.sh @echo "✅ Script uploaded" @echo "" @echo "To manage admin users on the server:" @echo " ssh posterg" @echo " sudo bash /tmp/manage-admin-users.sh" # ============================================================================ # Public Site Development # ============================================================================ [group('public-dev')] serve-public: @echo "Starting public site on http://localhost:8002" @echo "Press Ctrl+C to stop" @cd apps/public && php -S 127.0.0.1:8002 [group('public-dev')] test-public: @echo "Testing public site..." @cd apps/public && php test_db.php [group('public-dev')] test-public-all: @echo "Running all public site tests..." @cd apps/public && php run-tests.php [group('public-dev')] stats-public: @echo "=== Public Database Statistics ===" @sqlite3 database/test.db "SELECT COUNT(*) || ' total theses' FROM theses;" @sqlite3 database/test.db "SELECT COUNT(*) || ' published theses' FROM theses WHERE is_published = 1;" @sqlite3 database/test.db "SELECT COUNT(*) || ' authors' FROM authors;" @sqlite3 database/test.db "SELECT COUNT(*) || ' keywords' FROM keywords;" [group('public-dev')] recent-public: @echo "=== Recent Published Theses ===" @sqlite3 -column -header database/test.db "SELECT id, title, year, authors FROM v_theses_public ORDER BY year DESC, title LIMIT 10;" [group('public-dev')] check-public: @echo "Checking public site PHP syntax..." @cd apps/public && find . -name "*.php" -not -path "./vendor/*" -not -path "./tests/*" -exec php -l {} \; | grep -v "No syntax errors" @echo "✓ All files have valid syntax" [group('public-dev')] logs-public: @if [ -f apps/public/error.log ]; then tail -n 50 apps/public/error.log; else echo "No error log found"; fi # ============================================================================ # Admin Panel Development # ============================================================================ [group('admin-dev')] init-test-db: @echo "Creating test database from schema..." @sqlite3 database/test.db < database/schema.sql @echo "✓ Test database created" @sqlite3 database/test.db "SELECT COUNT(*) || ' tables created' FROM sqlite_master WHERE type='table';" @sqlite3 database/test.db "SELECT COUNT(*) || ' orientations loaded' FROM orientations;" @sqlite3 database/test.db "SELECT COUNT(*) || ' AP programs loaded' FROM ap_programs;" [group('admin-dev')] serve-admin: init-test-db @echo "Starting admin panel on http://localhost:3000" @echo "Press Ctrl+C to stop" @cd apps/admin && php -S 127.0.0.1:3000 [group('admin-dev')] serve-admin-only: @echo "Starting admin panel on http://localhost:3000" @echo "Press Ctrl+C to stop" @cd apps/admin && php -S 127.0.0.1:3000 [group('admin-dev')] cleanup-admin: @echo "Cleaning up admin test files..." @rm -f database/test.db @rm -f apps/admin/error.log @rm -rf apps/admin/data/theses/* @rm -rf apps/admin/data/covers/* @echo "✓ Cleanup complete" [group('admin-dev')] reset-admin: cleanup-admin init-test-db @echo "✓ Admin test environment reset" [group('admin-dev')] stats-admin: @echo "=== Admin Database Statistics ===" @sqlite3 database/test.db "SELECT COUNT(*) || ' theses' FROM theses;" @sqlite3 database/test.db "SELECT COUNT(*) || ' authors' FROM authors;" @sqlite3 database/test.db "SELECT COUNT(*) || ' supervisors' FROM supervisors;" @sqlite3 database/test.db "SELECT COUNT(*) || ' keywords' FROM keywords;" @sqlite3 database/test.db "SELECT COUNT(*) || ' files uploaded' FROM thesis_files;" [group('admin-dev')] recent-admin: @echo "=== Recent Submissions ===" @sqlite3 -column -header database/test.db "SELECT identifier, title, year, submitted_at FROM theses ORDER BY submitted_at DESC LIMIT 5;" [group('admin-dev')] setup-dirs: @mkdir -p apps/admin/data/theses @mkdir -p apps/admin/data/covers @mkdir -p apps/admin/data/yaml @touch apps/admin/data/theses/.gitkeep @touch apps/admin/data/covers/.gitkeep @echo "✓ Data directories created" [group('admin-dev')] dev-admin: setup-dirs init-test-db serve-admin # ============================================================================ # Database Operations # ============================================================================ [group('database')] query-db: @sqlite3 database/test.db [group('database')] show-thesis id: @sqlite3 -column -header database/test.db "SELECT * FROM v_theses_full WHERE id = {{id}};" [group('database')] dump-db: @sqlite3 database/test.db .dump > database/backup_$(date +%Y%m%d_%H%M%S).sql @echo "✓ Database dumped to database/backup_$(date +%Y%m%d_%H%M%S).sql" [group('database')] create-fixtures: @echo "Creating test database with fixtures..." @php database/fixtures/CreateTestDatabase.php