RFC: Una nuova strategia di versioning per Discourse

Ok, ma penso di capire ancora meno il problema :confused:

Alla fine, non ha molta importanza secondo gli ultimi commenti di @david, quindi solo per riassumere.

Il modello proposto è un rilascio mensile, più 2 versioni esr, quindi ad esempio per il 2026:

  • 2026.1
  • 2026.2
  • 2026.3
  • 2026.8
  • 2026.9
  • 2026.10

Quindi supponendo che siamo nell’ottobre 2026 e .2 e .8 sono versioni esr, ciò significa 4 versioni supportate.

E il mio pensiero era: non sarebbe più facile avere versioni trimestrali, cioè per il 2026:

  • 2026.1
  • 2026.2
  • 2026.3

E ancora solo quella corrente e la versione precedente sarebbero supportate, quindi nell’ottobre 2026, sarebbero 2.

E tutto il ragionamento era che forse questo renderebbe le cose più facili sia per gli sviluppatori che per gli utenti. Ma come menzionato sopra: @david ha chiarito che rilasci meno frequenti non sono un’opzione.

2 Mi Piace

Capito. È più o meno come mi aspettavo. In effetti, in questo caso un po’ di supporto degli strumenti sarebbe gradito almeno a medio termine.

Il modo in cui lo concettualizzo è: sei su un canale di rilascio specifico (latest, release, esr), e di solito passeresti relativamente in fretta alla versione successiva, quindi ricevere un messaggio e/o una notifica quando la nuova versione è disponibile e avere un singolo comando per passare ad essa sarebbe fantastico. E per i casi in cui hai ritardato l’adozione di una nuova versione, sarebbe anche bello essere avvisati quando la versione attualmente utilizzata diventa obsoleta/non supportata. Punti bonus se lo strumento rispettivi potesse anche permetterti di cambiare rapidamente i canali di rilascio :slightly_smiling_face:

Ma capisco se non è la priorità assoluta in questo momento, e consigli comunque alle persone di rimanere su test-passed/latest.

Capisco. Nel contesto del mio lavoro, rilasciare una funzionalità ai clienti è considerato “veloce” :sweat_smile:

Inoltre, come menzionato sopra, il mio pensiero era che passare a un programma trimestrale avrebbe effettivamente reso la tua vita (e quella degli sviluppatori di plugin/temi) più facile, perché ci sono meno branch in manutenzione. Quindi, se non è così, allora immagino che non abbia davvero senso per te :slightly_smiling_face:

6 Mi Piace

Non vedo alcun vantaggio nello schema di versioning basato sull’anno che proponi. Attieniti ai numeri di versione conformi a SemVer!

SemVer di per sé non è realmente progettato per grandi applicazioni. Lo capisco come molto più mirato alle librerie consumate dal software e, in particolare, la logica di numerazione delle versioni è costruita attorno all’API del pacchetto.

Potremmo però applicare semver alle nostre API. Avere garanzie più forti attorno alle API che Discourse espone è certamente una conversazione utile da avere, ma penso che sia separata da questa.

Ora, capisco che tu non abbia detto che dovremmo essere conformi a SemVer, hai solo detto che dovremmo attenerci all’uso di numeri conformi al sistema di numerazione specificato da SemVer.

  1. Un numero di versione normale DEVE assumere la forma X.Y.Z dove X, Y e Z sono numeri interi non negativi e NON DEVONO contenere zeri iniziali. X è la versione principale, Y è la versione secondaria e Z è la versione patch. Ogni elemento DEVE aumentare numericamente. Ad esempio: 1.9.0 → 1.10.0 → 1.11.0.

Penso che il suggerimento sugli “zeri iniziali” sia l’unica cosa che infrangeremmo se seguissimo quella strada.

Altrimenti, penso che qualsiasi libreria SemVer sarebbe ancora in grado di analizzare i numeri di versione che stiamo suggerendo e ordinarli correttamente.

Tutto ciò a parte, puoi condividere di più sul perché pensi che essere conformi a un sistema di numerazione SemVer abbia valore?

2 Mi Piace

L’OP dice che non stai usando zeri iniziali, se ho capito bene.

Penso che sia stato proposto anche un motivo convincente per usare gli zeri iniziali (ordinamento per versioni). Gli zeri iniziali sono il piano attuale? (Preferisco ancora le versioni mensili piuttosto che quelle seriali).

3 Mi Piace

Il punto del SemVer è che il numero di versione dovrebbe comunicare informazioni utili. L’unica informazione comunicata dal tuo schema proposto è l’orbita terrestre attorno al sole. Queste informazioni non sono molto utili per il consumatore del software.

Se per qualche motivo volessi conoscere la data di rilascio, guarderei il rilascio e otterrei la data completa.

