Installazione e Deploy - mattiaboero/lascuolaamica GitHub Wiki
Installazione e deploy
Avvio in locale
cd /percorso/al/progetto
python3 -m http.server 8080
Poi apri http://localhost:8080.
Il sito richiede un server HTTP anche in locale: il supporto offline e il caricamento dei dati non funzionano aprendo index.html direttamente nel filesystem (file://).
Verifica prepublish
./prepublish-check.sh
Il check verifica:
- integrità e formato dei file JSON domande
- assenza di riferimenti runtime legacy non desiderati
sitemap.xmlerobots.txtpresenti e validi- nessun errore di sintassi JS (
node --check)
Il deploy non dovrebbe partire senza che questo passi.
Build per la pubblicazione
Export per l’ambiente di hosting:
npm run export
Produce la directory export/ con i soli file che il sito serve. export/ è generata — non va versionata.
- Lista di inclusione, non di esclusione. Si parte da
git ls-filese si tiene solo ciò che è nominato inINCLUDIdentro lo script. Una cartella nuova non finisce online per dimenticanza: per pubblicarla bisogna aggiungerla lì. - Copia pura. Niente viene rigenerato durante la build: sitemap e dati strutturati si aggiornano con
npm run freshnessprima del rilascio. Così ciò chenpm run verifycontrolla è esattamente ciò che va online. - Due trasformazioni, entrambe sulle copie: le domande con
active: falsenon vengono spedite, e JS e CSS vengono minificati da esbuild, fissato inpackage.jsonalla versione esatta. - Verifica finale con
scripts/check_export.js: file obbligatori presenti (_headerse_redirectscompresi), ogni URL del service worker e ogni riferimento nelle pagine risolto, sitemap coerente, JS minificati sintatticamente validi, domande pubblicate uguali alle attive del repo, nessun file interno.
Vincolo PWA: deploy in root
La configurazione PWA attuale e supportata con affidabilita solo quando il sito e pubblicato in root del dominio:
- Service Worker registrato su
/sw.js - manifest con
start_url: "/"escope: "/" - clean URL dipendenti da rewrite host compatibili con
_redirects
Questo significa che un deploy in sottocartella o su GitHub Pages non e un target supportato al momento.
Aggiornamenti cache offline
Quando cambiano risorse servite in precache o cache-first, bisogna aggiornare APP_VERSION in app-version.js. Il controllo prepublish blocca le modifiche rilevanti se la versione non viene incrementata.
Backup manuale fuori repo:
bash scripts/export_backup_outside_repo.sh
# Con path specifico:
bash scripts/export_backup_outside_repo.sh "/percorso/assoluto/export-backup"
Pubblicazione automatica
La pubblicazione parte automaticamente al push su main.
Parametri essenziali della build automatica:
| Parametro | Valore |
|---|---|
| Build command | bash scripts/export_for_cloudflare.sh |
| Build output directory | export |
NODE_VERSION |
24 o superiore, in Production e in Preview |
Le variabili del pannello valgono per ambiente. Se
NODE_VERSIONmanca in Preview, le anteprime delle PR costruiscono con la versione Node predefinita di Cloudflare e non provano la build di produzione. È stato così fino al 06/10/2026.
Controllare nel pannello che l'output directory sia davvero
export. Fino al 10/09/2026 non lo era: Cloudflare pubblicava la radice del repo, e dal sito si raggiungevanopackage.json,scripts/,reports/,CHANGELOG.mde l'audit SEO. Un segno per riconoscerlo: se i JS in produzione hanno lo stesso numero di righe dei sorgenti, non sono passati dall'export.
Sincronizzazione della wiki
La wiki di GitHub è una copia di docs/wiki/. A ogni push su main che tocca quella cartella, il workflow Sync Wiki copia i file nel repository della wiki.
| Parametro | Valore |
|---|---|
| Secret | WIKI_SYNC_TOKEN |
| Tipo | personal access token classico |
| Scope | public_repo |
| Scadenza | 05/01/2027 |
Il token scade. Da quel giorno
Sync Wikifallisce finché il token non viene rigenerato e salvato di nuovo nel secret. Fino al 07/10/2026 aveva anche gli scoperepoeworkflow, che alla sincronizzazione non servono.
Aggiornamento Service Worker
Dopo ogni release, la versione della cache offline va riallineata per forzare l’aggiornamento nei client già attivi. Questo controllo è incluso nel Runbook release.
Il runtime registra il Service Worker con updateViaCache: "none" e sia sw.js sia app-version.js devono essere serviti con Cache-Control: no-cache.