Add a (daily?) job against development versions of dependencies

Created on 30 December 2024, 10 days ago

Problem/Motivation

Spin-off from πŸ“Œ Add performance testing Active and πŸ“Œ Run performance tests in their own job Active .

Quoting @phenaproxima

We have a large number of dependencies that are not pinned, and that we don't control. Any one of them could make a change at any time which would break the expectations of the performance tests. This the nature of the project. And it's a completely different situation than core, which can exercise far greater control.

I think this is a general issue not limited to performance testing, so opening this to discuss the more general point.

Ideally, Drupal CMS works with the latest stable release of the most recent branch of each of its contrib dependencies, and the most recent stable minor release of core.

However, apart from core which has mostly predictable release schedules, contrib modules can release new versions at any moment, and that release could be any of the following:

1. A new patch release with a regression that breaks something in Drupal CMS
2. A new stable minor or major release with an API change that breaks something in Drupal CMS

The more contrib dependencies there are, the more often this is likely to happen. Right now Drupal CMS is moving faster than contrib modules, but that won't be the case forever, maybe not even in a few months. It only needs one contrib module to have a spurt of activity to potentially upset things.

If Drupal CMS only tests with stable versions of its releases, then there is no early warning system for these kinds of upcoming changes. Because there is no pinning, someone could install Drupal CMS immediately after a contrib module update and get a broken install, or public demos could be completely broken etc. and then there needs to be another commit, and another upstream (or Drupal CMS) release, to unbreak things. Better to be able to find those issues before they get into tagged releases and account for them.

However conversely, if Drupal CMS only tests with dev (or pre-release) versions of its dependencies, then MRs could end up relying on things that have only been committed upstream but not released yet, which is equally broken. So it needs to test against both dev and stable.

Opening as critical because it would be better to have this before there's a problem rather than after.

Steps to reproduce

Proposed resolution

Not sure exactly but something like the following:

Have a daily job that first runs composer configure to allow beta stability and removes prefer stable etc., then composer update everything, so get the latest pre-release tag. And another one that does the same thing but re-requires all dependencies with @dev (or however else it's possible to get dev releases for everything).

There should also probably be tests against the 'next minor' of core too - this is done for contrib modules via gitlab_templates flags.

I'm unsure what the policy is (or if there's a policy) for new major versions of contrib modules - is Drupal CMS going to pin to minors so that new majors are an explicit opt-in? Either way that would be something to cover in the test matrix too.

If it's a daily test, it won't interfere with MRs, but it should be a flashing red alarm if it fails.

Remaining tasks

User interface changes

API changes

Data model changes

πŸ“Œ Task
Status

Active

Component

General

Created by

πŸ‡¬πŸ‡§United Kingdom catch

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

Merge Requests

Comments & Activities

Production build 0.71.5 2024