mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-09-12 10:56:37 +00:00
The mypy regression-test command in CONTRIBUTING.md points to the nonexistent tests/test_typingmypytoolchain.py, causing copied commands to fail. Change the path to tests/test_typingmypytooling.py, the existing integration test.
129 lines
4.6 KiB
Markdown
129 lines
4.6 KiB
Markdown
# 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:
|
|
|
|
## Documentation
|
|
|
|
Latest development documentation can be found at [Akkudoktor-EOS](https://akkudoktor-eos.readthedocs.io/en/latest/).
|
|
|
|
## Bug Reports
|
|
|
|
Please report flaws or vulnerabilities in the [GitHub Issue Tracker](https://github.com/Akkudoktor-EOS/EOS/issues) using the corresponding issue template.
|
|
|
|
## Ideas & Features
|
|
|
|
Issues in the [GitHub Issue Tracker](https://github.com/Akkudoktor-EOS/EOS/issues) are also fine
|
|
to discuss ideas and features.
|
|
|
|
You may first discuss the idea in the [Akkudoktor Forum](https://www.akkudoktor.net/forum/diy-energie-optimierungssystem-opensource-projekt/) before opening an issue.
|
|
|
|
## Code Contributions
|
|
|
|
We welcome code contributions and bug fixes via [Pull Requests](https://github.com/Akkudoktor-EOS/EOS/pulls).
|
|
To make collaboration easier, we require pull requests to pass code style, unit tests, and commit
|
|
message style checks.
|
|
|
|
### Setup development environment
|
|
|
|
Use `uv` to create the virtual environment and install development dependencies.
|
|
|
|
```bash
|
|
uv sync --locked --extra dev
|
|
```
|
|
|
|
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`.
|
|
|
|
### Code Style
|
|
|
|
All code, comments, docstrings, identifiers and API field names are written in English.
|
|
|
|
Our code style checks use [`pre-commit`](https://pre-commit.com).
|
|
|
|
To run formatting automatically before every commit:
|
|
|
|
```bash
|
|
uv run --locked --extra dev pre-commit install
|
|
uv run --locked --extra dev pre-commit install --hook-type commit-msg --hook-type pre-push
|
|
```
|
|
|
|
Or run them manually:
|
|
|
|
```bash
|
|
uv run --locked --extra dev pre-commit run --all-files
|
|
```
|
|
|
|
### 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_typingmypytooling.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.
|
|
|
|
### Tests
|
|
|
|
Use `pytest` to run tests locally:
|
|
|
|
```bash
|
|
uv run python -m pytest -vs --cov src --cov-report term-missing tests/
|
|
```
|
|
|
|
### Commit message style
|
|
|
|
Our commit message checks use
|
|
[`commitizen`](https://commitizen-tools.github.io/commitizen/#pre-commit-integration). The checks
|
|
enforce the [`Conventional Commits`](https://www.conventionalcommits.org) commit message style.
|
|
|
|
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)
|