This document contains guidelines for the collaboration in the glacier-flow-model python package.
Ready to contribute? Here's how to set up glacier-flow-model for local development.
- Clone the repository:
git clone https://github.com/munterfi/glacier-flow-model.git
- Install the dependencies:
poetry install
- Create a feature branch for local development:
git checkout -b feature/<the-feature-name> master
- Work locally on the feature, make sure to add or adjust:
- entries in CHANGELOG.md
- docstrings
- tests for the feature
- documentation
- When finished with the feature, check that the changes pass:
poetry run pytest # Running tests
poetry run mypy . # Static type checks
poetry run flake8 glacier_flow_model tests # Code linting
cd docs && poetry run make html && cd .. # Build documentation
Alternatively the script check.sh
automates the steps above.
- If tests are passed commit and push the changes:
git add .
git commit -m "Description of the changes."
git push origin feature/<the-feature-name>
- Submit a pull request of the feature into the
master
branch on GitHub.
The trunk-based development workflow uses one branch master
to record the history of the project.
In addition to the mainline short-lived feature or bugfix branches are used to develop new features or fix bugs.
Each new feature should reside in its own short-lived branch. Branch off of a feature/<feature-description>
branch from master
.
When a feature is complete, it gets merged back into master
and the feature branch is deleted.
Each bugfix should reside in its own short-lived branch. Branch off of a bugfix/<bugfix-description>
branch from master
.
When the fix is complete, it gets merged back into master
and the bugfix branch is deleted.
This packages uses semantic versioning. Once master
has acquired enough features for a release,
set the new version number of the in the pyproject.toml
and the CHANGELOG:rst
file. Commit and push to master
and publish a new release on GitHub, which will trigger an action to build
and publish the package to PyPi.
Dependencies and virtual environments are managed by poetry, do not edit the requirements manually!
E.g. use poetry update && poetry build
for version updating and poetry add <package_1> <package_2>
for adding new ones.
Use snake_case
for variable, argument and function/method name definitions.
Also in tables that are written to the database avoid capital letters and
dots (.
) in column name definitions. For class names use UpperCaseCamelCase
.
Create python documentation with docstrings in numpydoc convention.
Example:
def function_with_types_in_docstring(param1: str, param2: int = 10):
"""Example function with types documented in the docstring.
`PEP 484`_ type annotations are supported. If attribute, parameter, and
return types are annotated according to `PEP 484`_, they do not need to be
included in the docstring:
Parameters
----------
param1 : str
The first parameter.
param2 : int, default 10
The second parameter.
Returns
-------
bool
True if successful, False otherwise.
.. _PEP 484:
https://www.python.org/dev/peps/pep-0484/
"""
Add a header to CLI scripts according to the following template:
#!/usr/bin/env bash
# -----------------------------------------------------------------------------
# Name :example_script.sh
# Description :Short description of the scripts purpose.
# Author :Full name <your@email.ch>
# Date :YYYY-MM-DD
# Version :0.1.0
# Usage :./example_script.sh
# Notes :Is there something important to consider when executing the
# script?
# =============================================================================
Depending on the scope of your contribution add yourself to the authors field in the pyproject.toml
file
to ensure credits are given correctly.