Non proprio. Il punto è comunicare la natura del rilascio all’utente.

Se il rilascio è un aumento di versione patch, questo comunica che il changeset non contiene nulla che dovrebbe influire sul flusso di lavoro degli utenti del software.

Se il rilascio è un aumento di versione minor, questo comunica che il changeset include l’aggiunta di nuovi componenti rivolti all’utente, ma nulla che interrompa i flussi di lavoro esistenti degli utenti del software.

Se il rilascio è un aumento di versione major, questo comunica che il changeset include modifiche che potrebbero interrompere i flussi di lavoro esistenti degli utenti del software.

La determinazione di quale dei componenti di versione dovrebbe essere aumentato è più chiara in un prodotto software con una singola interfaccia utente, ma i principi rimangono gli stessi anche per un prodotto software come Discourse, dove esiste una varietà di livelli di interfacce e tipi di consumatori (ad esempio, sviluppatori di plugin, consumatori di API, staff del forum, utenti finali).

Anche se la scelta di quale componente aumentare è un po’ più soggettiva in questo progetto software, si traduce comunque nel numero di versione che ha un significato invece di essere solo un numero arbitrario, come nel caso della tua proposta.

2 Mi Piace

L’ho proposto qualche post fa.

Contrariamente a semver, lo schema di numerazione delle versioni proposto rende immediatamente chiaro se una versione è ancora supportata (come Ubuntu). Poiché anche questo dipende dall’orbita terrestre attorno al sole, ha senso.

Questo è chiaramente rivolto a pacchetti e librerie. Qualsiasi rilascio di Discourse include cambiamenti che potrebbero interrompere i flussi di lavoro esistenti degli utenti del software. Ho persino visto patch di sicurezza farlo. Semver non è utilizzabile per applicazioni complesse.

Sì, davvero, vedi

Una volta identificata la tua API pubblica, comunichi le modifiche ad essa con incrementi specifici al tuo numero di versione.

5 Mi Piace

Solo per sottolineare un punto che potrebbe andare perso, penso che Discourse faccia un ottimo lavoro qui. Un miglioramento sarebbe almeno evidenziare gli argomenti che hai già scritto che descrivono modifiche e potenziali interruzioni all’interno di quel ciclo di aggiornamento. Ad esempio, con il rilascio 3.5, ho dovuto aprire le note di rilascio, fare clic sul blog e poi fare clic sul collegamento relativo al raggruppamento dei plugin con Discourse core per cogliere quel dettaglio che lasciare quei plugin all’interno del mio file di configurazione potrebbe influire sugli aggiornamenti.

Sarebbe fantastico estrarre quel tipo di note su una pagina/argomento per i rilasci ESR, anche se si trattasse solo di un insieme di collegamenti ad argomenti esistenti che dovrebbero essere rivisti prima di eseguire un aggiornamento ESR.

Questo potrebbe andare oltre lo scopo di questo thread, tuttavia: il mio feedback sul cambiamento di versione è che lo accolgo con favore e apprezzo la trasparenza qui. Penso che questo sarebbe un grande miglioramento che semplificherebbe le cose dandoci maggiori opzioni per l’auto-hosting.

Grazie!

4 Mi Piace

Sì, ed è un’idea così buona che penso che l’OP dovrebbe essere modificato per rifletterla!

3 Mi Piace

Si sta valutando l’inclusione degli zeri iniziali e se puntare o meno a una sincronizzazione più esplicita con i mesi. @david condividerà un aggiornamento non appena il gruppo che se ne occupa prenderà una decisione.

7 Mi Piace

Queste non sono le informazioni importanti per un manutentore di forum che valuta una nuova release.

No, davvero. Ti stai perdendo il vero punto di SemVer rifiutandoti di capire che “API” in realtà significa solo l’interfaccia. Non c’è assolutamente alcun motivo per cui lo spirito di SemVer non possa essere utilizzato nella versioning di qualsiasi tipo di software.

Penso che dovremo concordare sul fatto di essere in disaccordo su questo punto @per1234.

Ecco una discussione correlata sul repository GitHub di semver con una risposta da uno dei maintainer:

Semver non è molto utile per le “app per utenti finali”, è più utile per le librerie che le persone usano come dipendenze per i loro progetti.

4 Mi Piace

Non ha molta importanza se si tratta di una libreria o di un’applicazione più grande. Uno schema di versionamento semantico funziona perfettamente per un’applicazione di grandi dimensioni. Può anche essere utilizzato per una raccolta di applicazioni raggruppate in una piattaforma, ma qui diventa piuttosto difficile da gestire.

