-
Notifications
You must be signed in to change notification settings - Fork 257
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
fix: embedded fs on windows #537
Conversation
…Join` to keep up the embedded fs compatibility on windows
path := filepath.Clean(dir) | ||
path := path.Clean(dir) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm a bit confused as to how the use of filepath.Clean
results in the wrong behavior, as the entire sales pitch for filepath
is that the utilities are supposed to Do The Right Thing™ according to the platform being used:
https://pkg.go.dev/path/filepath
The filepath package uses either forward slashes or backslashes, depending on the operating system. To process paths such as URLs that always use forward slashes regardless of the operating system, see the path package.
As readMigrationsDir
is operating on filesystem paths and not URLs, normalizing forward slashes to backslashes when executing on Windows seems like the exact behavior that would be required here ... but, apparently that's incorrect, and you've got the right answer.
Could you add a automated test that, without your change, passes on Linux but fails on Windows, to clearly illustrate the issue, and hopefully prevent regressions in the future, as I can absolutely see someone reverting this change unintentionally, thinking that the use of path.Clean
is wrong for cross-platform use and replace it with filepath.Clean
again.
I'm mostly concerned that this is not a defect in dbmate, and that the use of filepath
utils is correct cross-platform, and that you are actually running into a bug in go's embed, and specifically embed.FS
on Windows not using the correct path separator:
The path separator is a forward slash, even on Windows systems.
This behavior is confusing, and is a specific and intentional behavior of Go's FS
abstraction. It provides a uniform interface to filesystem paths on top of the underlying OS's filesystem, which may not be what you would expect if you don't read the documentation carefully.
Sadly, it seems like io.FS
and embed.FS
are sticking to their guns and insisting on this behavior: golang/go#44305
You should use path.Join, not filepath.Join for embed filenames.
And, we have this: https://pkg.go.dev/io/fs#ValidPath
Note that paths are slash-separated on all systems, even Windows. Paths containing other characters such as backslash and colon are accepted as valid, but those characters must never be interpreted by an FS implementation as path element separators.
So, yeah, it looks like your change is correct and path/filepath
should not be used when using the FS
filesystem layer abstraction. Confusing, I know ...
Anyway, could you add a test case that fails on Windows without the change in this PR? I think that would help ensure we don't regress this by accident in the future through some well-meaning change.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Very good review @dossy , thanks!
Regarding the test you asked, I may have not correctly understood you but the TestFindMigrationsFS
test in pkg/dbmate/db_test.go
already fails on Windows without merging this PR.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Regarding the test you asked, I may have not correctly understood you but the
TestFindMigrationsFS
test inpkg/dbmate/db_test.go
already fails on Windows without merging this PR.
Perfect! Can you tell I've never run dbmate or its test suite on Windows, myself? :-)
I tried to build dbmate on Windows using Cygwin and MSYS2/ucrt64, and I get this error trying to build:
$ make build
rm -rf dist
go build -o dist/dbmate.exe -tags sqlite_omit_load_extension,sqlite_json -ldflags '-s' .
# runtime/cgo
gcc_libinit_windows.c: In function ‘_cgo_beginthread’:
gcc_libinit_windows.c:143:27: error: implicit declaration of function ‘_beginthread’; did you mean ‘_cgo_beginthread’? [-Werror=implicit-function-declaration]
143 | thandle = _beginthread(func, 0, arg);
| ^~~~~~~~~~~~
| _cgo_beginthread
cc1: all warnings being treated as errors
make: *** [Makefile:34: build] Error 1
How were you able to build dbmate on Windows?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Answering my own question, I installed the mingw-w64-ucrt-x86_64-toolchain
package in MSYS2, and then I was able to build dbmate successfully. Now, to try and run some of the test suite without having Docker: my Windows environment is a VMware VM ... I don't want to even try running Docker inside a Windows VMware VM ...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads
$ git clone https://github.com/amacneil/dbmate.git
Cloning into 'dbmate'...
remote: Enumerating objects: 2169, done.
remote: Counting objects: 100% (2169/2169), done.
remote: Compressing objects: 100% (896/896), done.
remote: Total 2169 (delta 1213), reused 2054 (delta 1166), pack-reused 0
Receiving objects: 100% (2169/2169), 2.72 MiB | 15.90 MiB/s, done.
Resolving deltas: 100% (1213/1213), done.
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads
$ cd dbmate
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ git log -1
commit ea897783a09b7fec2eb82627bcfbab989f3429b8 (HEAD -> main, tag: v2.14.0, origin/main, origin/HEAD)
Author: Adrian Macneil <adrian@foxglove.dev>
Date: Thu Mar 28 09:19:16 2024 -0700
v2.14.0 (#534)
- v2.14.0
- Update dependencies
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ make build
rm -rf dist
go build -o dist/dbmate.exe -tags sqlite_omit_load_extension,sqlite_json -ldflags '-s' .
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ make test POSTGRES_TEST_URL="postgres://postgres:postgres@postgres:15432/dbmate_test?sslmode=disable" FLAGS+="-v -run TestFindMigrationsFS ./pkg/dbmate/db_test.go #"
go test -p 1 -tags sqlite_omit_load_extension,sqlite_json -ldflags '-s' -v -run TestFindMigrationsFS ./pkg/dbmate/db_test.go # ./...
=== RUN TestFindMigrationsFS
Dropping: dbmate_test
Creating: dbmate_test
db_test.go:598:
Error Trace: C:/Users/dossy/Downloads/dbmate/pkg/dbmate/db_test.go:598
Error: Received unexpected error:
could not find migrations directory `./db/migrations`
Test: TestFindMigrationsFS
--- FAIL: TestFindMigrationsFS (0.32s)
=== RUN TestFindMigrationsFSMultipleDirs
Dropping: dbmate_test
Creating: dbmate_test
db_test.go:647:
Error Trace: C:/Users/dossy/Downloads/dbmate/pkg/dbmate/db_test.go:647
Error: Received unexpected error:
could not find migrations directory `./db/migrations_a`
Test: TestFindMigrationsFSMultipleDirs
--- FAIL: TestFindMigrationsFSMultipleDirs (0.40s)
FAIL
FAIL command-line-arguments 0.960s
FAIL
make: *** [Makefile:43: test] Error 1
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ git remote add Dissociable https://github.com/Dissociable/dbmate.git
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ git fetch Dissociable
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (5/5), done.
remote: Total 10 (delta 5), reused 10 (delta 5), pack-reused 0
Unpacking objects: 100% (10/10), 1.55 KiB | 20.00 KiB/s, done.
From https://github.com/Dissociable/dbmate
* [new branch] fix/embeddedfs_windows -> Dissociable/fix/embeddedfs_windows
* [new branch] main -> Dissociable/main
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ git checkout -b fix/embeddedfs_windows --track Dissociable/fix/embeddedfs_windows
branch 'fix/embeddedfs_windows' set up to track 'Dissociable/fix/embeddedfs_windows'.
Switched to a new branch 'fix/embeddedfs_windows'
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ git log ...main
commit cee57e0337f490013f7648a2c5e347334f6ea1e0 (HEAD -> fix/embeddedfs_windows, Dissociable/fix/embeddedfs_windows)
Author: Dissociable <50553790+Dissociable@users.noreply.github.com>
Date: Tue Apr 9 14:05:37 2024 +0000
fix: `db.FindMigrations()` now uses `path.Join` instead of `filepath.Join`
to keep up the embedded fs compatibility on windows
commit 999f9f4108914cbd5014ca6e5b271a5edcd93654
Author: Dissociable <50553790+Dissociable@users.noreply.github.com>
Date: Tue Apr 9 13:56:31 2024 +0000
fix: embedded fs on windows
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ make build
rm -rf dist
go build -o dist/dbmate.exe -tags sqlite_omit_load_extension,sqlite_json -ldflags '-s' .
dossy@DESKTOP-E99FK4U UCRT64 /c/Users/dossy/Downloads/dbmate
$ make test POSTGRES_TEST_URL="postgres://postgres:postgres@postgres:15432/dbmate_test?sslmode=disable" FLAGS+="-v -run TestFindMigrationsFS ./pkg/dbmate/db_test.go #"
go test -p 1 -tags sqlite_omit_load_extension,sqlite_json -ldflags '-s' -v -run TestFindMigrationsFS ./pkg/dbmate/db_test.go # ./...
=== RUN TestFindMigrationsFS
Dropping: dbmate_test
Creating: dbmate_test
--- PASS: TestFindMigrationsFS (0.42s)
=== RUN TestFindMigrationsFSMultipleDirs
Dropping: dbmate_test
Creating: dbmate_test
--- PASS: TestFindMigrationsFSMultipleDirs (0.40s)
PASS
ok command-line-arguments 1.046s
LGTM 👍
Just for completeness, dbmate still works with the real filesystem, when using the OS-specific backslash path separator:
|
Is there a test that could be added that would run on linux and prevent regression in the future? Or do we need to run CI on windows in order to replicate this? |
I don't think it would be possible on Linux, or any OS that doesn't use or at least recognize |
[![Mend Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com) This PR contains the following updates: | Package | Change | Age | Adoption | Passing | Confidence | Type | Update | |---|---|---|---|---|---|---|---| | [@swc/core](https://swc.rs) ([source](https://togithub.com/swc-project/swc)) | [`1.4.14` -> `1.4.16`](https://renovatebot.com/diffs/npm/@swc%2fcore/1.4.14/1.4.16) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@swc%2fcore/1.4.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@swc%2fcore/1.4.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@swc%2fcore/1.4.14/1.4.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@swc%2fcore/1.4.14/1.4.16?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@types/react](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/react) ([source](https://togithub.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/react)) | [`18.2.78` -> `18.2.79`](https://renovatebot.com/diffs/npm/@types%2freact/18.2.78/18.2.79) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@types%2freact/18.2.79?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@types%2freact/18.2.79?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@types%2freact/18.2.78/18.2.79?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@types%2freact/18.2.78/18.2.79?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | [`7.6.0` -> `7.7.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/7.6.0/7.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2feslint-plugin/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2feslint-plugin/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2feslint-plugin/7.6.0/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2feslint-plugin/7.6.0/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | [`7.6.0` -> `7.7.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/7.6.0/7.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2fparser/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2fparser/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2fparser/7.6.0/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2fparser/7.6.0/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [@typescript-eslint/typescript-estree](https://typescript-eslint.io/packages/typescript-estree) ([source](https://togithub.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/typescript-estree)) | [`7.6.0` -> `7.7.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2ftypescript-estree/7.6.0/7.7.0) | [![age](https://developer.mend.io/api/mc/badges/age/npm/@typescript-eslint%2ftypescript-estree/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/@typescript-eslint%2ftypescript-estree/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/@typescript-eslint%2ftypescript-estree/7.6.0/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/@typescript-eslint%2ftypescript-estree/7.6.0/7.7.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | minor | | [dbmate](https://togithub.com/amacneil/dbmate) | `2.14.0` -> `2.15.0` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/dbmate/2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/dbmate/2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/dbmate/2.14.0/2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/dbmate/2.14.0/2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | minor | | [elkjs](https://togithub.com/kieler/elkjs) | [`0.9.2` -> `0.9.3`](https://renovatebot.com/diffs/npm/elkjs/0.9.2/0.9.3) | [![age](https://developer.mend.io/api/mc/badges/age/npm/elkjs/0.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/elkjs/0.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/elkjs/0.9.2/0.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/elkjs/0.9.2/0.9.3?slim=true)](https://docs.renovatebot.com/merge-confidence/) | dependencies | patch | | [github.com/alecthomas/kong-toml](https://togithub.com/alecthomas/kong-toml) | `v0.1.0` -> `v0.2.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2falecthomas%2fkong-toml/v0.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2falecthomas%2fkong-toml/v0.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2falecthomas%2fkong-toml/v0.1.0/v0.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2falecthomas%2fkong-toml/v0.1.0/v0.2.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [github.com/amacneil/dbmate/v2](https://togithub.com/amacneil/dbmate) | `v2.14.0` -> `v2.15.0` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2famacneil%2fdbmate%2fv2/v2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2famacneil%2fdbmate%2fv2/v2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2famacneil%2fdbmate%2fv2/v2.14.0/v2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2famacneil%2fdbmate%2fv2/v2.14.0/v2.15.0?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | minor | | [github.com/tmc/langchaingo](https://togithub.com/tmc/langchaingo) | `v0.1.8` -> `v0.1.9` | [![age](https://developer.mend.io/api/mc/badges/age/go/github.com%2ftmc%2flangchaingo/v0.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/github.com%2ftmc%2flangchaingo/v0.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/github.com%2ftmc%2flangchaingo/v0.1.8/v0.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/github.com%2ftmc%2flangchaingo/v0.1.8/v0.1.9?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | patch | | [kubectl](https://togithub.com/kubernetes/kubectl) | `1.29.3` -> `1.29.4` | [![age](https://developer.mend.io/api/mc/badges/age/hermit/kubectl/1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/hermit/kubectl/1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/hermit/kubectl/1.29.3/1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/hermit/kubectl/1.29.3/1.29.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | | patch | | [modernc.org/sqlite](https://gitlab.com/cznic/sqlite) | `v1.29.6` -> `v1.29.8` | [![age](https://developer.mend.io/api/mc/badges/age/go/modernc.org%2fsqlite/v1.29.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/go/modernc.org%2fsqlite/v1.29.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/go/modernc.org%2fsqlite/v1.29.6/v1.29.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/go/modernc.org%2fsqlite/v1.29.6/v1.29.8?slim=true)](https://docs.renovatebot.com/merge-confidence/) | require | patch | | [postcss-nesting](https://togithub.com/csstools/postcss-plugins/tree/main/plugins/postcss-nesting#readme) ([source](https://togithub.com/csstools/postcss-plugins/tree/HEAD/plugins/postcss-nesting)) | [`12.1.1` -> `12.1.2`](https://renovatebot.com/diffs/npm/postcss-nesting/12.1.1/12.1.2) | [![age](https://developer.mend.io/api/mc/badges/age/npm/postcss-nesting/12.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/npm/postcss-nesting/12.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/npm/postcss-nesting/12.1.1/12.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/npm/postcss-nesting/12.1.1/12.1.2?slim=true)](https://docs.renovatebot.com/merge-confidence/) | devDependencies | patch | | [org.apache.maven.plugins:maven-gpg-plugin](https://maven.apache.org/plugins/) | `3.2.3` -> `3.2.4` | [![age](https://developer.mend.io/api/mc/badges/age/maven/org.apache.maven.plugins:maven-gpg-plugin/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/org.apache.maven.plugins:maven-gpg-plugin/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/org.apache.maven.plugins:maven-gpg-plugin/3.2.3/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/org.apache.maven.plugins:maven-gpg-plugin/3.2.3/3.2.4?slim=true)](https://docs.renovatebot.com/merge-confidence/) | build | patch | | [io.github.classgraph:classgraph](https://togithub.com/classgraph/classgraph) | `4.8.170` -> `4.8.172` | [![age](https://developer.mend.io/api/mc/badges/age/maven/io.github.classgraph:classgraph/4.8.172?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/io.github.classgraph:classgraph/4.8.172?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/io.github.classgraph:classgraph/4.8.170/4.8.172?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/io.github.classgraph:classgraph/4.8.170/4.8.172?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | | [ch.qos.logback:logback-core](http://logback.qos.ch) ([source](https://togithub.com/qos-ch/logback), [changelog](https://logback.qos.ch/news.html)) | `1.5.5` -> `1.5.6` | [![age](https://developer.mend.io/api/mc/badges/age/maven/ch.qos.logback:logback-core/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/ch.qos.logback:logback-core/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/ch.qos.logback:logback-core/1.5.5/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/ch.qos.logback:logback-core/1.5.5/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | | [ch.qos.logback:logback-classic](http://logback.qos.ch) ([source](https://togithub.com/qos-ch/logback), [changelog](https://logback.qos.ch/news.html)) | `1.5.5` -> `1.5.6` | [![age](https://developer.mend.io/api/mc/badges/age/maven/ch.qos.logback:logback-classic/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![adoption](https://developer.mend.io/api/mc/badges/adoption/maven/ch.qos.logback:logback-classic/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![passing](https://developer.mend.io/api/mc/badges/compatibility/maven/ch.qos.logback:logback-classic/1.5.5/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | [![confidence](https://developer.mend.io/api/mc/badges/confidence/maven/ch.qos.logback:logback-classic/1.5.5/1.5.6?slim=true)](https://docs.renovatebot.com/merge-confidence/) | compile | patch | --- ### Release Notes <details> <summary>swc-project/swc (@​swc/core)</summary> ### [`v1.4.16`](https://togithub.com/swc-project/swc/blob/HEAD/CHANGELOG.md#1416---2024-04-18) [Compare Source](https://togithub.com/swc-project/swc/compare/v1.4.15...v1.4.16) ##### Bug Fixes - **(es/helpers)** Fix resolving of `usingCtx` helper ([#​8874](https://togithub.com/swc-project/swc/issues/8874)) ([6e9d1a4](https://togithub.com/swc-project/swc/commit/6e9d1a4ebfa705d58b576f5de32d4a17393d4e81)) ### [`v1.4.15`](https://togithub.com/swc-project/swc/blob/HEAD/CHANGELOG.md#1415---2024-04-17) [Compare Source](https://togithub.com/swc-project/swc/compare/v1.4.14...v1.4.15) ##### Bug Fixes - **(es/codegen)** Fix `ascii_only` for identifiers ([#​8866](https://togithub.com/swc-project/swc/issues/8866)) ([2075a23](https://togithub.com/swc-project/swc/commit/2075a23373eac575240ab33778079174505cdcb4)) - **(es/minifier)** Remove `raw` of strings after modification ([#​8865](https://togithub.com/swc-project/swc/issues/8865)) ([740c0bb](https://togithub.com/swc-project/swc/commit/740c0bb00a0bb9e0f4d808c9dc71e8087d416f72)) - **(es/parser)** Fix span of `BindingIdent` ([#​8859](https://togithub.com/swc-project/swc/issues/8859)) ([fbd32fb](https://togithub.com/swc-project/swc/commit/fbd32fbff323ff4116e82d2dd1d763f7f3844de2)) - **(es/proposal)** Update explicit resource management to match spec ([#​8860](https://togithub.com/swc-project/swc/issues/8860)) ([6d24076](https://togithub.com/swc-project/swc/commit/6d240768b11cd6cabd347a54c135cb8937df2240)) ##### Features - **(es/transforms)** Allocate stacks dynamically ([#​8867](https://togithub.com/swc-project/swc/issues/8867)) ([a1c5415](https://togithub.com/swc-project/swc/commit/a1c5415b3b84fdb8f780685e5eec4a121d442e28)) ##### Refactor - **(es/minifier)** Remove `mangle.safari10` ([#​8857](https://togithub.com/swc-project/swc/issues/8857)) ([df2e056](https://togithub.com/swc-project/swc/commit/df2e056f299c84d309bcc0d26e1da55a561614af)) ##### Build - **(cargo)** Update rustc to `nightly-2024-04-03` ([#​8821](https://togithub.com/swc-project/swc/issues/8821)) ([ca9c76b](https://togithub.com/swc-project/swc/commit/ca9c76b46f26f0aaf6b7f18cb7b4c6fdb7ebd512)) - **(cargo)** Update `rustc` to `nightly-2024-04-16` ([#​8870](https://togithub.com/swc-project/swc/issues/8870)) ([f9459a8](https://togithub.com/swc-project/swc/commit/f9459a8adf28de02d44dfe1da243a1d66a6ec41e)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v7.7.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#770-2024-04-15) [Compare Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.6.0...v7.7.0) ##### 🚀 Features - **eslint-plugin:** replace `no-new-symbol` with `no-new-native-nonconstructor` ##### ❤️ Thank You - Dave - Josh Goldberg ✨ You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary> ### [`v7.7.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#770-2024-04-15) [Compare Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.6.0...v7.7.0) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/typescript-estree)</summary> ### [`v7.7.0`](https://togithub.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/typescript-estree/CHANGELOG.md#770-2024-04-15) [Compare Source](https://togithub.com/typescript-eslint/typescript-eslint/compare/v7.6.0...v7.7.0) ##### 🚀 Features - **typescript-estree:** add defaultProject for project service ##### ❤️ Thank You - Dave - Josh Goldberg ✨ You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. </details> <details> <summary>amacneil/dbmate (dbmate)</summary> ### [`v2.15.0`](https://togithub.com/amacneil/dbmate/releases/tag/v2.15.0) #### What's Changed - fix: embedded fs on windows by [@​Dissociable](https://togithub.com/Dissociable) in [amacneil/dbmate#537 - Enable timeout flag in `make fix`. by [@​rilma](https://togithub.com/rilma) in [amacneil/dbmate#540 - Bump golang from 1.22.1 to 1.22.2 by [@​dependabot](https://togithub.com/dependabot) in [amacneil/dbmate#535 - Bump golang.org/x/net from 0.22.0 to 0.23.0 by [@​dependabot](https://togithub.com/dependabot) in [amacneil/dbmate#541 - Bump dependencies by [@​amacneil](https://togithub.com/amacneil) in [amacneil/dbmate#542 #### New Contributors - [@​Dissociable](https://togithub.com/Dissociable) made their first contribution in [amacneil/dbmate#537 - [@​rilma](https://togithub.com/rilma) made their first contribution in [amacneil/dbmate#540 **Full Changelog**: amacneil/dbmate@v2.14.0...v2.15.0 </details> <details> <summary>kieler/elkjs (elkjs)</summary> ### [`v0.9.3`](https://togithub.com/kieler/elkjs/releases/tag/0.9.3) [Compare Source](https://togithub.com/kieler/elkjs/compare/0.9.2...0.9.3) Based on ELK 0.9.1 ##### elkjs changes - update to mocha 10.3.0 by [@​Eddykasp](https://togithub.com/Eddykasp) in [kieler/elkjs#269 - [#​208](https://togithub.com/kieler/elkjs/issues/208) Add worker termination conditions and method by [@​skspade](https://togithub.com/skspade) in [kieler/elkjs#274 ##### ELk Changes These changes are not yet released in ELK, but are already included in this elkjs release. - Consider node's size when computing available space in port placement by [@​Eddykasp](https://togithub.com/Eddykasp) [eclipse/elk#955 For all changes and fixed issues see the [ELK release notes](https://eclipse.dev/elk/downloads/releasenotes/release-0.9.1.html). </details> <details> <summary>alecthomas/kong-toml (github.com/alecthomas/kong-toml)</summary> ### [`v0.2.0`](https://togithub.com/alecthomas/kong-toml/compare/v0.1.0...v0.2.0) [Compare Source](https://togithub.com/alecthomas/kong-toml/compare/v0.1.0...v0.2.0) </details> <details> <summary>tmc/langchaingo (github.com/tmc/langchaingo)</summary> ### [`v0.1.9`](https://togithub.com/tmc/langchaingo/releases/tag/v0.1.9) [Compare Source](https://togithub.com/tmc/langchaingo/compare/v0.1.8...v0.1.9) #### What's Changed - googleai: vertex - upgrade dep version and increase default max tokens by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#742 - googleai: combine options for googleai and vertex by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#743 - googleai: add safety/harm threshold settings by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#744 - github: update lint workflow to newer version of Go by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#745 - vectorstores/milvus: Update testcontainer image by [@​devalexandre](https://togithub.com/devalexandre) in [tmc/langchaingo#741 - tools/sqldataase: update postgres image by [@​devalexandre](https://togithub.com/devalexandre) in [tmc/langchaingo#740 - chains: Update mysql testcontainer image by [@​devalexandre](https://togithub.com/devalexandre) in [tmc/langchaingo#739 - vectorstores/qdrant: Update testcontainer image by [@​devalexandre](https://togithub.com/devalexandre) in [tmc/langchaingo#737 - doc: fix typo by [@​XiaoConstantine](https://togithub.com/XiaoConstantine) in [tmc/langchaingo#758 - examples: clarify openai-function-call-example by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#751 - schema: move Chat\* types to llms by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#757 - examples: remove 'replace' lines in go.mod files by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#782 - schema: remove leftover doc comment part by [@​eliben](https://togithub.com/eliben) in [tmc/langchaingo#784 - vectorstores/pinecone: update to latest v0.4.1 by [@​andrewyang17](https://togithub.com/andrewyang17) in [tmc/langchaingo#789 - llms/openai: Fixed no response when streaming func with tools calling by [@​shawti](https://togithub.com/shawti) in [tmc/langchaingo#788 - llms/ollama: support 'keep_alive' parameter by [@​CrazyWr](https://togithub.com/CrazyWr) in [tmc/langchaingo#787 - fix: fix example path by [@​LooJee](https://togithub.com/LooJee) in [tmc/langchaingo#780 - tools: serpapi api key option by [@​AugustDev](https://togithub.com/AugustDev) in [tmc/langchaingo#773 - Fix OpenAI createChat bug by [@​Pramodh-G](https://togithub.com/Pramodh-G) in [tmc/langchaingo#759 - docs: resolve rendering issue with code block in getting started docs by [@​schneedotdev](https://togithub.com/schneedotdev) in [tmc/langchaingo#754 #### New Contributors - [@​XiaoConstantine](https://togithub.com/XiaoConstantine) made their first contribution in [tmc/langchaingo#758 - [@​andrewyang17](https://togithub.com/andrewyang17) made their first contribution in [tmc/langchaingo#789 - [@​CrazyWr](https://togithub.com/CrazyWr) made their first contribution in [tmc/langchaingo#787 - [@​LooJee](https://togithub.com/LooJee) made their first contribution in [tmc/langchaingo#780 - [@​AugustDev](https://togithub.com/AugustDev) made their first contribution in [tmc/langchaingo#773 - [@​Pramodh-G](https://togithub.com/Pramodh-G) made their first contribution in [tmc/langchaingo#759 - [@​schneedotdev](https://togithub.com/schneedotdev) made their first contribution in [tmc/langchaingo#754 **Full Changelog**: tmc/langchaingo@v0.1.8...v0.1.9 </details> <details> <summary>kubernetes/kubectl (kubectl)</summary> ### [`v1.29.4`](https://togithub.com/kubernetes/kubectl/compare/kubernetes-1.29.3...kubernetes-1.29.4) </details> <details> <summary>cznic/sqlite (modernc.org/sqlite)</summary> ### [`v1.29.8`](https://gitlab.com/cznic/sqlite/compare/v1.29.7...v1.29.8) [Compare Source](https://gitlab.com/cznic/sqlite/compare/v1.29.7...v1.29.8) ### [`v1.29.7`](https://gitlab.com/cznic/sqlite/compare/v1.29.6...v1.29.7) [Compare Source](https://gitlab.com/cznic/sqlite/compare/v1.29.6...v1.29.7) </details> <details> <summary>csstools/postcss-plugins (postcss-nesting)</summary> ### [`v12.1.2`](https://togithub.com/csstools/postcss-plugins/blob/HEAD/plugins/postcss-nesting/CHANGELOG.md#1212) [Compare Source](https://togithub.com/csstools/postcss-plugins/compare/4b808f31d46f6ba06a91df64f46ba034ac269ee7...162c271ad287bf8c2bbf9a9fff0f97c7d47d29fc) *April 21, 2024* - Edition `2024-02`: - Do not rewrite selectors for declarations in conditional rules to a form with `:is()` This will work: ```css ::before, ::after { color: blue; @​media screen { color: cyan; } } ``` This still **wont** work: ```css ::before, ::after { color: blue; &:hover { color: cyan; } } ``` </details> --- ### Configuration 📅 **Schedule**: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://togithub.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate](https://www.mend.io/free-developer-tools/renovate/). View repository job log [here](https://developer.mend.io/github/TBD54566975/ftl). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNy4zMTMuMSIsInVwZGF0ZWRJblZlciI6IjM3LjMxMy4xIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Fixes #536