Drupal 10 Core Roadmap for Automatic Updates

Created on 3 November 2022, about 2 years ago
Updated 16 January 2023, almost 2 years ago

๐Ÿ’ช Core Alpha Experimental blockers

Dependencies

  1. ๐Ÿ“Œ Add colinodell/psr-test-logger to core's dev dependencies Fixed
  2. ๐Ÿ“Œ Add php-tuf/composer-stager to core dependencies and governance โ€” for experimental Automatic Updates & Project Browser modules Needs work
  3. ๐Ÿ“Œ Remove dependency on symfony/finder Fixed
  4. ๐Ÿ“Œ Remove our runtime dependency on composer/composer: remove ComposerUtility Fixed

Security โ†’

Currently none ๐ŸŽ‰

UX improvements

  1. ๐Ÿ“Œ Improve the user experience of having your staged update deleted before it was applied Fixed

Documentation โ†’

  1. ๐Ÿ“Œ Define the Package Manager API (package_manager.api.php is outdated) Fixed
  2. ๐Ÿ“Œ Add symlink support to Composer Stager 2.0, require that version, and simplify UX & tests accordingly Fixed
  3. ๐Ÿ“Œ Improve documentation for package_manager_bypass test module Fixed
  4. ๐Ÿ“Œ Add documentation for SymlinkValidatorTest Fixed

Testing โ†’

  1. ๐Ÿ“Œ Assert known preconditions for test runs and fail early if unmet Fixed
  2. ๐Ÿ“Œ Make build tests fail 1) more explicitly, 2) earlier when possible (failing StatusCheckEvent subscribers) Fixed
  3. ๐Ÿ“Œ Remove all fixtures except for one: `fake_site` Fixed
  4. ๐Ÿ“Œ Improve test DX *and* confidence: stop using VFS Fixed
  5. ๐Ÿ“Œ package_manager_bypass should *minimally* bypass php-tuf/composer-stager, not maximally Fixed

Public API

  1. ๐Ÿ“Œ Refactor exception architecture Fixed
  2. ๐Ÿ“Œ Rename Stage to StageBase to clarify its relationship to its subclasses, and add "Stage" suffix to the Updater classes Fixed
  3. ๐Ÿ“Œ Mark FailureMarker @internal and document ComposerUtility, PathLocator and ValidationResult Fixed
  4. ๐Ÿ“Œ Limit trusted Composer plugins to a known list, allow user to add more Fixed
  5. ๐Ÿ“Œ Adopt PHP 8.1-only capabilities such as constructor property promotion + drop BC layers Fixed

Reliability

  1. ๐Ÿ“Œ Remove our runtime dependency on composer/composer: remove ComposerUtility Fixed - should review core issue ๐Ÿ“Œ [policy] Move composer/composer from a dev dependency to a production dependency Closed: won't fix to determine if we shouldn't just use Composer API directly
  2. ๐Ÿ“Œ ComposerSettingsValidator should run `composer config` to determine if HTTPS is enabled Fixed
  3. ๐Ÿ› GitExcluder should not ignore .git directories that belong to packages installed by Composer Fixed
  4. ๐Ÿ“Œ Add a validator to check that PHP-TUF's Composer integration is present and configured correctly Fixed
  5. ๐Ÿ“Œ Research alternatives to curl request on post apply event during cron updates Closed: outdated - at least the research part to determine if we want to replace who we are triggering post apply in cron updates
  6. ๐Ÿ› Unhandled Composer Stager exceptions leave the update process in an indeterminate state Fixed
  7. ๐Ÿ“Œ Reliably support cweagans/composer-patches in Package Manager & Automatic Updates: validate stage Fixed
  8. ๐Ÿ› Create a test (or tests) to prove Package Manager works with submodules as implemented by packages.drupal.org Fixed
  9. ๐Ÿ› Hosting environment (e.g. cPanel) may add additional files (including symlinks) to the project, which breaks AU Postponed: needs info
  10. ๐Ÿ› Validate compliance with composer minimum stability during PreRequireEvent Fixed
  11. ๐Ÿ› Automatic Updates & Package Manager should use DependencySerializationTrait when needed Closed: outdated
  12. ๐Ÿ“Œ Refine multisite detection: many aliases for a single site is fine! Fixed
  13. ๐Ÿ“Œ Exclude unknown paths in project base: only allow vendor + web root + whatever drupal/core-composer-scaffold allows Fixed
  14. ๐Ÿ“Œ Prevent staging areas that nested in the active Composer project directory Fixed