La domanda principale è se si segue il percorso della deprecazione supportata in una release e solo la rimozione nella successiva release principale. Avere funzionalità deprecate, ma supportate, può richiedere un notevole sforzo. Quando si apportano modifiche al proprio modello di dati persistente, la deprecazione può spesso diventare impossibile. Se ciò accade, non è nemmeno possibile effettuare una release minore con funzionalità deprecate e si salta immediatamente alla successiva release principale. Questa è la parte in cui le applicazioni di grandi dimensioni di solito hanno problemi. Si passa da 3.0.0 a 3.0.1 a 4.0.0 perché non è possibile fornire retrocompatibilità. Se si hanno spesso modifiche che interrompono la compatibilità, attenersi a semver aggiunge poco valore.

Detto questo, preferisco di gran lunga quella costruzione perché comunica più chiaramente agli sviluppatori che ci saranno modifiche che interrompono la compatibilità. Lo schema YYYY.N non mi dice nulla come sviluppatore e nulla come amministratore.

Quindi la domanda è, cosa vuoi comunicare con la versione? Se vuoi fare 6 release di funzionalità (che potrebbero o meno interrompere la compatibilità), e ogni 6a release sarà supportata più a lungo con patch; e non vuoi versionare le release di patch. Allora X.Y è uno schema adatto dove Y=0 è quello supportato più a lungo. X sarebbe solo un numero. Il problema è quando X è l’anno, allora Y è rapidamente associato a un mese. Quindi le nuove release supportate più a lungo verranno rilasciate a gennaio? Devo sempre cercare quale versione di Ubuntu è una LTS, il che mi infastidisce.

Quindi, cosa succederebbe se Discourse continuasse semplicemente con la versione principale attuale. La prossima versione supportata più a lungo si chiama 4.0; e poi otteniamo 4.1 a 4.5 come release di funzionalità; seguita da 5.0 che è la più recente supportata più a lungo.

Quindi non avrai nemmeno quel momento imbarazzante in cui una release viene ritardata a causa di un problema importante.

Potresti facoltativamente aggiungere un numero di “patch” se hai intenzione di rilasciare esplicitamente patch (invece di avere release di patch continue). “Ma allora avrai x.y.z che è semver”. Beh, no, sembra semver, ma non lo è. Ogni nuova release “minore” può interrompere la compatibilità. Quindi suggerisco di attenersi semplicemente a X.Y come schema di versionamento con Y=0 → LTS.

A parte la stringa di versione. Mi piace il nuovo piano di rilascio.

4 Mi Piace

Sì, è qui che le cose si trovano effettivamente oggi, specialmente con il sistema di temi flessibile.

Quindi penso che tu abbia perfettamente ragione qui:

Ciò significa anche che la parte “maggiore” del nostro attuale numero di versione comunica molto poco.

Quindi, è sembrato come “ehi, tanto vale usare un anno lì per comunicare qualcosa”.

:rocket:

4 Mi Piace

Questa discussione non sembra buona. Vedo una decisione del team di sviluppo di adottare un nuovo sistema di versioning che ha senso per loro, e altri che improvvisamente sembrano considerare che la versione di Discourse seguisse il versioning semantico… cosa che non era. È sempre stata una release continua, almeno da 1.0, o?

Ma gli argomenti da tutte le parti del dibattito sembrano errati:

  • “standard del settore”: Linux usa versioni pari per le stabili e dispari per lo sviluppo.
  • “la Terra orbita attorno al Sole”: beh, se ti converti all’Islam, avrai problemi perché abbandonerai le versioni e no, non corrisponderà più alla rivoluzione solare, ma ai cicli lunari. Qui, ora capisci che scegliendo lo schema di versioning YYYY.Y.Z invece di X.Y.Z, hai imposto una cultura dominante.
  • La release minore rimane poco chiara: menzioni “ipotizzando una cadenza mensile”, ma potrebbero anche essere 3 settimane o 7, a seconda della funzionalità, nel qual caso contare Y da 0 ha senso, o stai effettivamente puntando a rilasciare mensilmente, nel qual caso contare M da 1 avrebbe più senso?

Il cambiamento principale che vedo è che, adottando un ritmo mensile, il team di Discourse sta creando aspettative e si sta allontanando dagli obiettivi di rilascio, abbracciando invece rilasci regolari.

LTS per 8 mesi non suona davvero “lungo”. NodeJS si muove troppo velocemente, ma mantiene il supporto LTS per oltre 30 mesi e alcune versioni correnti contemporaneamente, mentre Ubuntu mantiene LTS per anni. Sebbene capisca che Discourse non è né un linguaggio né un sistema operativo, sembra annunciare che nuove funzionalità verranno rilasciate a un ritmo piuttosto veloce, il che porta in mente un altro problema: poiché vengono introdotte nuove impostazioni di amministrazione di tanto in tanto, presto finiremo nell’inferno di Wordpress con infinite opzioni e una complicazione incomprensibile per l’amministrazione del sito, alias bloatware: diventa quindi importante chiarire come si passa dalle release esistenti con obiettivi a rilasci regolari, e come si scelgono quali obiettivi abbandonare (o posticipare) per un rilascio, ecc. (il che potrebbe essere già documentato, ma mi è sfuggito.)

