title |
---|
Contributing to Auspice development |
Thank you for helping us to improve Nextstrain!
To get started, please see the contributing guide for useful information about how to pick an issue, submit your contributions, and so on.
This project strictly adheres to the Contributor Covenant Code of Conduct.
Please see the project boards for currently available issues.
Code contributions are welcomed! Please see the main auspice docs for details on how to install and run auspice from source.
Please comment on an open issue if you are working on it. For changes unrelated to an open issue, please make an issue outlining what you would like to change/add.
Where possible, please rebase your work onto master rather than merging changes from master into your PR.
From a fork: git pull --rebase upstream master
We use the following libraries for all kinds of testing, so it'd help to read the docs to get familiar with their APIs and features:
When you submit a pull request to the auspice repository, a variety of integration and unit tests will need to pass before it can be merged.
You will likely want to run these tests locally before submitting:
First, install the dependencies with npm i
, then:
Run npm test
.
Run npm run lint
. If there are issues run npm run lint:fix
.
For integration tests to work, you'll need to have
git-lfs
installed (see below) as it stores the images that the snapshot tests will use.
- Fetch the datasets with
npm run get-data
. - Ensure you are not currently running the site locally, then run
npm run integration-test:ci
.
- Unit tests:
npm run test -- -u
- Integration tests
npm run integration-test -- -u
- Fetch the datasets with
npm run get-data
. - Ensure you are not currently running the site locally, then run
npm run smoke-test:ci
.
-
Run a single
describe()
,it()
, ortest()
within a file, add.only()
:E.g.,
describe.only()
,it.only()
, ortest.only()
-
Run a single test file, append the following to your test command
-- relative_or_absolute_path/to/file
:E.g.,
npm run integration-test -- test/integration/zika.test.js
-
Run integration tests in headful mode, prepend
HEADLESS=false
to your command:E.g.,
HEADLESS=false npm run integration-test
-
For integration tests, please try to use
expect-puppeteer
as much as possible, and only resort topuppeteer
's native API when we can't do it withexpect-puppeteer
. The reason is becauseexpect-puppeteer
has better DX, as explained here -
How to add a new integration image test:
-
Wrap your image test with helper function
toMatchImageSnapshot()
fromtest/integration/helpers.js
, and it will take a screenshot every100ms
until it matches the expected snapshot or timeout (default:10s
) -
Temporarily add
page.waitFor(__ENOUGH__MS__)
before taking the new snapshot to give the browser enough time to render a complete image -
Example:
test/integration/zika.test.js
-
We use Git Large File Storage to manage certain assets.
Currently these are limited to images within the ./test
directory (which we use for snapshot integration testing) but this may change in the future.
If you are not using these images, you don't need to have git-lfs
installed; however will not be able to run integration tests without it.
See here for installation instructions.
Helpful commands:
git lfs status
git lfs ls-files # list LFS tracked tiles
Nextstrain documentation is available at nextstrain.github.io/auspice/.
This documentation is built from files contained within the Auspice GitHub repo -- see the docs-src/README within the docs-src
directory for more details and instructions on how to contribute.
Note that currently the documentation must be rebuilt & pushed to GitHub after a new version is released in order for the changelog to correctly appear at nextstrain.github.io/auspice/releases/changelog.
If you can assist in efforts to translate the Auspice interface to more languages your assistance would be very much appreciated. The currently available languages are displayed via a drop-down at the bottom of the sidebar.
- Add the language to the
getlanguageOptions
function in this file - If this is a new language, copy the folder (and the JSONs within it)
src/locales/en
and name it to match the language code for the new translation -- e.g. for Spanish this would besrc/locales/es
- For each key-value in the JSONs, translate the english phrase to the new locale. (Do not modify the strings within
{{...}}
sections.)
For example, a spanish translation would change the English:
"sampled between {{from}} and {{to}}": "sampled between {{from}} and {{to}}",
"and comprising": "and comprising",
to
"sampled between {{from}} and {{to}}": "aislados entre {{from}} y {{to}}",
"and comprising": "y compuesto de",
Run npm run diff-lang -- X
, where X
is the language you wish to check, for instance es
.
This will display the strings which:
- need to be added to the translation
- are present but should be removed as they are no longer used
- are present but are simply a copy of the English version & need to be translated
Running
npm run diff-lang
will check all available languages.
If a translation of a particular string is not yet available, then auspice will fall-back to the english version.
- Find the relevant key in the (EN) JSONs in this directory
- Add the key to the JSON with the same name, but in the directory corresponding to the language you are translating into (see above for an example).
New versions are released via the ./releaseNewVersion.sh
script from an up-to-date master
branch. It will prompt you for the version number increase, push changes to the release
branch and, as long as Travis-CI is successful then a new version will be automatically published to npm.