Getting your code to pass the github actions

On every pull request a sequence of continuous integration tests are performed to check that code is safe to merge into master. The scripts in the .github/workflows directory are as follows:

  • build: checks that phantom, phantomsetup, phantomanalysis and phantommoddump compile with every possible SETUP= flag

  • test: runs the test suite [see below]

  • mpi: runs the test suite with MPI [see below]

  • mcfost: compiles and links phantom+mcfost

Running the test suite on your own machine

You can run the test suite using:

make test

This is just a shortcut for the following sequence of commands:

make SETUP=test phantomtest

You can run the complete testsuite yourself using the testbot wrapper script:

cd phantom/scripts

Running selected parts of the test suite

You can run just part of the test suite by giving an additional argument as follows:

make SETUP=test phantomtest && ./bin/phantomtest derivs

A non-exhaustive list of possible arguments are as follows:




unit tests of all derivative terms


unit tests of hydrodynamic derivatives


unit tests of the magnetohydrodynamics derivatives


unit tests of the artificial viscosity terms


unit tests of the physical viscosity terms


unit tests related to individual particle timesteps


unit tests of the hydro derivatives in a setup with density contrast


tests the linklist/neighbour finding modules


performs checks on the timestepping routine


performs checks of the sink particle/point mass module


performs tests of the external force module


performs a sedov blast wave test


performs unit tests of various utilities to do with individual timestepping


perform tests of self-gravity terms


perform unit tests of write to/read from dump files


performs unit tests of the kernel module

The buildbot

The buildbot also runs in an action and checks that the code compiles in all of the possible SETUP configurations in the Makefile. You can run this offline as follows:

cd phantom/scripts

If you want to check only those SETUPS that were failing in the actions, edit the script and override the allsetups= line, e.g:

allsetups='disc star'

Common reasons for failure

We enforce the following policies in merging to the master branch:

  1. Code must compile and run with and without DEBUG=yes

  2. Code must compile with ability to change the precision of reals to real*4 (this is enforced in SETUP=blob)

  3. Code must compile with no warnings when compiled with gfortran (enforced with NOWARN=yes which adds the -Werror flag)

  4. Testsuite must work with and without MPI, i.e. compile with MPI=yes

How to reproduce the github build environment offline

Just occasionally it is hard to reproduce a failure in the actions. It is possible to recreate the github actions environment offline, using a Docker container. I suggest to do this only as a last resort. The recommended steps are as follows:

Running the actions locally

  1. Install Docker

  2. Install act

  3. run the pull_request workflow

act pull_request

Checking the phantom build that is failing manually

If you just want to check things manually but in the same environment as used in the actions, try the following:

  1. Install [Docker](

  2. Install Docker command line tools

brew install docker
  1. Install the ubuntu-latest image in Docker, e.g. by typing in a terminal [around 6.5Gb download]

docker pull nektos/act-environments-ubuntu:18.04
  1. Run the image, and proceed to run phantom build checks manually

git clone
mkdir -p runs/mydisc
cd runs/mydisc
~/phantom/scripts/ disc > Makefile
export DEBUG=yes
export PHANTOM_DIR=~/phantom
make setup
make analysis
make moddump
./phantomsetup disc
./phantomsetup disc
./phantomsetup disc
./phantom disc