Template for contributed Drupal modules and themes
From one drop to Drupal.org.
You write the code. Eddy carries it the rest of the way: CI on GitHub Actions, a local Drupal site, coding standards and mirroring to Drupal.org.
curl -fsSL https://eddy.drevops.com/install > install.php && php install.phpFollow the stream
The same commands carry your extension from your laptop to every tested release, and CI runs them too.
Source
Install
Answer a few questions: name, module or theme, Drupal versions, tools and a command wrapper. The installer keeps only what you pick.
php install.phpBuild
A real Drupal site
Drupal on your own PHP, served by PHP's webserver from an SQLite database. No containers to babysit.
ahoy buildFilter
Coding standards
PHPCS, PHPStan, Drupal Rector, Twig CS Fixer, ESLint, Stylelint, CSpell and Prettier, set up for Drupal.
ahoy lintTest the water
Tests
PHPUnit Unit, Kernel, Functional and FunctionalJavascript suites in your local Chrome or Selenium, plus Jest.
ahoy testCurrent
CI on every push
GitHub Actions runs the same commands on PHP 8.3, 8.4 and 8.5 and Drupal 10, 11 and 12, plus legacy and canary tiers.
git push- lint-d10 · d11 · d12 coding standards
- test-php-min / max on each major
- legacy · canary the earliest supported release and the next beta
- Codecov coverage from every test job
Mouth
Drupal.org
Once CI passes, every tested commit and release tag is mirrored to Drupal.org, or any other git remote.
- Branches deploy the commit that CI tested
- Tags deploy alone, and the branches stay put
- Never overtaken by an older run
What floats along
The tools and services that Eddy sets up for you.
- PHPUnit
- Jest
- PHPStan
- Drupal Rector
- PHPCS
- Twig CS Fixer
- ESLint
- Stylelint
- Prettier
- CSpell
- pcov
- Codecov
- GitHub Actions
- GitLab CI
- Drupal.org
- Renovate
- Composer
- Drush
- Make
- Ahoy
- Chrome
- Selenium
- Xdebug
- SQLite
- Cloudflare Tunnel
Downstream
Contributed Drupal modules that start from Eddy.
drevops/testmode Alters existing site content and other configuration when running tests. (opens in new tab)Generated Contentdrevops/generated_content Generates content programmatically. (opens in new tab)Integration Reportdrevops/integration_report Reports on the availability of 3rd party endpoints. (opens in new tab)Drupal Helpersdrevops/drupal_helpers Helper utilities for Drupal. (opens in new tab)Deploy Stepsdrevops/deploy_steps Runs repeatable run-on-every-deploy logic as discoverable plugins. (opens in new tab)The deep end
Under the surface, 3 parts keep every extension the same, and easy to keep current.
Template
Your repository: the extension, its CI workflows, the linter and test configuration, and the docs it ships with.
Tooling
The drevops/eddy-tooling package, whose eddy-* commands assemble, serve, provision and deploy the site, for you and for CI.
Installer
A single command that downloads a release and shapes the template to your answers. An update renders the new release the same way and merges only what changed.
Dive into the docs
Maintained since 2015, with more than 60 releases, and free under GPL-2.0.
Start with a drop.
curl -fsSL https://eddy.drevops.com/install > install.php && php install.php