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

fix: embedded fs on windows #537

Merged
merged 2 commits into from
Apr 11, 2024
Merged

Conversation

Dissociable
Copy link
Contributor

Fixes #536

Comment on lines -426 to +431
path := filepath.Clean(dir)
path := path.Clean(dir)
Copy link
Collaborator

@dossy dossy Apr 9, 2024

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.

Copy link
Contributor Author

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.

Copy link
Collaborator

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 in pkg/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?

Copy link
Collaborator

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

@dossy dossy self-requested a review April 11, 2024 23:55
Copy link
Collaborator

@dossy dossy left a 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 👍

@dossy dossy merged commit 716b623 into amacneil:main Apr 11, 2024
10 checks passed
@dossy
Copy link
Collaborator

dossy commented Apr 12, 2024

Just for completeness, dbmate still works with the real filesystem, when using the OS-specific backslash path separator:

C:\Users\dossy\Downloads\dbmate>dist\dbmate.exe -u "postgres://postgres:postgres@postgres:15432/dbmate_test?sslmode=disable" -d testdata\db\migrations up -v
Applying: 20151129054053_test_migration.sql
Rows affected: 1
Applying: 20200227231541_test_posts.sql
Rows affected: 0

C:\Users\dossy\Downloads\dbmate>dist\dbmate.exe -u "postgres://postgres:postgres@postgres:15432/dbmate_test?sslmode=disable" -d testdata\db\migrations down -v
Rolling back: 20200227231541_test_posts.sql
Rows affected: 0

C:\Users\dossy\Downloads\dbmate>dist\dbmate.exe -u "postgres://postgres:postgres@postgres:15432/dbmate_test?sslmode=disable" -d testdata\db\migrations down -v
Rolling back: 20151129054053_test_migration.sql
Rows affected: 0

C:\Users\dossy\Downloads\dbmate>dist\dbmate.exe -u "postgres://postgres:postgres@postgres:15432/dbmate_test?sslmode=disable" -d testdata\db\migrations down -v
Error: can't rollback: no migrations have been applied

@amacneil
Copy link
Owner

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?

@dossy
Copy link
Collaborator

dossy commented Apr 20, 2024

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 \ as a directory path separator.

amacneil added a commit that referenced this pull request Apr 21, 2024
amacneil added a commit that referenced this pull request Apr 21, 2024
@amacneil
Copy link
Owner

Ok, I added CI tests for Windows in #543, and demonstrated in #545 that the tests failed prior to this PR.

