Skip to content

Issues with branching and release strategy #192

@johnbillion

Description

@johnbillion

A branching and release strategy was discussed and implemented in #165 and #190. I've identified several problems with this strategy from the point of view of a contributor to FAIR Connect:

  1. This strategy results in a non-stable target branch for PRs. Every six weeks the target branch for PRs will change.
    • A contributor (new or old) who clones the repo or attempts to use the GitHub web UI to propose a change will end up both branching from and targeting the wrong branch. Requiring PRs to target a non-default branch is highly unusual.
    • All contributors will need to discover the name of the new target branch every six weeks, use it in all their branching commands, and find and select it as the target branch for each PR. This will be laborious and introduces the likelihood of making mistakes.
    • All in-progress PRs will need to be retargeted every six weeks.
    • PR authors without maintainer-level access do not have permission to retarget their own PRs. This means a PR gets blocked until a release manager retargets it to the new release branch.
    • GitHub will actually automatically retarget PRs onto the default branch when the release branch gets merged, so there will be at least two retargets in short succession on in-progress PRs.
    • The release version number is effectively chosen six weeks in advance. Probably fine for minor releases but it doesn't lend itself well to point releases or major releases.
  2. The release branch -- instead of the development branch -- gets merged into main.
    • A change can therefore bypass QA by being merged into the release branch shortly before it gets merged into main.
    • In the context of the release workflow, the development branch should be the one that gets merged into main.
    • However, the role of the development branch is unclear. The documentation states that it acts as a staging ground, but that's only true during the short window after the release branch is merged into development and when it's merged to main. It's serving no different purpose to the release branch.
  3. As far as I can tell, this branching strategy is novel.
    • That doesn't make it fundamentally problematic, but it does indicate that perhaps it's trying to do something that's better served by an existing and well-known branching strategy.
    • The "Release Isolation" principle heavily dissuades work being done that is not intended for the current release. This principle is better suited to structured teams working in well-defined sprints, not open source projects looking to encourage outside contribution.
    • Given the six-week cadence of releases of FAIR Connect I would be tempted to recommend the standard GitHub Flow which is basically just feature branches targeting the default branch. The default branch is either the release-ready main or a develop branch which gets merged into it for release, the latter enabling more straight-forward hotfix releases.

I appreciate the considerable time spent by others on the branch and release strategy. I think the current strategy is not the correct one.

Edit: I have corrected the cadence of the FAIR Connect plugin to every six weeks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions