Problem/Motivation

At any given moment, we could have up to four branches open:

development branch for current stable patch releases. (8.2.x)
development branch for an upcoming minor release in beta/rc phase (8.3.x)
development branch for next minor release (8.4.x)
development branch for the next major release (9.x-dev)

Issues like #2268449: Run contrib module branch tests against both dev and latest stable core branches, #2651208: More-flexible, while reasonable, configured tests and #2631820: [policy, then infra] Bulk update core issues for relevant minor versions might be simplified if we were able to refer to them with labels, rather than the specific branch names.

If issues were tied to labels, they would be easier to move by reassigning the version associated with a label vs re-assigning the issues to new versions.

Proposed resolution

Use branch labels in the UI in addition to the branch versions they represent:, rather than only actual branch names, for example:

8.2.x-supported
8.3.x-prerelease
8.4.x-development
9.x-maj-development

An additional label that would be useful for drupalci would be 'stable' (8.2.5)

Some suggested semantic labels could be:

stable - This is the current stable release Tag: (8.2.5 currently)
supported - This is the current patch level/bugfix branch. (8.2.x, currently)
prerelease - This is the label for when a development branch reaches the beta->rc cycle (8.3.x, soon)
development - This is where new, backwards compatible feature development is added (8.4.x, soon)
major-development - This is where new, non backward compatible feature development is added.

Remaining tasks

Decide on label UX, and semantic label names (8.2.x-supported vs supported (8.2.x) etc)

Change drupalci and project to use them.

User interface changes

Needs an interface for project maintainers to assign them to versions.

API changes

Data model changes

Update existing issues that are tied to stable versions to something. (https://www.drupal.org/node/2691889 )

Comments

catch created an issue. See original summary.

catch’s picture

Issue summary: View changes
xjm’s picture

xjm’s picture

andypost’s picture

Labels++

xjm’s picture

@catch clarified to me that the proposal was only about what we display to people, and that we would still have 8.0.x / 8.1.x / 8.2.x in git (or at least we don't have to change the git branching model in order to do this).

We also talked about the fact that #2631820: [policy, then infra] Bulk update core issues for relevant minor versions does have advantages because it communicates more to contributors on issues, and it accounts for the beta and RC phases in a way that branch naming alone couldn't (related the point about minor becomes dev becomes minor in the summary). With explicit numbers, we can capture that a certain issue is backported to 8.1.x despite being disruptive because it was important to add during the beta, or even that an issue is important enough to backport to 8.0.x for an unscheduled hotfix after the final scheduled patch release.

Mile23’s picture

Use branch labels in the UI, rather than the actual branch names

Thumbs down.

Change to 'in addition to' and it's thumbs up.

Also add 8.x-RELEASE for the latest official stable release so I can specify my contrib to test only against the release version.

There's also a 9.x-DEV already. :-)

drumm’s picture

Yes, both the version and the label should be present in the version selector. There shouldn't be a need for a documentation decoder ring to figure out what the values mean. Maybe something like:

  • 8.x stable branch for patch releases, currently 8.0.x
  • 8.x development branch for next minor release, currently 8.1.x
  • 8.x development branch for future minor releases, currently 8.2.x

Shortening all the way to patch/minor/dev is something I can barely wrap my head around as someone who hasn't been too involved in roadmap discussions and hasn't kept semver definitions at the top of my mind. I expect my copyediting is a bit too long, especially for issue listings.

jhodgdon’s picture

What UI are you actually talking about here? I'm confused...

catch’s picture

@jhodgdon mostly the the version selector for Drupal.org issues.

Secondarily the version selector when choosing which branch(es) to test against for either patches or contrib modules.

jhodgdon’s picture

Ah. OK, my 2 cents:

To me, 8.x-PATCH, 8.x-MINOR, and 8.x-RELEASE are not clear, without an explanation. Whereas 8.1.x-dev is clear, without an explanation.

catch’s picture

@jhodgdon is it clear without an explanation whether an issue should be posted against 8.0.x, 8.1.x or 8.2.x though?

Possibly more self-documenting labels:

8.x-STABLE
8.x-NEXT
8.x-DEV

Or slightly copy Debian and do:

8.x-STABLE
8.x-TESTING
8.x-DEV (not UNSTABLE since it's supposed to be stable enough).

jhodgdon’s picture

So, there are several groups of people who might be confused by either the present labels or different labels.

a) Experienced core developer (such as myself). I notice a bug or want to propose a feature. I generically know it needs to be filed (currently) against whatever the largest 8.x number is, or against 9.0.x, depending on whether it's 8.x or 9.x material. It is easy enough for me to figure out 8.x-DEV or 8.x-2.x. I don't think I benefit much from the new labels, but -DEV, -NEXT, -STABLE I can at least figure out better than -PATCH, -MINOR, -RELEASE (I really had no idea what those meant). -DEV, -TESTING, -STABLE... I guess those are OK too. But either one kind of has me scratching my head. And one more thing... like xjm/#7, I also like the clarity of having an issue be targeted to a clear release, and communicating clearly when it needs to be moved.

b) Core developer making a patch for an issue. It's filed against 8.x-DEV. So, I go to the command line, and do git checkout... hm... git checkout what exactly? So this seems like it's very confusing for especially a new developer, to figure out what branch (which is numbered) to check out to make a patch for a given issue. For this user group, I think having the actual numbers in the UI is much much better and clearer.

c) Drupal site builder who finds a bug. The site is running Drupal 8.2.3. What do they file the issue against? Well, probably they'll file it against 8.2.3 (that is basically what people often/always do, file it against the version they're actually running, at least I see that a lot). But at least if 8.2.x is in the list, there's a chance they may see that and file it there. I doubt they would immediately understand whether -STABLE, -NEXT, -DEV, -TESTING, -PATCH, -MINOR, or -RELEASE means at all. I think these would confuse this user group.

