First off, thank you for considering contributing to annual! It's people like you that make annual such a great tool.
By participating in this project, you are expected to uphold our Code of Conduct.
- Ensure the bug was not already reported by searching on GitHub under Issues.
- If you're unable to find an open issue addressing the problem, open a new one. Be sure to include a title and clear description, as much relevant information as possible, and a code sample or an executable test case demonstrating the expected behavior that is not occurring.
- Open a new issue with a clear title and detailed description of the suggested enhancement.
- Fork the repo and create your branch from
main
. - If you've added code that should be tested, add tests.
- If you've changed APIs, update the documentation.
- Ensure the test suite passes using
tox -e pytest
. - Make sure your code lints (we use pre-commit hooks and
tox
). - Issue that pull request!
-
Clone the repository:
git clone https://github.com/tom65536/annual.git cd annual
-
Create a virtual environment and activate it:
python -m venv venv source venv/bin/activate # On Windows use `venv\Scripts\activate`
-
Install the development dependencies:
pip install -r requirements-dev.txt
-
Install pre-commit hooks:
pre-commit install
We use tox
to run tests and quality checks. To run all tests and checks:
tox
To run a specific environment:
tox -e pytest # Runs unit tests only
tox -e flake8,mypy # Runs linting and type checks
We use Conventional Commits for commit messages to automate version management and package releases. The commit message should be structured as follows:
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
Types include:
- feat: A new feature
- fix: A bug fix
- docs: Documentation only changes
- style: Changes that do not affect the meaning of the code
- refactor: A code change that neither fixes a bug nor adds a feature
- perf: A code change that improves performance
- test: Adding missing tests or correcting existing tests
- chore: Changes to the build process or auxiliary tools and libraries
We use Semantic Versioning for versioning. For the versions available, see the tags on this repository.
We use Python Semantic Release to automate our release process. The release is triggered based on the commit messages when code is merged into the main branch.
Don't hesitate to reach out if you have any questions. You can open an issue or contact the maintainers directly.
Thank you for your contributions!