Problem/Motivation
#3622091 switched functional testing to Drupal CMS only and made the install job the gate for the whole suite, deliberately allow_failure: false so the pipeline would be honestly red. That has now run on a real drupal.org runner, and the result is in: the job fails, everything downstream is skipped, and the pipeline is red on every branch and every merge request.
This issue reverses that decision. The judgement recorded in #3622091 was that an honest red is better than a green pipeline running zero tests. The judgement now is that the pipeline should not sit permanently red on a defect Educare neither owns nor can fix, so the install job becomes allow_failure: true. Both positions have a real cost; this one is chosen with the cost written into the file.
The upstream cause
drupal_cms_helper 2.1.4 RecipeSubscriber::onApply() saves system.site during RecipeAppliedEvent, reaching Config::save(), then hasConfigSchema(), then TypedConfigManager::alterDefinitions(). That resolves every hook_config_schema_info_alter and so instantiates Canvas ComponentSourceHooks, a class that declares the config_schema_info_alter hook attribute while constructor-injecting the kernel service by autowiring. During a recipe install the container is a ContainerBuilder where kernel is synthetic, so it throws:
RuntimeException: You have requested a synthetic service ("kernel"). The DIC does not know how to construct this service. (ContainerBuilder.php:1104)
Canvas 1.11.0; the autowire entered between Canvas 1.4.2 and 1.5.2. Independently reproduced four times:
- a DDEV
drupal/cmsbuild; - the browser installer, which dies at 98%;
- the stock
drupal_cms_starterrecipe, with zero Educare code; - a clean drupal.org CI runner (pipeline 955303, job 12095450).
So it is not CLI-specific and not Educare-specific. Pinning Canvas back to 1.4.2 is not a workaround: Educare's own config then fails at ReferenceFieldTypePropExpression.php:210.
The cost of this change
While that defect stands, a green pipeline means "nothing broke in the jobs that ran", NOT "the tests passed". The functional suite executes zero tests, because the site it needs is never built. A genuine Educare regression could hide behind a green pipeline for exactly as long as this lasts.
That warning is not left in the issue queue: the change puts it at the top of .gitlab-ci.yml and again on the job itself, so anyone reading a green pipeline sees it.
Steps to reproduce
- Run the pipeline on
1.0.x. - The install job fails on the synthetic-service error above, the functional and report stages are skipped, and the pipeline is red.
Proposed resolution
- Set
allow_failure: trueon the Drupal CMS install job and on its manual rule. - Rewrite the header comment block in
.gitlab-ci.ymlfrom "KNOWINGLY RED TODAY ... Do not mask it" to a "BLOCKED UPSTREAM ... read this before trusting a green pipeline" warning, and repeat the warning on the job. - One file,
.gitlab-ci.yml. No patch is involved.
Not yet run. The change has not been pushed or executed, so nothing here should be read as a verified green pipeline. The functional suite still does not run at all.
Remaining tasks
- ✅ File an issue
- ❌ Addition/Change/Update/Fix
- ❌ Testing to ensure no regression
- ❌ Restore
allow_failure: falseon the install job once it can succeed - ❌ Restore
script_failureto that job'sretry:at the same time - ❌ Confirm the functional suite actually runs and passes on Drupal CMS once unblocked
- ➖ Automated unit/functional testing coverage
- ➖ Developer Documentation support
- ➖ User Guide Documentation support
- ➖ UX/UI designer responsibilities
- ➖ Accessibility and Readability
- ❌ Reviewed by a human
- ❌ Code review by maintainers
- ❌ Full testing and approval
- ❌ Credit contributors
- ❌ Review with the product owner
- ❌ Update Release Notes
- ❌ Release
User interface changes
- N/A
API changes
- N/A
Data model changes
- N/A
Release notes snippet
- The Drupal CMS install job is allowed to fail while an upstream Canvas defect blocks every recipe install, so the pipeline is not permanently red. While that lasts, a green pipeline does not mean the tests passed: the functional suite runs no tests at all.
AI-Generated: Yes
Issue fork educare-3622102
Show commands
Start within a Git clone of the project using the version control instructions.
Or, if you do not have SSH keys set up on git.drupalcode.org:
Comments
Comment #3
rajab natshahClosing this as will not fix. It is superseded by #3622106, and it was wrong on two counts.
The premise was wrong. This issue rested on the defect being upstream in Canvas and unfixable from Educare. It is not. Canvas installs
canvas_page_template_componentlazily duringRecipeAppliedEvent, and the container rebuild that causes is what leaveskernelsynthetic and unset. Declaring that module in the recipe's owninstall:list prevents the mid-event install, and the install then completes: one line, in this project. With a real fix available, allowing the job to fail is not warranted.The workaround also did not work. Pipeline 955357 showed that
allow_failure: truechangesneeds:semantics: dependants run instead of being skipped. All 16🧪 Functionalbuckets therefore ran against a site that was never built and failed at exit code 127 (vendor/bin/drush: No such file or directory). Baseline pipeline 955337 had them correctly skipped. So it traded one red pipeline for a worse one and burned 16 parallel jobs to get there.The real fix is in #3622106, which credits Horizon Aid #3622092 for finding it first.
AI-Generated: Yes