Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]¶
[1.8.0] - 2025-12-04¶
Added¶
- Modular CI/CD Workflow Architecture
- Refactored monolithic
ci.yml(662 lines) into modular reusable workflows - Created
test.ymlfor all testing phases (smoke, unit, coverage, integration) - Created
security.ymlfor security scanning (basic and full scan modes) - Created
build.ymlfor Docker builds, SBOM generation, and documentation - Created
deploy.ymlfor report generation and GitHub Pages deployment - Updated
performance.ymlto support workflow_call for reusability - Main
ci.ymlnow orchestrates workflows (reduced to ~120 lines) - Improved maintainability, modularity, and separation of concerns
-
Enhanced workflow diagram documentation with modular architecture
-
OpenAPI/Swagger Documentation
- Interactive API documentation at
/apidocs/ - Complete OpenAPI 2.0 specification at
/apispec.json - All 11 endpoints documented with schemas and examples
- "Try it out" feature for live API testing
-
Flasgger integration for auto-generated docs
-
Enhanced CI/CD Pipeline
- Composite action for Python environment setup (reduces duplication)
- Path-based workflow triggers (only run relevant tests)
- Conditional test matrices (PR: Python 3.12 only, push: 3.10-3.12)
- Smoke tests for fast-fail validation (30 seconds)
- Docker image artifact sharing between workflows (saves 2-3 min/workflow)
- Consolidated security scanning workflow (
security-scan.yml) -
Optimized artifact retention policies (40% storage cost reduction)
-
Automated Security Scanning
- Weekly security scans (Mondays 2 AM UTC) + on main branch pushes
- SAST tools: Bandit (Python security), Semgrep (pattern detection)
- Dependency scanning: pip-audit
- Container security: Trivy, Grype (image vulnerabilities)
- License compliance: pip-licenses check
- Results uploaded to GitHub Security tab
Improved¶
- CORS Configuration
- Dual-layer CORS (Flask + Nginx)
- Dynamic origin handling for flexible deployment
- Credentials support for session-based features
- Preflight OPTIONS request handling
-
Documented in API.md with examples
-
Documentation
- New dedicated Swagger UI guide (
SWAGGER.md) - Enhanced API.md with interactive documentation section
- Security.md updated with automated scanning details
- Index.md reflects new features and statistics
-
MkDocs navigation includes Swagger documentation
-
Code Quality
- Configured Ruff isort with
known-first-partyfor proper import organization - Pre-commit hooks configured and installed
- Integration tests validate CORS headers in containerized deployment
Fixed¶
- CORS headers missing in Nginx proxy for containerized deployments
- Ruff import organization (I001) errors with local package imports
- Docker layer caching improvements for faster builds
Planned¶
- Multi-day weather forecasts
- Weather alerts and notifications
- User accounts with saved locations
- GraphQL API support
- WebSocket real-time updates
[1.0.0] - 2025-12-02¶
Initial Release¶
MSN Weather Wrapper v1.0.0 is the first production-ready release, featuring a complete weather data solution with Python library, REST API, and modern web interface.
Added¶
- Python Weather Client Library
- Type-safe Pydantic models for weather data
- Context manager support for session management
- Celsius/Fahrenheit temperature conversion
- Automatic HTML and JSON parsing
-
Comprehensive error handling
-
REST API with Flask
- Weather by city (GET/POST):
/api/weather,/api/v1/weather - Weather by coordinates with geolocation:
/api/weather/coordinates - Health checks:
/health,/healthz(liveness),/readyz(readiness) - Recent searches management: GET, DELETE
- API versioning support (v1)
- 5-minute response caching
- Structured JSON logging with structlog
-
Request ID tracing
-
Modern Web Frontend
- React 19.2 + TypeScript 5.7 + Vite 7.2
- City autocomplete (406+ cities worldwide)
- Temperature unit toggle (Celsius/Fahrenheit)
- Geolocation support ("Use My Location" button)
- Recent searches history
- Responsive mobile-friendly design
- Accessibility (WCAG 2.1 Level AA)
- ARIA labels and roles throughout
- Semantic HTML structure
- Keyboard navigation support
- Screen reader optimized
- High-contrast focus indicators
-
SEO & PWA Features
- Comprehensive meta tags
- Open Graph social sharing
- Twitter Card support
- Custom favicon and icons
- PWA manifest
-
Security Features
- Input validation and sanitization
- Protection against SQL injection, XSS, path traversal, command injection
- Rate limiting (30 req/min per IP, 200/hr global)
- CORS configuration
- Comprehensive security test suite (25 tests)
-
Zero vulnerabilities (verified with pip-audit, bandit, Grype)
-
Production Deployment
- Gunicorn WSGI server (4 workers, 120s timeout)
- Podman/Docker containerized deployment
- Multi-stage builds (reduced image size)
- Multi-platform support (amd64, arm64)
- Nginx reverse proxy configuration
-
Health check endpoints for orchestration
-
Development Tools
- Containerized development environment (dev.sh)
- Hot reload for backend (Flask) and frontend (Vite HMR)
- Pre-commit hooks (ruff, mypy, pytest)
- Comprehensive test suite (86 tests, 89% coverage)
-
Integration tests for containerized deployments
-
Documentation
- Complete API reference with error codes, rate limiting, examples
- Security documentation and best practices
- Testing guide with coverage reporting
- Development guide
- Container development setup
- SBOM generation guide
- MkDocs documentation site with GitHub Pages deployment
- Versioning and release guide
-
CI/CD pipeline documentation
-
CI/CD Pipeline
- GitHub Actions workflows for testing, building, and deployment
- Multi-platform container builds (linux/amd64, linux/arm64)
- SBOM generation with Syft
- Security scanning with Trivy and Grype
- Automated PyPI publishing on release tags
- Semantic versioning enforcement
- Container registry publishing to ghcr.io
-
Automated GitHub releases with artifacts
-
Quality Assurance
- 155 dependencies verified MIT-compatible
- License report generated and reviewed
- Zero known security vulnerabilities
- 89% test coverage maintained
- Type safety with mypy strict mode
- Code quality with ruff linter
- All tests passing (69 unit/integration, 17 container tests)
Technology Stack¶
- Backend: Python 3.10-3.12, Flask 3.1+, Gunicorn 23.0+, Pydantic 2.12+
- Frontend: React 19.2, Vite 7.2, TypeScript 5.7+, CSS3
- Testing: pytest 9.0+, Playwright 1.49+, 86 tests with 89% coverage
- Quality: ruff 0.14+, mypy 1.19+, pre-commit 4.5+, bandit 1.9+
- Security: pip-audit 2.10+, Grype 0.104+, Trivy
- Deployment: Podman/Docker, multi-stage containers, Nginx, Supervisor
- Documentation: MkDocs 1.6+ with Material theme 9.7+
- CI/CD: GitHub Actions, Syft SBOM generation, semantic versioning
Performance¶
- 5-minute response caching (90%+ speedup for repeated queries)
- Optimized frontend bundle: 215.98 KB (66.78 KB gzipped)
- Gunicorn worker configuration tuned for production
- Efficient HTML/JSON parsing with Beautiful Soup 4
- Rate limiting prevents abuse while maintaining usability
Release Notes Guidelines¶
Version Format¶
- MAJOR.MINOR.PATCH (e.g., 1.0.0)
- MAJOR: Breaking changes
- MINOR: New features, backward compatible
- PATCH: Bug fixes, backward compatible
Categories¶
- Added: New features
- Changed: Changes in existing functionality
- Deprecated: Soon-to-be removed features
- Removed: Removed features
- Fixed: Bug fixes
- Security: Security improvements
Last updated: December 2, 2025