Saresti così gentile da condividere la tua logica tra il ritmo di sviluppo / versioning, e cosa hai in mente per evitare che gli amministratori anneghino sotto troppe impostazioni e una curva di apprendimento più ripida?

:heart: :discourse:

1 Mi Piace

Prima di rispondere alle tue altre domande, voglio prima chiarire che la frequenza di rilascio prevista non cambia con questa proposta.

  • Negli ultimi 3 anni, abbiamo effettuato rilasci “stabili” circa ogni 6 mesi, puntando a questi rilasci per la fine di ogni gennaio e luglio, con qualche slittamento qua e là:
  • Negli ultimi circa 8 mesi, abbiamo effettuato rilasci “beta” circa ogni mese, a parte un paio di rilasci di sicurezza fuori banda:

In questa nuova proposta, intendiamo mantenere la stessa cadenza che abbiamo seguito, con le principali modifiche che sono:

  • Quelli che ora chiamiamo rilasci “stabili”, li chiameremo “rilasci di supporto esteso”
    • Abbiamo scelto questo nome e non long term support, perché concordiamo che sia esteso rispetto ai nostri altri rilasci supportati, ma non necessariamente “a lungo termine”. Questa proposta non include l’aggiunta di un rilascio di supporto a lungo termine.
    • Attualmente, il supporto per un rilascio stabile termina immediatamente quando viene effettuato il rilascio successivo. Con questa nuova proposta, il supporto si sovrappone per circa 2 mesi, in modo che le persone abbiano il tempo di aggiornare ricevendo patch di sicurezza.
  • Quelli che ora chiamiamo rilasci “beta”, li chiameremo “rilasci”
    • Attualmente non supportiamo affatto i rilasci beta oltre la loro data di rilascio. Sono semplicemente punti di controllo lungo il percorso che vengono forniti con una notifica per accelerare, poiché spesso includono anche correzioni di sicurezza.
    • Con questa proposta intendiamo supportare i rilasci per circa 2 mesi, in modo che le persone possano decidere quando aggiornare, continuando a ricevere patch di sicurezza.

Tenendo conto di ciò, ritieni che le tue altre domande sui troppi settaggi siano ancora correlate a questa proposta? O sono preoccupazioni indipendenti che sarebbe meglio discutere in un argomento separato?

11 Mi Piace

Grazie per la tua spiegazione esauriente @mcwumbly!

In effetti, questa è una preoccupazione diversa. Personalizzare l’amministratore utilizzando un plugin sarebbe utile per fare test su come potrebbe apparire. C’è qualche lavoro in corso riguardo a tale approccio?

2 Mi Piace

Non specificamente questo, ma abbiamo investito parecchio nel migliorare l’interfaccia utente dell’admin nell’ultimo anno. Se vuoi approfondire queste cose, puoi aprire un nuovo argomento ed esporre alcuni dei problemi e/o delle idee di cui vorresti discutere ulteriormente?

3 Mi Piace

Questo è un ottimo cambiamento (mi piacciono particolarmente gli ESR sovrapposti)

Feedback:

  1. Vorrei vedere quel grafico del ciclo di vita su una pagina centralizzata in modo da poterlo controllare facilmente, idealmente con una tabella EOL in modo da poter dire facilmente cosa è in supporto e cosa non lo è in qualsiasi momento e pianificare di conseguenza (almeno per gli ESR).

  2. Commutazione dello stream:

Sarebbe fantastico, ma anche solo poter scegliere quale tag durante l’installazione sarebbe enorme. O anche solo includere i passaggi manuali nella documentazione di installazione. Se qualcuno vuole iniziare su stable/ESR, non è molto chiaro come farlo in questo momento per un nuovo amministratore. (Penso che la risposta sia passare --skip-rebuild a ./launcher, quindi modificare la versione, quindi eseguire rebuild per la prima volta, ma non sono sicuro.) Poiché altrimenti l’installazione si avvia immediatamente con il recupero e l’esecuzione della versione più recente, e tornare indietro è chiedere guai.

(Esempio della difficoltà per un nuovo amministratore: Al momento, il risultato di ricerca #1 per “install discourse stable” indirizza a questo thread, che collega a un altro thread che spiega come aggiornare a stable, ma non come installare stable da zero.)

2 Mi Piace

Oggi abbiamo compiuto un altro passo verso l’implementazione di questa RFC: la versione più recente di Discourse è numerata come v2025.11.0 :tada:

6 Mi Piace