Rollback Update Failure

Beschreibung

Dies ist ein Funktions-Plugin zum Testen eines automatischen Rollbacks nach einem Plugin- oder Theme-Aktualisierungs-Fehler.

It is based on the PR for #51857. Current PR #2225 for inclusion to core.

  • When updating a plugin/theme, the old version of the plugin/theme gets moved to a wp-content/upgrade/temp-backup/plugins/PLUGINNAME or wp-content/upgrade/temp-backup/themes/THEMENAME folder. The reason we chose to move instead of zip, is because zipping/unzipping are very resources-intensive processes, and would increase the risk on low-end, shared hosts. Moving on the other hand is performed instantly and won’t be a bottleneck.
  • If the update fails, then the „backup“ we kept in the upgrade/temp-backup folder gets restored to its original location
  • If the update succeeds, then the „backup“ is deleted
  • 2 new checks were added in the site-health screen:
    • Check to make sure that the rollbacks folder is writable.
    • Check there is enough disk-space available to safely perform updates.

To avoid confusion: The „temp-backup“ folder will NOT be used to „roll-back“ a plugin to a previous version after an update. This folder will simply contain a transient backup of the previous version of a plugins/themes getting updated, and as soon as the update process finishes, the folder will be empty.

This plugin will automatically deactivate itself once the feature has been committed to core.

If you are running a virtualized server and using VirtualBox we have a function that tries to identify VirtualBox with code. If you are running a VirtualBox environment the Site Health > Info > Server section will display whether the code picks that up correctly. If it doesn’t you will need to add the following filter.

  add_filter( 'is_virtualbox', '__return_true' );

Testing

  • If the wp-content/temp-backup folder is not writable, there should be an error in the site-health screen.
  • If the server has less than 20MB available, there should be an error in the site-health screen that updates may fail.
  • If the server has less than 100MB, it should be a notice that disk space is running low.
  • When updating a plugin, you should be able to see the old plugin in the wp-content/upgrade/temp-backup/plugins/PLUGINNAME folder. The same should apply for themes. Since updates sometimes run fast and we may miss the folder creation during testing, you can simulate an update failure to demonstrate. This will return early and skip deleting the backup on update-success.
  • When a plugin update fails, the previous version should be restored. To test that, change the version of a plugin to a previous number, run the update, and on fail the previous version (the one where you changed the version number) should still be installed on the site. To simulate an update failure and confirm this works, you can use the snippet below:

    add_filter( 'upgrader_install_package_result', function() {
        return new WP_Error( 'simulated_error', 'Simulated Error' );
    });
    

Alternativ kannst du das Plugin Rollback Update Testing installieren und nach Bedarf aktivieren.

Reporting

Bitte melde Probleme und Pull Requests bei GitHub.

Logo from a meme generator. Original artwork by Allie Brosh.

Rezensionen

14. Juli 2021
That is great! I have just one question! How many times this plugin could roll back a theme or a plugin update, can it roll back for example three steps back? Thank you for your answer in advance!
Alle 4 Rezensionen lesen

Mitwirkende & Entwickler

„Rollback Update Failure“ ist Open-Source-Software. Folgende Menschen haben an diesem Plugin mitgewirkt:

Mitwirkende

„Rollback Update Failure“ wurde in 6 Sprachen übersetzt. Danke an die Übersetzerinnen und Übersetzer für ihre Mitwirkung.

Übersetze „Rollback Update Failure“ in deine Sprache.

Interessiert an der Entwicklung?

Durchstöbere den Code, sieh dir das SVN Repository an oder abonniere das Entwicklungsprotokoll per RSS.

Änderungsprotokoll

CHANGELOG.md sieht Github-Repo.

2.2.0 / 2022-05-11

  • add initial setup of weekly wp_delete_temp_updater_backups cron task, oops

2.1.2 / 2022-05-11

  • fix shutdown hook in wp_delete_all_temp_backups() for plugin namespace, not for PR

2.1.1 / 2022-05-11

  • update testing workflows
  • fix action hook wp_delete_temp_updater_backups for plugin namespace, not for PR

2.1.0 / 2202-04-12

  • pass basename of destination to copy_dir( $skip_list ) to avoid potential endless looping.

2.0.0 / 2022-04-06

  • refactor to ease PR back into core by separating out changes into respective files/classes

1.5.0 / 2022-04-04

  • remove anonymous callbacks
  • add class $options for callback functions
  • update is_virtualbox() for testing
  • add testing scaffold

1.4.0 / 2022-04-03

  • move kill switch to WP6.1-beta1
  • add non-direct filesystem rename variants to move_dir()
  • bring into alignment with PR

1.3.6 / 2022-03-31

  • update credit

1.3.5 / 2022-03-31

  • add more Site Health info for runtime environment
  • update move_dir()
  • add is_virtualbox()
  • remove WP_RUNTIME_ENVIRONMENT and wp_get_runtime_environment()

1.3.4 / 2022-03-21

  • run restore_temp_backup() in shutdown hook

1.3.3 / 2022-03-18

  • add wp_get_runtime_environment() to return value of constant WP_RUNTIME_ENVIRONMENT
  • allowed values are obviously up for discussion
  • update to most of current PR

1.3.2 / 2022-02-15

  • update to correspond to core patch

1.3.1 / 2022-01-19

  • add logo credit, Logo from a meme generator. Original artwork by Allie Brosh.
  • remove (int) casting for disk_free_space()

1.3.0 / 2021-01-12

  • introduce is_virtual_box() to get whether running in VirtualBox, requires define( 'ENV_VB', true ) or genenv( 'WP_ENV_VB' ) evaluating to true
  • skips rename() as VirtualBox gets borked when using rename()

1.2.0 / 2021-12-17

  • updated for more parity with planned code
  • updated version check for revert
  • update to use move_dir() instead of $wp_filesystem->move()

1.1.3 / 2021-09-17

  • update version check

1.1.1 / 2021-09-07

  • update check for disk_free_space()

1.1.0 / 2021-09-01

  • automatically deactivate plugin after feature committed to core, currently set to 5.9-beta1
  • check for disabled function disk_free_space() and degrade gracefully

1.0.0 / 2021-08-30

  • updated to be on par with PR #1492, thanks @aristah
  • original zip rollback is now branch zip-rollback

0.5.3 / 2021-07-01

  • @10ups|s GitHub-Actions-Integration für WordPress SVN hinzugefügt

0.5.2 / 2021-06-10

  • Frühzeitig beenden, wenn $hook_extra leer ist

0.5.1 / 2021-03-15

  • Fehlermeldung für Installation statt Update aktualisiert

0.5.0 / 2021-02-10

  • Erstes Commit
  • Einfacherer Hook für extract_rollback
  • Update für upgrader_install_package_result-Filter und -Parameter erfolgt
  • Text-Domain hinzugefügt
  • Anzeige von Fehlermeldungen aktualisiert
  • Filter rollback_update_testing zum Simulieren eines Fehlers hinzugefügt.
  • Filter überschreiben, wenn bereits ein WP_Error vorhanden ist