โœ… Translatability

Currently none!

Maintainability

  1. ๐Ÿ“Œ Split up UpdaterFormTest to speed up test runs: from 13.5 to 10.5 minutes Fixed

Core mergeability

  1. ๐Ÿ“Œ Enable unattended updates Fixed
  2. ๐Ÿ“Œ Stage no longer needs the config factory Closed: duplicate
  3. ๐Ÿ“Œ Fix PHP Warning: serialize() in tests on PHP 8 Fixed
  4. ๐Ÿ“Œ Remove `@requires PHP >= 8.0` annotation from all tests Fixed
  5. ๐Ÿ› phpcs stopped working since the switch to testing on Drupal 10.0.x by default Fixed

Policy Questions

  1. ๐Ÿ“Œ Should we only show RC for pre-releases of core in the form? Active

Core Beta Experimental Stable blockers

Upstream core bugs

  1. ๐Ÿ› automated_cron should not run cron when visiting update.php Active

Usability

  1. ๐Ÿ“Œ Make readiness check failure messages clear, consistent, and actionable Needs work

๐Ÿ Core Alpha Experimental blockers

This section mimics the structure of the above sections.

Dependencies

  1. #3317409: Update Composer Stager to v1.2.0 โ†’
  2. #3302524: Support Composer 2.2 โ†’
  3. #3298444: Symlink validator should delegate to Composer Stager's precondition โ†’

Security โ†’

  1. #3311200: Cron updater should delete the existing stage if not available and the site is currently on an insecure version โ†’
  2. #3316611: If unattended updates are enabled, send an email when status checks start failing โ†’

UX improvements

  1. #3314787: StagedDBUpdateValidator will throw an exception during status check if the stage exists, but is unclaimed โ†’
  2. #3280403: Show all updates for all supported branches in the current major on the update form โ†’
  3. #3316932: Do not skip 'update.settings' route in displaying status check messages โ†’
  4. #3281340: [Plan] Send emails โ†’
  5. #3310696: if only newer releases are pre-releases Updating from one minor to latest version Drupal version, module does not show any other updates โ†’
  6. #3313349: Possible DB updates are displayed twice on UpdateReady form โ†’
  7. #3313717: Improve the wording of UpdateException when re-throwing an ApplyFailedException โ†’
  8. #3310946: Improve the wording of the email notifications about a failed unattended update โ†’
  9. #3299087: Override the core Update module's routes to redirect to Automatic Updates' form โ†’
  10. #3308711: Dispatch StatusCheckEvent in UpdateReady forms and do not allow the update to continue if there are errors โ†’
  11. #3299612: Send an email when an unattended update fails โ†’
  12. #3305240: Add a link to the the symlink validation message in package_manager to the updated help page โ†’
  13. #3304617: Display readiness checks failure at admin/reports/updates/automatic-update โ†’
  14. #3321206: The same xdebug warning shows on the status report 2 times โ†’

Documentation โ†’

  1. #3314143: Add documentation for testing minor updates โ†’
  2. #3312669: Add help text explaining how to set an alternate port for cron โ†’
  3. #3309025: Document that Stage::require() does not need version numbers โ†’
  4. #3303727: Document in README how to add paths to composer.json:extra.drupal-core-vendor-hardening to avoid symlink errors โ†’

