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.

Not sure where to start? Great contributions to psm_utils include:

  • Adding support for more file formats.

  • Adding functionality to the PSMList, PSM, or Peptidoform classes.

  • Improving the performance of existing functions, e.g. parsing peptidoforms or reading and writing PSM files.

Also check out the open issues that carry the good first issue or help wanted labels.

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


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/ following semantic versioning.

    2. Update the changelog (if not already done) in 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.