Skip to content

4.19.0 - last 4.x release

Choose a tag to compare

@github-actions github-actions released this 03 Oct 02:00
d205000

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.php now reads pre-filled answers from DEX_* variables instead of the prompt library's default PROMPTY_* prefix, so PROMPTY_* variables are ignored. Rename every PROMPTY_ prefix to DEX_ in any script or CI job that runs init.php, and set the new DEX_EXAMPLES too, since a run with no terminal now cancels when any prompt is left unanswered. php init.php --help lists 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 login and ahoy login no longer read QRCODE, so a QRCODE=1 set in .env or your shell stops adding a QR code under the login link after updating. Rename it to LOGIN_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 to 0. The ./.devtools/qrcode <url> command itself now renders without any opt-in, and a missing qrencode fails 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-interactive init.php runs used to act on any value they were given: an unsupported Drupal version such as 12 left the project with no CI jobs for any Drupal version, and a tools typo such as phpcsx removed 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 in php init.php used to abort with At 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_EXAMPLES when scripted) defaults to No and deletes the 4 scripts/*-example.sh hooks every new project used to inherit, keeping scripts/ itself and the Cloudflare tunnel scripts.

  • [#508] Fixed Selenium pinning port 4444 and 'MINK_DRIVER_ARGS_WEBDRIVER' overriding the environment. @AlexSkrypnyk (#514)
    With WEBDRIVER_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.xml and phpunit.d10.xml no longer force MINK_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)
    The update-consumer-drupal-extension-scaffold skill wiped the project root and never put scripts/ back, so every scaffold update deleted the project's own lifecycle hooks. It now restores scripts/ alongside src/, tests/ and config/, then removes the scaffold's example extension (service, form, tests, schema, assets and *-example.sh hooks), 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 declare CI_RUNNER_INDEX, CI_RUNNER_TOTAL and a CI_IS_<TOOL>_RUNNER flag 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 documented init.php command 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 login now calls ahoy drush uli, and the Makefile keeps the whole Drush invocation in a DRUSH variable (replacing DRUSH_URI), so changing how Drush or the site URL is resolved is 1 edit per wrapper. ahoy drush also forwards its arguments quoted, so an argument containing spaces reaches Drush intact, as in ahoy drush php:eval 'print "a b c"'.

Full Changelog: 4.18.0...4.19.0