alecthomas pushed a commit to TBD54566975/ftl that referenced this pull request Apr 22, 2024
[![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 (@&#8203;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
([#&#8203;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
([#&#8203;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
([#&#8203;8865](https://togithub.com/swc-project/swc/issues/8865))
([740c0bb](https://togithub.com/swc-project/swc/commit/740c0bb00a0bb9e0f4d808c9dc71e8087d416f72))

- **(es/parser)** Fix span of `BindingIdent`
([#&#8203;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
([#&#8203;8860](https://togithub.com/swc-project/swc/issues/8860))
([6d24076](https://togithub.com/swc-project/swc/commit/6d240768b11cd6cabd347a54c135cb8937df2240))

##### Features

- **(es/transforms)** Allocate stacks dynamically
([#&#8203;8867](https://togithub.com/swc-project/swc/issues/8867))
([a1c5415](https://togithub.com/swc-project/swc/commit/a1c5415b3b84fdb8f780685e5eec4a121d442e28))

##### Refactor

- **(es/minifier)** Remove `mangle.safari10`
([#&#8203;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`
([#&#8203;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`
([#&#8203;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
(@&#8203;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
(@&#8203;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
(@&#8203;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
[@&#8203;Dissociable](https://togithub.com/Dissociable) in
[amacneil/dbmate#537
- Enable timeout flag in `make fix`. by
[@&#8203;rilma](https://togithub.com/rilma) in
[amacneil/dbmate#540
- Bump golang from 1.22.1 to 1.22.2 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[amacneil/dbmate#535
- Bump golang.org/x/net from 0.22.0 to 0.23.0 by
[@&#8203;dependabot](https://togithub.com/dependabot) in
[amacneil/dbmate#541
- Bump dependencies by [@&#8203;amacneil](https://togithub.com/amacneil)
in
[amacneil/dbmate#542

#### New Contributors

- [@&#8203;Dissociable](https://togithub.com/Dissociable) made their
first contribution in
[amacneil/dbmate#537
- [@&#8203;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
[@&#8203;Eddykasp](https://togithub.com/Eddykasp) in
[kieler/elkjs#269
- [#&#8203;208](https://togithub.com/kieler/elkjs/issues/208) Add worker
termination conditions and method by
[@&#8203;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 [@&#8203;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 [@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#742
- googleai: combine options for googleai and vertex by
[@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#743
- googleai: add safety/harm threshold settings by
[@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#744
- github: update lint workflow to newer version of Go by
[@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#745
- vectorstores/milvus: Update testcontainer image by
[@&#8203;devalexandre](https://togithub.com/devalexandre) in
[tmc/langchaingo#741
- tools/sqldataase: update postgres image by
[@&#8203;devalexandre](https://togithub.com/devalexandre) in
[tmc/langchaingo#740
- chains: Update mysql testcontainer image by
[@&#8203;devalexandre](https://togithub.com/devalexandre) in
[tmc/langchaingo#739
- vectorstores/qdrant: Update testcontainer image by
[@&#8203;devalexandre](https://togithub.com/devalexandre) in
[tmc/langchaingo#737
- doc: fix typo by
[@&#8203;XiaoConstantine](https://togithub.com/XiaoConstantine) in
[tmc/langchaingo#758
- examples: clarify openai-function-call-example by
[@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#751
- schema: move Chat\* types to llms by
[@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#757
- examples: remove 'replace' lines in go.mod files by
[@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#782
- schema: remove leftover doc comment part by
[@&#8203;eliben](https://togithub.com/eliben) in
[tmc/langchaingo#784
- vectorstores/pinecone: update to latest v0.4.1 by
[@&#8203;andrewyang17](https://togithub.com/andrewyang17) in
[tmc/langchaingo#789
- llms/openai: Fixed no response when streaming func with tools calling
by [@&#8203;shawti](https://togithub.com/shawti) in
[tmc/langchaingo#788
- llms/ollama: support 'keep_alive' parameter by
[@&#8203;CrazyWr](https://togithub.com/CrazyWr) in
[tmc/langchaingo#787
- fix: fix example path by [@&#8203;LooJee](https://togithub.com/LooJee)
in
[tmc/langchaingo#780
- tools: serpapi api key option by
[@&#8203;AugustDev](https://togithub.com/AugustDev) in
[tmc/langchaingo#773
- Fix OpenAI createChat bug by
[@&#8203;Pramodh-G](https://togithub.com/Pramodh-G) in
[tmc/langchaingo#759
- docs: resolve rendering issue with code block in getting started docs
by [@&#8203;schneedotdev](https://togithub.com/schneedotdev) in
[tmc/langchaingo#754

#### New Contributors

- [@&#8203;XiaoConstantine](https://togithub.com/XiaoConstantine) made
their first contribution in
[tmc/langchaingo#758
- [@&#8203;andrewyang17](https://togithub.com/andrewyang17) made their
first contribution in
[tmc/langchaingo#789
- [@&#8203;CrazyWr](https://togithub.com/CrazyWr) made their first
contribution in
[tmc/langchaingo#787
- [@&#8203;LooJee](https://togithub.com/LooJee) made their first
contribution in
[tmc/langchaingo#780
- [@&#8203;AugustDev](https://togithub.com/AugustDev) made their first
contribution in
[tmc/langchaingo#773
- [@&#8203;Pramodh-G](https://togithub.com/Pramodh-G) made their first
contribution in
[tmc/langchaingo#759
- [@&#8203;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;

	@&#8203;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>
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.

Embedded FS on Windows
3 participants