Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Handle specifically empty filePath, and not default FS rootDir #1525

Merged
merged 11 commits into from
Jan 26, 2023

Conversation

blacelle
Copy link
Contributor

@blacelle blacelle commented Jan 25, 2023

I propose this change to handle 2 cases :

  1. Exception in formatting while the input content filePath is empty. The javadoc suggests this is legit. However, in case of exception, it generally fails with an technical exception preventing the real functional to be handled.
  2. Exception in formatting while the rootDir is not based on the default FileSystem.

It is useful in my case as I consider InMemory files (e.g. based on content from Github API). More specifically, I'm relying on https://github.com/marschall/memoryfilesystem to get InMemory Path (and File("") wherever Spotless requests a File)

if this useCase is considered legitimate, I may open more PR replacing here and there File by Path.

solven-eu/cleanthat#336

@nedtwigg
Copy link
Member

I don't like the approach in this PR. I think a better way to solve this problem is to make an actual real file "UnusedFileRequiredForTesting.blah" and pass that file around. That's what we do in StepHarnessWithFile, and the reason we do that is because of confusing bugs we had from passing new File("").

If you are building something where you are running spotless-lib against in-memory filesystems, that's something I'd be happy to support. If you wanted us to change our APIs everywhere from File to Path

public @Nullable String format(String rawUnix, File file) throws Exception;

I would be open to that. It would have almost no effect on plugin end-users.

The problem is that some formatters really do expect a File on disk. After converting to Path, they would still work fine for Paths on disk, but some of them would fail for e.g. InMemoryFS paths. But we lose no functionality with this change, it's pure gain, just not total gain. It will work for some steps but not others. I think that's okay.

I have two breaking changes to spotless-lib already planned.

If you want to do a File -> Path conversion, the time to do it would be after #1096. It's impossible to know and you are always free to change your mind, but how serious are you about needing Path compatibility, and have you checked that the Spotless steps you care about don't actually need a real File?

@blacelle
Copy link
Contributor Author

I think a better way to solve this problem is to make an actual real file "UnusedFileRequiredForTesting.blah" and pass that file around.

I get the point, but I try not to write any File in given project.

and the reason we do that is because of confusing bugs we had from passing new File("").

I also get this. However, the javadoc suggested new File("") was legitimate (and I initially thought it would be managed specifically).

The problem is that some formatters really do expect a File on disk.

I would be very happy to materialize real File if I needed to rely on such plugins.

It will work for some steps but not others. I think that's okay.

it's okay in my perspective.

how serious are you about needing Path compatibility

Serious enough by dropping my own engine to switch to Spotless :). As my engine essentially consume content by API (and, for instance, try as much as possible not to clone git repository locally), this is a main concern in my perspective. (Also, one major difference with usual spotless useCases is CleanThat would (as primary useCase) not be executed on a personal computer, but in some shared-remote-jvm (e.g. AWS Lambda)).

have you checked that the Spotless steps you care about don't actually need a real File?

My main need is Java formatting. My initial motivation is actually for me to introduce a new plugin into Spotless (some Java refactorer tool). I used to wrap it into a multi-language linter tool (similar to Spotless). I'm currently dropping my linter engine, to rely on Spotless engine (hence planning to push the Java refactorer plugin into Spotless).