Testing โ†’

  1. #3319768: Document why using dblog to query logged messages in build tests is justified โ†’
  2. #3321386: Add missing test coverage in SupportedReleaseValidatorTest โ†’
  3. #3322203: Make sure packages in our fake-site fixture match in both installed.json and installed.php โ†’
  4. #3323211: Remove duplicate aaa_update_test.1.1.xml โ†’
  5. #3323037: Add comment in every release history XML fixture file โ†’
  6. #3322404: Remove active composer fixture files used for SupportedReleaseValidatorTest โ†’
  7. #3322589: Assert 'type' key is set in FixtureUtilityTrait::addPackage โ†’
  8. #3316484: Check if the message "Your site has not recently run an update readiness check." would appear on admin pages after cron is run. โ†’
  9. #3318625: Remove active composer fixture files in UpdaterFormTest โ†’
  10. #3275991: Write test coverage for the bug fix in #3275311 โ†’
  11. #3318846: Remove staged fixture files used for SupportedReleaseValidatorTest โ†’
  12. #3320638: Give more meaningful error results in CoreUpdateTest::testCron โ†’
  13. #3318313: Make OverwriteExistingPackagesValidatorTest fixture-less โ†’
  14. #3319044: Refactor assertUpdateSuccessful() to get more meaningful error results. โ†’
  15. #3320815: Make validation result comparison test messages more helpful โ†’
  16. #3319497: Build test failure on local in 8.x-2.x due to drupal core packages being added to vendor.json โ†’
  17. #3316895: Create a test to prove our fake-site is error free starting point โ†’
  18. #3317988: Make ComposerExecutableValidatorTest easier to understand โ†’
  19. #3317996: FixtureUtilityTrait's package manipulation methods need to take installation path into account โ†’
  20. #3317385: Remove staged fixtures from StagedProjectsValidatorTest โ†’
  21. #3317278: Remove info files from stub modules in StagedProjectsValidatorTest fixtures โ†’
  22. #3317220: UpdatePathTest fails because expirable values have expired โ†’
  23. #3298889: Make \Drupal\package_manager_test_api\ApiController more easily extendable โ†’
  24. #3315700: Remove Environment::setTimeLimit() call from build tests โ†’
  25. #3316318: Ensure release history fixture files are readable in build tests โ†’
  26. #3315449: Don't bother testing core updates via the UI or API with the LegacyProject template โ†’
  27. #3313630: Automatic Updates help has the wrong route name and errors โ†’
  28. #3313346: UpdateReady is not displaying all the messages for statusCheck validation results โ†’
  29. #3312085: UpdateReady hides the Continue button if StatusCheckEvent only returns warnings โ†’
  30. #3306163: Also skip info.yml files in more test directories in DuplicateInfoFileValidator โ†’
  31. #3303185: Add unit test coverage of PathLocator::getWebRoot() โ†’
  32. #3308686: Logic error in XdebugValidator โ†’
  33. #3309676: \Drupal\Tests\automatic_updates\Kernel\ReadinessValidation\StagedProjectsValidatorTest::testEventConsumesExceptionResults should not disable validators โ†’
  34. #3304640: Logic error in \Drupal\automatic_updates\Controller\UpdateController::onFinish โ†’
  35. #3305998: Ensure AutoUpdate validator only apply where the stage is an Updater instance โ†’
  36. #3326934: Tests are failing for php 7.4 โ†’
  37. #3321236: Add actual project folders in \Drupal\Tests\package_manager\Traits\FixtureUtilityTrait::addPackage โ†’
  38. #3326334: Remove unneeded fixtures folders โ†’
  39. ๐Ÿ“Œ SymlinkValidatorTest doesn't test PreApplyEvent Fixed
  40. ๐Ÿ› xdebug being enabled causes tests to fail without clear indication that it is the problem Fixed

