-
-
Notifications
You must be signed in to change notification settings - Fork 4.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
BEP 6: Branching policy #10177
Comments
|
This all seems roughly fine in very high level terms. A few notes:
That said, one question I have is that I don't really see how point releases will really ever get squeezed in. If e.g. after a freeze and branch for current release, master is opened up for changes, and ends up with
I'm mostly OK with any go these, just unclear what the suggestion is. Or maybe there is something that I've misunderstood. I would also say that:
cc @bokeh/dev |
Let's start from the fact that I messed up the names of releases. I updated the initial comment, but here's what's important: Releases:
My assumption is that patch releases are not continued development (as in new features or any other non-trivial changes), but maintenance of a I realize this is a bit (or perhaps significantly) different from what I initially proposed, but after formulating my initial ideas out loud, I had some more realizations about the release process, especially in the context of software releases (e.g. TypeScript's) that I closely follow. It may seem at first that this approach would make it longer for simpler new additions to reach our users, and that would be the case in general, because minor releases are further apart than patch releases. However, that's actually good, because any new additions require the "break-in" period and proper testing, so that we don't push out half figured out ideas in patch releases and then wouldn't be able to amend them until a major release, due to backwards compatibility concerns. Additionally, this would give us a framework for actually having a release cadence, because patch releases wouldn't be blocked by insufficient testing of new additions, and minor releases would have a more stable cadence as well, because new additions would be merged/adopted early and there would be plenty of time to test them properly and refine if needed. Furthermore, given our limited resources, to actually properly test and refine contributions, we need to focus on a single "main-line" branch, i.e. In practical terms, I was motivated to start this issue due to the current state of the How do we proceed with this now? Do we revert changes to However, if the described process was adopted before 2.1 release, then the scenario would pan out as follows. At feature freeze for 2.1 release a branch would be created ( As bokeh grows, there may be demand for patching up older releases, e.g. due to security concerns. With the described process we should be able to push out such changes easily, well, with some caveats like would we be still able to CI test such releases. Right now the answer is no, e.g. we need to be able to pin down all software involved in testing. I would expect a cadence of 5 weeks between minor releases. The cadence for patch and major releases would be defined by need or demand. No regressions means no need for patch releases. |
@mattpap in general I like all of this. My only comments:
Lastly, would it be so bad to just branch to the next immediately after a release and use that for dev instead of
Under this process, |
@mattpap I'd like ot start drafting a BEP, do you have any thoughts on the comment above (i.e. "branch immediately to new |
I will comment soon, though I agree with most of the suggestions. |
Another thing to consider for the BEP and process is a few new GH labels to specifically identify PRs that are backports, forward ports, etc. |
Another comment: if we are going to continue to automate issue/PR validation and changelog generation, I think we will have to add milestones to PRs. To be honest, there are many times I have wanted to search PRs by milestone so this seems like a welcome change anyway. |
@mattpap FYI I have tagged this as https://github.com/bokeh/bokeh/wiki/BEP-6:-Branching-and-Milestones |
@mattpap just a heads up I changed the branch name (and associated branch protections) to
|
As an aside, don't we need to prohibit force pushes to the |
FYI I added |
@mattpap I pushed a |
Just some terminology I tentatively started to adopt in the first release automation PR, comments welcome:
@mattpap as another aside I would not be opposed to matching the PEP for versions for dev and rc packages, e.g with the extra dot: |
@mattpap I have updated the BEP with more content: https://github.com/bokeh/bokeh/wiki/BEP-6:-Branching-and-Milestones Please review when you have a change. Do you have thoughts about the question immediately above? Also note I did turn of force pushes to base branches. |
To simplify local workflow, one might issue the following: git symbolic-ref refs/heads/default refs/heads/branch-2.2 and redo this every time the base branch is changes. This way one can always refer to the current base branch as |
I definitely don't like the need of always having to monitor the current branch and constantly describing why this is needed to new contributors. The discussion here and the text in the linked BEP seem to revolve around something that has already been invented. |
If we want to have all active mainline (minor release) development on default
Edit: just to summarize the options:
I'm fine with either 1 or 3 |
As an aside, after a little trial with it, I am not very happy about milestoning regular PRs (i.e. non "issue PRs") however if we want to avoid that then we either,
As a reminder the reason things worked before is that we had a single line of development. "All PRs for this release" was the same as asking "All PRs since the date of the next highest version tag". That is no longer the case if we admit the possiblity of patch releases off old branches. (e.g. a 2.2.1 for a "critical fix" after 2.3. and 2.4 have already come out) |
I guess after a little more thought I have a slight preference for a permanent default |
@mattpap I have updated the Wiki document I think that restricted to only branching, things are simple enough to not need examples, so I have deleted that empty section. I also made a few tweaks re: prefer to land on current base and cherry-pick backports. Can you look and see if there are any other changes you would like to make before voting to adopt this BEP? I'd like to mark is as implemented by next week at the lastes. Regarding "dev" branch, I think things have been going well just having |
Proposal:
Milestones:
future
(orx.0
) -- the next major, breaking releasenext
--x.y
orx.y.z
release, whichever comes firstx.y
--majorminor changes, non-user breakingx.y.z
--minorpatch changes, regression fixes fromx.{y-1}
orx.y.{z-1}
releaseBranches:
future
-- aligns withfuture
milestonemaster
-- the nextx.y
milestonerelease_x.y
-- branch offmaster
after feature freeze (master
becomesx.{y+1}
)release_x.y.z
-- the nextx.y.z
releaseThe main assumption behind this proposal is that the majority work is done on
master
for the nextx.y
milestone. I assume that most changes will require a "break-in" period that can't be (and shouldn't be guaranteed) byminorpatch releases. I additionally assume that it will be easier for all contributors to targetmaster
branch, instead of targeting specific branches, which I leave for project/release maintainers. Thus I assume most external contributions will be made available inx.y
releases, unless we (the maintainers) backport those changes tox.{y-1}.z
releases.MinorPatch releases (x.y.z
) should not contain any new features and/or major changes of other kind, and thus shouldn't have more that a dozen (roughly speaking) PRs merged. This will ensure that they can be released quickly and without major breakage, and won't require extensive testing, which should be left forx.y
releases.Details will need to be figured out, e.g. when exactly
release_x.y.z
is branched ofmaster
, etc.The alternative is to have only
release_x
,release_x.y
andrelease_x.y.z
branches, but I'm certain that this would cause chaos for external contributors, and makemaster
branch an archive of old releases, instead of what it typically means in git, which is the current development branch.The text was updated successfully, but these errors were encountered: