v1.0.0
What's Changed
Added
- Production runtime:
gunicorn+uvicorn.workers.UvicornWorkerwithgunicorn.conf.py(workers fromWEB_CONCURRENCY, timeouts, max-requests). - Logging defaults:
LOG_HTTP_BODY_CAPTUREdefault on (bodies truncated viaLOG_DB_MAX_BODY_BYTES);LOG_DB_SAMPLE_RATEdefault 1.0 for full request audit; response buffering only when capture enabled. - DB compatibility gate:
GISWATER_DB_VERSION_CHECK/GISWATER_DB_MIN_VERSIONintegrated into tenantGET /gw-api/v1/ready. - Golden prod env:
.env.prod.example; deployment checklistdocs/DEPLOYMENT_CHECKLIST.md. - Post-deploy smoke:
scripts/smoke_test.sh; pytest operability smoke (tests/test_operability.py). - Version parsing helper:
app/giswater_version.py.
Changed
- Dockerfile CMD uses Gunicorn instead of bare
uvicorn. - Hot paths: narrower
psycopg.Errorhandling in DB/SQL utilities and admin log queries; routing/Valhalla helpers avoid bareexcept. - Documentation: README deployment, compatibility table for 1.x, logging and probe guidance.
Security
- Payload retention is truncated and skippable: set
LOG_HTTP_BODY_CAPTURE=falsefor metadata-only, or lowerLOG_DB_SAMPLE_RATEif the DB log table is under pressure.
Removed
- Runtime
print(...)usage in favor of structured logging.
Pull requests
- chore(deps): bump cryptography from 46.0.5 to 46.0.7 by @dependabot[bot] in #19
- refactor: implement multi-tenancy by @smaspons in #20
- Make the app release-ready by @smaspons in #21
Full Changelog: v0.9.0...v1.0.0