Requirements:
uvmakeactionlint and act, only for local workflow validationInstall 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.
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.
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.
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.
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.
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.