2024-10-04 11:45:07 +02:00
# Contributing to EOS
Thanks for taking the time to read this!
The `EOS` project is in early development, therefore we encourage contribution in the following ways:
2025-01-06 19:34:15 +01:00
## Documentation
2025-03-23 13:52:15 +01:00
Latest development documentation can be found at [Akkudoktor-EOS ](https://akkudoktor-eos.readthedocs.io/en/latest/ ).
2025-01-06 19:34:15 +01:00
2024-10-04 11:45:07 +02:00
## Bug Reports
2024-11-10 23:00:16 +01:00
Please report flaws or vulnerabilities in the [GitHub Issue Tracker ](https://github.com/Akkudoktor-EOS/EOS/issues ) using the corresponding issue template.
2024-10-04 11:45:07 +02:00
## Ideas & Features
2025-10-28 02:50:31 +01:00
Issues in the [GitHub Issue Tracker ](https://github.com/Akkudoktor-EOS/EOS/issues ) are also fine
to discuss ideas and features.
2024-10-04 11:45:07 +02:00
2025-10-28 02:50:31 +01:00
You may first discuss the idea in the [Akkudoktor Forum ](https://www.akkudoktor.net/forum/diy-energie-optimierungssystem-opensource-projekt/ ) before opening an issue.
2024-10-04 11:45:07 +02:00
## Code Contributions
We welcome code contributions and bug fixes via [Pull Requests ](https://github.com/Akkudoktor-EOS/EOS/pulls ).
2025-04-07 22:23:35 +02:00
To make collaboration easier, we require pull requests to pass code style, unit tests, and commit
message style checks.
2024-11-17 15:27:43 +01:00
### Setup development environment
2026-08-20 02:02:49 +02:00
Use `uv` to create the virtual environment and install development dependencies.
2024-11-17 15:27:43 +01:00
```bash
2026-09-10 23:20:35 +02:00
uv sync --locked --extra dev
2024-11-17 15:27:43 +01:00
```
Install make to get access to helpful shortcuts (documentation generation, manual formatting, etc.).
- On Linux (Ubuntu/Debian):
```bash
sudo apt install make
` ``
- On MacOS (requires [Homebrew](https://brew.sh)):
` ``zsh
brew install make
` ``
The server can be started with ` make run`. A full overview of the main shortcuts is given by ` make help`.
2024-10-04 11:45:07 +02:00
### Code Style
2026-07-21 04:22:50 -04:00
All code, comments, docstrings, identifiers and API field names are written in English.
2024-10-04 11:45:07 +02:00
Our code style checks use [` pre-commit`](https://pre-commit.com).
To run formatting automatically before every commit:
` ``bash
2026-09-10 23:20:35 +02:00
uv run --locked --extra dev pre-commit install
uv run --locked --extra dev pre-commit install --hook-type commit-msg --hook-type pre-push
2024-10-04 11:45:07 +02:00
` ``
Or run them manually:
` ``bash
2026-09-10 23:20:35 +02:00
uv run --locked --extra dev pre-commit run --all-files
2024-10-04 11:45:07 +02:00
` ``
2026-09-10 23:20:35 +02:00
### Static typing
Use ` uv` on your ` PATH` and the Python version pinned in ` .python-version` (also used by the
pre-commit CI job). The supported typing entry points are:
` ``bash
make mypy
uv run --locked --extra dev pre-commit run mypy --all-files
` ``
Both run ` uv run --locked --exact --extra dev python -m mypy --config-file pyproject.toml`.
CI runs the same local pre-commit hook. The environment includes all runtime dependencies and
development stubs from ` uv.lock`, including the type information supplied by Pydantic and Pendulum.
` --locked` rejects an out-of-date lockfile instead of updating it, and ` --exact` removes packages
outside the selected locked dependencies. Keep the Makefile and hook commands identical.
` [tool.mypy]` in ` pyproject.toml` defines the policy for all of ` src` and ` tests`, targeting Python
3.13 and Linux. The hook always checks this complete scope, including on configuration-only changes.
It does not add the old mirror hook's ` --ignore-missing-imports` or ` --scripts-are-modules` defaults.
Only the existing per-module missing-import exceptions in ` pyproject.toml` apply.
Incremental analysis is disabled because mypy 2.3.1 produces different Pendulum diagnostics with
warm and empty caches. Each entry point therefore performs a full analysis; this costs time but
keeps diagnostics independent of cache history without suppressing checks.
To regression-test the entry points run:
` ``bash
uv run --locked --extra dev pytest -q --finalize tests/test_typingmypytoolchain.py
` ``
This test creates a temporary project and a fresh locked development environment and hook/type-check
caches. It verifies valid Pydantic and Pendulum assignments, then deliberate type errors in both
` src` and ` tests`, through Makefile, a configuration-only hook run, and the CI command. All probes
stay in the temporary project. It may download locked packages; set ` UV_CACHE_DIR` to an empty
temporary directory as well to verify without a warm package cache.
2024-10-04 11:45:07 +02:00
### Tests
Use ` pytest` to run tests locally:
` ``bash
2026-08-20 02:02:49 +02:00
uv run python -m pytest -vs --cov src --cov-report term-missing tests/
2024-10-04 11:45:07 +02:00
` ``
2025-04-07 22:23:35 +02:00
### Commit message style
2025-10-28 02:50:31 +01:00
Our commit message checks use
[` commitizen`](https://commitizen-tools.github.io/commitizen/#pre-commit-integration). The checks
2025-04-07 22:23:35 +02:00
enforce the [` Conventional Commits`](https://www.conventionalcommits.org) commit message style.
2025-10-28 02:50:31 +01:00
You may use [` commitizen`](https://commitizen-tools.github.io/commitizen) also to create a
commit message and commit your change.
## Thank you!
And last but not least thanks to all our contributors
[](https://github.com/Akkudoktor-EOS/EOS/graphs/contributors)