I see from a few previous comments that the idea might be to *add* labels in addition to the actual branch numbers, rather than replace them... but I think I'm also kind of against that. I don't think we should have two choices in the UI that are really the same thing, because... which one should I choose? It seems very confusing. Plus, we already have around 40 choices in the UI for 8.x issues... not convinced we need that number to be 43.

So... I'm not seeing what the benefit is of this idea... all I see is that it seems confusing if we replace the actual branches with different labels (besides the coding difficulties), and confusing plus more overwhelming than it already is if we add new options for labels to choose that are fluid, in addition to the ones we already have that point to definite branches.

catch’s picture

I notice a bug or want to propose a feature. I generically know it needs to be filed (currently) against whatever the largest 8.x number is, or against 9.0.x, depending on whether it's 8.x or 9.x material. It is easy enough for me to figure out 8.x-DEV or 8.x-2.x.

At the moment that's not what we're doing, this is part of the confusion is that this issue is trying to solve.

Issues that could go into 8.0.x (straight bug or documentation fix, no @internal API change or API addition) are filed against 8.0.x

Issues that could go into 8.1.x (small API enhancements, @deprecations and conversions, bug fixes requiring @internal API changes or upgrade paths that feel risky for 8.0.x) are against 8.1.x

Issues that can't go into either (large API additions, brand new features) are against 8.2.x

This developed haphazardly as a result of not having any way to bulk update issue versions when we initially opened the 8.1.x branch, but we gradually started moving 'not eligible for 8.0.x' issues to 8.1.x as we came across them, and the 8.0.x issues got left where they were. However overall it's been working reasonably well. It also makes it very easy to filter the RTBC queue by branch - for example right now today 8.1.x is commit frozen around the beta release, but I could still commit 8.2.x-only patches, or commit 8.1.x patches to 8.2.x and leave them RTBC against 8.1.x for cherry-picking later in the week.

Right at the moment it's extra-confusing because we have three open branches, for 2/3rds of the year we'll only have two.

