# ============================================================================= # Makefile — workflow host/container condiviso (vedi CLAUDE.md §Workflow). # Regola d'oro: chi scrive file lo fa come utente host (beppe). Mai mischiare # node_modules musl(container) e glibc(host). # - composer / npm -> HOST # - artisan con servizi -> container MA come UID host (file beppe-owned) # ============================================================================= UID := $(shell id -u) GID := $(shell id -g) DC := docker compose EXEC := $(DC) exec -u $(UID):$(GID) backend .DEFAULT_GOAL := help .PHONY: help up down build logs composer be-install be-update artisan migrate import tinker test fe-install fe-add fe-rebuild fe-dev fe-build fe-lint-css fe-lint-css-fix docs docs-check permissions # Stessa versione pinnata nella CI (.github/workflows/docs.yml): allineare insieme. MKDOCS_IMG := squidfunk/mkdocs-material:9.7.6 MKDOCS_VOL := -v $(CURDIR)/mkdocs.yml:/docs/mkdocs.yml:ro -v $(CURDIR)/docs:/docs/docs:ro help: ## Mostra questo aiuto @grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) | awk 'BEGIN{FS=":.*?## "}{printf " \033[36m%-14s\033[0m %s\n",$$1,$$2}' ## --- Stack --- up: ## Avvia l'intero stack dev: Vite HMR + backend(serve) + db + redis + mailpit $(DC) up -d down: ## Ferma lo stack $(DC) down build: ## Ricostruisce le immagini (con --pull per base aggiornate) $(DC) build --pull logs: ## Segue i log del backend $(DC) logs -f backend ## --- Backend / PHP (composer sull'HOST) --- composer: ## composer host (es: make composer c="require foo/bar") composer -d backend $(c) be-install: ## composer install (host) composer -d backend install be-update: ## composer update (host) composer -d backend update artisan: ## artisan nel container come utente host (es: make artisan c="migrate --seed") $(EXEC) php artisan $(c) migrate: ## php artisan migrate (container) $(EXEC) php artisan migrate import: ## ETL da v1 (container) $(EXEC) php artisan v1:import tinker: ## REPL artisan (container) $(EXEC) php artisan tinker test: ## Suite di test sul DB dedicato db-test (es: make test c="--filter=AuthTest") # Le -e iniettano VERE env nel processo di test → finiscono in $$_SERVER, che # l'env() di Laravel legge per primo. Così vincono sul container (DB_HOST=db, # DB_DATABASE=dyncoll) SENZA dipendere dai force di phpunit.xml. DB_HOST=db-test # = isolamento fisico: la suite non può nemmeno raggiungere il db di sviluppo. $(DC) exec -u $(UID):$(GID) \ -e APP_ENV=testing \ -e DB_HOST=db-test \ -e DB_DATABASE=dyncoll_test \ -e CACHE_STORE=array \ -e SESSION_DRIVER=array \ -e QUEUE_CONNECTION=sync \ -e MAIL_MAILER=array \ backend php artisan test $(c) ## --- Frontend / Node --- # In dev Vite gira NEL container (make up): HMR via bind-mount, node_modules musl # nel volume anonimo. npm gira sull'HOST (package.json/lock + node_modules host per # il type-check dell'IDE); poi si rigenera immagine + volume node_modules del container. # AGGIUNGERE UNA LIBRERIA: make fe-add p="leaflet" && make fe-rebuild fe-install: ## npm install host da package.json (package-lock + node_modules host per l'IDE) cd frontend && npm install fe-add: ## Aggiunge una dipendenza (host) — es: make fe-add p="leaflet" oppure p="-D nome"; poi make fe-rebuild cd frontend && npm install $(p) fe-rebuild: ## Rigenera immagine frontend E il volume node_modules del container (dopo modifiche a package.json) $(DC) up -d --build --renew-anon-volumes frontend fe-dev: ## ALTERNATIVA: vite dev server su host senza Docker (conflitto porta 5173 se lo stack è su) cd frontend && npm run dev fe-build: ## build di produzione su host (smoke test locale) cd frontend && npm run build fe-lint-css: ## Stylelint (check) nel container — gira anche nel pre-commit $(DC) exec -T frontend npm run lint:css fe-lint-css-fix: ## Stylelint con --fix (container come UID host: scrive sul bind-mount) $(DC) exec -u $(UID):$(GID) -T frontend npm run lint:css:fix ## --- Documentazione (pubblicata da GitHub Pages, .github/workflows/docs.yml) --- docs: ## Anteprima locale MkDocs con live reload su http://localhost:8001/adc/ (Ctrl+C per uscire; la 8000 è del backend) docker run --rm -p 8001:8000 $(MKDOCS_VOL) $(MKDOCS_IMG) serve --dev-addr=0.0.0.0:8000 docs-check: ## Build --strict come in CI (fallisce su link rotti): da lanciare prima del push docker run --rm $(MKDOCS_VOL) $(MKDOCS_IMG) build --strict --site-dir /tmp/site ## --- Manutenzione --- permissions: ## Permessi storage scrivibili da php-fpm (www-data) — richiede sudo, una tantum sudo chgrp -R www-data backend/storage backend/bootstrap/cache sudo chmod -R g+ws backend/storage backend/bootstrap/cache