Skip to content

Releases: pressly/goose

v3.20.0

22 Apr 13:18
v3.20.0
31de74d
Compare
Choose a tag to compare

What's Changed

  • Expand the Store interface by adding a GetLatestVersion method and make the interface public.
  • Add a (non-blocking) method to check if there are pending migrations to the goose.Provider
    (#751):
func (p *Provider) HasPending(context.Context) (bool, error) {}

Note

The underlying implementation does not respect the SessionLocker (if one is enabled) and can
be used to check for pending migrations without blocking or being blocked by other operations.

  • The methods .Up, .UpByOne, and .UpTo from goose.Provider will invoke .HasPending before
    acquiring a lock with SessionLocker (if enabled). This addresses an edge case in
    Kubernetes-style deployments where newer pods with long-running migrations prevent older pods -
    which have all known migrations applied - from starting up due to an advisory lock. For more
    details, refer to #507 (comment) and #751.
  • Move integration tests to ./internal/testing and make it a separate Go module. This will allow
    us to have a cleaner top-level go.mod file and avoid imports unrelated to the goose project. See
    integration/README.md
    for more details. This shouldn't affect users of the goose library.

v3.19.2

13 Mar 13:46
v3.19.2
79be9af
Compare
Choose a tag to compare
  • Remove duckdb support. The driver uses Cgo and we've decided to remove it until we can find a
    better solution. If you were using duckdb with goose, please let us know by opening an issue.

v3.19.1

11 Mar 14:26
v3.19.1
9024628
Compare
Choose a tag to compare
  • Fix selecting dialect for redshift
  • Add GOOSE_MIGRATION_DIR documentation
  • Bump github.com/opencontainers/runc to v1.1.12 (security fix)
  • Update CI tests for go1.22
  • Make goose annotations case-insensitive
    • All -- +goose annotations are now case-insensitive. This means that -- +goose Up and -- +goose up are now equivalent. This change was made to improve the user experience and to make the annotations more consistent.

New Contributors

  • @jbking made their first contribution in #692
  • @JosefuMealsom made their first contribution in #697
  • @dpeckett made their first contribution in #696 (currently disabled until build is resolved, uses CGO. But thank you for the contribution 😄)
  • @obalunenko made their first contribution in #704

v3.18.0

31 Jan 14:35
v3.18.0
6f5c152
Compare
Choose a tag to compare

⚠️ Note, starting with goose v3.18.0 (current release) the minimum supported Go version is go1.20

New features

  • Add environment variable substitution for SQL migrations. (#604)

    • This feature is disabled by default, and can be enabled by adding an annotation to the
      migration file:

      -- +goose ENVSUB ON
    • When enabled, goose will attempt to substitute environment variables in the SQL migration
      queries until the end of the file, or until the annotation -- +goose ENVSUB OFF is found. For
      example, if the environment variable REGION is set to us_east_1, the following SQL migration
      will be substituted to SELECT * FROM regions WHERE name = 'us_east_1';

      -- +goose ENVSUB ON
      -- +goose Up
      SELECT * FROM regions WHERE name = '${REGION}';
    • This feature intentionally supports a minimal expansion set; see Supported Expansions in the https://github.com/mfridman/interpolate repository (forked from https://github.com/buildkite/interpolate)

  • Add native Turso support with libsql driver. (#658)

Fixes

  • Fixed query for list migrations in YDB (#684)

v3.17.0

16 Dec 05:01
v3.17.0
87c45a3
Compare
Choose a tag to compare
  • Standardised the MIT license (#647)
  • Improve provider Apply() errors, add ErrNotApplied when attempting to rollback a migration
    that has not been previously applied. (#660)
  • Add WithDisableGlobalRegistry option to NewProvider to disable the global registry. (#645)
  • Add -timeout flag to CLI to set the maximum allowed duration for queries to run. Default remains
    no timeout. (#627)
  • Add optional logging in Provider when WithVerbose option is supplied. (#668)

⚠️ Potential Breaking Change ⚠️

  • Update goose create to use UTC time instead of local time. (#242)

v3.16.0

12 Nov 17:36
v3.16.0
bb5a1e5
Compare
Choose a tag to compare
  • Added YDB support. (#592)
  • Fix sqlserver query to ensure DB version. (#601)
  • Allow setting / resetting the global Go migration registry. (#602)
    • SetGlobalMigrations and ResetGlobalMigrations functions have been added.
    • Introduce NewGoMigration for constructing Go migrations.
  • Add initial implementation of goose.NewProvider.

🎉 Read more about this new feature here:

https://pressly.github.io/goose/blog/2023/goose-provider/

The motivation behind the Provider was simple - to reduce global state and make goose easier to consume as an imported package.

Here's a quick summary:

  • Avoid global state
  • Make Provider safe to use concurrently
  • Unlock (no pun intended) new features, such as database locking
  • Make logging configurable
  • Better error handling with proper return values
  • Double down on Go migrations
  • ... and more!

v3.15.1

10 Oct 13:29
v3.15.1
091166a
Compare
Choose a tag to compare
  • Fix regression that prevented registering Go migrations that didn't have the corresponding files
    available in the filesystem. (#588)
    • If Go migrations have been registered globally, but there are no .go files in the filesystem,
      always include them.
    • If Go migrations have been registered, and there are .go files in the filesystem, only
      include
      those migrations. This was the original motivation behind #553.
    • If there are .go files in the filesystem but not registered, raise an error. This is to
      prevent accidentally adding valid looking Go migration files without explicitly registering
      them.

v3.15.0

13 Aug 03:27
v3.15.0
6c1d92b
Compare
Choose a tag to compare
  • Fix sqlparser to avoid skipping the last statement when it's not terminated with a semicolon
    within a StatementBegin/End block. (#580)
  • Add go1.21 to the CI matrix.
  • Bump minimum version of module in go.mod to go1.19.
  • Fix version output when installing pre-built binaries (#585).

v3.14.0

26 Jul 13:01
v3.14.0
da5f2bf
Compare
Choose a tag to compare
  • Filter registered Go migrations from the global map with corresponding .go files from the
    filesystem.
    • The code previously assumed all .go migrations would be in the same folder, so this should not
      be a breaking change.
    • See #553 for more details
  • Improve output log message for applied up migrations. #562
  • Fix an issue where AddMigrationNoTxContext was registering the wrong source because it skipped
    too many frames. #572
  • Improve binary version output when using go install.

v3.13.4

07 Jul 22:51
Compare
Choose a tag to compare
  • Fix pre-built binary versioning and make small improvements to GoReleaser config (a tool for packaging / releasing Go tools).
  • Fix an edge case in the sqlparser where the last up statement may be ignored if it's
    unterminated with a semicolon and followed by a -- +goose Down annotation.
  • Trim Logger interface to Printf and Fatalf methods only. Projects that have previously
    implemented the Logger interface should not be affected, and can remove unused methods.