Now we could change that and go back to using the 'Needs backport to' tags, but then there's no way (at least for me) to rename a tag from 'Needs backport to 8.0.x' to 'Needs backport to 8.1.x' - so again the metadata gets stale every 4-6 months. And even if every issue was assigned against max($8_branch), that's still going to increment every six months too. So no less bulk updating to do.

Modules mostly have to work with 8.0.x, are expected to work with 8.1.x soon. However right at the moment all contrib tests run against 8.1.x (there are other issues open to allow some choice). Once modules have a choice, we don't want to leave them testing against 8.0.x for years after it's EOL, they'll need to move from stable -> stable or testing -> testing based on whatever's picked. We don't particularly want modules tested against 8.2.x until it's in beta, unless they specifically opt-in to that.

I see from a few previous comments that the idea might be to *add* labels in addition to the actual branch numbers, rather than replace them... but I think I'm also kind of against that. I don't think we should have two choices in the UI that are really the same thing,

The idea would be something like:

8.2.x - development
8.1.x - testing
8.0.x - stable

But ideally an issue assigned to 8.2.x - development would seamlessly move to 8.3.x - development when we open that branch. I'm not against the bulk updating if that turns out to be the best way to do it, but it feels like a lot to keep track of and has to be done by DA staff (i.e. Neil), then as mentioned, contrib test defaults would need bulk updating too if the UI is linked to specific branches.

On the number of choices, it is overwhelming yes, but also opened #2691889: Add option to remove tagged releases from the version selector yesterday to remove tags and #2691895: Remove unsupported branches/releases from the version selector to remove unsupported branches so if one or both of those goes in it'll be a lot thinner.

jhodgdon’s picture

The current policy of putting 8.anything issues into 8.0 is not really working, as far as I can tell. The patches need to be applied to 8.2 first and then backported (if necessary) to 8.1, then 8.0. I think they all need to be filed against 8.2 and have backport tags, just as we would do if something was applicable to 8.x and 7.x.

Anyway. I like the idea of making 1 entry per branch and making them look like "8.2.x - development" etc. That adds information rather than confusing things.

xjm’s picture

The current policy of putting 8.anything issues into 8.0 is not really working, as far as I can tell. The patches need to be applied to 8.2 first and then backported (if necessary) to 8.1, then 8.0. I think they all need to be filed against 8.2 and have backport tags, just as we would do if something was applicable to 8.x and 7.x.

Well, actually, the policy has worked for like... 95% or more of issues committed to 8.0.x since 8.0.0 (the vast majority of issues cherry-picked cleanly). Also, the policy is not that "8.anything issues [go into] 8.0"; it's that only issues eligible for 8.0.x get filed against 8.0.x. I agree that it's not perfect--it was an interim solution when 8.0.0 was released and we needed to deal with 8.1.x being open--but it's also mostly worked until now. The branch selection has actually been a very important part of communicating semver requirements to people.

I don't think the solution is just to add more backport tags; they are not explicit or visible enough and don't actually reflect our process for D8. That's where #66484: Allow issues to be filed against multiple versions/branches. comes in, and to some extent #2623118: [policy, no patch] Update patch backporting workflow to be compatible with semantic versioning. Also, we are making progress on getting away from the entire idea of backport tags in #2462101: [policy, no patch] Update backport policy to account for 8.x minor versions and 7.x divergence.

catch’s picture

Well, actually, the policy has worked for like... 95% or more of issues committed to 8.0.x since 8.0.0 (the vast majority of issues cherry-picked cleanly).

Yes I'd agree with this. Also the majority of the 5% have been in the last month where there's been the highest divergence between branches, but that's by nature a short term situation with a 6-month cycle, unlike 7.x vs. 8.x where it diverges over years.

jhodgdon’s picture

I totally agree that "make the issue 8.0 if it should go into all branches" worked fine when all we had was 8.0 and 8.1, and everyone was so tired out after getting 8.0 out the door, not much was happening in Core.

But now that we also have 8.2, and now that things are starting to diverge and the patches don't apply to all 3 branches as often, I don't think it's working as well.

