[D9 EOL] Mark Drupal 9 only contrib releases unsupported and notify maintainers by end of January 2024

Created on 1 November 2023, about 1 year ago
Updated 29 May 2024, 7 months ago

Problem/Motivation

Drupal 9 is EOL as of November 1st 2023. Mark any contributed project releases that are only Drupal 9 compatible unsupported before end of January 2024.

Will Drupal 7 releases be affected?

No, Drupal 7 is still supported by the community until January 5, 2025.

What about releases compatible with both Drupal 9 and Drupal 10?

Releases compatible with both Drupal 9 and Drupal 10 will not be affected.

Will my project page itself be affected?

No, we will not be marking whole projects unsupported, just the D9-only compatible releases.

How do I make a release of my project compatible with Drupal10?

Check for your issue queue for project update bot patches. Use upgrade status for a full scan of compatibility. The best of course is if you have a test suite in the project that can make sure of compatibility.

Once done, go to your project page on www.drupal.org, click “Administer releases” and mark the release series as supported.

How do I update Automated Testing for my project?

We recommend reviewing the Automated Testing tab linked at the top of your Project Page. The option to test against Drupal 9 will soon be removed, and if you were only testing against Drupal 9, you will want to make sure you have testing for Drupal 10 correctly enabled. DrupalCI will be disabled in 2024, so now is the time to adopt Gitlab CI. See https://www.drupal.org/docs/develop/git/using-gitlab-to-contribute-to-dr...

Remaining tasks

Perform this bulk update once cleared by security team and core stakeholders.

Implementation (TODO: update to Drupal 9)

Query for auditing in-use core_version_requirements:

SELECT DISTINCT pcc.core_version_requirement FROM project_release_supported_versions prsv INNER JOIN node n ON n.nid = prsv.nid AND n.status = 1 AND n.type != 'project_core' INNER JOIN field_data_field_release_category fdf_rc ON fdf_rc.entity_id = prsv.latest_release AND fdf_rc.field_release_category_value = 'current' INNER JOIN project_composer_component pcc ON pcc.release_nid = fdf_rc.entity_id AND pcc.component_role = 'primary' WHERE supported = 1 GROUP BY prsv.nid, prsv.branch;
+--------------------------+
| core_version_requirement |
+--------------------------+
| ^9.3                     |
| ^8.8.6 || ^9             |
| ^8.7.10 || ^9            |
| ^8.8.2 || ^9             |
| ^9                       |
| ^8 || ^9                 |
| ^9.2                     |
| ^8.7.7 || ^9.0           |
| ^8.9 || ^9               |
| ^8.7.7 || ^9             |
| ^9 || ^10                |
| ^8.9.11 || ^9.0.10       |
|                          |
| ^8.9 || ^9.1             |
| ^8 || ^9|| ^10           |
| ^8.8 || ^9               |
| ^8.7.12 || ^9            |
| ^8 || ^9 || ^10          |
| ~9                       |
| ~8                       |
| ^8.9 || ^9.0             |
| ^8.5 || ^9               |
| ^8.8.4                   |
| ^8.8 || ^9.0             |
| ^8 | ^9                  |
| ^8.8.0 || ^9.0           |
| ^8.8.6 || ^9.0.0         |
| ~8.9.1 || ^9             |
| ~9.0.0                   |
| ^9.1                     |
| ^8.7 || ^9               |
| ^8.8.4 || ^9.0           |
| ^8.8.3 || ^9             |
| ^8.4 || ^9               |
| ^9.1.0-alpha1            |
| ^8.0 || ^9.0             |
| ^8.8.0 || ^9.0.0         |
| ^8.8.4 || ^9             |
| ^8.8                     |
| ^8 ||^9                  |
| 9.x                      |
| 8.x || ^9                |
| ^8.0 || ^9               |
| ^8.9.0 || ^9             |
| ^8.7.7 || ^8.8 || ^9     |
| ^8.7.7  || ^9            |
| 8.x || 9.x               |
| ^8.6 || ^9               |
| ^8.8.0                   |
| ^8.7.12 || ^9.0          |
| ^8                       |
| ^8.8 || ^9 || ^10        |
| ^8.8.0 || ^9             |
| ^8.7.7                   |
| ^8.8 ||^9                |
| ^8.8.1 || ^9             |
| ^9.0                     |
| ^9.2 || ^10              |
| ^8.7.7 ||^9              |
| ^8 || 9                  |
| ^8.8 || ~9.0             |
| ^8.8.3 || ^9.0           |
| ~8.8 || ^9               |
| ^8.8 | ^9                |
| ^8.8 || 9                |
| ^8.9.0 || ^9.0           |
| ^8.9  || ^9              |
| ^8.9|^9.0                |
| ^8|| ^9                  |
| ^8 |^9                   |
| ^9.                      |
| ^8|^9                    |
| ^8.9 || ^9.2             |
| ^8.8|| ^9                |
+--------------------------+

