Stiamo pianificando di utilizzare una configurazione che utilizza diversi moduli per completare un'intera applicazione, i moduli di esempio includono:
- Il core (codice condiviso da tutti gli altri moduli)
- Il server
- Il client (Windows, OS X, Linux)
- Il client (iOS)
- Il client (Android)
- Strumento n. 1
- Strumento n. 2
E ora, mentre ci prepariamo a consegnare la nostra prima versione, è un buon momento per pensare allo schema di numerazione. Abbiamo definito l'utilizzo di un formato major.minor.patch, ma stiamo affrontando una sola domanda:
Se ogni modulo ha lo stesso numero di versione della versione più recente e, di conseguenza, dovremmo eseguire il bump dei numeri di versione se non ci sono stati aggiornamenti?
Esempio per illustrare:
1) Supponiamo che tutti i nostri componenti siano in esecuzione sulla versione 0.1.0 (sviluppo iniziale), una volta eseguito un aggiornamento significativo, allora tutti i componenti dovrebbero essere sottoposti alla versione 0.2.0?
Funziona anche al contrario:
2) Supponiamo che ogni componente sia inizialmente in esecuzione 0.1.0 e ora introduciamo un aggiornamento significativo (potrebbe essere una rielaborazione della GUI) sul client Android, dovremmo quindi rilasciare una versione 0.2.0 per ogni componente, anche se le altre versioni non hanno ricevuto alcun aggiornamento?
E forse la più difficile:
3) Supponiamo che eseguiamo ancora 0.1.0 uno molto componente all'inizio, e pensiamo che lo Strumento # 2 ha un bug e dobbiamo correggerlo a 0.1.1, dovremmo anche aggiornare ogni componente a 0.1 .1?
Attualmente dubito che dovremmo perseguire il corretto controllo delle versioni, o dovremmo optare per la compatibilità? Le persone esterne al team di sviluppo molto probabilmente si aspettano che tutti i moduli siano eseguiti sulla versione 0.3.0, ad esempio, mentre noi come sviluppatori siamo un po 'confusi e forse ci sentiamo a disagio con il bump di un numero di versione, mentre il modulo non ha modificato esso.
Qual è il modo migliore per affrontarlo?
Modifica , qualcosa che ho dimenticato di menzionare, ma che potrebbe cambiare opinione è che tutte le versioni verranno eseguite in modo automatico. Su Github / git un tag specifico verrà taggato come versione major.minor.patch e successivamente il sistema di compilazione (qui: Travis CI) prenderà il tag e creerà automaticamente ogni release e lo pubblicherà da qualche parte se necessario e / o voluto.