How to Add Tugboat Live Previews to Drupal Contrib Modules

It's a Breeze!

It may be obvious, but we are big fans of using Tugboat to build live previews for every pull request that we create for a site. As of last spring, Tugboat has also been available for use on Drupal core and contributed projects.

It is now dead simple to add Tugboat to Drupal contributed modules and it will build a live preview for any issue with a merge request.

  1. Add a composer.json file to your project if it doesn't already have one.
  2. Create a file at the root of the repository named .tugboat/config.yml.
  3. Paste the sample configuration below into your new config file.
  4. Search and replace webform with your module name in the config file.
  5. Create an issue, then an issue fork, and finally a merge request. Creating the merge request will trigger a Tugboat live preview which will be visible after reloading the issue.
services:
php:
# Specify the version of Drupal you wish to use for Tugboat below.
image: q0rban/tugboat-drupal:10
default: true
http: false
depends: mysql
commands:
update: |
set -eux
# Check out a branch using the unique Tugboat ID for this repository, to
# ensure we don't clobber an existing branch.
git checkout -b $TUGBOAT_REPO_ID
# Composer is hungry. You need a Tugboat project with a pretty sizeable
# chunk of memory.
export COMPOSER_MEMORY_LIMIT=-1
# This is an environment variable we added in the Dockerfile that
# provides the path to Drupal composer root (not the web root).
cd $DRUPAL_COMPOSER_ROOT
# We configure the Drupal project to use the checkout of the module as a
# Composer package repository.
composer config repositories.tugboat vcs $TUGBOAT_ROOT
# Now we can require this module, specifing the branch name we created
# above that uses the $TUGBOAT_REPO_ID environment variable.
composer require drupal/webform:dev-$TUGBOAT_REPO_ID
# Install Drupal on the site.
vendor/bin/drush \
--yes \
--db-url=mysql://tugboat:tugboat@mysql:3306/tugboat \
--site-name="Live preview for ${TUGBOAT_PREVIEW_NAME}" \
--account-pass=admin \
site:install standard
# Set up the files directory permissions.
mkdir -p $DRUPAL_DOCROOT/sites/default/files
chgrp -R www-data $DRUPAL_DOCROOT/sites/default/files
chmod 2775 $DRUPAL_DOCROOT/sites/default/files
chmod -R g+w $DRUPAL_DOCROOT/sites/default/files
# Enable the module.
vendor/bin/drush --yes pm:enable webform

build: |
set -eux
# Delete and re-check out this branch in case this is built from a Base Preview.
git branch -D $TUGBOAT_REPO_ID && git checkout -b $TUGBOAT_REPO_ID || true
export COMPOSER_MEMORY_LIMIT=-1
cd $DRUPAL_COMPOSER_ROOT
composer install --optimize-autoloader
# Update this module, including all dependencies.
composer update drupal/webform --with-all-dependencies
vendor/bin/drush --yes updb
vendor/bin/drush cache:rebuild

mysql:
image: tugboatqa/mariadb

For more details and further instructions on configuring Tugboat on themes and "general" projects, check out the documentation on Drupal.org.