Releases: wshaddix/sqlci
Releases · wshaddix/sqlci
Release list
2.1.2
Full Changelog: v2.1.1...v2.1.2
2.1.1
[2.1.1] - 2026-05-29
Security
- Validate
ScriptTableas a safe SQL identifier (reject names with spaces, semicolons, etc.) before interpolation into DDL/DML across all providers. Invalid names now produce a clear error at config validation time rather than failing at the database level. - Harden connection-string secret redaction: the
Pwdkeyword is now recognized, arbitrary whitespace around=is handled, and password values without a trailing semicolon are redacted.
Fixed
- Each change script and its tracking-table audit row now execute inside a single transaction. If the script fails, its audit is rolled back — previously a crash between script execution and audit insertion would cause the script to re-run on the next deploy.
- Configuration validation now runs the full suite of checks (ScriptTable, Version, ScriptsFolder existence) at deploy time rather than only validating the target environment. Previously, a missing scripts folder would surface as a cryptic
DirectoryNotFoundExceptionmid-deploy. ExtractIdFromFileNameno longer crashes on filenames without an underscore; it now throws a clear message describing the required naming convention.- SQL Server
GObatch separator is now anchored to the start of the line (^\s*GO\s*$) so words ending in "GO" (e.g.CARGO) are not accidentally split. - Generated script timestamps now use UTC instead of local time, producing monotonic, timezone-independent sequence prefixes.
- Script run history (
sqlci history) no longer creates the tracking table as a side effect — it only reads.
Changed
Executornow implementsIDisposableand holds a single connection per phase (deploy / reset / history) rather than opening and closing one per operation.- Provider alias handling (SqlServer/MSSQL, PostgreSql/pgsql, etc.) is centralized in
DatabaseProviderFactory.Normalize, andsqlci initnow writes the canonical provider name into config. - Unused
ExceptionMessagesremoved and remaining constants converted toconst. Default assembly version set to0.0.0-devso un-versioned builds are obvious.
Removed
- Dead code: unused
_databasefield inExecutor, unusedLogErrormethod, unusedMissingResetFolder/NotVerified/ResetFolderDoesNotExistexception messages.
Full Changelog: v2.1.0...v2.1.1
2.1.0
Release 2.1.0
Highlights
- Interactive
initcommand: Runningsqlci initwithout the--providerflag now shows a nice selection prompt in interactive terminals, letting you choose betweenSqlite,SqlServer, orPostgreSql. - Better defaults:
Sqliteis now the default provider.initgenerates a ready-to-useData Source=local.db;Cache=Sharedconnection string instead of a SQL Server LocalDB placeholder. - Major documentation refresh: The README has been completely rewritten with a much clearer flow (Features → Installation → Getting Started happy path first, reference material later). New
CONTRIBUTING.mdadded for developers.
What's Changed
- feat(cli): add interactive database provider selection to init command
- docs: major README overhaul and add CONTRIBUTING.md with release process
- chore(docs): remove outdated internal documentation
- chore: migrate to .slnx solution and update build configuration
- chore: remove legacy SqlCi project and old solution file
- chore: update release workflow and gitignore
- ci: update workflow to use SqlCi.slnx instead of deleted .sln
- docs: prepare CHANGELOG for v2.1.0
Full Changelog: v2.0.0...v2.1.0
sqlci v2.0.0
What's Changed
Full Changelog: v1.0.0...v2.0.0