Contributing#
If you are keen to contribute to this project, please follow these guidelines:
Before making any change, please first discuss via issue or email with the owners of this repository.
Development is based on Python 3.10.
Git branches follow the GitFlow principle.
Release versioning follows the Semantic Versioning principle.
Code style follows the PEP 8 Style Guide and Common Coding Conventions, unless stated otherwise below.
Git branches#
Based on the GitFlow principle there are the following branches:
master
- Contains stable release versions of the repository. Only admins should send pull requests / commits tomaster
when 1) fixing a critical bug or 2) publishing a new release.develop
- This branch is intended as the main branch for development or improvement of features. Anyone can send pull requests todevelop
. Pull requests must be discussed and approved by the administrators of this repository before merging intodevelop
.feature/xxx
- This branch is dedicated to developing featurexxx
. The idea is to keep development or improvement works separate from the maindevelop
branch. Once the work is finished, a pull request is created for featurexxx
to be merged back into thedevelop
branch.
If in doubt, your code should be committed to a feature/xxx
branch first.
Release versioning#
Every time the master
branch changes, a new version number is defined according to the Semantic Versioning principle:
New releases cause a changing version number in the first digit for major changes and in the second digit for minor changes (e.g. from 0.1.13 -> 0.2.0).
Bugfixes cause a changing version number in the third digit (eg. from 0.1.12 -> 0.1.13)
Style guide#
Follow the PEP 8 Style Guide and Common Coding Conventions. Also check this PEP8 Explainer.
Variable / function / object / class / module names:
Names are verbose and avoid abbreviations.
Variable / function / object names are in lowercase and underscore_case (all letters are lowercase and all words are separated by underscores).
Variable / object names start with a lowercase letter.
Class / module names start with an uppercase letter and are in CamelCase (all letters are lowercase except for the first letter of new words).
Paths:
Use relative paths.
Use
os.join.path("x", "y")
instead of"x/y"
.
Docstrings / comments:
Docstrings should at minimum contain a short description of the function / class / module.
Docstrings and comments should only contain full sentences which conclude with a full stop (dot).
Docstrings follow Google style.
Exceptions / errors / warnings / debug info:
Use proper logging tools instead of
print("Error: ...")
.Use logging like
logger.error("...")
orlogger.warning("...")
orlogger.debug("...")
.
Line length:
Line lengths should not exceed 120 characters.
Line breaks:
Use brackets to contain content spanning multiple lines.
Do not use the
\
symbol for line breaks.
Quotes / strings:
Use single quotes
'...'
for parameters, indexes, pathes and use double quotes"..."
for content, messages and docstrings.
Results / output files:
Store results / output files only in the
results
directory.The results path should be obtained with
mesmo.utils.get_results_path()
The content of the
results
directory should remain local, i.e., it should be ignored by Git and should not appear in any commits to the repository.
Release checklist#
Before pushing a new commit / release to the master
branch, please go through the following steps:
Run tests locally and ensure that all tests complete successfully.
Ensure that change log entry has been added for this version in
docs/change_log.md
.Ensure that version numbers and year numbers have been updated everywhere:
setup.py
(atversion=
)docs/change_log.md
docs/conf.py
(atcopyright =
)CITATION.bib
LICENSE
After pushing a new commit / release, create a tag and publish a new release on Github: https://github.com/mesmo-dev/mesmo/releases
After publishing a new release, edit the latest Zenodo entry: https://doi.org/10.5281/zenodo.3562875
Set title to “MESMO - Multi-Energy System Modeling and Optimization”.
Set correct author names.
Set license to “MIT License”.