Query for supported release series on published projects, that are “current” (semver or 8.x- prefix), where the primary component has a core version requirement that’s empty or a known “8-only” constraint from the list above:
SELECT n.nid, n.title, prsv.branch FROM project_release_supported_versions prsv INNER JOIN node n ON n.nid = prsv.nid AND n.status = 1 AND n.type != 'project_core' INNER JOIN field_data_field_release_category fdf_rc ON fdf_rc.entity_id = prsv.latest_release AND fdf_rc.field_release_category_value = 'current' INNER JOIN project_composer_component pcc ON pcc.release_nid = fdf_rc.entity_id AND pcc.component_role = 'primary' WHERE supported = 1 AND pcc.core_version_requirement IN ('', '^8.8', '^8', '^8.7.7', '^8.8.4', '^8.8.0', '~8') GROUP BY prsv.nid, prsv.branch;

Query for admin releases maintainers of those projects:
SET group_concat_max_len = 1000000; SELECT u.name, u.mail, group_concat(DISTINCT concat(n.title, ' ', prsv.branch, '*') SEPARATOR ', ') project_branches, group_concat(DISTINCT concat('https://www.drupal.org/', ua.alias) SEPARATOR ', ') project_urls FROM project_release_supported_versions prsv INNER JOIN node n ON n.nid = prsv.nid AND n.status = 1 AND n.type != 'project_core' INNER JOIN field_data_field_release_category fdf_rc ON fdf_rc.entity_id = prsv.latest_release AND fdf_rc.field_release_category_value = 'current' INNER JOIN project_composer_component pcc ON pcc.release_nid = fdf_rc.entity_id AND pcc.component_role = 'primary' INNER JOIN url_alias ua ON ua.source = concat('node/', n.nid) INNER JOIN project_release_project_maintainer prpm ON prpm.nid = n.nid AND prpm.administer_releases = 1 INNER JOIN users u ON u.uid = prpm.uid AND u.status = 1 WHERE supported = 1 AND pcc.core_version_requirement IN ('', '^8.8', '^8', '^8.7.7', '^8.8.4', '^8.8.0', '~8') GROUP BY u.uid;

Query for making the update:

UPDATE project_release_supported_versions prsv INNER JOIN node n ON n.nid = prsv.nid AND n.status = 1 AND n.type != 'project_core' INNER JOIN field_data_field_release_category fdf_rc ON fdf_rc.entity_id = prsv.latest_release AND fdf_rc.field_release_category_value = 'current' INNER JOIN project_composer_component pcc ON pcc.release_nid = fdf_rc.entity_id AND pcc.component_role = 'primary' SET prsv.supported = 0, prsv.recommended = 0 WHERE prsv.supported = 1 AND pcc.core_version_requirement IN ('', '^8.8', '^8', '^8.7.7', '^8.8.4', '^8.8.0', '~8');
TRUNCATE cache_project_release_download_table;
📌 Task
Status

Fixed

Version

3.0

Component

Miscellaneous

Created by

🇭🇺Hungary Gábor Hojtsy Hungary

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

  • Issue created by @Gábor Hojtsy
  • 🇺🇸United States drumm NY, US

    At least the first step will need to be converted to a Drush command, since there are now 224 unique core version requirements used. The Composer server library can check if the compatibility does match 10.0.0 or 10.999.999. There isn’t a method I know of to check if two ranges overlap, so we have to pick an arbitrary specific version numbers, which can be hypothetical.

    The following queries need to be updated to only consider modules & themes. General projects, distributions, etc should not be affected.

    • drumm committed 896eae17 on 7.x-3.x
      Issue #3398253: Add drush command to find current contrib releases that...
  • 🇺🇸United States drumm NY, US

    Core version requirements like ~10.1.0 are why this process is cumbersome with semver. There is not an “version ranges intersect” function. That requirement is >=10.1.0 < 10.2.0, it’s compatible with only Drupal 10.1.

    I ended up loading every core version, matching those to a constraint like ^10, and then using the matching core versions to check for “compatible with a version of Drupal 10”

    Attached are the 4,883 branches that would be unsupported today, if this code is correct so far.

    • drumm committed 796552f2 on 7.x-3.x
      Issue #3398253: Add option to get maintainers of branches that will be...
  • 🇺🇸United States drumm NY, US

    The remaining work here is the final “Query for making the update” query. This should be behind and option similar to the maintainers-for-email option, so this destructive action isn’t the default. This should also have a “Are you sure you want to mark X release series as unsupported? y/N” prompt for extra confirmation.

    TRUNCATE cache_project_release_download_table; should be replaced with the right cache_…() function.

  • Status changed to Fixed 11 months ago
  • 🇺🇸United States drumm NY, US

    The releases have been marked unsupported, logs attached.

  • Automatically closed - issue fixed for 2 weeks with no activity.

  • heddn Nicaragua

    I've opened 📌 [D9 EOL] Mark Drupal 9 only contrib non-projects unsupported and notify maintainers by end of July 2024 Active to account for some missed things. Like distros. Will need help to discover what, besides distros was missed with this earlier query.

Production build 0.71.5 2024