-> Eclipse (and most if not all Java spotless formatters) do not need a File. Related formatters (i.e. formatters I used to handle in my legacy linter engine (i.e. json, yaml) do not need File either. I'm very happy with current Formatters non-File coverage. The File -> Path issue seems more related to core-engine than formatters (e.g. like the ones reported here).

@blacelle
Copy link
Contributor Author

blacelle commented Jan 26, 2023

(if I may, I would also suggest relying on new File("someDedicatedMarker"). It may help preventing some issues and difficulties investigating with new File(""))

@nedtwigg
Copy link
Member

the javadoc suggested new File("") was legitimate

My memory is that we did have special support for it for the sake of testing, and renounced that with StepHarnessWithFile.

I would also suggest relying on new File("someDedicatedMarker").

I agree with that, iff we have support for some kind of special file. But if it all possible, I would really prefer not to have any magic file mechanism at all.

I'm gonna cut a release tomorrow, and then I'll work on #1096. That will open the door for a File -> Path conversion.

@nedtwigg
Copy link
Member

nedtwigg commented Jan 26, 2023

In the meantime, if some kind of magic sentinel file can get you unstuck, I'm okay with merging something well documented along those lines.

@blacelle
Copy link
Contributor Author

In fact, the code for which I pushed a PR fails due to "" being a relative path. If I pushed new File("/toto"), the 'relativize' may have lead to weird results (in fact, in my case, it would fail as my rootDir is from an inmemoryfilesystem ; for a standard rootDir, .relativize might lead to '..' in the path).

By sentinel, if you refer to a hardcoded File reference, it could be good for me (as I do not foresee the need of an actual File in the shortterm (i.e. I do not rely on Formatters consuming a File for now)). I have a small reserve as my integration is still WIP, and I may encounter more difficulties (e.g. this issue spots due to an Exception bubbling from the Formatter).

@nedtwigg
Copy link
Member

nedtwigg commented Jan 26, 2023

By sentinel, if you refer to a hardcoded File reference

I mean something like

public class Formatter {
  public static final File NO_FILE_ON_DISK = new File("NO_FILE_ON_DISK.sentinel")
  
  public void formatOrWhatever(String contentUnix, File file) {
    if (file == NO_FILE_ON_DISK) { // `==` not .equals
      // special handling

I don't love this approach, and I would like to remove it once we have converted from File to Path. But if you are currently blocked and this unblocks you, I'm happy to merge it.

@blacelle
Copy link
Contributor Author

But if you are currently blocked and this unblocks you, I'm happy to merge it.

I'm currently playing with hacked classes (same name, different jar). It would be helpful to have a cleaner approach before my own release.

I would need both changes (1. to manage an empty/sentinel File, 2. to accept a not-default FileSystem Path). The changes suggested in this PR unblocks with me (i.e. it fixes my issue, it is not just a fix out-of-the-blue). I'm happy to introduce a sentinel File if it can push this PR towards mergeability (as it would also unblock me).

@nedtwigg
Copy link
Member

A sentinel File can be merged and released quickly.

The File -> Path change will be weeks slower, a couple weeks probably.

I would like to remove the sentinel after the File -> Path change, but we can cross that bridge when we get there.

@blacelle
Copy link
Contributor Author

Thanks. This handles one of the 2 items. The other item is managing a custom FileSystem as rootDir. The only difficulty I spotted for now is also in case of exception. Let me talk through the code:


if (file.getPath().isEmpty()) {
	exceptionPolicy.handleError(e, step, "");  // <-- We agree handling this (short-term) with a Sentinel file. I'll adjust the PR soon.
} else {
	String relativePath = rootDir.relativize(rootDir.getFileSystem()
              .getPath(file.getPath())).toString(); // <-- This is a trick to workaround a rootDir with an inmemoryfiesystem: is this also good for you?
	exceptionPolicy.handleError(e, step, relativePath);
}

@nedtwigg
Copy link
Member

This is a trick to workaround a rootDir with an inmemoryfiesystem: is this also good for you?

Looks good.

@blacelle
Copy link
Contributor Author

I introduced a Sentinel, and while scanning for new File(""), I spotted a related Sentinel (I also refactored).

I also fixed the test with custom FileSystem which was broken (code is OK, but the test was not covering the proper lines...)

@nedtwigg
Copy link
Member

Missing push?

@jbduncan
Copy link
Member

@blacelle @nedtwigg The new File("") is my creation, for better or worse, back from when I was a contributor to Spotless. I don't think I ever explained the rationale behind it; it was meant as an alternative to passing null around to indicate "no file", as I desperately wanted to avoid NullPointerExceptions at the time, but I hadn't considered the consequences of this decision. So if you replaced it with Optional<Path> or a custom OptionalFile type or something, then I wouldn't blame you!

@nedtwigg nedtwigg merged commit 47985cd into diffplug:main Jan 26, 2023
@nedtwigg
Copy link
Member

Published in lib 2.34.0, which is not currently used by any of the plugins.

@blacelle blacelle deleted the FromFileToPath branch January 27, 2023 04:49
@blacelle
Copy link
Contributor Author

Thanks a lot @nedtwigg . For the record, I'm left with one class very similar to a Spotless one (but it is not hacked), related to File -> Path: GitAttributesLineEndings -> GitAttributesLineEndings_InMemory

However, the related changes are much deeper than just File -> Path.

benkard pushed a commit to benkard/mulkcms2 that referenced this pull request Apr 2, 2023
This MR contains the following updates:

| Package | Type | Update | Change |
|---|---|---|---|
| [flow-bin](https://github.com/flowtype/flow-bin) ([changelog](https://github.com/facebook/flow/blob/master/Changelog.md)) | devDependencies | minor | [`^0.200.0` -> `^0.201.0`](https://renovatebot.com/diffs/npm/flow-bin/0.200.0/0.201.0) |
| [org.liquibase:liquibase-maven-plugin](http://www.liquibase.org/liquibase-maven-plugin) ([source](https://github.com/liquibase/liquibase)) | build | patch | `4.19.0` -> `4.19.1` |
| [com.diffplug.spotless:spotless-maven-plugin](https://github.com/diffplug/spotless) | build | minor | `2.33.0` -> `2.34.0` |
| [io.quarkus:quarkus-maven-plugin](https://github.com/quarkusio/quarkus) | build | patch | `2.16.3.Final` -> `2.16.4.Final` |
| [io.quarkus:quarkus-universe-bom](https://github.com/quarkusio/quarkus-platform) | import | patch | `2.16.3.Final` -> `2.16.4.Final` |
| [org.apache.maven.plugins:maven-compiler-plugin](https://maven.apache.org/plugins/) | build | minor | `3.10.1` -> `3.11.0` |

---

### Release Notes

<details>
<summary>flowtype/flow-bin</summary>

### [`v0.201.0`](flow/flow-bin@d54e283...86aea9c)

[Compare Source](flow/flow-bin@d54e283...86aea9c)

### [`v0.200.1`](flow/flow-bin@b6c1eb0...d54e283)

[Compare Source](flow/flow-bin@b6c1eb0...d54e283)

</details>

<details>
<summary>liquibase/liquibase</summary>

### [`v4.19.1`](https://github.com/liquibase/liquibase/releases/tag/v4.19.1)

[Compare Source](liquibase/liquibase@v4.19.0...v4.19.1)

##### Liquibase v4.19.1 is a patch release

#### Enhancements

-   Publish liquibase-extension-testing to github packages (DAT-12833) by [@&#8203;abrackx](https://github.com/abrackx) in liquibase/liquibase#3697
-   Add support for multiple schemas to dbDoc command by [@&#8203;zpanderson](https://github.com/zpanderson) in liquibase/liquibase#1834
-   No need redundant conditions. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3553
-   Replace expressions with type arguments with diamond type <>. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3591
-   Remove duplicate conditions in expressions and branches of if statements. They are used due to oversight. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3548
-   Replace constant charset String literal with the predefined StandardC… by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3568
-   Normalize path of SQL changelog file when parsing (DAT-11891) by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3664
-   Delegate change set equality tests by [@&#8203;droy-sandbox](https://github.com/droy-sandbox) in liquibase/liquibase#3550
-   (DAT-6636)Refactor of TagExistsCommandStep and extraction of code to new LockServiceCommandStep  by [@&#8203;filipelautert](https://github.com/filipelautert) in liquibase/liquibase#3667
-   Refactors CalculateChecksumCommandStep  by [@&#8203;filipelautert](https://github.com/filipelautert) in liquibase/liquibase#3696
-   CORE-3044 avoid locking if no updates pending by [@&#8203;RichardBradley](https://github.com/RichardBradley) in liquibase/liquibase#2190
-   Warning in case of missing liquibase files instead of throwing an exception by [@&#8203;mhewedy](https://github.com/mhewedy) in liquibase/liquibase#3081
-   Remove redundant modifiers. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3594
-   Update maven-bundle-plugin instructions to export package containing XSD files by [@&#8203;GeertZondervan](https://github.com/GeertZondervan) in liquibase/liquibase#3597
-   Remove redundant conditions that covered by a subsequent condition. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3590
-   Add support for db2 view comments (DAT-12529) by [@&#8203;abrackx](https://github.com/abrackx) in liquibase/liquibase#3723
-   Remove unnecessary cast expressions. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3670
-   Performance improvements by [@&#8203;filipelautert](https://github.com/filipelautert) in liquibase/liquibase#3588
-   Implemented a summary of change sets which get filtered out during update (DAT-12068) by [@&#8203;wwillard7800](https://github.com/wwillard7800) in liquibase/liquibase#3730
-   Support tabular format for history command by [@&#8203;fbiville](https://github.com/fbiville) in liquibase/liquibase#3541
-   Remove Unnecessary operation/modifier: by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3657
-   Update and rename bug_report.md to bug_report.yaml by [@&#8203;kevin-atx](https://github.com/kevin-atx) in liquibase/liquibase#3728
-   Improve command line help message format by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3829
-   Use StandardCharsets constant instead. (DAT-12853) by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3725
-   Update SnakeYAML usage - do not call deprecated methods by [@&#8203;asomov](https://github.com/asomov) in liquibase/liquibase#3632
-   Avoid global mutable state of Non-final fields in enumeration types. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3727
-   Use constants instead of arrays with known lengths of zero by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3716
-   Simplify lambda expressions when possible by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3736
-   \[MRO] Added new modifyChangeSets tag to support specification of `runWith` attribute for all change sets in `include` or `includeAll`
-   \[MRO] DAT-7922  Implement a check for one change per changeset by [@&#8203;wwillard7800](https://github.com/wwillard7800) in https://github.com/liquibase/liquibase-pro/pull/790
-   \[MRO] DAT-11915 Correctly escape SQL to enable and disable triggers on PostgreSQL by [@&#8203;wwillard7800](https://github.com/wwillard7800) in https://github.com/liquibase/liquibase-pro/pull/799
-   \[MRO] DAT-10157: add database scope for reserved words checks by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in https://github.com/liquibase/liquibase-pro/pull/802
-   \[MRO] DAT-13189 safely set code point limit for SnakeYaml by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in https://github.com/liquibase/liquibase-pro/pull/827
-   \[MRO] DAT-13440: show changesetsRolledback only after rollback is complete by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in https://github.com/liquibase/liquibase-pro/pull/838
-   \[MRO] DAT-12568 by [@&#8203;jnewton03](https://github.com/jnewton03) in https://github.com/liquibase/liquibase-pro/pull/844

#### Fixes

-   Fixes generate-changelog table/view comment and table/view column comment generation for MSSQL (DAT-12045) by [@&#8203;abrackx](https://github.com/abrackx) in liquibase/liquibase#3563
-   Fully qualified path to the changelog or snapshot in S3 is not allowed, so needs better msg (DAT-11478) by [@&#8203;diadiushko](https://github.com/diadiushko) in liquibase/liquibase#3564
-   (DAT-12039) :detect circular references in includeAll statement by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3695
-   improve logging around paths that do not exist (DAT-12038) by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3669
-   normalize path of json and yaml changelogs when parsing (DAT-11891)  by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3711
-   deprecate DefaultLoggerConfiguration (DAT-11970) by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3706
-   Rework dropProcedure for Snowflake Log message when dropAll fails (DAT-12916) by [@&#8203;wwillard7800](https://github.com/wwillard7800) in liquibase/liquibase#3702
-   fix: snowflake has wrong priority by [@&#8203;Yogurt-lei](https://github.com/Yogurt-lei) in liquibase/liquibase#3572
-   Do not add default schema name to getSchemas method to avoid one schema by [@&#8203;LonwoLonwo](https://github.com/LonwoLonwo) in liquibase/liquibase#3704
-   [#&#8203;3035](liquibase/liquibase#3035) add Double data type class to avoid incorrect double(0) database by [@&#8203;LonwoLonwo](https://github.com/LonwoLonwo) in liquibase/liquibase#3703
-   Stop publishing liquibase-extension-testing to Github on branch builds (DAT-13038) by [@&#8203;abrackx](https://github.com/abrackx) in liquibase/liquibase#3726
-   do not support setting column comments on a view in Snowflake (DAT-12530) by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3710
-   Fix NullPointerException for case sensitive collations by [@&#8203;ivan909020](https://github.com/ivan909020) in liquibase/liquibase#3699
-   (DAT-13269) pass proper branch name and add required field by [@&#8203;jnewton03](https://github.com/jnewton03) in liquibase/liquibase#3765
-   Consistent ARG-suffix for 'defaultSchemaName'-Parameter by [@&#8203;SIEDA-EliasHeydrich](https://github.com/SIEDA-EliasHeydrich) in liquibase/liquibase#3662
-   Removing explicit LiquibaseServletListener references by [@&#8203;Thunderforge](https://github.com/Thunderforge) in liquibase/liquibase#3677
-   Add Snowflake structured data types to unmodifiable Data Types by [@&#8203;LonwoLonwo](https://github.com/LonwoLonwo) in liquibase/liquibase#3752
-   Fix [#&#8203;3690](liquibase/liquibase#3690) primaryKeyExists does not work on DB2z by [@&#8203;MichaelKern-IVV](https://github.com/MichaelKern-IVV) in liquibase/liquibase#3691
-   Replace old stream creation with java.nio. by [@&#8203;arturobernalg](https://github.com/arturobernalg) in liquibase/liquibase#3686
-   github-action (DAT-13527) by [@&#8203;jnewton03](https://github.com/jnewton03) in liquibase/liquibase#3827
-   Do not duplicate clearCheckSums logic by [@&#8203;fbiville](https://github.com/fbiville) in liquibase/liquibase#3628
-   Fixing [#&#8203;3708](liquibase/liquibase#3708) - AddColumn fix for H2 version 1.4.200 by [@&#8203;KarolyNevelos](https://github.com/KarolyNevelos) in liquibase/liquibase#3709
-   Added default values to private Scope constructor by [@&#8203;MarkTJohnson](https://github.com/MarkTJohnson) in liquibase/liquibase#3756
-   Improved concurrency support by using ConcurrentHashMaps by [@&#8203;jurgenkleverwal](https://github.com/jurgenkleverwal) in liquibase/liquibase#3799
-   fixing lookahead for last line comment method by [@&#8203;mwiede](https://github.com/mwiede) in liquibase/liquibase#3717
-   Do not calculate checksum when loading changelogs by [@&#8203;filipelautert](https://github.com/filipelautert) in liquibase/liquibase#3790
-   set up maven using simpler GitHub action by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3835
-   safely set code point limit for SnakeYaml (DAT-13189) by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3807
-   Fix failing EnvironmentValueProviderTest by [@&#8203;nvoxland](https://github.com/nvoxland) in liquibase/liquibase#3783
-   show changesetsRolledback only after rollback is complete (DAT-13440) by [@&#8203;StevenMassaro](https://github.com/StevenMassaro) in liquibase/liquibase#3846

#### Security, Driver and other updates

**OWASP Dependency Check: Reported Vulnerabilities**
`snakeyaml.jar` - This is a "critical" vulnerability reported against the snakeyaml library. Note: Liquibase code is not vulnerable to this attack, but users can manually upgrade to the newest version of snakeyaml library, and will be upgraded to the unaffected snakeyaml 2.0 version in the next release. If you are interested, you can track the MR at liquibase/liquibase#3865

-   Bump junit-jupiter-params from 5.9.1 to 5.9.2 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3673
-   Bump ant from 1.10.11 to 1.10.13 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3672
-   Bump firebird-testcontainers-java from 1.2.0 to 1.3.0 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3653
-   Bump actions/delete-package-versions from 3 to 4 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3649
-   Bump maven-plugin-plugin from 3.7.0 to 3.7.1 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3698
-   Bump assertj-core from 3.23.1 to 3.24.2 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3705
-   Bump jaybird from 4.0.8.java8 to 5.0.0.java8 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3659
-   Bump mariadb-java-client from 3.1.0 to 3.1.2 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3729
-   Bump snowflake-jdbc from 3.13.26 to 3.13.27 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3751
-   Bump picocli from 4.7.0 to 4.7.1 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3742
-   Bump actions/cache from 3.2.3 to 3.2.4 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3750
-   Bump actions/cache from 3.2.4 to 3.2.5 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3809
-   Bump maven-deploy-plugin from 3.0.0 to 3.1.0 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3802
-   Bump maven-shade-merge-manifest-transformer from 0.0.2 to 0.0.3 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3779
-   Bump postgresql from 42.5.1 to 42.5.3 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3778
-   Bump jaxb-runtime from 4.0.1 to 4.0.2 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3786
-   Bump jaxb-core from 4.0.1 to 4.0.2 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3787
-   Bump sqlite-jdbc from 3.40.0.0 to 3.40.1.0 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3772
-   Bump maven-enforcer-plugin from 3.1.0 to 3.2.1 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3759
-   Bump jaybird from 5.0.0.java8 to 5.0.1.java8 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3760
-   Bump mssql-jdbc from 11.2.1.jre8 to 12.2.0.jre8 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3761
-   Bump ojdbc8 from 21.8.0.0 to 21.9.0.0 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3808
-   Bump postgresql from 42.5.3 to 42.5.4 by [@&#8203;dependabot](https://github.com/dependabot) in liquibase/liquibase#3831
-   Migrate setup-java action to use Temurin by [@&#8203;gdams](https://github.com/gdams) in liquibase/liquibase#3607

#### New Contributors

-   [@&#8203;zpanderson](https://github.com/zpanderson) made their first contribution in liquibase/liquibase#1834
-   [@&#8203;droy-sandbox](https://github.com/droy-sandbox) made their first contribution in liquibase/liquibase#3550
-   [@&#8203;mhewedy](https://github.com/mhewedy) made their first contribution in liquibase/liquibase#3081
-   [@&#8203;GeertZondervan](https://github.com/GeertZondervan) made their first contribution in liquibase/liquibase#3597
-   [@&#8203;Yogurt-lei](https://github.com/Yogurt-lei) made their first contribution in liquibase/liquibase#3572
-   [@&#8203;gdams](https://github.com/gdams) made their first contribution in liquibase/liquibase#3607
-   [@&#8203;ivan909020](https://github.com/ivan909020) made their first contribution in liquibase/liquibase#3699
-   [@&#8203;SIEDA-EliasHeydrich](https://github.com/SIEDA-EliasHeydrich) made their first contribution in liquibase/liquibase#3662
-   [@&#8203;Thunderforge](https://github.com/Thunderforge) made their first contribution in liquibase/liquibase#3677
-   [@&#8203;KarolyNevelos](https://github.com/KarolyNevelos) made their first contribution in liquibase/liquibase#3709
-   [@&#8203;MarkTJohnson](https://github.com/MarkTJohnson) made their first contribution in liquibase/liquibase#3756
-   [@&#8203;jurgenkleverwal](https://github.com/jurgenkleverwal) made their first contribution in liquibase/liquibase#3799
-   [@&#8203;mwiede](https://github.com/mwiede) made their first contribution in liquibase/liquibase#3717

**Full Changelog**: liquibase/liquibase@v4.17.2...v4.19.1

##### 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/.

##### Meet 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](https://www.liquibase.org/development/contribute.html)
[Make doc updates](https://github.com/Datical/liquibase-docs)
[Help by asking and answering questions](https://forum.liquibase.org/)
[Set up a chat with the Product team](https://calendly.com/liquibase-outreach/product-feedback)

Thanks to everyone who helps make the Liquibase community strong!

#### 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

**Full Changelog**: liquibase/liquibase@v4.19.0...v4.19.1

</details>

<details>
<summary>diffplug/spotless</summary>

### [`v2.34.0`](https://github.com/diffplug/spotless/blob/HEAD/CHANGES.md#&#8203;2340---2023-01-26)

##### Added

-   `Formatter` now has a field `public static final File NO_FILE_SENTINEL` which can be used to pass string content to a Formatter or FormatterStep when there is no actual File to format. ([#&#8203;1525](diffplug/spotless#1525))

</details>

<details>
<summary>quarkusio/quarkus</summary>

### [`v2.16.4.Final`](https://github.com/quarkusio/quarkus/releases/tag/2.16.4.Final)

[Compare Source](quarkusio/quarkus@2.16.3.Final...2.16.4.Final)

##### Complete changelog

-   [#&#8203;31510](quarkusio/quarkus#31510) - Add logging to CompiledJavaVersionBuildStep
-   [#&#8203;31507](quarkusio/quarkus#31507) - Adjust API in transaction.adoc code snippet
-   [#&#8203;31498](quarkusio/quarkus#31498) - Added a note to get correct OpenAPI documentation
-   [#&#8203;31486](quarkusio/quarkus#31486) - smallrye-openapi generates wrong definition for grouped parameters
-   [#&#8203;31483](quarkusio/quarkus#31483) - Fix documentation for quarkus.hibernate-orm.enabled
-   [#&#8203;31477](quarkusio/quarkus#31477) - Qute generated value resolvers - fix varArgs methods with 1 argument
-   [#&#8203;31471](quarkusio/quarkus#31471) - \[2.16] Make sure parent modules are loaded into workspace before those that depend on them
-   [#&#8203;31467](quarkusio/quarkus#31467) - Don't run kubernetes-client Dev Services transitively
-   [#&#8203;31465](quarkusio/quarkus#31465) - Propagate Quarkus related failsafe system properties
-   [#&#8203;31462](quarkusio/quarkus#31462) - Do not append single '&' with empty query params  in Resteasy Reactive
-   [#&#8203;31449](quarkusio/quarkus#31449) - Qute: VarArgs processing error with 1 element
-   [#&#8203;31447](quarkusio/quarkus#31447) - SmallRye GraphQL 1.9.3, test for Deprecated annotation
-   [#&#8203;31422](quarkusio/quarkus#31422) - Fix client jackson body writer to propagate the client context
-   [#&#8203;31418](quarkusio/quarkus#31418) - Fix doc generation for quarkus.hibernate-orm.enabled
-   [#&#8203;31416](quarkusio/quarkus#31416) - Fix copy paste error in qute docs
-   [#&#8203;31405](quarkusio/quarkus#31405) - Propagate SystemProperties set in Failsafe plugin to the Test launcher
-   [#&#8203;31394](quarkusio/quarkus#31394) - Fix afterEach callback for integration tests
-   [#&#8203;31393](quarkusio/quarkus#31393) - Integration Test AfterEach callbacks are not called
-   [#&#8203;31355](quarkusio/quarkus#31355) - \[Regression] Very slow startup in dev mode when the Kubernetes extension is present
-   [#&#8203;31350](quarkusio/quarkus#31350) - Also set io.netty.noUnsafe at runtime when set at build time
-   [#&#8203;31349](quarkusio/quarkus#31349) - Netty complaining about access to heap buffer in native
-   [#&#8203;31347](quarkusio/quarkus#31347) - Adjust image name substitution for Elasticsearch Dev Services
-   [#&#8203;31339](quarkusio/quarkus#31339) - Improve logging in DevServicesKubernetesProcessor
-   [#&#8203;31336](quarkusio/quarkus#31336) - Pass `--userns=keep-id` to podman only when in rootless mode
-   [#&#8203;31331](quarkusio/quarkus#31331) - Use idiomatic RESTEasy Reactive filter declaration for OpenTelemetry
-   [#&#8203;31316](quarkusio/quarkus#31316) - Improve CSRF documentation
-   [#&#8203;31302](quarkusio/quarkus#31302) - Updated OpenAPI `mp.openapi.extensions.smallrye.openapi` key mapping
-   [#&#8203;31300](quarkusio/quarkus#31300) - Support UUID serialization in REST Client multipart bodies
-   [#&#8203;31298](quarkusio/quarkus#31298) - RESTEasy Reactive doesn't support `java.util.UUID`
-   [#&#8203;31291](quarkusio/quarkus#31291) - Bump `org.jetbrains.annotations` from `17.0.0` to the latest(`24.0.0`)
-   [#&#8203;31289](quarkusio/quarkus#31289) - Return a null InputStream from REST Client when response is 204
-   [#&#8203;31280](quarkusio/quarkus#31280) - Bump SQL Server JDBC driver to 12.2.0
-   [#&#8203;31276](quarkusio/quarkus#31276) - Bump protobuf from 3.21.9 to 3.22.0
-   [#&#8203;31274](quarkusio/quarkus#31274) - Try to solve disk space issues on GitHub Actions
-   [#&#8203;31261](quarkusio/quarkus#31261) - Bump Microsoft SQL Server JDBC driver to 12.2.0
-   [#&#8203;31260](quarkusio/quarkus#31260) - Make OIDC connection error log messages more visible
-   [#&#8203;31250](quarkusio/quarkus#31250) - Clarify in keycloak-authorization doc when it should be used
-   [#&#8203;31249](quarkusio/quarkus#31249) - Empty array of values in WebTargetImpl.queryParam method is added to the final URI as an `&`
-   [#&#8203;31245](quarkusio/quarkus#31245) - \[Regression in 2.16.3] `NullPointerException: Cannot invoke "org.jboss.resteasy.reactive.server.SimpleResourceInfo.getResourceClass()" because "this.resourceInfo" is null`
-   [#&#8203;31240](quarkusio/quarkus#31240) - protobuf code generated w/ 3.22.0 broken w/ Quarkus
-   [#&#8203;31236](quarkusio/quarkus#31236) - Bump postgresql from 42.5.3 to 42.5.4
-   [#&#8203;31234](quarkusio/quarkus#31234) - Bump mermaid from 9.1.1 to 9.4.0
-   [#&#8203;31231](quarkusio/quarkus#31231) - RESTEasy reactive returns an empty InputStream instead of null on 204 - No Content response
-   [#&#8203;31211](quarkusio/quarkus#31211) - Fix the non-default constructor mechanism of bytecode recording \[2.16]
-   [#&#8203;31209](quarkusio/quarkus#31209) - Another fix for the Redis Search aggregation test
-   [#&#8203;31186](quarkusio/quarkus#31186) - Show how to enable all origins in HTTP CORS section
-   [#&#8203;31150](quarkusio/quarkus#31150) - Add keycloak authorization capability
-   [#&#8203;31127](quarkusio/quarkus#31127) - Enhancements to instructions for contributing to the Quarkus docs
-   [#&#8203;31334](quarkusio/quarkus#31334) - podman4 can't build any code with quarkus builder
-   [#&#8203;30601](quarkusio/quarkus#30601) - Generate a preview website for documentation MRs
-   [#&#8203;30549](quarkusio/quarkus#30549) - Enhancements and fixes for the Authorization of Web Endpoints section
-   [#&#8203;30419](quarkusio/quarkus#30419) - Enhancing the Authorization of Web endpoints guide
-   [#&#8203;30333](quarkusio/quarkus#30333) - Can't work with Google Oauth2 using qaurkus-oidc
-   [#&#8203;29427](quarkusio/quarkus#29427) - quarkus.oidc.auth-server-url causing weird start-up failure
-   [#&#8203;26152](quarkusio/quarkus#26152) - Resteasy Reactive: ContextResolver<ObjectMapper> not used

</details>

<details>
<summary>quarkusio/quarkus-platform</summary>

### [`v2.16.4.Final`](quarkusio/quarkus-platform@2.16.3.Final...2.16.4.Final)

[Compare Source](quarkusio/quarkus-platform@2.16.3.Final...2.16.4.Final)

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 **Automerge**: Enabled.

♻ **Rebasing**: Whenever MR is behind base branch, or you tick the rebase/retry checkbox.

👻 **Immortal**: This MR will be recreated if closed unmerged. Get [config help](https://github.com/renovatebot/renovate/discussions) if that's undesired.

---

 - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box

---

This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate).
<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC4yNC4wIiwidXBkYXRlZEluVmVyIjoiMzQuMjQuMCJ9-->
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants