Contributing

This document briefly describes how to contribute to psm_utils.

Before you begin

If you have an idea for a feature, use case to add or an approach for a bugfix, you are welcome to communicate it with the community by opening a thread in GitHub Discussions or in GitHub Issues.

Development setup

Local install

  1. Setup Python 3, and preferably create a virtual environment.

  2. Clone the psm_utils repository.

  3. Use pip in editable mode to setup the development environment:

pip install --editable .[dev,doc]

Unit tests

Run tests with pytest:

pytest ./tests

Documentation

To work on the documentation and get a live preview, install the requirements and run sphinx-autobuild:

pip install .[doc]
sphinx-autobuild  --watch ./psm_utils ./docs/source/ ./docs/_build/html/

Then browse to http://localhost:8000 to watch the live preview.

How to contribute

  • Fork psm_utils on GitHub to make your changes.

  • Commit and push your changes to your fork.

  • Ensure that the tests and documentation (both Python docstrings and files in /docs/source/) have been updated according to your changes. Python docstrings are formatted in the numpydoc style.

  • Open a pull request with these changes. You pull request message ideally should include:

    • A description of why the changes should be made.

    • A description of the implementation of the changes.

    • A description of how to test the changes.

  • The pull request should pass all the continuous integration tests which are automatically run by GitHub Actions.

Release workflow

  • When a new version is ready to be published:

    1. Change the __version__ in psm_utils/__init__.py following semantic versioning.

    2. Update the changelog (if not already done) in CHANGELOG.md according to Keep a Changelog.

    3. Merge all final changes with the main branch.

    4. Create a new release on GitHub.

  • When a new GitHub release is made, the Publish GitHub Action is automatically triggered to build the Python package and publish it to PyPI. Upon a new PyPI release, the Bioconda automations will automatically update the Bioconda package. However, if dependencies are changed, the conda recipe will have to be updated accordingly.