Public API

  1. #3322918: Mark everything under */tests/src @internal โ†’
  2. #3317599: Log an error if protected Stage constants are overridden โ†’
  3. #3317267: Deprecate the overridability of Stage::TEMPSTORE_LOCK_KEY and Stage::TEMPSTORE_METADATA_KEY โ†’
  4. #3316115: Change "readiness check" to "status check" everywhere except user-facing strings โ†’
  5. #3314764: Stop listening to ReadinessCheckEvent โ†’
  6. #3314946: UpdateReady mistakenly assigns a special CSS class to all validation results โ†’
  7. #3109082: Allow hosting platforms to declare that they don't support Package Manager โ†’
  8. #3305167: Warn if apply and post-apply are done in same request โ†’
  9. #3310702: Stage::__construct() should require $path_factory โ†’
  10. #3310000: RequireEventTrait should default unspecified version constraints to * โ†’
  11. #3308404: Make PackageManagerUpdateProcessor internal and final โ†’
  12. #3304367: Add StatusCheckEvent to report errors and warnings in the staging error to the user โ†’
  13. #3325716: Deprecate config factory in Stage โ†’

Reliability

  1. #3318770: Explicitly validate that all request package updates have been updated expected versions โ†’
  2. #3276645: Run status checkers after form core update โ†’
  3. #3311200: Cron updater should delete the existing stage if not available and the site is currently on an insecure version โ†’ - should determine if this is security issue. Maybe not MVP if not a security issue
  4. #3320558: When parsing releases, place ProjectRelease::createFromArray in a try block โ†’
  5. #3321282: Add 'declare(strict_types = 1)' where needed โ†’
  6. #3315798: Post-apply always fails during cron โ†’
  7. #3304365: Do not check excluded folders for symlinks โ†’
  8. #3322931: OverwriteExistingPackagesValidator does not handle packages with no install path โ†’
  9. #3310666: UpdaterForm throws an exception if you try to update to the next minor beta โ†’
  10. #3257134: Don't stage node_modules directories โ†’
  11. #3317232: Stages can be owned by someone other than their creator โ†’
  12. #3314734: automatic_updates_extensions\BatchProcessor does not ensure that PostApply runs in another web request โ†’
  13. #3310914: LockFileValidator should listen to StatusCheckEvent โ†’
  14. #3312981: Move XdebugValidator into Package Manager โ†’
  15. #3303124: [meta] Package Manager should add validation to try avoid conflicts with non-Composer installed code โ†’
  16. #3312779: Improve Composer package name validation โ†’
  17. #3293146: Don't run cron updates with PHP's built-in web server without an alternate port โ†’
  18. #3310901: Stage::require() should validate the incoming package names โ†’
  19. #3307611: Create a validator to add a warning if updated extensions have database updates โ†’
  20. #3311534: package_manager_requirements() should check for the presence of the failure marker โ†’
  21. #3308828: Handle the case where the marker file has been detected but can't be decoded โ†’
  22. #3311436: Stage::require() should override the default process timeout to 300 seconds โ†’
  23. #3293417: If an update failed to apply don't allow more use of the module โ†’
  24. #3305564: Create a validator to stop newly installed packages from overwriting existing directories on apply โ†’
  25. #3305874: \Drupal\package_manager\ComposerUtility::getPackageForProject() assumes direct project to package conversion when it should not โ†’
  26. #3307163: Add the ability to ProjectInfo handle projects not in the active codebase โ†’
  27. #3303902: Move ProjectInfo class into package_manager โ†’
  28. #3305994: We don't want to run the XdebugValidator for non-Automatic Updates stage. โ†’
  29. #3305568: Create a validator that detects duplicate info.yml files in the stage on apply โ†’
  30. #3309602: Error: Composer could not find the config file โ†’
  31. #3321256: Fix race condition in \Drupal\automatic_updates_test_cron\Enabler โ†’
  32. #3323565: Add 'declare(strict_types = 1)' in tests + recheck test modules + check *.module files. โ†’
  33. #3320836: Handle runtime error correctly in ComposerExecutableValidator โ†’
  34. #3321684: Most validators that subscribe to PreCreate to check readiness to update should also subscribe to PreApply โ†’
  35. ๐Ÿ“Œ Update StatusCheckTrait::runStatusCheck() to reorder/avoid dispatching CollectIgnoredPathsEvent earlier than StatusCheckEvent Fixed

