Contributing & releases¶
Contributions are welcome. This page summarizes the development workflow; the
canonical reference is
CONTRIBUTING.md
in the repository.
Local setup¶
git clone git@github.com:DonAsako/eskoz.git
cd eskoz
python3.13 -m venv .venv && source .venv/bin/activate
pip install -r requirements/development.txt
pre-commit install # installs the pre-commit and commit-msg hooks
Quality checks¶
Quality is enforced by pre-commit (Ruff, djLint, yamllint, gitleaks, gitlint, Django checks). The hooks run on every commit; run them on demand with:
Running tests¶
Locally the suite runs on SQLite via the development settings:
export DJANGO_SETTINGS_MODULE=eskoz.settings.development
export DJANGO_SECRET_KEY=dev-dummy-key
python manage.py test apps.analytics apps.blog apps.core apps.education apps.infosec -t .
The -t . flag
It sets the test discovery top-level directory to the repo root so the
apps.*.models packages import under their real dotted path.
In CI, the same suite runs against PostgreSQL using eskoz.settings.ci.
Commit convention¶
Eskoz uses Conventional Commits. The prefix drives automated versioning and the changelog:
| Prefix | Meaning | Version bump |
|---|---|---|
feat: |
A new feature | minor |
fix: |
A bug fix | patch |
perf: |
A performance improvement | patch |
refactor: |
Code change, no behaviour change | patch |
docs: |
Documentation only | none |
chore: |
Tooling, deps, housekeeping | none |
A breaking change (feat!: or a BREAKING CHANGE: footer) triggers a major
bump.
How releases work¶
Everything from a merge to a published release is automated:
- On every pull request and push to
main, the CI workflow runs the quality suite and the PostgreSQL test suite. - Versioning is handled by release-please. It does not release on every push — it reads the conventional commits since the last release and opens (or updates) a release pull request containing the version bump and the generated changelog.
- Merging that release PR is the only thing that cuts a version: it creates
the git tag and GitHub Release, bumps
eskoz/__init__.py, and builds and pushes the Docker image to GHCR (ghcr.io/donasako/eskoz).
A regular (or even force) push to main therefore never changes the version on
its own — only merging the release PR does.
Documentation¶
This site is built with MkDocs Material
and deployed to GitHub Pages automatically on every push to main. To preview it
locally:
Then open http://127.0.0.1:8000.