A yeti standing on scaffolding in front of a brick wall with the Drupal logo spray painted on it.

LCM Drupal Scaffold 2.0

Profile picture for user Rob
Rob Bayliss
CTO

Last year, we released an ambitious project to open source our own internal workflow. We called it the Last Call Drupal Scaffold (definitely not the most original name), and we presented it to the world at several different camps and conferences, including Drupalcon Baltimore.

Over the last year, the scaffold has evolved and grown as we’ve used it, but it’s been pretty minor stuff, and not really worth noting in a blog post. BUT TODAY, we’re excited to announce the 2.0 version of our project, and I’d like to outline some of the more exciting aspects.

First, we’ve migrated to CircleCI 2.0. This let us cut our build times by as much as half by taking advantage of parallel processing, workflows, and faster containers. Additionally, we’re now using the same containers in our local environments as in CI, keeping things predictable and consistent. What’s more, we’re taking advantage of Circle’s workflows to deploy things before tests have even passed. As ridiculous as that sounds, when you’re using a PR workflow to deploy to an isolated environment and have an additional dev/staging/prod buffer on a merge to master, having the tests and deployment run in parallel is a low-risk way to speed things up.

The second big new feature is that we’ve fully moved into per-project Docker environments for our local stack. And after a year and a half of development, these environments are dialed in. Want XDebug? It’s ready to go. Blackfire? Check. And of course, since it’s Docker, you are welcome to swap in whatever containers you want in the docker-compose.yml

The third thing I want to talk about is a move to Selenium. We’ve been using BackstopJS for the last year or so via SlimerJS, and have been pretty disappointed with the stability of the system, as well as the difficulty of supporting multiple browsers. Selenium (also via Docker) lets us run full, arbitrary browsers remotely, and we’ve baked in Visual Regression Testing using Webdriver.io and the WDIO Visual Regression Service. Admittedly, it’s not as pretty or easy to work with as Backstop is, but it’s rock solid and fast.

Another thing we’ve introduced in the 2.0 is full fledged Pantheon integration. Out of the box, the project comes with feature branch deployment to Multidev environments, local environment refresh using composer site:import, and much, much more. While we still use this project for other hosting providers, Pantheon’s multidev infrastructure just makes this kind of workflow incredibly nice.

Finally, I’d like to point out a few other enhancements we’ve made recently that didn’t make the cut for “biggest features”:

  • Mannequin integration - Mannequin is a tool we released this year that attempts to make front end Drupal development less painful. Our Drupal Scaffold serves as the reference implementation, although our example templates are a little sparse right now.
  • Composer Upstream Files - A Composer plugin (command, actually) we built to allow updating quasi-core files like index.php, as well as files you might want to keep in sync with the scaffold, like docker-compose.yml. It’s an easy, configurable way to stay up to date.
  • Better documentation! - Having handed off a few scaffold projects, we’ve realized that the documentation was… nonexistent. While it’s awesome that we’ve had a ton of really amazing tools baked into this project from the beginning, having a Ferrari is really only useful if you can figure out where the gas pedal is. So we’ve been steadily working on the documentation, and will continue to do so.