+44 0330 223 3428
Call Us
+44 0330 223 3428

Mark Jaquith: Updating plugins using Git and WP-CLI

Mark Jaquith: Updating plugins using Git and WP-CLI

Now that you know how I deploy WordPress sites and how I configure WordPress environments, what about the maintenance of keeping a WordPress site’s plugins up-to-date?

Since I’m using Git, I cannot use WordPress built-in plugin updater on the live site (and I wouldn’t want to — if a plugin update goes wrong, my live site could be in trouble!)

The simple way to update all your plugins from a staging or local development site is to use WP-CLI:

wp plugin update-all
git commit -am 'update all plugins' wp-content/plugins

That works. I used to do that.

I don’t do that anymore.

Why? Granularity.

One of the benefits of using version control like Git is that when things go wrong, you can pinpoint when they went wrong, and identify what code caused the issue.

Git has a great tool called bisect that takes a known good state in the past and a current broken state, and then jumps around between revisions, efficiently, asking you to report whether that revision is good or bad. Then it tells you what revision broke your site.

If you lump all your plugin updates into one commit, you won’t get that granularity. You’ll likely get the git bisect result of “great… one of EIGHTEEN PLUGINS I updated was the issue”. That doesn’t help.

Here’s how you do it with granularity:

for plugin in $(wp plugin list --update=available --field=name);
do
    echo "wp plugin update $plugin" &&
    echo "git add -A wp-content/plugins/$plugin" &&
    echo "git commit -m 'update $plugin plugin'";
done;

This code loops through plugins with updates available, updates each one, and commits it with a message that references the plugin being updated. Great! Now git bisect will be able to tell you which plugin update broke your site.

And what if you can only run WP-CLI commands from within a VM, and Git commands from your local machine? For instance, if you’re using my favorite tool, Local by Flywheel, you have to SSH into the site’s container to issue WP-CLI commands, but from within that container, you might not have Git configured like it is on your host machine.

So what you can do is break the process into two steps.

On the VM, run this:

wp plugin list --update=available --field=name > plugins.txt
wp plugin update-all

That grabs a list of plugins with updates and writes them to a file plugins.txt, and then updates all the plugins.

And then on your local machine, run this:

while read plugin;
do
    echo "git add -A wp-content/plugins/$plugin" &&
    echo "git commit -m 'update $plugin plugin'";
done; < plugins.txt

That slurps in that list of updated plugins and does a distinct git add and git commit for each.

When that’s done, remove plugins.txt.

All your plugins are quickly updated with WP-CLI, but you get nice granular Git commits and messages.


Do you need WordPress services?

Mark runs Covered Web Services which specializes in custom WordPress solutions with focuses on security, speed optimization, plugin development and customization, and complex migrations.

Please reach out to start a conversation!

[contact-form]

Source: WordPress

Related Post
WPTavern: How a Munich-based Game Studio is Using WordPress and Gutenberg to Power Its Website

WPTavern: How a Munich-based Game Studio is Using WordPress and Gutenberg to Power Its Website Mimimi, an award-winning game studio based in Munich, has launched a new WordPress website that provides an interesting case study of Gutenberg in the wild. Although you may not be able to tell from the frontend, behind the scenes the […]

Read more
Matt: Light Heretofore Unknown

Matt: Light Heretofore Unknown Yes, it is a press, certainly, but a press from which shall soon flow in inexhaustible streams the most abundant and most marvelous liquor that has ever flowed to relieve the thirst of man! [….] A spring of pure truth shall flow from it! Like a new star, it shall scatter […]

Read more
WPTavern: My Gutenberg Experience: Part Three

WPTavern: My Gutenberg Experience: Part Three It’s been about four months since the last time I shared my experience with Gutenberg. In that time, there have been sixteen releases. The more I use Gutenberg, the more nuances I encounter. Disruptive Writing Flow When writing a post, I press the enter key at the end of […]

Read more