Anyway. Sorry, noise.

catch’s picture

But now that we also have 8.2, and now that things are starting to diverge and the patches don't apply to all 3 branches as often, I don't think it's working as well.

8.1.x and 8.2.x haven't really diverged yet, it's mostly between 8.0.x and 8.1.x. The last patch release for 8.0.x is April 6th - i.e. less than two week away. After that it won't get any commits at all unless there's a paper bag/hotfix or security release.

I'd expect 8.1.x and 8.2.x to start diverging again soonish, will be interesting to see if it's less or more of a problem than it has been the past six months.

But we're really talking about a 4-6 week period, twice per year, where there are three branches and the current stable release is diverging. We might be able to reduce that further for future minor releases as well ('close' the stable branch earlier, like the beta instead of the rc, or open the -dev branch later because we've started using feature branches a bit more).

jhodgdon’s picture

Maybe we should discuss this on a separate issue, but ... My suggestion would be that issues are always filed against the latest branch that they apply to (so they'd all go against 8.2 at the moment). It seems like when we have an RTBC patch, the committers are the ones who have to decide which branch(es) to commit it to, right? But pretty much all patches have to go into 8.2 before they get applied to 8.1/8.0/7, so they have to apply to 8.2 and be tested against 8.2 as a priority. Then after making the commit, if the committer decides it belongs in 8.1 or 8.0 or 7, they can either apply the patch directly or cherry-pick, or if the patch doesn't apply due to divergence, they can then put the issue in the other branch and mark it Patch (to be ported).

But if we file/patch/test vs. 8.1 or 8.0 to begin with, then the patch sometimes doesn't apply to 8.2 when it comes time to commit, and in the end the committer *still* has to make the decision as to whether it belongs in the older branches.

xjm’s picture

The problem I see with #21 is that it places the intellectual burden entirely on the committer and makes it appear that only committers can decide. And then committers have to do the emotional labor of telling people why their patch is or isn't backported as well. Whereas by making it a first-class part of issue metadata (either with the current practice or this proposal), we make it clear that it is everyone's responsibility, and committers are just signing off (or occasionally not). Backport tags cause similar problems.

The easiest, lowest risk, lowest effort for thing for a committer to do is to commit everything to (at the moment) 8.2.x and just mark it fixed. But that's not what is best for Drupal, because sites also need bugfixes in patch releases.

I agree that it's confusing, and sometimes patches might be created that don't apply to 8.2.x. But I think it's the least confusing of everything we've tried to date with the current feature set of project_issue.module. To make it even less confusing, we should improve the tool. This proposal is one way to do that. #66484: Allow issues to be filed against multiple versions/branches., #2631820: [policy, then infra] Bulk update core issues for relevant minor versions, #2691889: Add option to remove tagged releases from the version selector, #2691895: Remove unsupported branches/releases from the version selector are others.

I'd prefer not to change the current practice at this time. I'd rather tough it out for one more week until 8.0.x is EOL, and then we are back to essentially where we were at 8.0.0 except that it's even easier because issues are mostly in the right branches and every one of them with a helpful system message linking the relevant docs. Meanwhile, we can continue working on improving the usability of the tools through these different proposals. Hopefully the tools will catch up by the time either 8.1.x and 8.2.x have diverged to the point that backport ping-pong is again an irritant or 8.3.x is branched. And if they haven't, then we could revisit @jhodgdon's suggestions or other alternatives.

jhodgdon’s picture

OK. For issues I deal with (documentation mostly), then I'll be putting them back into 8.0 (soon: 8.1). I guess when I mark them RTBC I can also trigger an 8.2 test (that is already possible to do I think on an 8.0/8/1 issue).

Mixologic’s picture

From a testing policy standpoint, we would like the testbots to have differing policies based upon semantic labels, not upon the specific versions.

Myself and Drumm had a bit of a whiteboard session and came up with the following semantic labels for the development branches:

8-stable - This is the current stable release Tag: (8.0.6 currently)
8-supported - This is the current patch level/bugfix branch. (8.0.x, currently)
8-prerelease - This is the label for when a development branch reaches the beta->rc cycle (8.1.x, currently)
8-development - This is where new, backwards compatible feature development is added (8.2.x, currently)
9-development - This is where new, non backward compatible feature development is added.

Anywhere we would display these labels we'd definitely want to have both the label and what they currently point to as part of the display (8-stable [8.0.6]).

As far as where and how to file issues, or backporting policies, I dont believe thats particularly in scope for this issue, other than the fact that it makes those issues easier to discuss if we use agreed upon semantic labels to communicate policy.

jhodgdon’s picture

+1 for "Anywhere we would display these labels we'd definitely want to have both the label and what they currently point to as part of the display (8-stable [8.0.6])."

I have no strong opinion on the specific labels, but they seem OK to me. And I don't set the issue filing or backporting policies either. :)

catch’s picture

#24 makes sense except that 8.0.6 is a tag rather than a branch, and we currently don't set anything against tags (neither issues nor tests) and have no plans to afaik. Although having written that, I could see some contrib projects only wanting to test against tags if they really, really never wanted to get warned about breaking changes in the 'supported' branch.

I really like 'pre-release', I've really been struggling with having 8.0.x, 8.1.x and 8.2.x open at the same time, and that communicates the state the 8.1.x branch is in at the moment very well.

Mixologic’s picture

The 8.0.6. tag would mostly be for testing purposes when working on contrib modules, I dont think it should be an option for filing issues. Contrib's use case is that when in development, you want to keep all changes isolated to ensure that the only thing that is changing is the code one is actually working on. That is an entirely different requirement than being warned about breaking changes in supported. That's why we want to get to where we actually have different "Job Targets" (development, vs regression) in drupalci - that way patch level changes are tested against something known, and regression tests can catch those kinds of unanticipated breaking changes.

catch’s picture

@Mixologic yes it makes sense for that use case.

Version: 8.1.x-dev » 8.2.x-dev

Drupal 8.1.9 was released on September 7 and is the final bugfix release for the Drupal 8.1.x series. Drupal 8.1.x will not receive any further development aside from security fixes. Drupal 8.2.0-rc1 is now available and sites should prepare to upgrade to 8.2.0.

Bug reports should be targeted against the 8.2.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.3.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Mixologic’s picture

Issue summary: View changes

I suppose this needs an IS update.

Version: 8.2.x-dev » 8.3.x-dev

Drupal 8.2.6 was released on February 1, 2017 and is the final full bugfix release for the Drupal 8.2.x series. Drupal 8.2.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.3.0 on April 5, 2017. (Drupal 8.3.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.3.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.4.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.3.x-dev » 8.4.x-dev

Drupal 8.3.6 was released on August 2, 2017 and is the final full bugfix release for the Drupal 8.3.x series. Drupal 8.3.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.4.0 on October 4, 2017. (Drupal 8.4.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.4.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.5.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.4.x-dev » 8.5.x-dev

Drupal 8.4.4 was released on January 3, 2018 and is the final full bugfix release for the Drupal 8.4.x series. Drupal 8.4.x will not receive any further development aside from critical and security fixes. Sites should prepare to update to 8.5.0 on March 7, 2018. (Drupal 8.5.0-alpha1 is available for testing.)

Bug reports should be targeted against the 8.5.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.6.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.5.x-dev » 8.6.x-dev

Drupal 8.5.6 was released on August 1, 2018 and is the final bugfix release for the Drupal 8.5.x series. Drupal 8.5.x will not receive any further development aside from security fixes. Sites should prepare to update to 8.6.0 on September 5, 2018. (Drupal 8.6.0-rc1 is available for testing.)

Bug reports should be targeted against the 8.6.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.7.x-dev branch. For more information see the Drupal 8 minor version schedule and the Allowed changes during the Drupal 8 release cycle.

Version: 8.6.x-dev » 8.8.x-dev

Drupal 8.6.x will not receive any further development aside from security fixes. Bug reports should be targeted against the 8.8.x-dev branch from now on, and new development or disruptive changes should be targeted against the 8.9.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Version: 8.8.x-dev » 8.9.x-dev

Drupal 8.8.7 was released on June 3, 2020 and is the final full bugfix release for the Drupal 8.8.x series. Drupal 8.8.x will not receive any further development aside from security fixes. Sites should prepare to update to Drupal 8.9.0 or Drupal 9.0.0 for ongoing support.

Bug reports should be targeted against the 8.9.x-dev branch from now on, and new development or disruptive changes should be targeted against the 9.1.x-dev branch. For more information see the Drupal 8 and 9 minor version schedule and the Allowed changes during the Drupal 8 and 9 release cycles.

Pasqualle’s picture

Version: 8.9.x-dev » 9.2.x-dev

But if we file/patch/test vs. 8.1 or 8.0 to begin with, then the patch sometimes doesn't apply to 8.2 when it comes time to commit,

Yes, and more than that, as there is no patch for 8.2 at all, the issue simply will not be solved without a patch.

The core issue version should be set to the branch for which we are expecting a patch. Anything else is confusing.
I have checked the last 20 fixed core issues, and every developer is bumping up the version to the latest development branch, where the issue is fixed. So I don't get it why the version should be an "old" release.

I have only found one example where catch moved the version back #2208401: [META] Remaining multilingual migration paths
I think that was just confusing, and did not improve anything. The backport did not happen, and it seems nobody wants it to be backported.
The backport discussion is only meaningful if it happens after the issue is fixed on the latest version. Or a separate issue can be created when it is clear that the backport will need a different solution.

I don't understand what this policy is trying to solve.

xjm’s picture

@Pasqualle, in most cases there is no "backport discussion" because core policy clearly outlines which issues can be backported and which cannot. A discussion only occurs if there's some potential disruption being weighed against the advantage of having the fix backported to production sooner. The majority of backported issues bugfixes are backported with a simple cherry-pick at the same time as they are fixed in the development branch.

Your sample of the "last 20 fixed issues" is not a good sample, because we were approaching the deadline for the 9.1 alpha, so of course extra attention was being paid to minor-only issues. Not all bugfixes are eligible for backport. I assure you that we create patch releases for both 8.9.x and 9.0.x every month that contain plenty of backported fixes:
https://www.drupal.org/project/drupal/releases/9.0.7
https://www.drupal.org/project/drupal/releases/8.9.7

I also assure you that committers are well-versed in this policy and will backport issues if appropriate. When we're managing 3-4 branches at a time, going through a separate review cycle each time an issue is backported is needless overhead.

Version: 9.2.x-dev » 9.3.x-dev

Drupal 9.2.0-alpha1 will be released the week of May 3, 2021, which means new developments and disruptive changes should now be targeted for the 9.3.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.3.x-dev » 9.4.x-dev

Drupal 9.3.0-rc1 was released on November 26, 2021, which means new developments and disruptive changes should now be targeted for the 9.4.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.4.x-dev » 9.5.x-dev

Drupal 9.4.0-alpha1 was released on May 6, 2022, which means new developments and disruptive changes should now be targeted for the 9.5.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

Version: 9.5.x-dev » 10.1.x-dev

Drupal 9.5.0-beta2 and Drupal 10.0.0-beta2 were released on September 29, 2022, which means new developments and disruptive changes should now be targeted for the 10.1.x-dev branch. For more information see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.

catch’s picture

Version: 10.1.x-dev » 11.x-dev

Drupal core is moving towards using a “main” branch. As an interim step, a new 11.x branch has been opened, as Drupal.org infrastructure cannot currently fully support a branch named main. New developments and disruptive changes should now be targeted for the 11.x branch, which currently accepts only minor-version allowed changes. For more information, see the Drupal core minor version schedule and the Allowed changes during the Drupal core release cycle.