Files
xamxam/justfile

136 lines
4.0 KiB
Makefile

# Post-ERG Justfile
default:
@just --list
# ============================================================================
# Development
# ============================================================================
[group('dev')]
setup:
@bash scripts/setup-dev.sh
[group('dev')]
serve:
@php -S 127.0.0.1:8000 -t public/
[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:
rsync -vur --progress \
--chown="www-data:posterg" \
--exclude 'vendor' \
--exclude 'tests' \
--exclude 'test.db' \
--exclude '*.md' \
--exclude '.git*' \
--exclude '.jj' \
--exclude '.DS_Store' \
--exclude 'storage/backup_*' \
--exclude 'storage/fixtures' \
--exclude 'storage/docs' \
--exclude 'nginx' \
--exclude 'docs' \
--exclude 'justfile*' \
--exclude 'scripts' \
--exclude 'var/cache/*' \
--exclude 'var/logs/*' \
./ posterg:/var/www/posterg/
ssh posterg "cd /var/www/posterg && \
mkdir -p var/{cache,logs,tmp} && \
chown -R www-data:posterg . && \
chmod -R 755 . && \
chmod -R 775 var/ storage/ && \
chmod 660 storage/*.db 2>/dev/null || true"
[group('deploy')]
deploy-db:
@ssh posterg '[ ! -f /var/www/posterg/storage/test.db ]' || (echo "ERROR: remote database already exists. Remove it manually if you intend to overwrite." && exit 1)
rsync -v --progress ./storage/test.db posterg:/var/www/posterg/storage/test.db
ssh posterg "chown www-data:posterg /var/www/posterg/storage/test.db && chmod 660 /var/www/posterg/storage/test.db"
# ============================================================================
# Testing
# ============================================================================
[group('test')]
test:
@php tests/run-tests.php
[group('test')]
test-unit:
@php tests/Unit/DatabaseTest.php
@php tests/Unit/RateLimitTest.php
[group('test')]
test-integration:
@php tests/Integration/SearchTest.php
[group('test')]
test-security:
@php tests/Security/SecurityTest.php
[group('test')]
syntax:
@find . -maxdepth 1 -name "*.php" -not -path "./vendor/*" -exec php -l {} \; | grep -v "No syntax errors"
@find admin/ -name "*.php" -exec php -l {} \; 2>/dev/null | grep -v "No syntax errors" || true
@find src/ -name "*.php" -exec php -l {} \; | grep -v "No syntax errors"
@echo "✅ Syntax OK"
# ============================================================================
# Database
# ============================================================================
[group('database')]
init-db:
@sqlite3 storage/test.db < storage/schema.sql
@sqlite3 storage/test.db "SELECT COUNT(*) || ' tables' FROM sqlite_master WHERE type='table';"
[group('database')]
reset-db:
@rm -f storage/test.db
@just init-db
[group('database')]
query:
@sqlite3 storage/test.db
[group('database')]
show id:
@sqlite3 -column -header storage/test.db "SELECT * FROM v_theses_full WHERE id = {{id}};"
[group('database')]
backup:
@sqlite3 storage/test.db .dump > storage/backup_$(date +%Y%m%d_%H%M%S).sql
[group('database')]
fixtures:
@php storage/fixtures/CreateTestDatabase.php
# ============================================================================
# Utils
# ============================================================================
[group('utils')]
clean:
@rm -f error.log admin/error.log
@rm -rf src/cache/rate_limit/*
@rm -f /tmp/posterg-*.log /tmp/posterg-*.pid
[group('utils')]
setup-dirs:
@mkdir -p admin/data/{theses,covers,yaml} src/cache/rate_limit
@touch admin/data/theses/.gitkeep admin/data/covers/.gitkeep