From 131a3a2de3d124a27baf025876dde57790f2fa02 Mon Sep 17 00:00:00 2001 From: Brandur Date: Sat, 22 Aug 2026 04:40:14 +0800 Subject: [PATCH] Upgrade to Go 1.27 + golangci-lint 2.13.1 Just since everything's fully available in Homebrew etc. now, here take the opportunity upgrade Go to 1.27 and golangci-lint to 2.13.1 so we can get our lint CI fully passing again. --- .github/workflows/ci.yaml | 16 ++++++++-------- .golangci.yaml | 8 ++++++++ CHANGELOG.md | 4 ++++ cmd/river/go.mod | 4 ++-- go.mod | 4 ++-- go.work | 4 ++-- riverdriver/go.mod | 4 ++-- riverdriver/riverdatabasesql/go.mod | 4 ++-- .../river_database_sql_driver.go | 1 + riverdriver/riverdrivertest/go.mod | 4 ++-- riverdriver/riverdrivertest/queue.go | 4 ++-- riverdriver/riverpgxv5/go.mod | 4 ++-- riverdriver/riverpgxv5/river_pgx_v5_driver.go | 1 + riverdriver/riversqlite/go.mod | 4 ++-- riverdriver/riversqlite/river_sqlite_driver.go | 1 + rivershared/go.mod | 4 ++-- rivershared/testfactory/test_factory.go | 8 ++++---- rivertype/go.mod | 4 ++-- 18 files changed, 49 insertions(+), 34 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d62f2dec..790d1ce7 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -28,7 +28,7 @@ jobs: strategy: matrix: go-version: - - "1.26" + - "1.27" postgres-version: [17] fail-fast: false timeout-minutes: 5 @@ -75,21 +75,21 @@ jobs: matrix: include: # Run the latest Go version against all supported Postgres versions: - - go-version: "1.26" + - go-version: "1.27" postgres-version: 18 - - go-version: "1.26" + - go-version: "1.27" postgres-version: 17 - - go-version: "1.26" + - go-version: "1.27" postgres-version: 16 - - go-version: "1.26" + - go-version: "1.27" postgres-version: 15 - - go-version: "1.26" + - go-version: "1.27" postgres-version: 14 # Also run the previous Go version (the Go version previous to current # is the only other officially supported Go version) against the # latest Postgres version: - - go-version: "1.25" + - go-version: "1.26" postgres-version: 18 fail-fast: false timeout-minutes: 5 @@ -299,7 +299,7 @@ jobs: name: lint runs-on: ubuntu-latest env: - GOLANGCI_LINT_VERSION: v2.12.2 + GOLANGCI_LINT_VERSION: v2.13.1 permissions: contents: read # allow read access to pull request. Use with `only-new-issues` option. diff --git a/.golangci.yaml b/.golangci.yaml index 71ae5563..ae918fcd 100644 --- a/.golangci.yaml +++ b/.golangci.yaml @@ -9,6 +9,7 @@ linters: # disabled because we're not compliant, but which we should think about - exhaustruct # checks that properties in structs are exhaustively defined; may be a good idea + - exhaustruct_v5 # they actually did another one - testpackage # requires tests in test packages like `river_test` # disabled because it's deprecated, and `default: all` already enables its @@ -92,6 +93,13 @@ linters: excludes: - G404 # use of non-crypto random; overly broad for our use case + modernize: + disable: + # Keep the Go 1.26 upgrade focused; apply its modernizations separately. + - errorsastype + - newexpr + - stditerators + revive: rules: - name: unused-parameter diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f56d0c0..a6f27f5d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Changed + +- Upgrade supported Go versions to 1.26 and 1.27. [PR #1356](https://github.com/riverqueue/river/pull/1356). + ## [0.44.1] - 2026-08-21 ### Fixed diff --git a/cmd/river/go.mod b/cmd/river/go.mod index 12522ee0..01455077 100644 --- a/cmd/river/go.mod +++ b/cmd/river/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/cmd/river -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/jackc/pgx/v5 v5.10.0 diff --git a/go.mod b/go.mod index 5d84b575..d95e1213 100644 --- a/go.mod +++ b/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/jackc/pgerrcode v0.0.0-20240316143900-6e2875d9b438 diff --git a/go.work b/go.work index 9a9927fe..8f7b945d 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,6 @@ -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 use ( . diff --git a/riverdriver/go.mod b/riverdriver/go.mod index db564ce5..6114289f 100644 --- a/riverdriver/go.mod +++ b/riverdriver/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/riverdriver -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/riverqueue/river/rivertype v0.44.1 diff --git a/riverdriver/riverdatabasesql/go.mod b/riverdriver/riverdatabasesql/go.mod index 5b0a32ce..07991c0f 100644 --- a/riverdriver/riverdatabasesql/go.mod +++ b/riverdriver/riverdatabasesql/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/riverdriver/riverdatabasesql -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/jackc/pgx/v5 v5.10.0 diff --git a/riverdriver/riverdatabasesql/river_database_sql_driver.go b/riverdriver/riverdatabasesql/river_database_sql_driver.go index a37e9a88..e23613cc 100644 --- a/riverdriver/riverdatabasesql/river_database_sql_driver.go +++ b/riverdriver/riverdatabasesql/river_database_sql_driver.go @@ -65,6 +65,7 @@ func (d *Driver) GetListener(params *riverdriver.GetListenenerParams) riverdrive } func (d *Driver) GetMigrationDefaultLines() []string { return []string{riverdriver.MigrationLineMain} } + func (d *Driver) GetMigrationFS(line string) fs.FS { if line == riverdriver.MigrationLineMain { return migrationFS diff --git a/riverdriver/riverdrivertest/go.mod b/riverdriver/riverdrivertest/go.mod index 33227f67..1c56dcc0 100644 --- a/riverdriver/riverdrivertest/go.mod +++ b/riverdriver/riverdrivertest/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/riverdriver/riverdrivertest -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/davecgh/go-spew v1.1.1 diff --git a/riverdriver/riverdrivertest/queue.go b/riverdriver/riverdrivertest/queue.go index 5c1bad68..1683ded2 100644 --- a/riverdriver/riverdrivertest/queue.go +++ b/riverdriver/riverdrivertest/queue.go @@ -361,14 +361,14 @@ func exerciseQueue[TTx any](ctx context.Context, t *testing.T, executorWithTx fu }) require.NoError(t, err) require.NotNil(t, queue1Fetched.PausedAt) - require.WithinDuration(t, now, *(queue1Fetched.PausedAt), 500*time.Millisecond) + require.WithinDuration(t, now, *queue1Fetched.PausedAt, 500*time.Millisecond) queue2Fetched, err := exec.QueueGet(ctx, &riverdriver.QueueGetParams{ Name: queue2.Name, }) require.NoError(t, err) require.NotNil(t, queue2Fetched.PausedAt) - require.WithinDuration(t, now, *(queue2Fetched.PausedAt), 500*time.Millisecond) + require.WithinDuration(t, now, *queue2Fetched.PausedAt, 500*time.Millisecond) }) t.Run("AllQueuesNoQueues", func(t *testing.T) { diff --git a/riverdriver/riverpgxv5/go.mod b/riverdriver/riverpgxv5/go.mod index 508215ae..be91f05b 100644 --- a/riverdriver/riverpgxv5/go.mod +++ b/riverdriver/riverpgxv5/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/riverdriver/riverpgxv5 -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/jackc/pgx/v5 v5.10.0 diff --git a/riverdriver/riverpgxv5/river_pgx_v5_driver.go b/riverdriver/riverpgxv5/river_pgx_v5_driver.go index 71dcc6d5..34954fac 100644 --- a/riverdriver/riverpgxv5/river_pgx_v5_driver.go +++ b/riverdriver/riverpgxv5/river_pgx_v5_driver.go @@ -75,6 +75,7 @@ func (d *Driver) GetListener(params *riverdriver.GetListenenerParams) riverdrive } func (d *Driver) GetMigrationDefaultLines() []string { return []string{riverdriver.MigrationLineMain} } + func (d *Driver) GetMigrationFS(line string) fs.FS { if line == riverdriver.MigrationLineMain { return migrationFS diff --git a/riverdriver/riversqlite/go.mod b/riverdriver/riversqlite/go.mod index 9bbf0d45..ae31bd4e 100644 --- a/riverdriver/riversqlite/go.mod +++ b/riverdriver/riversqlite/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/riverdriver/riversqlite -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/riverqueue/river v0.44.1 diff --git a/riverdriver/riversqlite/river_sqlite_driver.go b/riverdriver/riversqlite/river_sqlite_driver.go index f9a9546d..10b79141 100644 --- a/riverdriver/riversqlite/river_sqlite_driver.go +++ b/riverdriver/riversqlite/river_sqlite_driver.go @@ -94,6 +94,7 @@ func (d *Driver) GetListener(params *riverdriver.GetListenenerParams) riverdrive } func (d *Driver) GetMigrationDefaultLines() []string { return []string{riverdriver.MigrationLineMain} } + func (d *Driver) GetMigrationFS(line string) fs.FS { if line == riverdriver.MigrationLineMain { return migrationFS diff --git a/rivershared/go.mod b/rivershared/go.mod index bc5a8d48..95187abb 100644 --- a/rivershared/go.mod +++ b/rivershared/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/rivershared -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require ( github.com/jackc/pgx/v5 v5.10.0 diff --git a/rivershared/testfactory/test_factory.go b/rivershared/testfactory/test_factory.go index 26cf4b88..6e961e97 100644 --- a/rivershared/testfactory/test_factory.go +++ b/rivershared/testfactory/test_factory.go @@ -52,12 +52,12 @@ func Job_Build(tb testing.TB, opts *JobOpts) *riverdriver.JobInsertFullParams { tb.Helper() attemptedAt := opts.AttemptedAt - if attemptedAt == nil && (opts.State != nil && (slices.Contains([]rivertype.JobState{ + if attemptedAt == nil && (opts.State != nil && slices.Contains([]rivertype.JobState{ rivertype.JobStateCompleted, rivertype.JobStateDiscarded, rivertype.JobStateRetryable, rivertype.JobStateRunning, - }, *opts.State))) { + }, *opts.State)) { attemptedAt = ptrutil.Ptr(time.Now()) } @@ -67,11 +67,11 @@ func Job_Build(tb testing.TB, opts *JobOpts) *riverdriver.JobInsertFullParams { } finalizedAt := opts.FinalizedAt - if finalizedAt == nil && (opts.State != nil && (slices.Contains([]rivertype.JobState{ + if finalizedAt == nil && (opts.State != nil && slices.Contains([]rivertype.JobState{ rivertype.JobStateCompleted, rivertype.JobStateCancelled, rivertype.JobStateDiscarded, - }, *opts.State))) { + }, *opts.State)) { finalizedAt = ptrutil.Ptr(time.Now()) } diff --git a/rivertype/go.mod b/rivertype/go.mod index 70ea92ca..38bddb61 100644 --- a/rivertype/go.mod +++ b/rivertype/go.mod @@ -1,8 +1,8 @@ module github.com/riverqueue/river/rivertype -go 1.25.0 +go 1.26.0 -toolchain go1.25.7 +toolchain go1.26.6 require github.com/stretchr/testify v1.11.1