Thanks for your interest in contributing! This guide covers everything you need to get started. Reading time: ~3 minutes.
- Clone the repo and install dependencies:
git clone https://github.com/your-org/veritix-python.git
cd veritix-python
make dev-setup- Copy the example environment file and fill in required values:
cp .env.example .envAt minimum, set QR_SIGNING_KEY (32+ characters) and NEST_API_BASE_URL.
- Start the stack with Docker:
docker compose up -dThe API will be available at http://localhost:8000.
Use one of these prefixes:
| Prefix | Use for |
|---|---|
feat/ |
New features |
fix/ |
Bug fixes |
docs/ |
Documentation only |
test/ |
Tests only |
ci/ |
CI/CD pipeline changes |
chore/ |
Dependency updates, tooling |
Examples: feat/add-bulk-qr-endpoint, fix/etl-pagination-bug, docs/api-reference
Follow Conventional Commits:
type: short description (max 72 chars)
Types: feat, fix, docs, test, ci, chore, refactor, perf
Examples:
feat: add batch QR generation endpoint
fix: handle missing sale_date in ETL transform
docs: add api-reference.md and etl-pipeline.md
- Must close an existing issue — include
Closes #<issue_number>in the PR description. - Must pass CI — all checks in
.github/workflows/ci.ymlmust be green. - Must include tests — new behaviour requires new or updated tests; coverage must not decrease.
- Must update docs — if you change an endpoint or config option, update
docs/api-reference.mdordocs/etl-pipeline.mdaccordingly.
# Run all tests
make test
# Run with coverage report
make coverage
# Run a specific test file
pytest tests/test_etl.py -vCoverage is enforced in CI. Keep it at or above the current baseline.
We use three tools — all enforced in CI:
| Tool | Purpose | Run locally |
|---|---|---|
| Black | Code formatting | black src/ tests/ |
| isort | Import sorting | isort src/ tests/ |
| mypy | Static type checking | mypy src/ |
Run all three before pushing:
black src/ tests/ && isort src/ tests/ && mypy src/Or use the Makefile shortcut if available:
make lintOpen a discussion or leave a comment on the relevant issue. We're happy to help.