Che cos'è una strategia di versioning prevedibile per un monorepo che utilizza semere?

2

Per semplificare la distribuzione e le attività di gestione dei progetti, mantengo un monorepo contenente diversi pacchetti che hanno ciascuno una semver versione. Per essere chiari, non intendo molti repository gestiti da un unico luogo, voglio dire un singolo repository Git che tiene traccia di diversi pacchetti con una toolchain comune. Nota che questo NON implica che questo sia l'unico repository gestito dal mio team. Gestisco solo quello in questione per una specifica pipeline di consegna.

Il monorepo è di per sé difficile da versionare con semver perché un bump di versione principale in un pacchetto potrebbe non giustificare un bump di versione principale nel monorepo stesso. Prendiamo una GUI che passa da v2.9.3 a v3.0.0 sulla base del fatto che utilizza un nuovo sistema di progettazione che altri pacchetti non usano ancora. Questo non è forse un cambiamento nel monorepo, poiché:

  • Il cambiamento di monorepo probabilmente equivarrebbe solo a un'aggiunta di dipendenza.
  • Non c'è motivo di allarmare il team con un bump di versione principale per il monorepo che distrae dalla modifica più rilevante nel pacchetto.

La relazione tra le modifiche di versione nel monorepo e i pacchetti sono, in generale, difficili da automatizzare a meno che non si assumano come obiettivi obiettivi altamente specifici o fragili.

Nota che suppongo che due dossi di versione debbano accadere simultaneamente perché se il monorepo non ha una sua versione e tag correlati, allora questo rovina l'output git describe che usiamo per tutta la società.

Quale strategia applicheresti nella mia posizione?

Consentitemi di chiarire alcuni dettagli, in base a ciò che ho letto da altri utenti. Supponiamo che ci siano diverse tattiche in gioco in giro per l'azienda per gestire le revisioni. C'è un monorepo con semiver, ma c'è un altro repository usando i sottomoduli git e l'altro con gli strumenti di distribuzione cross-stack. Data la mia posizione, devo presumere che i suggerimenti per normalizzare su un'opzione siano, sfortunatamente, non attuabili al momento. L'atto di scindere o combinare i repository è un cambiamento di rottura con un effetto a catena. Questo dovrebbe aiutarti a capire perché sto limitando la domanda all'uso di semere su un repository; è il cambiamento meno costoso nel contesto.

    
posta Sage Gerard 11.09.2018 - 02:57
fonte

2 risposte

0

i repository non hanno versioni. Il software nei repository ha versioni.

Normalmente puoi taggare un commit con la versione del software in quel commit

Ma se nel repository è presente più di un componente con versione, non è possibile riflettere più versioni in un unico numero di versione.

Se i componenti non vengono utilizzati al di fuori del repository, non hanno davvero bisogno di versioni indipendenti. Puoi semplicemente eseguire la versione dell'applicazione principale e usarla come "versione di repository"

Se hai una libreria separata che è stata pubblicata da sola, spostala nel proprio repository e avvia il versioning con il proprio numero distinto dall'app principale e da altri componenti.

Ciò consente di avere versioni di repository che corrispondono al singolo bit del software con versione in ciascun repository.

Inoltre, ti permette di finire le librerie e usare solo il binario invariato. Quale è una fonte in meno di bug di cui preoccuparsi!

    
risposta data 11.09.2018 - 07:55
fonte
0

Forse una soluzione più gestibile è un Changelog.

Se i tuoi componenti editoriali lo sono, dovrebbe esserci un log delle modifiche. Non sto parlando dei commenti sul check-in. Sto parlando di un file controllato in versione che descrive importanti cambiamenti nel software.

Avere solo il prefisso del file. Aggiungi modifiche importanti con alcuni simboli dire asterisco e modifiche minori con dire un segno più. L'elenco è terminato da una interruzione di pagina di trattini, ad esempio: "-----"

Avere un lavoro di rilascio ispezionare il registro fino a "----". Sulla base di ciò che trova e il numero della versione precedente genera un nuovo semiver. Grandi urti se un cambiamento importante è nel registro. Urti minori se nel registro è presente una versione secondaria, altrimenti eseguire il bump del numero di patch. Se la versione è di sviluppo, aggiungere un numero di build incrementale su (numero di commit dopo quello se lo si desidera). Se la versione è una versione completa, il lavoro inietta il numero di versione finale nel registro modifiche e antepone una nuova sezione vuota.

Il lavoro di rilascio può essere eseguito automaticamente (dopo i test) o manualmente a seconda di ciò che funziona per il team.

Punti extra se il processo di rilascio non riesce a causa di un registro modifiche modificato in modo errato.

    
risposta data 11.11.2018 - 13:02
fonte

Leggi altre domande sui tag