Changes between Version 5 and Version 6 of SuperProjectWorkflow


Ignore:
Timestamp:
Jan 2, 2014, 3:47:02 PM (9 years ago)
Author:
Beman Dawes
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • SuperProjectWorkflow

    v5 v6  
     1|| [wiki:ModularBoost Home] || [wiki:ModBigPicture Overview] || [wiki:StartModWorkflow Workflow] || [wiki:Git/GitHome Git] || [wiki:StartGitHub GitHub] || [wiki:GitCautions Cautions] || [wiki:TryModBoost Clone] || [wiki:StartModMaint Maintain] || [wiki:StartModPatchAndPullReq Patch] ||
     2[[BR]]
     3
    14= Super-Project Workflow =
    25[[PageOutline]]
     
    1821* Branch "develop": automatically tracks "master" of submodules (scripted).
    1922* Branch "latest": automatically tracks "develop" of submodules (scripted).
     23
     24[wiki:#Namingrationale Naming rationale] below explains the detailed rationale for this structure.
    2025
    2126'''Caution:''' "develop" and "latest" are present to support the legacy testing framework. Once continuous integration and test-on-demand facilities are available, these super-project branches may no longer be needed and may disappear. Library developers and users should not depend on their continued existence.
     
    5257* Would release management and regression testing scripts be simpler if the name of the release development branch was fixed (e.g. "release") rather than varying (e.g. "release/1.56.0")?
    5358
     59== Naming rationale ==
     60
     61'''Question:''' Is {{{develop}}} tracking {{{master}}} and {{{latest}}} tracking {{{develop}}} a typo or inconsistency?
     62
     63* Branch "master": Latest Boost release.
     64* Branch "release/n.n.n": Release preparation branch.
     65* Branch "develop": automatically tracks "master" of submodules (scripted).
     66* Branch "latest": automatically tracks "develop" of submodules (scripted).
     67
     68'''Answer:'''
     69
     70No, it is not. Super "develop" does track sub "master", and it does seem inconsistent, at first.
     71
     72Start from the git flow workflow and the role it assigns to the "master" branch. A commit to "master" is a release, by definition. And commits to master (releases) are done by merging. Let's suppose, for simplicity, that it is "develop" that is merged to "master", and not a dedicated release branch - the latter just adds one more level of indirection.
     73
     74So "master" is the last release, and "develop" is the next release (or the next next release, if a release branch is active).
     75
     76Now... if a commit to the "master" branch of the super-project is a release by definition, it follows that it cannot be scripted to track submodules, right? The "master" branch of the super-project will only contain merge commits from the super-project "develop" branch (or, in practice, a super-project release branch, which will be what "develop" was at some earlier point in time.)
     77
     78Consider now a submodule, smart_ptr. Applying the logic above, smart_ptr:master is the last release of smart_ptr, and smart_ptr:develop is the next release of smart_ptr. The last release of smart_ptr (smart_ptr:master) will become part of the next release of Boost (which lives on boost:develop).
     79
     80Hence, boost:develop can, and should, be scripted to track smart_ptr:master.
     81
     82This all falls out of the asynchronous release schedule of the submodules with respect to the super-project.
     83
     84In addition, Peter proposes an additional super-project branch ("latest") that does track the submodule "develop" branches, purely for testing purposes. It's never merged to anything, no release branches are ever spawned off of it; it's just the integration test that is the equivalent of our old SVN trunk test.
     85
     86It's basically a three-level architecture:
     87
     88 * submodule:develop
     89 * submodule:master == super-project:develop
     90 * super-project:master
     91
     92which, if we used a single repo for all of Boost, would have been achieved with having a permanent "feature" branch per component:
     93
     94 * boost:feature_smart_ptr
     95 * boost:develop
     96 * boost:master
     97
     98The workflow is more or less the same in either case - upper levels merge to lower levels when stable.
     99
    54100== Acknowledgements ==
    55101
    56 Thanks to Peter Dimov for his proposal!
     102Thanks to Peter Dimov for his proposal! He also supplied the [wiki:#Namingrationale Naming rationale]. Beman Dawes created and maintains this wiki page.