🎉🏅 Thanks for helping us improve this project! 🙏
This document outlines some practices we care about. If you have any questions or suggestions about the process, feel free to open an issue .
Please follow the angular commit message conventions.
We use an automated tool for generating releases
that depends on the conventions to determine the next version and the content of the changelog.
Commit messages that don't follow the conventions will cause npm test
(and thus CI) to fail.
The short summary - a commit message should look like this:
<type>(<scope>): <subject>
<BLANK LINE>
<body>
<BLANK LINE>
<references>
<BLANK LINE>
<footer>
Everything but the first line is optional. The empty lines between the different parts are required.
<type>
: One of the following:
<type> |
explanation | version change |
---|---|---|
feat | Introduces a new feature | minor |
fix | A bug fix | patch |
perf | Performance optimizations | patch |
refactor | Changes to the code structure without fixing bugs or adding features | patch |
chore | Changes to the project setup and tools, dependency bumps, house-keeping | patch |
build | Changes that affect the build system (e.g webpack, rollup, ...) | patch |
revert | reverts a previous commit | patch |
docs | Changes to the documentation | none |
style | Cleanup & lint rule fixes. Note that often it's better to just amend the previous commit if it introduced lint errors | none |
test | Fixing existing tests or adding missing ones. Just like with style, if you add tests to a feature you just introduced in the previous commit, consider keeping the tests, and the feature in the same commit instead. | none |
ci | Changes to your CI configuration & scripts | none |
<subject>
: A good git commit message subject.- Keep it brief. If possible the whole first line should have at most 50 characters.
- Use an imperative mood. "Create" instead of "creates" or "created".
- No period (".") at the end.
<body>
: Motivation for the change and any context required for understanding the choices made. Just like the subject, it should use an imperative mood.<scope>
: The scope is optional and specifies the place of your commit. Use*
for multiple places.<references>
: Any URLs relevant to the PR go here. Use one line per URL and prefix it with the kind of relationship, e.g. "Closes: " or "See: ". If you are referencing an issue in your commit body or PR description, never use#123
but the full URL to the issue or PR you are referencing. That way the reference is easy to resolve from the git history without having to "guess" the correct link even if the commit got cherry-picked or merged into a different project.<footer>
: This part only applies if your commit introduces a breaking change. It's important this is present, otherwise the major version will not increase. See below for an example.
A feature that introduces a breaking change:
feat: Support --yes CLI option
For existing projects all prompts can be inferred automatically.
Manual confirmation for each default provides no value in that case.
Closes https://github.com/my/project/issues/123
BREAKING CHANGE: This removes support for interactive password entry.
Users will have to login beforehand.
A simple bug fix:
fix(search): Handle multi-byte characters in search logic
If you find any mistakes in the docs or a bug in the code, please open an issue in Github so we can look into it. You can also create a PR fixing it yourself, or course.
If you report a bug, please follow these guidelines:
- Make sure the bug exists in the latest version.
- Include instructions on how to reproduce the issue.
The instructions should be as minimal as possible
and answer the three big questions:
- What are the exact steps you took? This includes the exact versions of node, npm, and any packages involved.
- What result are you expecting?
- What is the actual result?
For small documentation changes, you can use Github's editing feature. The only thing to keep in mind is to prefix the commit message with "docs: ". The default commit message generated by Github will lead to a failing CI build.
For larger updates to the documentation it might be better to follow the instructions for contributing code below.
Note: If you're planning on making substantial changes, please open an issue first to discuss your idea. Otherwise, you might end up investing a lot of work only to discover that it conflicts with plans the maintainers might have.
The general steps for creating a pull request are:
- Create a branch for your change.
Always start your branch from the latest
main
. We often prefix the branch name with our initials, e.g.jk-a-change
. - Run
npm install
to install the dependencies. - If you're fixing a bug, be sure to write a test first. That way you can validate that the test actually catches the bug and doesn't pass.
- Make your changes to the code. Remember to update the tests if you add new features or change behavior.
- Run the tests via
npm test
. This will also run style checks and other validations. You might see errors about uncommitted files. This is expected until you commit your changes. - Once you're done,
git add .
andgit commit
. Please follow the commit message conventions described below. - Push your branch to Github & create a PR.
In addition to any linting rules the project might include, a few general rules of thumb:
- Try to match the style of the rest of the code.
- We prefer simple code that is easy to understand over terse, expressive code.
- We try to structure projects by semantics instead of role.
E.g. we'd rather have a
tree.js
module that contains tree traversal-related helpers than ahelpers.js
module. - Actually, if you create helpers you might want to put those into a separate package. That way it's easier to reuse them.