Liquibase 4.30.0 is a major release
Important
Liquibase 4.30.0 contains new capabilities and notable enhancements for Liquibase OSS and Pro users including:
- Flow enhancements
- Validation improvements
- Clearer error messaging for thrown exceptions
- Addition of Anonymous Analytics
- Deprecation of the MacOS dmg installer in favor of installation via homebrew
Note
See the Liquibase 4.30.0 Release Notes for the complete set of release information.
Notable Changes
[PRO]
Anonymous Analytics:
- Liquibase can now gather anonymous usage analytics when commands are run. No user-specific data will be gathered.
For Liquibase OSS users, this functionality is enabled by default, but can be opted-out of before any data is sent. For Liquibase Pro users, this is disabled by default with the ability to opt-in.
Gathering anonymous usage analytics allows us to better understand how Liquibase is actually being used by a very wide, diverse set of millions of users.
- Learn more https://docs.liquibase.com/analytics
Flow Enhancements: Detect pending changesets, and variable-variables
- There are two exciting Flow enhancements: the ability to condition action on presence of pending changesets, and the ability to use a global variable inside other global or stage variables, enabling variable-variables within flows.
- Learn more https://docs.liquibase.com/flow
[OSS]
Usability Improvements:
- Avoid ignoring caught exceptions, and instead return the exception and append the reason for better debugging.
- When using
failOnError=false
, changesets that failed will now show up in the default output. - When using STRICT mode,
update-to-tag
will now throw an error when there is no tag specified or the tag specified does not exist. - Added a
Customizer
that allows discovery of changesets that are not known to an application. This can be used to prevent an application's startup when discovering new, unexpected changesets before an update is made.
Deprecated: MacOS .dmg installer
- The MacOS dmg installer no longer ships with release artifacts. Please use the tar.gz or .zip release artifacts, or install via homebrew by running brew install liquibase
For a full list of improvements and bug fixes, see the [OSS] Changelog section.
[PRO] Changelog
🚀 New Features
- DAT-18202 Implement wildcard check name argument for enable/disable in liquibase/liquibase-pro#2000 by @wwillard7800
- DAT-17058: Add analytics in liquibase/liquibase-pro#1995 by @liquibot
- DAT-17568 Added exit command action in liquibase/liquibase-pro#1689 by @wwillard7800
- DAT-18689: Add extra information to failed changesets summary in liquibase/liquibase-pro#1996 by @filipelautert
- DAT-18114 Added more logging for formatted SQL parsing in liquibase/liquibase-pro#1994 by @wwillard7800
- DAT-18455 Add SQL file path to policy checks output in liquibase/liquibase-pro#1944 by @wwillard7800
Changes
- DAT-17581 Exit with a non-zero if the changelog did not validate in liquibase/liquibase-pro#1870 by @wwillard7800
- DAT-18540 Create new ReportWriter.open(String path) method that default to no-op in liquibase/liquibase-pro#1962 by @wwillard7800
- DAT-18092: Use xdg-open to open reports in browser on linux operating systems in liquibase/liquibase-pro#1948 by @abrackx
- DAT-18531 Clear out DBCL fast check cache before each Flow action in liquibase/liquibase-pro#1933 by @wwillard7800
- DAT-18362 Handle comments when parsing include/includeAll statements in liquibase/liquibase-pro#1959 by @wwillard7800
- DAT-18463 Implement a class to be used to capture the start/end positions of a regex check for line number output in liquibase/liquibase-pro#1979 by @wwillard7800
- DAT-18869: Obfuscate IO arguments in liquibase/liquibase-pro#1999 by @abrackx
🐛 [PRO] Bug Fixes 🛠
- DAT-18819: Fix dropall behavior with snowflake in liquibase/liquibase-pro#1987 by @abrackx
- DAT-18517 Handle expansion of variables when default values are involved in liquibase/liquibase-pro#1969 by @wwillard7800
- DAT-18327: improve startup performance in liquibase/liquibase-pro#1972 by @StevenMassaro
- Fix tests to use new CommandFactory.reset() method in liquibase/liquibase-pro#1952 by @wwillard7800
🤖 [PRO] Security, Driver and Other Updates
12 changes
(#1973) Bump com.fasterxml.jackson.module:jackson-module-jaxb-annotations from 2.17.2 to 2.18.0 by dependabot
(#1974) Bump com.fasterxml.jackson.core:jackson-annotations from 2.17.2 to 2.18.0 by dependabot
(#1976) Bump com.fasterxml.jackson.core:jackson-databind from 2.17.2 to 2.18.0 by dependabot
(#1975) Bump com.fasterxml.jackson.core:jackson-core from 2.17.2 to 2.18.0 by dependabot
(#1988) Bump org.apache.maven.plugins:maven-failsafe-plugin from 2.22.2 to 3.5.1 by dependabot
(#1991) Bump org.apache.maven.plugins:maven-surefire-plugin from 2.22.2 to 3.5.1 by dependabot
(#2003) Bump org.junit.vintage:junit-vintage-engine from 5.10.3 to 5.11.3 by dependabot
(#2002) Bump org.junit:junit-bom from 5.10.3 to 5.11.3 by dependabot
(#1963) Bump com.networknt:json-schema-validator from 1.5.0 to 1.5.2 by dependabot
(#1947) Bump org.yaml:snakeyaml from 2.2 to 2.3 by dependabot
(#1984) Bump org.codehaus.gmavenplus:gmavenplus-plugin from 1.13.1 to 4.0.1 by dependabot
(#2005) Bump org.nanohttpd:nanohttpd from 2.2.0 to 2.3.1 by dependabot
[OSS] Changelog
🚀 New Features
- (#6414) When using
failOnError=false
, changesets that failed will now show up in the default output. Thanks, @filipelautert - (#6413) Ensure all failed changesets show in the exceptionChangesets. Previously, output summaries did not include changesets that failed when running
failOnError=false
(DAT-18689). Thanks, @filipelautert - (#6169) When using STRICT mode,
update-to-tag
will now throw an error when there is no tag specified or the tag specified does not exist. Thanks, @MalloD12 - (#6410) Modified
clob
handling inloadData
by checking the string passed to a CLOB type column. Thanks, @tati-qalified- By default this value will be interpreted as a path. If the file at that path exists, the file's contents will be inserted into the column. If not, the passed value will be inserted as-is.
- (#6067) Added additional modes for
duplicateFileMode
. Thanks, @k4pran- INFO - Logs when duplicate changelog files are found at the INFO level
- DEBUG - Logs when duplicate changelog files are found at the FINE level
- SILENT - Does not log when duplicate changelog files are detected
- (#6432) Added a
Customizer
that allows discovery of changesets that are not known to an application. This can be used to prevent an application's startup when discovering new, unexpected changesets before an update is made. Thanks, @raphw - (#6288) Avoid ignoring caught exceptions, and instead return the exception and append the reason for better debugging. Thanks, @asolntsev
- (#6265) Enhanced
include
andincludeAll
to supportlogicalFilePath
(DAT-18350). Thanks, @wwillard7800 - (#6300) Added method to reset command definitions cache in CommandFactory for testing. Thanks, @wwillard7800
- (#6280) Undeprecated StringUtil class (DAT-18538). Thanks, @MalloD12
- (#5223) Improved empty check style by using
isEmpty
String method. Thanks, @MalloD12 - BigQuery
- (#6294) Suppress UnsupportedClassVersionErrors for Bigquery at info level (DAT-18534). Thanks, @filipelautert
- Databricks
- (#6263) Fix generated column value for Databricks (DAT-18148). Thanks, @filipelautert
- Maven
- (#6129) Support Hashicorp Vault settings in the Maven Plugin POM. Thanks, @wwillard7800
- MSSQL
- (#6138) Added support for
include
columns in indexes. Thanks, @stephenatwell
- (#6138) Added support for
- PostgreSQL
- (#6402) Added
pg_stat_statements
andpg_stat_statements_info
views to the list of system tables and views to prevent them from being dropped. Thank you, @rozenshteyn - (#6211) Updated PostgreSQL database major and minor versions. Thanks, @MalloD12
- (#6402) Added
🐛 Bug Fixes 🛠
- (#6266) Fix CustomTaskRollback rollback bug where it was being called twice. Thanks, @momosetkn
- (#6205) Removed usage of the deprecated isEmpty() method. Thanks, @anton-erofeev
- (#6366) Improve startup performance (DAT-18327). Thanks, @StevenMassaro
- (#6407) Added filterable flag to ChangeLogParameter class (DAT-18811). Thanks, @abrackx
- This enables users to use label filters such as @some-filter and still have values replaced from global changelog parameters like environment variables.
- (#6416) When determining the schema name make sure a value was found (DAT-18673). Thanks, @abrackx
- (#6418) Fix issue where context filters with
@
symbols were not being executed properly (DAT-18843). Thanks, @abrackx - (#6406) Test assertion code modification. (DAT-17568). Thanks, @wwillard7800
- (#6429) Check that getPriority method is correct for snapshot generators (DAT-18730). Thanks, @StevenMassaro
- (#6417) Revert "Remove unneeded inclusion of commons-io in liquibase-core pom.xml". Thanks, @catull
- (#6385) Do not check for nested database objects when using foreignKeyConstraintExists precondition (DAT-18624). Thanks, @abrackx
- (#5894) Do not strip "classpath:" when normalizing the path. Thanks, @andrus
- (#6359) Fix issue where change set with blank ID was allowed to run (DAT-18687). Thanks, @wwillard7800
- (#6109) Fix classpath loading and incorrect configuration for addForeignKeyConstraint (DAT-18191 and DAT-18192). Thanks, @filipelautert
- (#6287) Fix NPE when default value is null. Thanks, @asolntsev
- (#6330) Unhide tag parameter for UpdateTestingRollback command (DAT-18563). Thanks, @MalloD12
- (#6375) Initialize member variable in method to fix tests. Thanks, @wwillard7800
- (#6358) Make global argument definitions static so that they are visible across all threads. Thanks, @StevenMassaro
- (#6309) Fix Locale test. Thanks, @filipelautert
- (#6463) Fix flakey test (DAT-18921). Thanks, @abrackx
- (#6165) fix splitting SQL statements containing @begin or #begin. Thanks, @chrstnbrn
@begin
is now returned as one token instead of two tokens (@ and begin). Same for#begin
. This way the logic in processMultiLineSQL that looks for BEGIN does not apply to it and SQL containing@begin
or#begin
is correctly split into multiple statements.
- (#4668) Expanded variables in the
--sql
argument toexecuteSql
so that variables can be substituted inexecute-sql --sql-file
command. Thanks, @wwillard7800 - (#6222) Fix: Handle command arguments static behavior. Thanks, @filipelautert
- Liquibase CLI programmatically can now be called multiple times from different threads.
- (#6286) Append the cause of the problem to thrown exception for better debugging. Thanks, @asolntsev
- (#6187) Update JdbcDatabaseSnapshot.java. Thanks, @bmoers
- (#6409) Added more logging (DAT-18114). Thanks, @wwillard7800
- MariaDB
- (#6241) Verify existence of the lock table to remove 'table does not exist' error messages. Thanks, @wwillard7800
- Maven
- (#6339) Added filter to the command scope so include/excludeObjects parameters get properly applied. Thanks, @Evan-Christensen!
- (#6332) Updated project variables used in Maven configuration to reduce build warnings. Thanks, @catull! - MySQL
- Oracle
- (#6305) Allow generateChangelog to run against Oracle databases with blank schema names (DAT-18199). Thanks, @wwillard7800
- PostgreSQL
- (#6350) allow replaceIfExists in Postgres procedures (DAT-18495). Thanks, @StevenMassaro
- SQLite
- (#6341) Fix sqlite hsqldb and environment variable tests (DAT-18646). Thanks, @abrackx - Snowflake
- (#6391) Handle Snowflake add NOT NULL constraint (DAT-18798). Thanks, @wwillard7800
- (#6308) Handle offline connection for Snowflake during diff (DAT-18652). Thanks, @wwillard7800
- (#6391) Handle Snowflake add NOT NULL constraint (DAT-18798). Thanks, @wwillard7800
- Spring
- (#6345) When using default schema for MultiTenantSpringLiquibase the log level is now info instead of warning. Thanks, @deblockt
- (#6261) Fix: do not throw an unchecked exception for SpringBoot. Thanks, @filipelautert
🤖 Security, Driver and Other Updates
35 changes
- (#6457) Update jreBundle to latest in install4j @abrackx
- (#6377) Bump org.testcontainers:testcontainers-bom from 1.20.1 to 1.20.2 @dependabot
- (#6443) Bump org.junit.platform:junit-platform-suite from 1.11.0 to 1.11.3 @dependabot
- (#6384) Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.10.0 to 3.10.1 @dependabot
- (#6387) Bump org.codehaus.gmavenplus:gmavenplus-plugin from 3.0.2 to 4.0.1 @dependabot
- (#6400) Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.0 to 3.5.1 @dependabot
- (#6445) Bump org.junit.jupiter:junit-jupiter from 5.11.0 to 5.11.3 @dependabot
- (#6408) Bump actions/cache from 4.0.2 to 4.1.1 @dependabot
- (#6444) Bump junit-jupiter.version from 5.11.0 to 5.11.3 @dependabot
- (#6401) Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.5.0 to 3.5.1 @dependabot
- (#6399) Bump codex-/return-dispatch from 1 to 2 @dependabot
- (#6368) Bump org.xerial:sqlite-jdbc from 3.46.1.0 to 3.46.1.3 @dependabot
- (#6319) Bump groovy.version from 4.0.22 to 4.0.23 @dependabot
- (#6337) Bump commons-io:commons-io from 2.16.1 to 2.17.0 @dependabot
- (#6290) Bump org.yaml:snakeyaml from 2.2 to 2.3 @dependabot
- (#6274) Bump org.jboss.weld.se:weld-se-core from 5.1.2.Final to 5.1.3.Final @dependabot
- (#6276) Bump org.apache.maven.plugins:maven-surefire-plugin from 3.3.1 to 3.5.0 @dependabot
- (#6275) Bump org.apache.maven.plugins:maven-failsafe-plugin from 3.3.1 to 3.5.0 @dependabot
- (#6273) Bump org.apache.maven.plugins:maven-plugin-plugin from 3.13.1 to 3.15.0 @dependabot
- (#6284) Bump actions/setup-python from 5.1.1 to 5.2.0 @dependabot
- (#6282) Bump ant.version from 1.10.14 to 1.10.15 @dependabot
- (#6283) Bump org.apache.commons:commons-lang3 from 3.16.0 to 3.17.0 @dependabot
- (#6272) Bump org.apache.maven.plugins:maven-javadoc-plugin from 3.8.0 to 3.10.0 @dependabot
- (#6247) Bump com.microsoft.sqlserver:mssql-jdbc from 12.6.1.jre8 to 12.8.1.jre8 @dependabot
- (#6246) Bump org.postgresql:postgresql from 42.7.3 to 42.7.4 @dependabot
- (#6221) Bump org.xerial:sqlite-jdbc from 3.46.0.0 to 3.46.1.0 @dependabot
- (#6220) Bump org.apache.maven.plugins:maven-install-plugin from 3.1.2 to 3.1.3 @dependabot
- (#6219) Bump org.apache.maven.plugins:maven-deploy-plugin from 3.1.2 to 3.1.3 @dependabot
- (#6213) Bump targetMavenVersion from 3.9.8 to 3.9.9 @dependabot
- (#6202) Bump org.junit.jupiter:junit-jupiter from 5.10.3 to 5.11.0 @dependabot
- (#6201) Bump org.junit.platform:junit-platform-suite from 1.10.3 to 1.11.0 @dependabot
- (#6200) Bump spring.version from 5.3.37 to 5.3.39 @dependabot
- (#6245) Bump actions/delete-package-versions from 3 to 5 @dependabot
- (#6199) Bump junit-jupiter.version from 5.10.3 to 5.11.0 @dependabot
Contributors
@andrus @catull @asolntsev @wwillard7800 @begin @raphw @bmoers @deblockt @chrstnbrn @filipelautert @anton-erofeev @abrackx @StevenMassaro @dependabot @momosetkn @rozenshteyn @liquibot @MalloD12 @sayaliM0412 @stephenatwell @tati-qalified @Evan-Christensen
Full Changelog: v4.29.2...v4.30.0
Get Certified
Learn all the Liquibase fundamentals from free online courses by Liquibase experts and see how to apply them in the real world at https://learn.liquibase.com/.
Read the Documentation
Please check out and contribute to the continually improving docs, now at https://docs.liquibase.com/.
Join the Community
Our community has built a lot. From extensions to integrations, you’ve helped make Liquibase the amazing open source project that it is today. Keep contributing to making it stronger:
Contribute code
Make doc updates
Help by asking and answering questions
Join our Discord server
Sign up to provide feedback to the product team
Thanks to everyone who helps make Liquibase better!
File Descriptions
- Liquibase CLI -- Includes open source + commercial functionality
- liquibase-x.y.z.tar.gz -- Archive in tar.gz format
- liquibase-x.y.z.zip -- Archive in zip format
- liquibase-windows-x64-installer-x.y.z.exe -- Installer for Windows
- liquibase-macos-installer-x.y.z.dmg -- Installer for MacOS
- Primary Libraries - For embedding in other software
- liquibase-core-x.y.z.jar – Base Liquibase library (open source)
- liquibase-commerical-x.y.z.jar – Additional commercial functionality
- liquibase-additional-x.y.z.zip – Contains additional, less commonly used files
- Additional libraries such as liquibase-maven-plugin.jar and liquibase-cdi.jar
- Javadocs for all the libraries
- Source archives for all the open source libraries
- ASC/MD5/SHA1 verification hashes for all files