How to Automate Your Drupal 8 to Drupal 9 Upgrade: Use Drupal-Rector to Jumpstart Your Code Updates

Your Drupal 8 to Drupal 9 upgrade will be "insanely" smooth.

So they say... 

With Drupal 9 built in Drupal 8, all there's left for you to do is to remove all deprecated API from your website.

Easier said than done...

Just imagine yourself fine-tooth combing your codebase to:

  • identify all errors and fix them, one by one
  • identify all deprecated code and remove it, manually, one by one
  • apply the same code updates, repetitively, as many times as needed

But what if you could automate deprecated API use removal from your Drupal site?

You can, actually, with Rector-Drupal.

Let's dive into more details on this automation tool for Drupal 8:

 

1. How You'd Remove Deprecated Code Before Rector

Before we dig into Rector for Drupal 8 — what it is and how it makes your life easier —  let's see what's the current way of identifying and removing deprecated code in your Drupal projects:

  • first, you upgrade your contrib modules and theme to their latest versions
  • next, you run drupal upgrade_status or drupal-check, which will generate a list of all the deprecations on your Drupal site 
  • for every module on the list, you go to Drupal.org to check whether it will be kept as such, upgraded, or ranked as “deprecated” starting with Drupal 9
  • you run the all the patches that you will have found available: basically, you manually fix all the errors detected in your codebase
  • you run drupal upgrade_status or drupal-check again to see whether there's any deprecated code still lingering on your Drupal site 

Note: if there are multiple instances of one deprecation, you'll need to address it for each and every occurrence.

In short: updating code to get your website Drupal 9-ready — fixing all the errors, removing all the deprecations —  means a lot of manual and repetitive work.

Not for long, though:

You now have Drupal-Rector to automate the whole process.

 

2. From Rector to Drupal 8 Rector, to Drupal-Rector

Drupal-Rector, the Palantir's tool for automating code updates and streamline the Drupal 8 to Drupal 9 process, didn't come out of anywhere, you know.

It has 2 predecessors:

2.1. What Is Rector?

"A reconstructor tool- it does instant upgrades and instant refactoring of your code." (Github.com)

It's designed (by Tomas Votruba) to automatically:

Drupal 8 to Drupal 9 Upgrade- Drupal-Rector- Why refactor manually?
Source: Github.com

 

2.2. And What Is Drupal 8 Rector?

“... the missing bridge to enable automated code upgrades from Drupal 8 to 9” (Palanatir.net)

As Rector didn't yet have any support for Drupal 8, Dezső Biczó at Pronovix decided to build Rector for Drupal 8.

Drupal 8 to Drupal 9 upgrade-Drupal-Rector- apply automatic fixes
Source: Github.com

A proof of concept aimed at automating deprecated code removal in Drupal 8 and thus smooth our websites' upgrade to Drupal 9.

Drupal 8 to Drupal 9 Upgrade- Drupal-Rector- Rector already contains rectors
Source: Pronovix.com

 

2.3. What Is Drupal-Rector?

The Palantir team took over from there and introduced their own version of the Rector for Drupal tool.

It comes as a set of Rector rules:

Each rule will upgrade the code corresponding to a specific deprecated API in use on your Drupal website.

The 2 obvious benefits of using it on your Drupal projects, as you get them ready for the Drupal 8 to Drupal 9 upgrade, are:

 

  • you streamline the whole process
  • you reduce the upgrade costs (just think of all the time that you'd otherwise invest in addressing every single deprecation issue, one by one; even if the same issue appears in different areas of your codebase)

     

3. How Do You Use Drupal-Rector?

They have a step-by-step guide on Github on how to set up your code updating process using this automation tool:

  • you give your code a deep-scan using Rector and analyze the code fixes that it suggests you to make
  • you go ahead and... apply those fixes

Drupal 8 to Drupal 9 Upgrade- Drupal-Rector-Drupal 8-rector in action
Source: Drupal.org

As simple as that.

 

4. Why Incorporate Drupal-Rector into Your Drupal 8 to Drupal 9 Upgrade 

Now, let's talk... benefits. 

Or specific use cases where Drupal 8 Rector/Drupal-Rector turns an otherwise tedious (100% manual) process into an... automated one:

  • to fix code quality issues
  • to upgrade your PHP version
  • to upgrade from Simfony 3 to Symfony 4
  • to Rename classes, properties, methods, namespaces or constants 
  • to remove deprecated API

Drupal 8 to Drupal 9 Upgrade- Drupal-Rector- Rector saves a lot of manual work
Source: Palantir.net

In short, by using Drupal-Rector you get to automate (or at least semi-automate) code upgrade to Drupal 9.

 

5. Drupal-Rector: What's Next?

In other words: what should you expect from this tool in the nearest future?

First of all, you should know that Drupal-Rector's meant to be a set of Rector rules, but, it includes one rule only, for now: drupal_set_message

The Palantir team's plan is to create 15 rules standing for the most common deprecations in Drupal 8.

Drupal 8 to Drupal 9 Upgrade- Drupal-Rector-future goals

Source: Palantir.net

The END!

What do you think of this automation tool aimed at jump-starting your Drupal 8 to Drupal 9 upgrade?

Have you used it? Would you use it?

Do you find it effective enough to run automated code updates on your Drupal 8 website?

Are there any specific code error or deprecation issues you wish it addressed?


Photo by Danial RiCaRoS on Unsplash