GitHub workflow¶
Overview of the development workflow
Code development is performed on GitHub, with a protected main branch. The actual development is performed on feature branches, which are merged to main following a pull request and the completion of a code review. Continuous Integration (CI) tests are automatically performed on pull requests with a successful pass as a prerequisite for merging into main.
Issues & Milestones¶
Issues are created for bugs, improvements, features, regression testing and documentation. The issues should be named with a few keywords. Try to avoid describing the complete issue already in the title. The issue can be assigned to a certain milestone (if appropriate).
Milestones are created based on planned releases (e.g. Release 1.2.1) or as a grouping of multiple related issues (e.g. Documentation Version 1, Clean-up Emission Routines). A deadline can be given if applicable. The milestone should contain a short summary of the work performed (bullet-points) as its contents will be added to the description of the releases. Generally, pull requests should be associated with a milestone containing a release tag, while issues should be associated with the grouping milestones.
As soon as a developer wants to start working on an issue, she/he shall assign himself to the issue and a branch and pull request denoted as work in progress ("draft") should be created to allow others to contribute and track the progress. Ideally, issues should be created for every code development for documentation purposes. Branches without an issue should be avoided to reduce the number of orphaned/stale branches. Where a branch must be created outside the issue context, its name should carry a prefix that matches one of the existing GitHub labels
Pull requests should include a concise description of what changed and why, a reference to the issue being resolved (e.g. Closes #42), and a note on anything that reviewers should pay particular attention to.
Code Review¶
Every pull request requires at least one approving review before it can be merged. Reviewers should check at least the following points.
- The implementation is correct and consistent with the existing architecture
- New code follows the conventions in the Style Guide
- Public functions carry type annotations and docstrings
- New functionality is covered by tests or tutorials
- The CI pipeline passes all checks without errors or warnings
Authors should respond to review comments promptly. If a comment is addressed by a code change, mark it as resolved. If it is addressed by explanation, reply in the thread and leave it for the reviewer to close.
Commit Messages¶
Commit messages should be written in the imperative mood and describe what the commit does, not what was done:
Release and Deploy¶
Releases follow Semantic Versioning: MAJOR.MINOR.PATCH. A new release is created from main by opening a pull request associated with the corresponding release milestone. Once merged, navigate to Releases and select Draft a new release. Set the tag to vMAJOR.MINOR.PATCH and the title to Release MAJOR.MINOR.PATCH. The milestone description supplies the release notes.
Tagged releases are automatically packaged as a Python wheel and deployed to PyPI by the CI pipeline.