Op dit moment ontwikkel ik software waarbij de broncode op git staat. Daarbij volg ik het model met daarbij in de kern 2 branches: master en development.
In de master branch staan de stabiele versies, en in het verleden hernoemde ik bij een nieuwe versie development naar master begon een nieuwe development branch. Er werd tevens een tag aangemaakt voor de nieuwe versie.
Oftewel, development lag altijd voor op master.
Van de development branch wordt tot nu toe automatisch een nightly versie gepackaged, gebaseerd op het versienummer van master. Bijv: 7.0-35-gdik3nd7e. Dit betekent dan de 35ste commit in development met SHA dik3nd7e na versie 7.0 in master.
Een van de problemen waar ik tegenaan loop is dat ik te lang wacht met een nieuwe release. Dat komt omdat ik op allerlei verschillende plekken verbeteringen aan het aanbrengen ben in mijn software, maar niet alle verbeteringen zijn daarbij even release waardig.
Mijn idee was vervolgens om de commits uit development te cherry-picken naar master en daarmee een nieuwe release te maken. Zo kan ik nieuwe code die stabiel is gevonden vanuit de nightly gebruikers sneller vrijgeven in een nieuwe master versie. Het probleem is dan alleen dat master en development asynchroon gaan lopen. Niet alle commits uit development zijn dan te vinden in specifieke master versie.
Huidige situatie
Development
Master
Nieuwe idee
Master
Development
In de nieuwe logica met cherry-picking weet ik dus niet hoe ik het beste met de versie nummers van development om moet gaan. Commit 2 is geautomatiseerd gepackaged in een nightly versie leidende tot versie 2.0, terwijl die commit pas in 3.0 wordt opgenomen. De versie nummering van development loopt dan helemaal niet meer in lijn met die van master.
Is er dus een slimme manier om een development branch te hebben waarin ik door ontwikkel en die in CI (inclusief nightly packaging en release) staat en waar ik asynchroon uit cherry-pick voor nieuwe stabiele releases?
Mogelijke zelfbedachte oplossingen:
Een van de oplossingen is het automatisch packagen van mijn development branch uit te zetten en i.p.v. daarvan veel vaker een nieuwe master versie uit te brengen. De nightlies hebben echter het voordeel van de collectieve tests door alle gebruikers die geabonneerd zijn op deze nightlies, waardoor bugs sneller naar boven komen.
Een ander oplossing is te zorgen dat development altijd één versie voor loopt op de master. Als de laatste master dus versie 7.0 (incl. tag) is, dan wordt development automatisch versie 8.0-nightly (incl. tag), en dan volgens dezelfde versienummering als hierboven beschreven. Op het moment dat er een nieuwe master komt, dan wordt de oude 8.0-nightly tag verwijderd en een nieuwe 8.0 versie + tag aangemaakt voor master. Ook start er een nieuwe 9.0-nightly + tag. Je houdt wel het probleem dat niet alles wat ik een 8.0-nightly aanwezig was ook daadwerkelijk in een 8.0 master wordt overgenomen en dus de nightly versies asynchroon blijven aan master.
In de master branch staan de stabiele versies, en in het verleden hernoemde ik bij een nieuwe versie development naar master begon een nieuwe development branch. Er werd tevens een tag aangemaakt voor de nieuwe versie.
Oftewel, development lag altijd voor op master.
Van de development branch wordt tot nu toe automatisch een nightly versie gepackaged, gebaseerd op het versienummer van master. Bijv: 7.0-35-gdik3nd7e. Dit betekent dan de 35ste commit in development met SHA dik3nd7e na versie 7.0 in master.
Een van de problemen waar ik tegenaan loop is dat ik te lang wacht met een nieuwe release. Dat komt omdat ik op allerlei verschillende plekken verbeteringen aan het aanbrengen ben in mijn software, maar niet alle verbeteringen zijn daarbij even release waardig.
Mijn idee was vervolgens om de commits uit development te cherry-picken naar master en daarmee een nieuwe release te maken. Zo kan ik nieuwe code die stabiel is gevonden vanuit de nightly gebruikers sneller vrijgeven in een nieuwe master versie. Het probleem is dan alleen dat master en development asynchroon gaan lopen. Niet alle commits uit development zijn dan te vinden in specifieke master versie.
Huidige situatie
Development
code:
1
2
3
4
5
| 123456 commit 1 <-- versie 1.0 234567 commit 2 <-- versie 1.0-2-234567 345678 commit 3 <-- versie 1.0-3-345678 456789 commit 4 <-- versie 2.0 567890 commit 5 <-- versie 2.0-1-567890 |
Master
code:
1
2
3
4
| 123456 commit 1 <-- versie 1.0 234567 commit 2 345678 commit 3 456789 commit 4 <-- versie 2.0 |
Nieuwe idee
Master
code:
1
2
3
4
5
| 123456 commit 1 <-- versie 1.0 345678 commit 3 456789 commit 4 <-- versie 2.0 234567 commit 2 567890 commit 5 <-- versie 3.0 |
Development
code:
1
2
3
4
5
| 123456 commit 1 <-- versie 1.0 234567 commit 2 <-- versie 1.0-1-234567 345678 commit 3 <-- versie 1.0-2-345678 456789 commit 4 <-- versie 2.0 567890 commit 5 <-- versie 3.0 |
In de nieuwe logica met cherry-picking weet ik dus niet hoe ik het beste met de versie nummers van development om moet gaan. Commit 2 is geautomatiseerd gepackaged in een nightly versie leidende tot versie 2.0, terwijl die commit pas in 3.0 wordt opgenomen. De versie nummering van development loopt dan helemaal niet meer in lijn met die van master.
Is er dus een slimme manier om een development branch te hebben waarin ik door ontwikkel en die in CI (inclusief nightly packaging en release) staat en waar ik asynchroon uit cherry-pick voor nieuwe stabiele releases?
Mogelijke zelfbedachte oplossingen:
Een van de oplossingen is het automatisch packagen van mijn development branch uit te zetten en i.p.v. daarvan veel vaker een nieuwe master versie uit te brengen. De nightlies hebben echter het voordeel van de collectieve tests door alle gebruikers die geabonneerd zijn op deze nightlies, waardoor bugs sneller naar boven komen.
Een ander oplossing is te zorgen dat development altijd één versie voor loopt op de master. Als de laatste master dus versie 7.0 (incl. tag) is, dan wordt development automatisch versie 8.0-nightly (incl. tag), en dan volgens dezelfde versienummering als hierboven beschreven. Op het moment dat er een nieuwe master komt, dan wordt de oude 8.0-nightly tag verwijderd en een nieuwe 8.0 versie + tag aangemaakt voor master. Ook start er een nieuwe 9.0-nightly + tag. Je houdt wel het probleem dat niet alles wat ik een 8.0-nightly aanwezig was ook daadwerkelijk in een 8.0 master wordt overgenomen en dus de nightly versies asynchroon blijven aan master.
Sinds de 2 dagen regel reageer ik hier niet meer