Branch Deploy via GitHub Actions

Scenario

You want every branch except for the main branch to deploy to a Dokku server when created, to update itself and be deleted from the Dokku server when the branch is deleted.

Requirements

The DokkuSD plugin installed on the server must be installed, see https://github.com/OpenDataServices/dokkusd-plugin

Make sure the app deploys to Dokku when running the DokkuSD deploy command locally. If any resources are needed, this includes setting up an app.json file and making sure resources are created too.

Steps

Create a SSH keypair on your local machine.

Take the public part, and on the dokku server run:

echo 'PUBLIC-KEY-CONTENTS' | dokku ssh-keys:add KEY-NAME

Make sure to give it a very clear name so other people know what the key is for.

Go to GitHub settings for the repository and add the following repository secrets:

  • DOKKUSD_BRANCH_APP_NAME_PREFIX: App name prefix. should be something unique on dokku server

  • DOKKUSD_BRANCH_SSH_PRIVATE_KEY: This is the contents of the private key you just created

  • DOKKUSD_BRANCH_SSH_KEYSCAN: The result of running ssh-keyscan against the Dokku server

  • DOKKUSD_BRANCH_REMOTE_HOST: The host name of the dokku server

Optionally, also set:

  • DOKKUSD_BRANCH_REMOTE_PORT

  • DOKKUSD_BRANCH_REMOTE_USER

  • DOKKUSD_BRANCH_HTTP_AUTH_USER and DOKKUSD_BRANCH_HTTP_AUTH_PASSWORD

Create the following Github actions files:

To create the branch, branch-deploy.yml: It’s contents can be copied from https://github.com/OpenDataServices/dokkusd-test/blob/main/.github/workflows/branch-deploy.yml

To delete the branch, branch-destroy.yml: It’s contents can be copied from https://github.com/OpenDataServices/dokkusd-test/blob/main/.github/workflows/branch-destroy.yml

Notice the fact that the main branch is called main is currently hard coded in the above files - change that if you need to.

That’s it!