Vai al contenuto

Sviluppo

Questa guida è per chi modifica il sorgente del package. L'architettura è la mappa di quello che stai per cambiare. Lavorare in un clone con PHP 8.3+ e Composer; Node 22 serve solo per gli asset front-end. Non puntare mai i test al database di un'applicazione.

Il repository

config/         griglia.php (pubblicato nell'applicazione ospite)
database/       migrazioni (tabelle + default delle impostazioni)
docs/           questo sito (vedi «Costruire questo sito»)
resources/      viste, sorgenti css/js, lang/{en,it}, pacchetto di temi di esempio
routes/         le rotte del package
src/            componenti Livewire, modelli, comandi console, classi di supporto
tests/          orchestra/testbench + phpunit

Lavorarci

composer install
composer qa                        # lint + test + docs:check: tutto il cancello, nell'ordine della CI
composer lint                      # Laravel Pint + Larastan livello 5
composer format                    # applica lo stile invece di segnalarlo
composer test                      # testbench, sqlite in memoria
vendor/bin/testbench serve         # un'applicazione Laravel nuda con il package montato
npm install && npm run build       # asset precompilati → public/build
vendor/bin/testbench griglia:docs-build --strict # il sito della documentazione

La suite di regressione del ciclo di revisione si trova in tests/Feature/ReviewWorkflowTest.php. Copre sia il percorso storico senza revisore sia i flussi completi di invio, approvazione, richiesta modifiche e nuovo invio, incluse le transizioni di stato non valide. tests/Feature/ReviewUiTest.php copre l'assegnazione del revisore opzionale nel modale del task.

La suite copre migrazioni, delimitazione per utente, i componenti Livewire, griglia:check / griglia:watch, il registro dei temi e i pacchetti zip, l'allineamento delle traduzioni fra en e it e l'evento di broadcast. GitHub Actions verifica l'intera matrice PHP 8.3/8.4 e Laravel 12/13. Job separati provano le versioni minime supportate delle dipendenze su PHP 8.3 e Laravel 12, eseguono la suite su MySQL 8 e rifiutano dipendenze Composer con vulnerabilità note tramite composer audit; Pint e PHPStan girano in un job lint dedicato. In locale i test continuano a usare SQLite in memoria, a meno che GRIGLIA_TEST_DB=mysql e le normali variabili DB_* selezionino un database MySQL.

La suite non gira mai su un database vero

RefreshDatabase e il workbench di Testbench (workbench: install: true lancia migrate:fresh) cancellano tutte le tabelle della connessione che ricevono, e un processo avviato dentro il container di un'applicazione eredita le variabili DB_* di quell'applicazione: è così che il progetto d'origine ha perso i dati della board il 22/08/2026. Alle80\Griglia\Testing\DatabaseGuard, attivato dal service provider quando il processo è phpunit o lo scheletro di Testbench, controlla quindi ogni connessione appena viene aperta e interrompe l'esecuzione se il driver non è SQLite e il nome del database non contiene test (griglia_test, quello usato in CI, passa). Usare GRIGLIA_ALLOW_PROD_DB=1 solo se un database di test non può davvero rispettare la convenzione.

In pratica: lanciare vendor/bin/phpunit dove nessuna variabile DB_* punta a un database vivo, e passare a vendor/bin/testbench una connessione esplicita — un blocco env: in testbench.yaml non ha la meglio sulle variabili d'ambiente reali:

docker exec -e DB_CONNECTION=sqlite -e DB_DATABASE=:memory:  vendor/bin/testbench griglia:docs-generate --check

I modelli Todo, Checklist, Ingredient e Question includono factory del package per test mirati:

$list = Checklist::factory()->create();
$todo = Todo::factory()->for($list)->create();
$ingredient = Ingredient::factory()->for($todo)->create();
$question = Question::factory()->for($todo)->create();

I modelli risolvono direttamente il namespace delle factory del package, quindi non serve configurare un resolver dei nomi nell'applicazione ospite o in Testbench.

composer lint esegue prima i controlli di formattazione e poi vendor/bin/phpstan analyse su src/. Larastan è configurato al livello 5 senza baseline. Il piccolo elenco di eccezioni in phpstan-ignores.neon documenta singolarmente i limiti di inferenza del framework, ognuna vincolata a un identificatore e a un file; reportUnmatchedIgnoredErrors è attivo, quindi un'eccezione che smette di corrispondere fa fallire l'analisi invece di trasformarsi silenziosamente in debito permanente. La politica completa, e cosa fare quando un controllo fallisce, è nella pagina Standard di qualità.

Rilasciare

Ogni modifica va in CHANGELOG.md (Keep a Changelog, con una sezione Security quando serve), e il tag vX.Y.Z è il rilascio: Packagist lo pubblica e la GitHub Release viene generata da quella sezione del changelog. Cosa promette un numero di versione, che cosa è pubblico e i quattro passi per fare un rilascio stanno in Versioni e rilasci.

Vedi anche Standard di qualità — l'asticella che una modifica deve superare e che cosa protegge ogni job della CI — Contribuire e Costruire questo sito.

Verificare prima di proporre una modifica

Eseguire composer qa (lint, suite, pagine generate) e composer docs:build per il sito. Il risultato atteso è zero errori Pint/PHPStan, suite PHPUnit verde e build strict bilingue. Usare una connessione SQLite esplicita se la shell eredita variabili DB_* dell’applicazione, come descritto sopra. Annotare un prerequisito mancante invece di dichiarare verificato un controllo non eseguito.

Griglia v0.92.0