Skip to main content

Continuous integration

An Eddy extension runs its CI on GitHub Actions. Each job runs the same tooling commands you run locally, so you can reproduce a CI failure locally on the same Drupal and PHP versions. This page lists the workflows, what their jobs run and which PHP and Drupal versions they test.

The workflows​

Your extension gets the following workflows. In the table, your branches are the branches in the workflows' branch filters:

WorkflowRuns onWhat it does
Test (test.yml)Pushes to your branches and tags, and pull requests that target your branchesTests the extension on the PHP and Drupal versions of the version matrix, and lints it once per Drupal major.
Deploy (deploy.yml)A successful Test run of a pushMirrors the code to Drupal.org or another git remote. See Deployment.
Draft release notes (draft-release-notes.yml)Pushes to your branches and tagsKeeps a draft GitHub release up to date with the pull requests merged since the last published release.
Auto Author Assign (assign-author.yml)Opened and reopened pull requestsAssigns each pull request to its author.

The installer sets the branch filters of test.yml and draft-release-notes.yml from its INSTALL_BRANCHES environment variable, such as 1.x,2.x. Without the variable, it keeps the push branches of your committed test.yml, or sets them to 1.x. See What the installer changes for the full rule. To build another branch later, such as 2.x, add it to the push branches of both files and to the pull_request branches of test.yml.

What each job runs​

A lint job assembles the codebase and runs every linter you kept. A test job assembles the codebase, starts the webserver, provisions the site and runs the tests. Then it uploads the browser output and the coverage reports as workflow artifacts.

Builds resolve without a lock file, so each job caches Composer downloads under a key that changes every month. The cache stays warm, and each month's cache also stores the newer releases.

The version matrix​

CI tests a selection of PHP and Drupal pairs. 10 jobs cover the lowest and highest supported PHP on each Drupal major. On Drupal 11 and 12, they also cover the next minor pre-release and the oldest tested minor:

JobPHPDrupalRole
test-php-min-d10-stable8.310Drupal 10 on the lowest supported PHP
test-php-max-d10-stable8.410Drupal 10 on the highest supported PHP
test-php-min-d11-stable8.311Drupal 11 on the lowest supported PHP
test-php-max-d11-stable8.511Drupal 11 on the highest supported PHP
test-php-min-d11-legacy8.311.1.0Newest patch of the oldest tested Drupal 11 minor
test-php-max-d11-canary8.511@betaNext Drupal 11 minor pre-release
test-php-min-d12-stable8.512Drupal 12 on the lowest supported PHP
test-php-max-d12-stable8.512Drupal 12 on the highest supported PHP
test-php-min-d12-legacy8.512.0.0Newest patch of the oldest tested Drupal 12 minor
test-php-max-d12-canary8.512@betaNext Drupal 12 minor pre-release

The supported PHP versions are the ones Eddy tests each major on, from PHP 8.3, the floor of the tooling. The lint jobs run 1 per Drupal major:

JobPHPDrupal
lint-d108.410
lint-d118.511
lint-d128.512

Your extension gets only the jobs of the Drupal majors you selected in the installer. A test job's name gives its PHP bound (min or max), its Drupal major (d10, d11 or d12) and its release tier (stable, legacy or canary). A lint job's name gives its Drupal major. Each job's "Setup PHP" step shows the exact PHP version.

  • Drupal versions float. stable builds the newest stable release of the major. canary builds the newest release at beta stability or higher. That's the next minor's beta or release candidate when there is one, and the current stable release otherwise. legacy pins an older minor and floats its patch. 11.1.0 builds the newest 11.1.x release, and 12.0.0 the newest 12.0.x. CI builds new releases with no change to test.yml.
  • PHP versions are pinned bounds. Each job sets an explicit PHP version. So max changes when a newer PHP is added, and min only when support for an old PHP is dropped. A scaffold update refreshes the PHP versions and the legacy pins.

Drupal 12​

Drupal 12 requires PHP 8.5, so Eddy tests Drupal 12 on PHP 8.5 alone. Its lowest and highest supported PHP are the same, so test-php-min-d12-stable and test-php-max-d12-stable run the same versions. The jobs use the same kinds of values as the Drupal 11 jobs (12, 12.0.0 and 12@beta) and follow Drupal 12's releases on their own.

Until Drupal 12 has a stable release, every Drupal 12 job builds its newest pre-release. After 12.0.0 ships, all of them build that release. Then canary moves on to the 12.1 pre-releases, and legacy stays on the 12.0.x patches. To build Drupal 12 locally, see Drupal versions.

Next steps​