Development

This guide contains information to help onboard developers to work on the Drupalopen in new window integration, hereafter referred to as "the plugin".

Requirements

At the very least you will need to have the following installed:

While not a hard requirement it's also probably a good idea to install node 18

Installation

# Clone this repo
git clone https://github.com/lando/drupal.git && cd drupal

# Install dependencies with lando
lando start

# Or install them with npm
npm install

Working

This plugin contains various working and tested Lando apps in the examplesopen in new window folder. You should use these or create new ones to help with plugin development.

Note that each one of these examples contains the following section in its Landofile.

plugins:
  "@lando/drupal": ./../../

This tells Lando that this app should use the source version of the @lando/drupal plugin you cloned down in the installation. This is useful because it allows you to isolate development within this repo without interferring with any other apps using the stable and global version of the plugin.

This means that you should almost always develop against apps in the examples folder and that those apps should always contain the above plugins config. If you have an extant Lando application you want to develop against you can temporarily tell it to use the cloned down version of the plugin with the same line.

plugins:
  "@lando/drupal": /path/to/plugin

Whether you are working off an existing example or a new one you should make sure that you are updating or adding new tests as you go. See leia testing below for more detail.

Documentation

If you want to help with contributing documentation here are some useful commands once you've cloned and installed the project.

# launch local docs site
npm run docs:dev

# build docs locally
npm run docs:build

If you are more interested in the internals of the docs they use VuePress2open in new window and our Special themeopen in new window.

Testing

It's best to familiarize yourself with how Lando does testing in general before proceeding.

Unit Tests

Generally, unit testable code should be placed in lib and then the associated test in tests in the form FILE-BEING-TESTED.spec.js. Here is an example:

./
|-- lib
    |-- stuff.js
|-- test
    |-- stuff.spec.js

And then you can run the tests with the below.

# Run unit tests
npm run test:unit

Leia Tests

We do end to end testing with our made-just-for-Lando testing framework Leiaopen in new window. Leia allows us to define tests as a series of commented shell commands in human readable markdown files. Here is a simple example:

Start up tests
--------------

# Should start up successfully
lando start

Verification commands
---------------------

# Should be able to connect to all mariadb relationships
lando mariadb main -e "show tables;"

Destroy tests
-------------

# Should be able to destroy our app
lando destroy -y

Note that the headers here are important and are defined in our npm run generate:tests script. The Start up tests header specifies things that should run before the main series of tests. Verification commands is the main body of tests and is required. Destroy tests specifies any needed clean up commands to run.

If you check out the various READMEs in our examplesopen in new window you will notice that they are all Leia tests.

Before running all or some of the tests you will need to generate them.

# Generate tests
npm run generate:tests

# Run ALL the tests, this will likely take a long time
npm run test:leia

# Run the tests for a single example
npm run leia examples/mariadb-10.2/README.md -c 'Destroy tests'

If you've created new testable examples then you will also need to let GitHub Actions know so they can run on pull requests.

To do that you will either want to add the tests to an existing workflow that makes sense or create a new workflow. If you are creating a new workflow you should just copy an existing one and modify the filename and name key to something that makes sense.

To add the new tests to the workflow just modify jobs.leia-tests.strategy.matrix.leia-tests with the new tests.

jobs:
  leia-tests:
    strategy:
      matrix:
        leia-tests:
            # This should be the filename, without .leia.js extension in the test directory
            # NOTE that you will need to run npm run generate:tests to see these
          - test: platform-sh-maria-db-10-1-example
            # This should be the directory that the test was generated from
            source: examples/mariadb-10.2
          - test: platform-sh-maria-db-10-2-example
            source: examples/mariadb-10.2

Now open a pull request and the new tests should run!

For a deeper dive on Leia you can go hereopen in new window.

Releasing

To deploy and publish a new version of the package to the npm registry you need only create a release on GitHubopen in new window. The GitHub release will automatically prepare the releaseopen in new window and deploy it to NPM, so make sure to use the correct semantic version for the release title (ex: `v0.8.0`).

Also note that if you create a "pre-release" it will tag the npm package with edge instead of the default latest tag. Also note that while you can toggle the pre-release checkbox after the initial release creation this will not trigger a new release and/or promote the release from edge to latest. If you want to deploy to latest then create a new release without pre-released checked.

# Will pull the most recent GitHub release
npm install @lando/drupal
# Will pull the most recent GitHub pre-release
npm install @lando/drupal@edge

Contribution

If you want to contribute code then just follow this flowopen in new window.