General guidelines
For your contributions, please follow the guidelines laid out below to the best of your ability.
Beginners
If you don't have a lot of experience with this sort of workflow, the guidelines in this section may seem overwhelming. But please don't worry! We will guide you through the process and you will soon get the hang of it. And please don't worry about making mistakes either - everybody does them. Often! Our project layout makes it very very hard for anyone to cause irreversible harm, so relax, try things out, take your time and enjoy the work! :)
Communication
Please use the comment functions available on GitHub to discuss issues and pull requests. For all other communications please refer to the communication channels listed in the contact section. In particular, use the chat to discuss project ideas, get help on a problem, or any other informal discussion that does not need to be preserved as part of the repository you are working on.
Submitting issues
Please use each project's GitHub issue tracker to:
- propose features
- report bugs
- find issues to work on
- discuss existing issues
As an example, you can find this project's issue tracker here.
When submitting new issues to propose features or report bugs, please choose the most appropriate template, if available, then follow the instructions in the template.
You don't need to add labels or milestones for an issue, the project maintainers will do that for you. However, it is important that all issues are written concisely, yet with enough detail and relevant context (links, screenshots, etc.) to allow others to start working on them. For bug reports, it is essential that they include reproducible examples.
Here and here are some resources to help you get started on writing good issues.
Branching model
All of our projects are version-controlled via Git and codebases are hosted on GitHub. Please refer to appropriate documentation and tutorials if you are not familiar with them.
To keep track our project histories clean, we follow a slightly modified version of the GitHub Flow Branching model. What this means is that code changes are always merged into protected branches via pull requests that will undergo one or more rounds of review and testing. The schema below visualizes this process.
- Create a "feature branch" from the development branch; use the
feature/my-feature
naming pattern to name your feature branch, e.g.,feature/update-docs
; make sure the development branch is up to date before creating the feature branch! - Commit code changes to address the issue you are working on
- Push the feature branch to the remote and create a pull request against the development branch in GitHub
- Address any comments added during code review by pushing additional commits (there may be multiple rounds of reviews)
- Once all issues are resolved, code owners will merge the feature branch into the development branch using the "squash merging" method
Development branch
Typically, dev
is the name of the development branch in our projects.
In a few cases (e.g., this repository), there is no development branch
and changes are merged immediately into the main branch, typically called
main
.
Default branch
For projects in pre-release state, i.e., those with version numbers below
v1.0.0
, the development branch is typically the default branch (meaning
that the correct target branch for your PRs is set automatically).
With the first major release, the default branch is set to the main branch instead. In that case, make sure to manually select the development branch as the target branch for your PRs.
Substantial changes
If your proposed changes will be substantial, try to split up the work into multiple feature branches. This makes reviewing easier, helps to keep the project history clean and may better guard against code regression. A rule of thumb is that you should be able to adequately summarize your changes with 50 characters.
If your changes are becoming more substantial than you anticipated, you can
request that the branch be "rebase merged" instead
of "squash merged". However, we will only do so if
you have exactly one clean commit for each semantic work package and each
commit message follows the conventional commit specifications. You can use
git rebase --interactive
to clean up your feature branch.
Feature branches unstable
All feature branches are to be considered unstable, i.e., their history may change at any time, even after being pushed to the remote. Therefore, do not work on feature branches without clearly communicating with the people who have created them.
Commit messages
Generally, no specific formatting of individual commit messages is required when working on feature branches. However, your pull request titles MUST follow the Conventional Commits specification. The same is true for individual commit messages if you are requesting that your feature branch be "rebase merged" (see info box "Substantial changes" above).
Conventional Commits help to increase consistency, facilitate maintenance and enable automated versioning and change log generation. Their general structure is as follows:
<type>(optional scope): <description>
[optional body]
[optional footer]
Please follow these rules for your commit messages / PR titles:
- Keep your entire header/title line (including type and, if available, scope) at 50 characters or less
- Only use the types listed in the table below; choose the type according to the predominant reason for the change
- Only use types
feat
,fix
,perf
,refactor
andstyle
for changes in package/production code; use the dedicated types for all build-, CI-, documentation- or test-related changes - Indicating a scope is optional; it is only necessary if scopes are generally used in the repository you are working on
- Start the
<description>
with a verb in imperative form (e.g.,add
,fix
) - If you include a body and/or footer, make sure it conforms to the Conventional Commits specification
Depending on the changes, we would kindly request you to use one of the following type prefixes:
Type | Description |
---|---|
build | For changes related to the build system (e.g., scripts, configurations and tools) and package dependencies |
chore | For changes related to mundane repository maintenance tasks that are not covered by any of the other types (e.g., adding a `.gitignore file) |
ci | For changes related to the continuous integration and deployment system (e.g., workflows, scripts, configurations and tools) |
docs | For changes related to the project documentation, regardless of the audience (end users, developers) |
feat | For changes related to new abilities or functionality |
fix | For changes related to bug fixes |
perf | For changes related to performance improvements |
refactor | For changes related to modifying the codebase, which neither adds a feature nor fixes a bug (e.g., removing redundant code, simplifying code, renaming variables) |
revert | For changes that revert one or more previous commits |
style | For changes related to styling the codebase (e.g., indentation, parentheses/brackets, white space, trailing commas) |
test | For changes related to tests |
Linting commit messages
In order to ensure that the format of your commit messages adheres to the Conventional Commits specification and the defined type vocabulary, you can use a dedicated linter. More information can also be found in this blog post.
Filing pull requests
Open pull requests through the GitHub interface, VS Code or your favorite Git client. Make sure to follow the branching model. Most importantly:
Use Conventional Commit messages for your PR titles!
See details in the commit message section.
Code reviews
All code changes are reviewed by at least one other person. This is to ensure that the code is of high quality, that it is well-documented and that it adheres to the project's coding standards. The reviewer will check that the code is correct, that it is efficient and that it is maintainable. They will also check that the code is well-documented and that it is tested.
Please make sure to actively request reviews for your pull requests to avoid delays in the review and merging process. Please use the GitHub functionality for that (upper right hand corner of pull request view). If you are unsure who to ask for a review, please reach out to the project leads.
Pull request template
The pull request template will be successively added to all repositories. Until that is the case, you can already make use of it by self-reviewing your pull requests according to the checklist and descriptions.