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.
- Python Version: Upgraded from Python 3.10 to Python 3.14
- Dropped support for Python 3.7-3.11
- GitHub Actions now test against Python 3.12, 3.13, and 3.14
- Package Manager: Migrated from pip to uv for faster dependency management (10-100x speedup)
- Linting Tools: Replaced black, isort, flake8, and bandit with unified Ruff tool (10-100x faster)
- Configuration: Consolidated all tool configurations into
pyproject.toml- Removed
.bandit,.coveragerc,.flake8,.isort.cfg,mypy.ini, andpytest.inifiles
- Removed
- Path Handling: Migrated from string manipulation to
pathlib.Pathfor cross-platform compatibility
- CRITICAL: Fixed insecure credential handling in
hooks/command- Replaced predictable
/tmp/service_account.jsonwith securemktempcreation - Added restrictive file permissions (600) to prevent credential leakage
- Implemented proper cleanup with trap handlers for EXIT, ERR, INT, and TERM signals
- Eliminated symlink attack vulnerability
- Replaced predictable
- Critical Bug: Fixed incorrect file path construction in
_deploy_from_directory- Previously: Used
dataset_schema_directory + filename(missing subdirectories) - Now: Uses proper path joining with
pathlibto include all subdirectories
- Previously: Used
- Bug: Fixed broken git diff commands in
hooks/command- Replaced invalid
origin~0reference with properHEAD^..HEADcomparison - Fixed feature branch comparison using proper merge-base syntax (
base...HEAD) - Added error handling and fallback strategies
- Now converts relative paths to absolute paths to match Python code expectations
- Replaced invalid
- Bug: Fixed dataset name extraction using
pathlibinstead of fragile string splitting
- gbq: Updated from 1.0.5 to 1.1.0
- google-cloud-bigquery: Updated from 3.4.1 to >=3.28.0
- pydantic: Updated from 2.4.2 to >=2.10.0
- pytest: Updated from 7.2.0 to >=8.3.0
- pytest-cov: Updated from 4.0.0 to >=6.0.0
- pytest-mock: Updated from 3.10.0 to >=3.14.0
- mypy: Updated from 0.991 to >=1.13.0
- ruff: Added >=0.8.0 for unified linting and formatting
- All GitHub Actions updated to latest versions (v4/v5)
- Docker base image changed to
python:3.14-slim hooks/command: Updated default image topython:3.14-slimplugin.yml: Added descriptions, requirements (bash, docker, git), and debug_mode documentation
- Logging: Comprehensive logging throughout deployment process
- Deployment start/end status with project information
- File-by-file processing logs
- Success/failure messages for each operation
- Detailed error messages with stack traces (removed
sys.tracebacklimit = 0)
- Error Handling: Custom exceptions for better error semantics
- Added
MissingConfigErrorfor configuration validation - Specific error handling for
json.JSONDecodeErrorandFileNotFoundError - Proper error chaining with
raise ... from efor debugging
- Added
- Testing: 7 new integration tests with real file I/O
- Test deployment with real files
- Test file filtering based on changes
- Test skipping non-schema files
- Test invalid JSON handling
- Test fail-fast vs continue-on-error modes
- Test correct parameter passing to BigQuery
- Total test count: 13 → 20 tests
- Coverage increased from 63% to 88% with branch coverage enabled
- Configuration: Comprehensive
pyproject.tomlwith Ruff, MyPy, Pytest, and Coverage settings- Enabled branch coverage for more thorough testing
- Centralized all tool configurations
- Documentation: Added detailed docstrings to all functions
- Docker Compose: New services:
ruff-format,ruff-lint,ruff-check,mypy - Git Detection: Enhanced file change detection with better logging
- Shows detected file count
- Provides clear warnings for edge cases
- Handles first commit scenario
- black, isort, flake8, bandit dependencies (replaced by Ruff)
- Configuration files:
.bandit,.coveragerc,.flake8,.isort.cfg,mypy.ini,pytest.ini(moved to pyproject.toml) sys.tracebacklimit = 0- stack traces are now visible for debugging
plugin_scripts/deploy.py: Complete rewrite with logging, pathlib, and better error handlingplugin_scripts/pipeline_exceptions.py: AddedMissingConfigErrorexceptionhooks/command: Secure credential handling and fixed git diff logicdocker/run_tests.sh: Simplified to use Ruff commands instead of 4 separate lintersdocker/lock_requirements.sh: Updated to use uv commands for faster dependency locking- GitHub Actions workflows: Streamlined linting jobs into single Ruff job
- Install dependencies action: Updated to use uv instead of pip
- Test coverage: Now includes branch coverage for more thorough analysis
- Updating requirements
- Updated gbq library dependency to 1.0.5
- Option to specify
fail_pipeline_on_first_exception, default totrue
- Option to specify
prod_build_branch
- Logic to only execute changed files for default branches
- Option to only execute changed files
- Option to execute DML statements
- Update dependencies
- Docker image for pipeline
- Use locked dependencies for pipeline
- Fail pipeline if deploy fails for at least one schema
- Inline Docker
- Inline Docker
- Initial Release