From da1197c7bd55c1929e0303cc20a55b791537ece8 Mon Sep 17 00:00:00 2001 From: Ibrahim Serdar Acikgoz Date: Wed, 23 Oct 2024 17:20:38 +0200 Subject: [PATCH 1/2] re-implement Lockable interface to drop requirement on driver impls. --- drivers/lock.go | 2 +- drivers/mysql/lock.go | 9 ++----- drivers/mysql/mysql.go | 28 ++++++++++------------ drivers/mysql/mysql_test.go | 36 +++++++++++----------------- drivers/postgres/lock.go | 9 ++----- drivers/postgres/postgres.go | 28 ++++++++++------------ drivers/postgres/postgres_test.go | 39 +++++++++++++------------------ morph.go | 14 +---------- 8 files changed, 60 insertions(+), 105 deletions(-) diff --git a/drivers/lock.go b/drivers/lock.go index 0a0f3bd..9861bd3 100644 --- a/drivers/lock.go +++ b/drivers/lock.go @@ -73,7 +73,7 @@ type Locker interface { } type Lockable interface { - DriverName() string + NewMutex(key string, logger Logger) (Locker, error) } // IsLockable returns whether the given instance satisfies diff --git a/drivers/mysql/lock.go b/drivers/mysql/lock.go index 1096871..e37b0cc 100644 --- a/drivers/mysql/lock.go +++ b/drivers/mysql/lock.go @@ -34,7 +34,7 @@ type Mutex struct { // NewMutex creates a mutex with the given key name. // // returns error if key is empty. -func NewMutex(key string, driver drivers.Driver, logger drivers.Logger) (*Mutex, error) { +func (driver *MySQL) NewMutex(key string, logger drivers.Logger) (*Mutex, error) { key, err := drivers.MakeLockKey(key) if err != nil { return nil, err @@ -43,12 +43,7 @@ func NewMutex(key string, driver drivers.Driver, logger drivers.Logger) (*Mutex, ctx, cancel := context.WithTimeout(context.Background(), drivers.TTL) defer cancel() - ms, ok := driver.(*mysql) - if !ok { - return nil, errors.New("incorrect implementation of the driver") - } - - conn, err := ms.db.Conn(context.Background()) + conn, err := driver.db.Conn(context.Background()) if err != nil { return nil, err } diff --git a/drivers/mysql/mysql.go b/drivers/mysql/mysql.go index 11ac3db..e7a3202 100644 --- a/drivers/mysql/mysql.go +++ b/drivers/mysql/mysql.go @@ -30,13 +30,13 @@ type driverConfig struct { closeDBonClose bool } -type mysql struct { +type MySQL struct { conn *sql.Conn db *sql.DB config *driverConfig } -func WithInstance(dbInstance *sql.DB) (drivers.Driver, error) { +func WithInstance(dbInstance *sql.DB) (*MySQL, error) { driverConfig := getDefaultConfig() conn, err := dbInstance.Conn(context.Background()) @@ -48,10 +48,10 @@ func WithInstance(dbInstance *sql.DB) (drivers.Driver, error) { return nil, err } - return &mysql{config: driverConfig, conn: conn, db: dbInstance}, nil + return &MySQL{config: driverConfig, conn: conn, db: dbInstance}, nil } -func Open(connURL string) (drivers.Driver, error) { +func Open(connURL string) (*MySQL, error) { customParams, err := drivers.ExtractCustomParams(connURL, configParams) if err != nil { return nil, &drivers.AppError{Driver: driverName, OrigErr: err, Message: "failed to parse custom parameters from url"} @@ -83,25 +83,21 @@ func Open(connURL string) (drivers.Driver, error) { driverConfig.closeDBonClose = true - return &mysql{ + return &MySQL{ conn: conn, db: db, config: driverConfig, }, nil } -func (driver *mysql) Ping() error { +func (driver *MySQL) Ping() error { ctx, cancel := drivers.GetContext(driver.config.StatementTimeoutInSecs) defer cancel() return driver.conn.PingContext(ctx) } -func (mysql) DriverName() string { - return driverName -} - -func (driver *mysql) Close() error { +func (driver *MySQL) Close() error { if driver.conn != nil { if err := driver.conn.Close(); err != nil { return &drivers.DatabaseError{ @@ -131,7 +127,7 @@ func (driver *mysql) Close() error { return nil } -func (driver *mysql) createSchemaTableIfNotExists() (err error) { +func (driver *MySQL) createSchemaTableIfNotExists() (err error) { ctx, cancel := drivers.GetContext(driver.config.StatementTimeoutInSecs) defer cancel() @@ -149,7 +145,7 @@ func (driver *mysql) createSchemaTableIfNotExists() (err error) { return nil } -func (driver *mysql) Apply(migration *models.Migration, saveVersion bool) (err error) { +func (driver *MySQL) Apply(migration *models.Migration, saveVersion bool) (err error) { query := migration.Query() ctx, cancel := drivers.GetContext(driver.config.StatementTimeoutInSecs) defer cancel() @@ -206,7 +202,7 @@ func (driver *mysql) Apply(migration *models.Migration, saveVersion bool) (err e return nil } -func (driver *mysql) AppliedMigrations() (migrations []*models.Migration, err error) { +func (driver *MySQL) AppliedMigrations() (migrations []*models.Migration, err error) { if driver.conn == nil { return nil, &drivers.AppError{ OrigErr: errors.New("driver has no connection established"), @@ -301,14 +297,14 @@ func mergeConfigWithParams(params map[string]string, config *driverConfig) (*dri return config, nil } -func (driver *mysql) addMigrationQuery(migration *models.Migration) string { +func (driver *MySQL) addMigrationQuery(migration *models.Migration) string { if migration.Direction == models.Down { return fmt.Sprintf("DELETE FROM %s WHERE (Version=%d AND NAME='%s')", driver.config.MigrationsTable, migration.Version, migration.Name) } return fmt.Sprintf("INSERT INTO %s (Version, Name) VALUES (%d, '%s')", driver.config.MigrationsTable, migration.Version, migration.Name) } -func (driver *mysql) SetConfig(key string, value interface{}) error { +func (driver *MySQL) SetConfig(key string, value interface{}) error { if driver.config != nil { switch key { case "StatementTimeoutInSecs": diff --git a/drivers/mysql/mysql_test.go b/drivers/mysql/mysql_test.go index 86dcafa..cc78b1d 100644 --- a/drivers/mysql/mysql_test.go +++ b/drivers/mysql/mysql_test.go @@ -75,7 +75,7 @@ func (suite *MysqlTestSuite) AfterTest(_, _ string) { } } -func (suite *MysqlTestSuite) InitializeDriver(connURL string) (drivers.Driver, func()) { +func (suite *MysqlTestSuite) InitializeDriver(connURL string) (*MySQL, func()) { connectedDriver, err := Open(connURL) suite.Require().NoError(err, "should not error when connecting to database from url") suite.Require().NotNil(connectedDriver) @@ -112,41 +112,36 @@ func (suite *MysqlTestSuite) TestOpen() { }, closeDBonClose: true, // we have created DB from DSN } - mysqlDriver := connectedDriver.(*mysql) - suite.Assert().EqualValues(cfg, mysqlDriver.config) + suite.Assert().EqualValues(cfg, connectedDriver.config) }) suite.T().Run("when connURL is valid can override migrations table", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL + "?x-migrations-table=test") defer teardown() - mysqlDriver := connectedDriver.(*mysql) - suite.Assert().Equal("test", mysqlDriver.config.MigrationsTable) + suite.Assert().Equal("test", connectedDriver.config.MigrationsTable) }) suite.T().Run("when connURL is valid can override statement timeout", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL + "?x-statement-timeout=10") defer teardown() - mysqlDriver := connectedDriver.(*mysql) - suite.Assert().Equal(10, mysqlDriver.config.StatementTimeoutInSecs) + suite.Assert().Equal(10, connectedDriver.config.StatementTimeoutInSecs) }) suite.T().Run("when connURL is valid can override max migration size", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL + "?x-migration-max-size=42") defer teardown() - mysqlDriver := connectedDriver.(*mysql) - suite.Assert().Equal(42, mysqlDriver.config.MigrationMaxSize) + suite.Assert().Equal(42, connectedDriver.config.MigrationMaxSize) }) suite.T().Run("when connURL is valid extracts database name", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL) defer teardown() - mysqlDriver := connectedDriver.(*mysql) - suite.Assert().Equal(databaseName, mysqlDriver.config.databaseName) + suite.Assert().Equal(databaseName, connectedDriver.config.databaseName) }) } @@ -154,7 +149,7 @@ func (suite *MysqlTestSuite) TestCreateSchemaTableIfNotExists() { defaultConfig := getDefaultConfig() suite.T().Run("it errors when connection is missing", func(t *testing.T) { - driver := &mysql{} + driver := &MySQL{} _, err := driver.AppliedMigrations() suite.Assert().Error(err, "should error when database connection is missing") @@ -372,12 +367,11 @@ func (suite *MysqlTestSuite) TestWithInstance() { }() suite.Assert().NoError(db.Ping(), "should not error when pinging the database") - driver, err := WithInstance(db) - mysqlDriver := driver.(*mysql) + mysqlDriver, err := WithInstance(db) mysqlDriver.config.closeDBonClose = true suite.Assert().NoError(err, "should not error when creating a driver from db instance") defer func() { - err = driver.Close() + err = mysqlDriver.Close() suite.Require().NoError(err, "should not error when closing the database connection") }() @@ -396,7 +390,7 @@ func (suite *MysqlTestSuite) TestLock() { suite.T().Run("should create lock and unlock the mutex", func(t *testing.T) { ctx := context.Background() - mx, err := NewMutex("test-lock-key", connectedDriver, logger) + mx, err := connectedDriver.NewMutex("test-lock-key", logger) suite.Require().NoError(err, "should not error while creating the mutex") err = mx.Lock(ctx) @@ -409,12 +403,11 @@ func (suite *MysqlTestSuite) TestLock() { suite.T().Run("should release the expired lock", func(t *testing.T) { ctx := context.Background() - ms := connectedDriver.(*mysql) query := fmt.Sprintf("INSERT INTO %s (Id, ExpireAt) VALUES (?, ?)", drivers.MutexTableName) - _, err := ms.conn.ExecContext(ctx, query, "test-lock-key", 1) + _, err := connectedDriver.conn.ExecContext(ctx, query, "test-lock-key", 1) suite.Require().NoError(err, "should not error while manually inserting the mutex") - mx, err := NewMutex("test-lock-key", connectedDriver, logger) + mx, err := connectedDriver.NewMutex("test-lock-key", logger) suite.Require().NoError(err, "should not error while creating the mutex") err = mx.Lock(ctx) @@ -430,10 +423,9 @@ func (suite *MysqlTestSuite) TestLock() { now := time.Now() timeout := time.After(2 * drivers.TTL) // should not wait to drop the lock for 30s - ms := connectedDriver.(*mysql) query := fmt.Sprintf("INSERT INTO %s (Id, ExpireAt) VALUES (?, ?)", drivers.MutexTableName) // set expiration 2 seconds later - _, err := ms.conn.ExecContext(ctx, query, "test-lock-key", now.Add(2*time.Second).Unix()) + _, err := connectedDriver.conn.ExecContext(ctx, query, "test-lock-key", now.Add(2*time.Second).Unix()) suite.Require().NoError(err, "should not error while manually inserting the mutex") done := make(chan struct{}) @@ -441,7 +433,7 @@ func (suite *MysqlTestSuite) TestLock() { defer func() { close(done) }() - mx, err := NewMutex("test-lock-key", connectedDriver, logger) + mx, err := connectedDriver.NewMutex("test-lock-key", logger) suite.Require().NoError(err, "should not error while creating the mutex") err = mx.Lock(ctx) diff --git a/drivers/postgres/lock.go b/drivers/postgres/lock.go index 3c954cd..58f59b6 100644 --- a/drivers/postgres/lock.go +++ b/drivers/postgres/lock.go @@ -34,7 +34,7 @@ type Mutex struct { // NewMutex creates a mutex with the given key name. // // returns error if key is empty. -func NewMutex(key string, driver drivers.Driver, logger drivers.Logger) (*Mutex, error) { +func (pg *Postgres) NewMutex(key string, logger drivers.Logger) (*Mutex, error) { key, err := drivers.MakeLockKey(key) if err != nil { return nil, err @@ -43,12 +43,7 @@ func NewMutex(key string, driver drivers.Driver, logger drivers.Logger) (*Mutex, ctx, cancel := context.WithTimeout(context.Background(), drivers.TTL) defer cancel() - ps, ok := driver.(*postgres) - if !ok { - return nil, errors.New("incorrect implementation of the driver") - } - - conn, err := ps.db.Conn(context.Background()) + conn, err := pg.db.Conn(context.Background()) if err != nil { return nil, err } diff --git a/drivers/postgres/postgres.go b/drivers/postgres/postgres.go index 761595b..de195b3 100644 --- a/drivers/postgres/postgres.go +++ b/drivers/postgres/postgres.go @@ -36,13 +36,13 @@ type driverConfig struct { closeDBonClose bool } -type postgres struct { +type Postgres struct { conn *sql.Conn db *sql.DB config *driverConfig } -func WithInstance(dbInstance *sql.DB) (drivers.Driver, error) { +func WithInstance(dbInstance *sql.DB) (*Postgres, error) { conn, err := dbInstance.Conn(context.Background()) if err != nil { return nil, &drivers.DatabaseError{Driver: driverName, Command: "grabbing_connection", OrigErr: err, Message: "failed to grab connection to the database"} @@ -57,14 +57,14 @@ func WithInstance(dbInstance *sql.DB) (drivers.Driver, error) { return nil, err } - return &postgres{ + return &Postgres{ conn: conn, db: dbInstance, config: driverConfig, }, nil } -func Open(connURL string) (drivers.Driver, error) { +func Open(connURL string) (*Postgres, error) { customParams, err := drivers.ExtractCustomParams(connURL, configParams) if err != nil { return nil, &drivers.AppError{Driver: driverName, OrigErr: err, Message: "failed to parse custom parameters from url"} @@ -100,7 +100,7 @@ func Open(connURL string) (drivers.Driver, error) { driverConfig.closeDBonClose = true - return &postgres{ + return &Postgres{ db: db, config: driverConfig, conn: conn, @@ -149,14 +149,14 @@ func mergeConfigWithParams(params map[string]string, config *driverConfig) (*dri return config, nil } -func (pg *postgres) Ping() error { +func (pg *Postgres) Ping() error { ctx, cancel := drivers.GetContext(pg.config.StatementTimeoutInSecs) defer cancel() return pg.conn.PingContext(ctx) } -func (pg *postgres) createSchemaTableIfNotExists() (err error) { +func (pg *Postgres) createSchemaTableIfNotExists() (err error) { ctx, cancel := drivers.GetContext(pg.config.StatementTimeoutInSecs) defer cancel() @@ -174,11 +174,7 @@ func (pg *postgres) createSchemaTableIfNotExists() (err error) { return nil } -func (postgres) DriverName() string { - return driverName -} - -func (pg *postgres) Close() error { +func (pg *Postgres) Close() error { if pg.conn != nil { if err := pg.conn.Close(); err != nil { return &drivers.DatabaseError{ @@ -208,7 +204,7 @@ func (pg *postgres) Close() error { return nil } -func (pg *postgres) Apply(migration *models.Migration, saveVersion bool) (err error) { +func (pg *Postgres) Apply(migration *models.Migration, saveVersion bool) (err error) { query := migration.Query() ctx, cancel := drivers.GetContext(pg.config.StatementTimeoutInSecs) @@ -275,7 +271,7 @@ func (pg *postgres) Apply(migration *models.Migration, saveVersion bool) (err er return nil } -func (pg *postgres) AppliedMigrations() (migrations []*models.Migration, err error) { +func (pg *Postgres) AppliedMigrations() (migrations []*models.Migration, err error) { if pg.conn == nil { return nil, &drivers.AppError{ OrigErr: errors.New("driver has no connection established"), @@ -327,7 +323,7 @@ func (pg *postgres) AppliedMigrations() (migrations []*models.Migration, err err return appliedMigrations, nil } -func (pg *postgres) addMigrationQuery(migration *models.Migration) string { +func (pg *Postgres) addMigrationQuery(migration *models.Migration) string { if migration.Direction == models.Down { return fmt.Sprintf("DELETE FROM %s WHERE (Version=%d AND NAME='%s')", pg.config.MigrationsTable, migration.Version, migration.Name) } @@ -377,7 +373,7 @@ func currentDatabaseNameFromDB(conn *sql.Conn, config *driverConfig) (string, er return databaseName, nil } -func (pg *postgres) SetConfig(key string, value interface{}) error { +func (pg *Postgres) SetConfig(key string, value interface{}) error { if pg.config != nil { switch key { case "StatementTimeoutInSecs": diff --git a/drivers/postgres/postgres_test.go b/drivers/postgres/postgres_test.go index 416b765..3e1ae62 100644 --- a/drivers/postgres/postgres_test.go +++ b/drivers/postgres/postgres_test.go @@ -46,7 +46,7 @@ END $$;`) suite.Require().NoError(err, "should not error when dropping the tables the test database") } -func (suite *PostgresTestSuite) InitializeDriver(connURL string) (drivers.Driver, func()) { +func (suite *PostgresTestSuite) InitializeDriver(connURL string) (*Postgres, func()) { connectedDriver, err := Open(connURL) suite.Require().NoError(err, "should not error when connecting to database from url") suite.Require().NotNil(connectedDriver) @@ -105,41 +105,36 @@ func (suite *PostgresTestSuite) TestOpen() { closeDBonClose: true, // we have created DB from DSN } - pgDriver := connectedDriver.(*postgres) - suite.Assert().EqualValues(cfg, pgDriver.config) + suite.Assert().EqualValues(cfg, connectedDriver.config) }) suite.T().Run("when connURL is valid can override migrations table", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL + "&x-migrations-table=test") defer teardown() - pgDriver := connectedDriver.(*postgres) - suite.Assert().Equal("test", pgDriver.config.MigrationsTable) + suite.Assert().Equal("test", connectedDriver.config.MigrationsTable) }) suite.T().Run("when connURL is valid can override statement timeout", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL + "&x-statement-timeout=10") defer teardown() - pgDriver := connectedDriver.(*postgres) - suite.Assert().Equal(10, pgDriver.config.StatementTimeoutInSecs) + suite.Assert().Equal(10, connectedDriver.config.StatementTimeoutInSecs) }) suite.T().Run("when connURL is valid can override max migration size", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL + "&x-migration-max-size=42") defer teardown() - pgDriver := connectedDriver.(*postgres) - suite.Assert().Equal(42, pgDriver.config.MigrationMaxSize) + suite.Assert().Equal(42, connectedDriver.config.MigrationMaxSize) }) suite.T().Run("when connURL is valid extracts database and schema names", func(t *testing.T) { connectedDriver, teardown := suite.InitializeDriver(testConnURL) defer teardown() - pgDriver := connectedDriver.(*postgres) - suite.Assert().Equal(databaseName, pgDriver.config.databaseName) - suite.Assert().Equal("public", pgDriver.config.schemaName) + suite.Assert().Equal(databaseName, connectedDriver.config.databaseName) + suite.Assert().Equal("public", connectedDriver.config.schemaName) }) } @@ -147,7 +142,7 @@ func (suite *PostgresTestSuite) TestCreateSchemaTableIfNotExists() { defaultConfig := getDefaultConfig() suite.T().Run("it errors when connection is missing", func(t *testing.T) { - driver := &postgres{} + driver := &Postgres{} _, err := driver.AppliedMigrations() suite.Assert().Error(err, "should error when database connection is missing") @@ -404,12 +399,11 @@ func (suite *PostgresTestSuite) TestWithInstance() { }() suite.Assert().NoError(db.Ping(), "should not error when pinging the database") - driver, err := WithInstance(db) - psqlDriver := driver.(*postgres) + psqlDriver, err := WithInstance(db) psqlDriver.config.closeDBonClose = true suite.Assert().NoError(err, "should not error when creating a driver from db instance") defer func() { - err = driver.Close() + err = psqlDriver.Close() suite.Require().NoError(err, "should not error when closing the database connection") }() @@ -429,7 +423,8 @@ func (suite *PostgresTestSuite) TestLock() { suite.T().Run("should create lock and unlock the mutex", func(t *testing.T) { ctx := context.Background() - mx, err := NewMutex("test-lock-key", connectedDriver, logger) + + mx, err := connectedDriver.NewMutex("test-lock-key", logger) suite.Require().NoError(err, "should not error while creating the mutex") err = mx.Lock(ctx) @@ -442,12 +437,11 @@ func (suite *PostgresTestSuite) TestLock() { suite.T().Run("should release the expired lock", func(t *testing.T) { ctx := context.Background() - pq := connectedDriver.(*postgres) query := fmt.Sprintf("INSERT INTO %s (id, expireat) VALUES ($1, $2)", drivers.MutexTableName) - _, err := pq.conn.ExecContext(ctx, query, "test-lock-key", 1) + _, err := connectedDriver.conn.ExecContext(ctx, query, "test-lock-key", 1) suite.Require().NoError(err, "should not error while manually inserting the mutex") - mx, err := NewMutex("test-lock-key", connectedDriver, logger) + mx, err := connectedDriver.NewMutex("test-lock-key", logger) suite.Require().NoError(err, "should not error while creating the mutex") err = mx.Lock(ctx) @@ -463,10 +457,9 @@ func (suite *PostgresTestSuite) TestLock() { now := time.Now() timeout := time.After(2 * drivers.TTL) // should not wait to drop the lock for 30s - pq := connectedDriver.(*postgres) query := fmt.Sprintf("INSERT INTO %s (id, expireat) VALUES ($1, $2)", drivers.MutexTableName) // set expiration 2 seconds later - _, err := pq.conn.ExecContext(ctx, query, "test-lock-key", now.Add(2*time.Second).Unix()) + _, err := connectedDriver.conn.ExecContext(ctx, query, "test-lock-key", now.Add(2*time.Second).Unix()) suite.Require().NoError(err, "should not error while manually inserting the mutex") done := make(chan struct{}) @@ -474,7 +467,7 @@ func (suite *PostgresTestSuite) TestLock() { defer func() { close(done) }() - mx, err := NewMutex("test-lock-key", connectedDriver, logger) + mx, err := connectedDriver.NewMutex("test-lock-key", logger) suite.Require().NoError(err, "should not error while creating the mutex") err = mx.Lock(ctx) diff --git a/morph.go b/morph.go index f540789..be47061 100644 --- a/morph.go +++ b/morph.go @@ -16,9 +16,6 @@ import ( "github.com/mattermost/morph/drivers" "github.com/mattermost/morph/sources" - ms "github.com/mattermost/morph/drivers/mysql" - ps "github.com/mattermost/morph/drivers/postgres" - _ "github.com/mattermost/morph/sources/embedded" _ "github.com/mattermost/morph/sources/file" ) @@ -118,16 +115,7 @@ func New(ctx context.Context, driver drivers.Driver, source sources.Source, opti } if impl, ok := driver.(drivers.Lockable); ok && engine.config.LockKey != "" { - var mx drivers.Locker - var err error - switch impl.DriverName() { - case "mysql": - mx, err = ms.NewMutex(engine.config.LockKey, driver, engine.config.Logger) - case "postgres": - mx, err = ps.NewMutex(engine.config.LockKey, driver, engine.config.Logger) - default: - err = errors.New("driver does not support locking") - } + mx, err := impl.NewMutex(engine.config.LockKey, engine.config.Logger) if err != nil { return nil, err } From 303b58292074d28b6740615a0f726f4990a80611 Mon Sep 17 00:00:00 2001 From: Ibrahim Serdar Acikgoz Date: Wed, 23 Oct 2024 20:39:09 +0200 Subject: [PATCH 2/2] bump dependencies --- .github/workflows/ci.yml | 3 +-- .github/workflows/golangci-lint.yml | 5 +---- go.mod | 2 +- go.sum | 3 +++ 4 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index cfd8869..0d4b4f5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,7 +12,7 @@ jobs: strategy: matrix: - go-version: [1.19.x] + go-version: [1.22.x] services: postgres: @@ -58,5 +58,4 @@ jobs: path: ${{ env.GOPATH }}/src/github.com/${{ github.repository }} - name: Execute Tests run: | # we run driver and rest tests at the same time - go get -d -t ./... make test diff --git a/.github/workflows/golangci-lint.yml b/.github/workflows/golangci-lint.yml index ec6748e..0627e15 100644 --- a/.github/workflows/golangci-lint.yml +++ b/.github/workflows/golangci-lint.yml @@ -18,7 +18,4 @@ jobs: - name: golangci-lint uses: golangci/golangci-lint-action@v2 with: - version: v1.52.1 - - # Optional: if set to true then the action will use pre-installed Go. - skip-go-installation: true + version: v1.61.0 diff --git a/go.mod b/go.mod index e760d5f..89a214c 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/mattermost/morph -go 1.19 +go 1.22 require ( github.com/dave/jennifer v1.4.1 diff --git a/go.sum b/go.sum index 13c8b1c..d4ba782 100644 --- a/go.sum +++ b/go.sum @@ -127,6 +127,7 @@ github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0= +github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= @@ -360,7 +361,9 @@ modernc.org/sqlite v1.18.0/go.mod h1:B9fRWZacNxJBHoCJZQr1R54zhVn3fjfl0aszflrTSxY modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= modernc.org/tcl v1.13.1 h1:npxzTwFTZYM8ghWicVIX1cRWzj7Nd8i6AqqX2p+IYao= +modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= +modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=