Quando un monorepo Flutter cresce oltre i tre o quattro package interni, il collo di bottiglia non è più il codice ma la release: chi alza la versione di core_network? Chi aggiorna i vincoli nei package che dipendono da esso? Chi scrive il changelog? Chi pubblica, e in che ordine?
Melos risolve esattamente questo problema: analizza il grafo delle dipendenze interne, deduce il bump di versione dai conventional commits, aggiorna i vincoli nei package dipendenti, genera i CHANGELOG.md, crea un commit e i tag Git, e infine pubblica i package pubblicabili nell'ordine topologico corretto.
In questo tutorial costruiamo una pipeline di release completa su un monorepo realistico:
my_app/
├── melos.yaml
├── apps/
│ └── mobile/ # app Flutter, non pubblicabile
└── packages/
├── core_models/ # modelli condivisi
├── core_network/ # dipende da core_models
└── design_system/ # dipende da core_models
Partiamo dal presupposto che tu conosca già le basi di Melos (melos bootstrap, melos exec) e che il monorepo sia già in piedi: qui ci concentriamo su versioning, changelog, tag e publish automatizzati, inclusi i casi limite (hotfix, prerelease, rollback, breaking change prima della 1.0).
Riferimento: Melos 6.x con Dart 3.x. Se usi Melos 7 con i pub workspaces di Dart 3.6+, la configurazione
version/publishresta identica: cambia solo dove dichiari l'elenco dei package.