Repository navigation
4.19.0 - last 4.x release
What's new since 4.18.0
This is the last 4.x release. The next release will be 5.0.0.
Breaking changes
-
Renamed the 'init.php' prompt variables from 'PROMPTY_' to 'DEX_'. @AlexSkrypnyk (#521)
php init.phpnow reads pre-filled answers fromDEX_*variables instead of the prompt library's defaultPROMPTY_*prefix, soPROMPTY_*variables are ignored. Rename everyPROMPTY_prefix toDEX_in any script or CI job that runsinit.php, and set the newDEX_EXAMPLEStoo, since a run with no terminal now cancels when any prompt is left unanswered.php init.php --helplists the full set, and runs that answer the prompts by hand aren't affected. -
[#510] Renamed the 'QRCODE' login opt-in to 'LOGIN_QRCODE' and made the 'qrcode' command render on invocation. @AlexSkrypnyk (#513)
make loginandahoy loginno longer readQRCODE, so aQRCODE=1set in.envor your shell stops adding a QR code under the login link after updating. Rename it toLOGIN_QRCODE, and keep in mind the wrappers only check that it's non-empty, so unset it to turn the code off rather than setting it to0. The./.devtools/qrcode <url>command itself now renders without any opt-in, and a missingqrencodefails with an install hint instead of being silently skipped.
Highlights
-
[#522] Updated the bundled prompt library to '0.7.0' so unsupported prompt values are rejected. @AlexSkrypnyk (#523)
Non-interactiveinit.phpruns used to act on any value they were given: an unsupported Drupal version such as12left the project with no CI jobs for any Drupal version, and a tools typo such asphpcsxremoved all 11 tools, with the run still exiting as a success. Unsupported values are now rejected before anything is written, with an error listing the accepted options. A run with no terminal and an unanswered prompt also cancels in under a second instead of hanging until the job times out. -
[#517] Added an example scripts prompt to 'init.php' and fixed the Drupal version default. @AlexSkrypnyk (#520)
Accepting every default inphp init.phpused to abort withAt least one Drupal version is required.because the Target Drupal versions prompt started with nothing checked. Drupal 11 is now pre-selected, so a run on defaults completes. A new Keep example lifecycle scripts prompt (DEX_EXAMPLESwhen scripted) defaults to No and deletes the 4scripts/*-example.shhooks every new project used to inherit, keepingscripts/itself and the Cloudflare tunnel scripts. -
[#508] Fixed Selenium pinning port 4444 and 'MINK_DRIVER_ARGS_WEBDRIVER' overriding the environment. @AlexSkrypnyk (#514)
WithWEBDRIVER_BACKEND=selenium, the container now claims the first free port from 4444 and saves it to.env, as the local Chrome backend already did. It's also named after that port (selenium-<port>), so 2 projects can run FunctionalJavascript tests side by side without one removing the other's container.phpunit.xmlandphpunit.d10.xmlno longer forceMINK_DRIVER_ARGS_WEBDRIVER, so a test that doesn't extend the shipped FunctionalJavascript base class can set its own endpoint from the environment. -
[#509] Deployed the commit that CI tested instead of the default branch. @AlexSkrypnyk (#512)
The GitHub Actions deploy workflow checked out without a ref, so a successful test run on a non-default branch published the default branch's code under that branch's name. It now checks out the exact commit the test run used, so a release tag deploys the tagged commit, and only push events from your own repository reach the deploy job, which keeps pull request and fork runs away from the deployment key. CircleCI already deployed the right commit and is unchanged. -
[#506] Stripped the scaffold example extension on update and stopped discarding project lifecycle scripts. @AlexSkrypnyk (#507)
Theupdate-consumer-drupal-extension-scaffoldskill wiped the project root and never putscripts/back, so every scaffold update deleted the project's own lifecycle hooks. It now restoresscripts/alongsidesrc/,tests/andconfig/, then removes the scaffold's example extension (service, form, tests, schema, assets and*-example.shhooks), deleting only files git doesn't track, so project code that grew out of an example stays put. It also skips draft releases and uses the newest published tag verbatim.
Other changes
-
Update dependency prettier to ^3.9.9 @renovate[bot] (#536)
-
Update selenium/standalone-chromium:latest Docker digest to 08fd293 @renovate[bot] (#534)
-
Update dependency ubuntu to v26 @renovate[bot] (#535)
-
Update dependency prettier to ^3.9.8 @renovate[bot] (#533)
-
Update codecov/codecov-action digest to 303a32d @renovate[bot] (#532)
-
Update dependency prettier to ^3.9.7 @renovate[bot] (#531)
-
Update codecov/codecov-action digest to 0b35c9e @renovate[bot] (#530)
-
Update zizmorcore/zizmor-action action to v0.6.4 @renovate[bot] (#529)
-
Update selenium/standalone-chromium:latest Docker digest to fcf9eef @renovate[bot] (#528)
-
[#524] Declared the CI runner roles centrally so each tool step reads its own flag. @AlexSkrypnyk (#527)
GitHub Actions and CircleCI now declareCI_RUNNER_INDEX,CI_RUNNER_TOTALand aCI_IS_<TOOL>_RUNNERflag for Jest and PHPUnit once per job, and each tool's steps read their flag instead of a hand-written condition. Behaviour is unchanged by default, but moving a tool to another runner or sharding it is now 1 edit to its flag, and the README's new "Distributing tools across CI runners" section shows how on both providers. -
Update zizmorcore/zizmor-action action to v0.6.3 @renovate[bot] (#526)
-
Fixed the update skill's 'init.php' invocation leaving 3 prompts unanswered. @AlexSkrypnyk (#521)
The update skill's documentedinit.phpcommand never set the Drupal version, tools or Cloudflare tunnel variables, and with no terminal to answer those prompts the run spun forever instead of failing. It now sets every prompt variable, in the same order the prompts appear. -
[#511] Stopped 'login' re-inlining the 'drush' invocation in both wrappers. @AlexSkrypnyk (#515)
ahoy loginnow callsahoy drush uli, and theMakefilekeeps the whole Drush invocation in aDRUSHvariable (replacingDRUSH_URI), so changing how Drush or the site URL is resolved is 1 edit per wrapper.ahoy drushalso forwards its arguments quoted, so an argument containing spaces reaches Drush intact, as inahoy drush php:eval 'print "a b c"'.
Full Changelog: 4.18.0...4.19.0