set shell := ["bash", "-uc"] # Keep files created by containers owned by the host user. export UID := `id -u` export GID := `id -g` default: @just --list # First-time setup: build, install PHP deps, create .env, migrate and seed. setup: #!/usr/bin/env bash set -euo pipefail if [ ! -f .env ]; then cp .env.docker.example .env fi docker compose build docker compose run --rm --no-deps app composer install if ! grep -q '^APP_KEY=base64:' .env; then docker compose run --rm --no-deps app php artisan key:generate --force fi docker compose up -d --wait db docker compose run --rm app php artisan migrate --force # Only seed the demo data on a fresh database. if [ "$(docker compose exec -T db mysql -N -B -upollux -psecret pollux -e 'SELECT COUNT(*) FROM scopes' 2>/dev/null || echo 0)" = "0" ]; then docker compose run --rm app php artisan db:seed --class=ConstantsSeeder --force docker compose run --rm app php artisan db:seed --class=TestDataSeeder --force else echo "Database already seeded; skipping demo data." fi docker compose run --rm app php artisan db:seed --class=DevUserSeeder --force echo "Setup complete. Run 'just up', then open http://localhost:8000" echo "Login: dev@pollux.local / password" # Start the app and database in the foreground. up *args: docker compose up --build {{args}} # Start the app and database in the background. start: docker compose up -d --build # Stop the app and database. down: docker compose down # Tail logs. Optionally pass a service name: just logs app logs *args: docker compose logs -f {{args}} # Run an artisan command: just artisan route:list artisan *args: docker compose run --rm app php artisan {{args}} # Run a composer command: just composer require foo/bar composer *args: docker compose run --rm app composer {{args}} # Open a shell in the app container. shell: docker compose run --rm app bash # Open a MySQL shell. db: docker compose up -d --wait db docker compose exec db mysql -upollux -psecret pollux # Run migrations. migrate: docker compose run --rm app php artisan migrate # Add the demo/test dataset to an existing database. seed: docker compose run --rm app php artisan db:seed --class=TestDataSeeder # Recreate the database and load the full dataset from database/seeds/data/real. seed-real: docker compose run --rm app php artisan migrate:fresh docker compose run --rm app php artisan db:seed --force docker compose run --rm app php artisan db:seed --class=DevUserSeeder --force # Recreate the database and load test data. fresh: docker compose run --rm app php artisan migrate:fresh docker compose run --rm app php artisan db:seed --class=ConstantsSeeder docker compose run --rm app php artisan db:seed --class=TestDataSeeder docker compose run --rm app php artisan db:seed --class=DevUserSeeder # Run the test suite. test *args: docker compose run --rm --no-deps app vendor/bin/phpunit {{args}} # Build frontend assets (uses the mise-pinned Node 10). assets: mise exec -- npm install mise exec -- npm run dev # Watch frontend assets. watch: mise exec -- npm run watch