Releases: sqitchers/sqitch
Releases · sqitchers/sqitch
Release v1.5.2
Changes for v1.5.2
- Added missing German translations, thanks to @0xflotus for the PR (#873)!
- Fixed bug where the location of reworked script files did not respect the
deploy_dir
,revert_dir
, orverify_dir
options. Thanks to Neil Freeman for the report (#875)! - Updated the MySQL engine's installation of the
checkit()
function so that it no longer depends on permission-checking, since the current user may not have such permission. It instead attempts to create the function and ignores a failure due to a lack of permission. Thanks to Alastair Douglas for the report and solution (#874)! - Added missing CockroachDB templates. Thanks to @Peterbyte for the report (#878)!
- Removed support for the
SNOWSQL_PORT
environment variable, which has long been deprecated by Snowflake and likely never did anything. - Fixed the quoting of the role and schema names on connecting to Snowflake, which was silently failing and thus not properly using the registry schema, which lead to a failure to find the registry. Broken in v1.5.1.
- Added redaction of passwords from Snowflake URL query parameters in the display URL. Any query parameter matching
pwd
will now appear as "REDACTED". - Expanded the documentation of Snowflake key pair authentication in
sqitch-authentication.pod
to recommend setting sensitive ODBC parameters in anodbc.ini
file rather than connection URL query parameters. - Switched to key pair authentication in the Snowflake CI workflows.
- Fixed another test failure with some Firebird configurations and improved diagnostic output when an engine cannot be integration-tested.
Release v1.5.1
Changes for v1.5.1
- Fixed a bug introduced in v1.5.0 where the MySQL engine connected to the target database instead of the registry database. Thanks to @tiberiusferreira for the report (#862)!
- Fixed test failures with some Exasol and Firebird configurations. Thanks to Slaven Rezić for the report (#858)!
Release v1.5.0
Changes for v1.5.0
- Fix improperly nested Pod headers that were incrementing two levels relative to their parent headers, which messed with the HTML output on sqitch.org.
- Banned "[" and "]" in names (changes, tags, projects) because they muck with dependency parsing of the plan file. Thanks to Žiga Leber for the bug report (#829).
- Updated the IPC methods that interact with engine clients to raise exception objects rather than strings, for more consistent error handling throughout.
- Removed duplicate DBI error handling code from engines and tests.
- Fixed an order of operation issue that prevented Sqitch from detecting Yugabyte before attempting to create an advisory lock, which resulted in an error for more recent Yugabyte releases. Thanks to Stefano Ricciardi for the report (#841).
- Removed a wayward mention of the long-deprecated
SQITCH_URI
environment variable from the Oracle tutorial. Thanks to Austin Hanson for the report (#845). - Improved unexpected error output by including any previous exception.
- Changed the "unknown engine" error to a runtime error, rather than development time, with a localized error message. The error loading the engine package and the stack trace remain available by using triple verbosity (
-vvv
). Thanks to Martin Fischer for the report (#838). - Changed the default error code from Oracle
sqlplus
fromSQL.SQLCODE
to4
, because otherwise the exit code is returnedmodulo 256
, meaning it can end up0
for success for an SQL error code likeORA-01792
. Selected4
as the replacement to match the behavior of Exasol and becauseFAILURE
maps to exit code1
, which has in the past been more akin to a warning. Thanks to @vectro for the report (#831). - Added checks for the existence of deploy and revert files when deploying and reverting. Previously Sqitch deferred such errors to the CLIs, but they're never called when using
--log-only
. Thanks to @vectro and Erik Wienhold for the suggestion (#828). - Fixed a bug where the MySQL engine failed to properly handle target URIs with no database name. Thanks to Felix Zedén Yverås for the report (#821).
- Updated the MySQL engine to omit the
checkit()
function when using binary logging and Sqitch lacks super user permissions. Thanks to Scott Edwards for the report and to Janosch Peters for the solution (#824). - Taught the Snowflake engine to detect when the Sqitch user lacks permission to create a schema and to skip the creation of the registry schema. Useful for cases when the registry schema was created in advance. Thanks to Peter Wimsey for the suggestion (#826).
- Switched the MySQL engine from DBD::mysql to DBD::MariaDB for better compatibility with older versions of the MySQL client library and for its Unicode improvements. Thanks to Mark Tyrrell for the report and @tiberiusferreira and Perl Monks
1nickt
andInfiniteSilence
for the feedback (#825).
Release v1.4.1
Changes for v1.4.1
- Removed the quoting of the role and warehouse identifiers that was added to the Snowflake engine in v1.4.0. Turns out Snowflake allows a warehouse to be specified in a different database, in which case dots are valid in the name and should not be quoted! So users must properly quote when necessary, but added notes to
sqitchtutorial-snowflake.pod
on the need to use URI escapes for special characters. Thanks to Patrick Sabo for the find, and to @marc-marketparts for validating that URI encoding works. - Added notes on URL encoding database URLs to
sqitch-target.pod
, the main reference for database URLs in the Sqitch documentation. - Fixed the output of the list of changes to be deployed or reverted to actually require
--verbose
twice, as described in the v1.4.0 changes, and not just once. Thanks to Erik Wienhold for the PR (#785)! - Removed the duplicate change name from the output of the list of changes to be deployed or reverted with
-VV
. Thanks to Erik Wienhold for the PR (#787)! - Fixed invalid template resolution when adding a singe change to multiple engines at once. Thanks to Christian Riedel for the detailed bug report (#795)!
- Fixed Oracle and Firebird test failures due to incorrect use of
chmod
. Thanks to Slaven Rezić for the report and the fix (#807)! - Tests now require Test::Warn 0.31 or later, as newline handling issues cause test failures in earlier versions. Thanks to Slaven Rezić for the test reports and for identifying the issue.
- Updated the locale configuration to fix issues in more recent versions of Perl, and added tests to ensure that the sqitch CLI executes and properly emits localized messages (except on Windows, where the language codes are incompatible).
- Fixed an issue where the MySQL engine failed to recognize the MariaDB
mysql
client installed by Homebrew on macOS. Thanks to Carlos Ramos for the bug report and PR (#791)!
Release v1.4.0
Changes for v1.4.0
- Fixed Snowflake warehouse and role setup to properly quote identifiers unless they're valid unquoted identifiers or already quoted. Thanks to @marc-marketparts for the report (#685).
- Fixed a bug reworking a change when a rework directory is configured but not created. Thanks to @jfeaver for the report (#686).
- Output the list of changes to be deployed or reverted when
--verbose
is specified at least twice. Thanks to @vectro for the PR (#702). - Fixed the formatting of the log and plan commands to allow empty or
0
separators in lists of things (such as%{0}t
for a list of tags). Thanks to @web-vertalo for the pull request (#703). - Updated the MySQL Tutorial to use 5.7 features. Thanks to Vlad Safronov for the PR (#705).
- Deprecated the
no_prompt
andno_prompt
attributes of App::Sqitch::Engine in favor of passing booleans to therevert
andverify
methods. The attributes still exist for reverse compatibility, but now emit warnings and will be removed in the future. Thanks to Thanks to @vectro for the PR (#704). - Added a warning for a double extension on the file names created by the
add
command. Thanks to @blairjordan for the PR (#724)! - Added the
revert.strict
boolean configuration variable which, when set to true, requires the specification of a change to revert to. It also disables therebase
andcheckout
commands, though therebase.strict
andcheckout.strict
variables, respectively, may override it. Userevert.strict
to prevent accidental reverts in sensitive environments. Thanks to @vectro for the PR (#719; revised in #735)! - Fixed test failures due to a bug fix in the Perl URI module (libwww-perl/URI#13). Thanks to @bobfang for the report (#744)!
- Fixed test failures due to a change in the generation of DBI DSN by URI::Oracle introduced by libwww-perl/URI-db#23.
- Added a format option
%F
tosqitch plan
that prints the path for the deploy file for each migration in the plan. - Changed the default location for the Oracle
sqlplus
client when theORACLE_HOME
environment variable is set. It now returns either$ORACLE_HOME/bin/sqlplus
or$ORACLE_HOME/sqlplus
if it exists and is executable (and ends in.exe
on Windows). Otherwise it simply returnssqlplus
as before, assuming it will be found in the path. Thanks to @vectro for the suggestion (#747). - Increased the required version of DBI to 1.631 or higher and removed a MySQL engine workaround for older versions.
- Added detection of a missing registry schema on connect and conditions to avoid querying it when it does not exist. Fixes an issue where Sqitch might find a project record in the current schema instead of the expected registry schema. Thanks to @vectro for the report and investigation (#668)!
- Fixed Snowflake and MySQL to properly raise errors on session query failures immediately after connection.
- Fixed the handling of unique violations for deploy script hash uniqueness so that it no longer returns a database error but properly reports the issue in a more human-friendly error message. Thanks to Stefan Badenhorst for the reminder (#630).
- Updated the registry SQL scripts for Vertica to always enable primary key and unique constraints. Unique constraints are now enabled for all database engines except Exasol and Snowflake.
- Dropped support for Vertica 7.1, as unique constraint enforcement was not added until Vertica 7.2.
- Increased minimum SQLite versions to 3.8.6, when unique constraint enforcement was added.
- Removed remaining uses of the smartmatch operator, thus eliminating the Perl 5.38 warnings about its deprecation. (#769)
- Added Cockroach to the list of valid engines recognized in command-line arguments (and a test to ensure new engines won't be omitted in the future). Thanks to @NOBLES5E for the spot (#772)!
Release v1.3.1
Changes for v1.3.1
- Fixed a bug introduced in v1.3.0 where the Postgres engine would always pass the port to
psql
, thus ignoring thePGPORT
environment variable. Thanks to Cam Feenstra for the spot (#675)! - Fixed test failures on OSes where the local time zone cannot be determined. Thanks to Slaven Rezić for the test reports, and to Dave Rolsky for the solution (#672).
- Updated the MySQL deploy/revert lock to be specific to the target database. This allows multiple instances of Sqitch to run at the same time on the same server as long as they're connecting to different databases. Thanks to Dmytro Kh for the report and discussion of the options (#670).
- Fixed test failures where DBD::Mem was not installed. Likely only occurred on some CPAN Testers nodes. Thanks to Slaven Rezić for those (#673).
- Banned the backslash character (
\
) in change and tag names. It would be ignored on Unix-style systems, but create unexpected subdirectories on Windows systems. - Banned the slash character (
/
) in tag names. They're still allowed in change names to enable script organization, but can wreak havoc when used in tag names. Thanks to @ewie for the report (#680)!
Release v1.3.0
Changes for v1.3.0
- Fixed an issue when testing Firebird on a host with Firebird installed but no
isql
, and when using a local Firebird (e.g., the Engine12 provider), which allows only one connection at a time. Thanks to Slaven Rezić for the the reproducible configuration (#597). - Tweaked the Postgres engine to support Yugabyte. The only unsupported features are explicit locks, so users need to manually ensure that only one instance of Sqitch is updating the cluster at a time.
- Added support for CockroachDB. Almost exactly the same as for Postgres, so the new App::Sqitch::Engine::cockroach class extends App::Sqitch::Engine::pg to make a few changes. The SQL files with the registry DDL varies in a few ways, so they're separate.
- Now require URI::db v0.20 for Cockroach and Yugabyte URI support.
- Dropped support for MySQL 5.0.
- Added explicit sorting for aggregated lists (such as the tags associated with a commit) to the MySQL, Exasol, Snowflake, and Postgres (8.4 and higher) engines.
- Fixed slow deploys on MariaDB thanks to fractional timestamp support added in 5.03.05. Thanks to @rbrigot for the PR (#658)!
- Fixed a bug where destination locking failed on the first deploy to MySQL. Bug introduced along with destination locking in v1.2.0. Thanks Tom Bloor the report and to Alberto Simões for the help replicating the issue (#601).
- Removed the
sqitch engine update-config
action, originally added for compatibility reasons in 2014, and the prompt to use it was removed as of 0.9999 in 2019. - Fixed a warning when searching for the Firebird client on Windows.
Sqitch v1.2.1
Changes for v1.2.1
- Updated all the live engine tests, aside from Oracle, to test with unique registry names, so as to avoid conflicts when multiple instances are being tested at once. Thanks to Slaven Rezić for the report (#597).
- Removed
local
directory from the distribution, accidentally included in v1.2.0. Thanks to gregor herrmann for the report (#600).
Release v1.2.0
Changes for v1.2.0
- Fixed partitioned search for deployed changes on Oracle and Exasol to correctly support plans with more than 250 changes. Thanks to @Nicqu for the report (#521).
- DBI connections to the registry will now be set to trace level one when a verbosity level of three or higher is passed to Sqitch (i.e.,
sqitch -vvv
). Thanks to @wkoszek for the suggestion (#155). - Renamed the "master" branch to "main" and updated all relevant references.
- Fixed the parsing of the Snowflake account name from the target URL to that it no longer strips out the region and cloud platform parts. Also deprecated the use of the region, host, and port config and environment variables. This is to comply with the new account name format. Thanks to @ldsingh00 for the report (#544).
- The checkout command will now show a usage statement when no branch name is passed to it, rather than a series of warnings and a Git error. Thanks to François Beausoleil for the report (#561).
- The checkout command now works when operating on a Sqitch project in a subdirectory of a Git project. Thanks to François Beausoleil for the report and suggested fix (#560).
- Fixed a failing bundle test when a top directory was configured in the user or system configuration. Thanks to @CodingMinds for the spot (#587).
- Added support to the Exasol engine for the
AUTHMETHOD
query parameter (to allow Open ID authentication) and theSSLCERTIFICATE=SSL_VERIFY_NONE
query parameter to disable SSL verification. Thanks to Torsten Glunde for the report (#588). - Fixed "Use of uninitialized value $engine in concatenation" error when Sqitch is unable to determine the engine when writing a plan file. Only happens in the rare case that the core.engine value is not set.
- Improved the error message when attempting to update a plan file and no project pragma is present. Thanks to Laurentiu Diaconu for the report (#577).
- Fixed the error message when attempting to deploy a change that has already been deployed to display the name of the change, rather than a memory address. Thanks to Neil Mayhew for the report (#579).
- Added destination locking, currently implemented for PostgresQL and MySQL. On starting a deploy or revert, Sqitch attempts to "lock the destination" using advisory locks, to ensure that only one instance of Sqitch makes changes to the database at any one time. This complements the existing locking, which applies as each change is deployed or reverted, as that pattern led to failures when multiple instances of Sqitch were working at once. Thanks to Neil Mayhew for the report (#579).
- Added the --lock-timeout option to the deploy, revert, rebase, and checkout commands, to allow for shorter or longer times to wait for an exclusive target database advisory lock for engines that support it. Defaults to 60 seconds.
- Fixed the behavior of the plan command's
--max-count
option when used with--reverse
to show the proper items. Thanks to Adrian Klaver for the report (#517). - Fixed an issue that could cause bugs with the
check
command on Firebird, Exasol, Oracle, and Vertica. Broken since thecheck
command was added in v1.1.0.
Sqitch v1.1.0
Changes since v1.0.0
- Fixed Perl Pod errors, thanks to a pull request from Mohammad S Anwar (#470).
- Fixed test failures when running with the localization set to German or Italian. Thanks to Slaven Rezić for the report (#472).
- Fixed an issue when the full name of the current user is not set, so that it properly falls back on the username. Thanks to Slaven Rezić and Matthieu Foucault for the report and testing various fixes (#473).
- Eliminated an error when using the
-t
option to specify a target, due to a missing dependency declaration in the Target class. Thanks to Clinton Adams for the fix (#509)! - Updated the IPC::System::Simple Win32 workaround added in 0.9999 to properly support released versions of IPC::System::Simple. This fixes errors running the database command-line clients on Windows (#503).
- Sqitch now only passes the
--password
option to the MySQL client if it was not read from the.my.cnf
file, as it's more secure to let the client use.my.cnf
, and it eliminates a warning from recent versions of the client. Thanks to Kiel R Stirling for the fix (#484)! - Added a note to the tutorials to skip setting the
engine.$engine.client
config when using the Docker image. - Added the new
check
command, which compares the SHA1 hashes of the deploy scripts to the database, and reports if any have been modified since they were deployed. Thanks to Matthieu Foucault for the pull
request and diligent work on this feature (#477)! - Added the
--modified
option to therebase
andrevert
commands, to revert to the earliest change with a modified deploy script. Handy for rapid rebasing during iterative development cycles. Thanks to Matthieu
Foucault for this feature (#477)! - Fixed an issue where the Snowflake engine would complain about not finding the account name even for commands that don't need them, such as
init
. Thanks to Stack Overflow user vbp13 for the report (#502).