Translatability

  1. ๐Ÿ“Œ Ensure all validation results use translatable strings except when created from throwables Fixed
  2. #3312963: Package Manager's requirements titles should be translated โ†’

Maintainability

  1. #3318927: FixtureUtilityTrait incorrectly assumes that the package keys are the same in install.json and installed.php โ†’
  2. #3319045: Assert that all expected package manager events are fired during build tests. โ†’
  3. #3320487: fake-site fixtures has invalid packages in composer files โ†’
  4. #3302527: Updater::dispatch() doesn't need to handle a StageValidationException with no message โ†’
  5. #3314805: Create a base class for UpdaterForm and UpdateReady to help run status checks and display the results โ†’
  6. #3315139: package_manager.update_data_subscriber does not have to be declared dynamically โ†’
  7. #3311020: Rename staged/9.8.1 to something clearer โ†’
  8. #3307369: Validate all changed or updated Drupal projects with Update XML โ†’
  9. #3248975: Use "stage directory" instead of "staging area" or "staging directory" everywhere โ†’
  10. #3322913: Create an easy way for functional tests to simulate an update (and update kernel tests to use the same) โ†’
  11. #3321994: Fail early in all Automatic Updates tests if there's a failure marker โ†’
  12. #3328516: Remove AutomaticUpdatesFunctionalTestBase::setCoreUpdate() in favor of StageFixtureManipulator โ†’
  13. #3320755: Remove unnecessarily disabled automatic_updates.composer_executable_validator โ†’
  14. ๐Ÿ“Œ Remove automatic_updates_extensions/tests/fixtures/stage_composer in favor of using StageFixtureManipulator Fixed
  15. ๐Ÿ“Œ Rename AutomaticUpdatesFunctionalTestBase::setCoreVersion() as it is very confusing: does it apply to active or stage? Fixed
  16. ๐Ÿ“Œ Harden PathExclusionsTrait::excludeInProjectRoot() for paths outside of project root. Fixed
  17. ๐Ÿ“Œ Improve FixtureManipulator DX: validate package name + ensure StageFixtureManipulator is committed + ensure `package_manager_bypass_composer_stager` is not set to FALSE Fixed

Core mergeability

  1. #3305527: Rename test_theme to automatic_updates_extensions_test_theme โ†’
  2. #3314137: Make Automatic Updates Drupal 10-compatible โ†’
  3. ๐Ÿ“Œ \Drupal\Tests\package_manager\Kernel\TestStageTrait::dispatch() should stop using a deprecated PHP language feature Fixed
  4. #3322150: Rename remaining instances of 'test_theme' to 'automatic_updates_extensions_test_theme' โ†’
  5. #3316131: Add array return type hint to all implementations of getSubscribedEvents() โ†’
  6. #3312937: Fix spelling mistakes โ†’
  7. ๐ŸŒฑ Update initiative roadmap issue Fixed

Policy Questions

๐ŸŒฑ Plan
Status

Active

Version

2.0

Component
Baseย  โ†’

Last updated 1 day ago

Created by

๐Ÿ‡บ๐Ÿ‡ธUnited States tedbow Ithaca, NY, USA

Live updates comments and jobs are added and updated live.
Sign in to follow issues

Comments & Activities

Not all content is available!

It's likely this issue predates Contrib.social: some issue and comment data are missing.

Production build 0.71.5 2024