Contributing¶
Contributions are welcome — bug reports, feature requests, and pull requests alike.
Reporting a bug¶
Open an issue on GitHub and include:
- ezmig version (
uv run ezmig --version) - Database type and driver version
- The
ezmig.tomlused (redact credentials) - The full error output
Suggesting a feature¶
Open an issue with:
- The problem you're trying to solve
- What you'd expect the behaviour to be
- Any alternatives you considered
Opening a pull request¶
1) Fork and clone¶
git clone https://github.com/klinvesta/ezmig.git
cd ezmig
2) Set up the dev environment¶
uv sync --group dev
uv run pre-commit install
3) Create a branch¶
Use a short, descriptive name:
git checkout -b fix/checksum-drift-message
git checkout -b feat/mysql-adapter
git checkout -b docs/add-configuration-page
Prefixes: fix/, feat/, docs/, chore/, test/
4) Make your changes¶
- Keep commits small and focused
- Add or update tests for any changed behaviour
- Use Conventional Commits so releases can be generated automatically
- Run the full suite before pushing:
uv run pytest
uv run pre-commit run --all-files
Commit message examples:
feat: add dry-run flag to planfix: handle missing rollback sectionperf: reduce filesystem scans during statusfeat!: change configuration schema
Release impact:
feat→ minor releasefix/perf→ patch release- breaking changes (
!orBREAKING CHANGE:) → major release docs,chore,style,refactor,test,build,ci→ no release
5) Open a PR¶
- Target the
devbranch - Describe what changed and why
- Link to any related issues
Code style¶
- Formatting and linting are enforced via ruff
- Type checking is enforced via ty
- All hooks run automatically on commit via pre-commit
Design principles¶
Before proposing a change, keep in mind EZMig's goals:
- Keep the core small
- Avoid abstraction layers
- Favour explicit SQL over generated code
- Make failures obvious and safe