Contributing¶
Welcome to pydeltasnow contributor’s guide. This document focuses on
getting you familiarized with the development processes, but
other kinds of contributions are also appreciated.
All users and contributors are expected to be open, inclusive,
considerate, reasonable, and respectful.
Issue Reports¶
Bugs or general issues are recorded on the issue tracker. Please feel free to place an issue report if you encounter a problem.
Documentation Improvements¶
You can help improve the documentation by making it more readable and coherent, or by adding missing information and correcting mistakes.
When working on documentation changes in your local machine, you can
compile them using tox:
tox -e docs
Code Contributions¶
The deltasnow model routines are implementetd in the core module. The
utils module holds functions for data validation and missing value
handling. The main module provides an interface to the deltaSNOW model
with the swe_deltasnow() function.
Create an environment¶
Before you start coding, it is recommended to create an isolated virtual
environment to avoid any problems with your installed Python packages.
This can easily be done via either virtualenv:
virtualenv <PATH TO VENV>
source <PATH TO VENV>/bin/activate
or Miniconda:
conda create -n pydeltasnow python=3 six virtualenv pytest pytest-cov
conda activate pydeltasnow
Clone the repository¶
Create an user account on GitHub if you do not already have one.
Fork the project repository: click on the Fork button near the top of the page. This creates a copy of the code under your account on GitHub.
Clone this copy to your local disk:
git clone git@github.com:YourLogin/pydeltasnow.git
Navigate to the folder to which git downloaded the repository:
cd pydeltasnow
You should run:
pip install -U pip setuptools -e .
in order to install
pydeltasnowin editing mode and directly use your local changes.
Implement your changes¶
Create a branch to hold your changes:
git checkout -b my-feature
and start making changes. Never work on the main branch.
Start your work on this branch. Please include tests if you implement new functionality and add docstrings to new functions, modules and classes, especially if they are part of public APIs.
Please check that your changes don’t break any unit tests with:
tox(after having installed
toxwithpip install tox).You can also use
toxto run several other pre-configured tasks in the repository. Trytox -avto see a list of the available checks.When you are done editing, use:
git add <MODIFIED FILES> git commit
to record your changes in git.
Submit your contribution¶
If everything works fine, push your local branch to GitHub with:
git push -u origin my-feature
Go to the web page of your fork and click “Create pull request” to send your changes for review.
Troubleshooting¶
The following tips can be used when facing problems to build or test the package:
Make sure to fetch all the tags from the upstream repository. The command
git describe --abbrev=0 --tagsshould return the version you are expecting. If you are trying to run CI scripts in a fork repository, make sure to push all the tags. You can also try to remove all the egg files or the complete egg folder, i.e.,.eggs, as well as the*.egg-infofolders in thesrcfolder or potentially in the root of your project.Sometimes
toxmisses out when new dependencies are added, especially tosetup.cfganddocs/requirements.txt. If you find any problems with missing dependencies when running a command withtox, try to recreate thetoxenvironment using the-rflag. For example, instead of:tox -e docs
Try running:
tox -r -e docs
Make sure to have a reliable
toxinstallation that uses the correct Python version (e.g., 3.7+). When in doubt you can run:tox --version # OR which tox
If you have trouble and are seeing weird errors upon running
tox, you can also try to create a dedicated virtual environment with atoxbinary freshly installed. For example:virtualenv .venv source .venv/bin/activate .venv/bin/pip install tox .venv/bin/tox -e all
Right now, tox is set up with anaconda. In case you encounter problems with the environment creation, you might need to change the envlist parameters in
tox.inifrompythonX.XtopyXX.Pytest can drop you in an interactive session in the case an error occurs. In order to do that you need to pass a
--pdboption (for example by runningtox -- -k <NAME OF THE FALLING TEST> --pdb). You can also setup breakpoints manually instead of using the--pdboption.
Maintainer tasks¶
Releases¶
If you have write access to the repository, the following steps can be used
to release a new version for pydeltasnow:
Make sure all unit tests are successful locally and there ar no CI failures.
Tag the current commit on the main branch with a release tag, e.g.,
v1.2.3.Push the new tag to the upstream repository, e.g.,
git push upstream v1.2.3The CI will then publish to TestPyPi and you can have a look if everythin is okay.Create a release on GitHub and assiciate it with the tag you just created.
Publish the release on GitHub. This will trigger a CI job that builds the package and publishes it to PyPi.