openfatture

Development

Setup

Requirements:

Install the locked development environment:

uv sync --all-extras
uv run pre-commit install

Copy .env.example to .env only when local provider or email credentials are needed. The deterministic CLI demo does not require credentials.

Daily checks

make demo
make lint-check
make test-fast

The public CLI is intentionally small:

uv run openfatture --help
uv run openfatture assistant --help
uv run openfatture interactive --help
uv run openfatture status --json

Use make format for an intentional rewrite and make pre-commit before opening a pull request.

Tests

The default pytest configuration excludes performance, benchmark, slow, e2e, and external-service tests. Run focused suites directly when changing a core module:

make test-unit
make test-integration
make test-payment

Billing, payment, SDI, storage, and AI remain domain modules. Their implementation and tests are independent from the public CLI adapters. See ARCHITECTURE.md for package names after the 2.0 reorg.

GitHub Actions

Validate workflow syntax and the deterministic demo plan without containers:

./scripts/validate-actions.sh
./scripts/test-actions.sh dry-run

Run the demo job with Docker when the local daemon and network are available:

./scripts/test-actions.sh demo

act does not receive repository secrets automatically. If a workflow needs a secret, pass an explicit local secret file with act --secret-file; never commit that file or generate it from shell history.

Database

Use Alembic for schema changes:

make db-migrate

Create a migration only when the domain model change is intentional, and run the relevant storage tests before committing it.

Docker

Use the Docker Compose v2 command:

docker compose up -d
docker compose down
make docker-test

The payment image packages the payment core for isolated checks; it does not restore a payment CLI command.