From ca66e978b2112d503b0b80eebba0b5c6286ecc6b Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 30 Dec 2024 15:21:10 -0600 Subject: [PATCH 01/10] chore: do not run db migrations on all cli commands --- cli/server.go | 19 ++++++++++++++----- cli/server_createadminuser.go | 2 +- cli/server_test.go | 2 +- coderd/database/awsiamrds/awsiamrds_test.go | 2 +- enterprise/cli/server_dbcrypt.go | 6 +++--- 5 files changed, 20 insertions(+), 11 deletions(-) diff --git a/cli/server.go b/cli/server.go index ff8b2963e0eb4..d25d111e6910f 100644 --- a/cli/server.go +++ b/cli/server.go @@ -697,7 +697,7 @@ func (r *RootCmd) Server(newAPI func(context.Context, *coderd.Options) (*coderd. options.Database = dbmem.New() options.Pubsub = pubsub.NewInMemory() } else { - sqlDB, dbURL, err := getPostgresDB(ctx, logger, vals.PostgresURL.String(), codersdk.PostgresAuth(vals.PostgresAuth), sqlDriver) + sqlDB, dbURL, err := getAndMigratePostgresDB(ctx, logger, vals.PostgresURL.String(), codersdk.PostgresAuth(vals.PostgresAuth), sqlDriver) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } @@ -2090,7 +2090,12 @@ func IsLocalhost(host string) bool { return host == "localhost" || host == "127.0.0.1" || host == "::1" } -func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, dbURL string) (sqlDB *sql.DB, err error) { +// ConnectToPostgres takes a control flag "migrate". If true, `migrations.Up` will be applied +// to the database, potentially making schema changes. +// If set to false, no database changes will be applied, however the migration version +// will be checked. If the database is not fully up to date with its migrations, then +// an error will be returned. +func ConnectToPostgres(ctx context.Context, logger slog.Logger, migrate bool, driver string, dbURL string) (sqlDB *sql.DB, err error) { logger.Debug(ctx, "connecting to postgresql") // Try to connect for 30 seconds. @@ -2155,7 +2160,11 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, d } logger.Debug(ctx, "connected to postgresql", slog.F("version", versionNum)) - err = migrations.Up(sqlDB) + if migrate { + err = migrations.Up(sqlDB) + } else { + err = migrations.EnsureClean(sqlDB) + } if err != nil { return nil, xerrors.Errorf("migrate up: %w", err) } @@ -2561,7 +2570,7 @@ func signalNotifyContext(ctx context.Context, inv *serpent.Invocation, sig ...os return inv.SignalNotifyContext(ctx, sig...) } -func getPostgresDB(ctx context.Context, logger slog.Logger, postgresURL string, auth codersdk.PostgresAuth, sqlDriver string) (*sql.DB, string, error) { +func getAndMigratePostgresDB(ctx context.Context, logger slog.Logger, postgresURL string, auth codersdk.PostgresAuth, sqlDriver string) (*sql.DB, string, error) { dbURL, err := escapePostgresURLUserInfo(postgresURL) if err != nil { return nil, "", xerrors.Errorf("escaping postgres URL: %w", err) @@ -2574,7 +2583,7 @@ func getPostgresDB(ctx context.Context, logger slog.Logger, postgresURL string, } } - sqlDB, err := ConnectToPostgres(ctx, logger, sqlDriver, dbURL) + sqlDB, err := ConnectToPostgres(ctx, logger, true, sqlDriver, dbURL) if err != nil { return nil, "", xerrors.Errorf("connect to postgres: %w", err) } diff --git a/cli/server_createadminuser.go b/cli/server_createadminuser.go index 7ef95e7e093e6..3ea7537859e96 100644 --- a/cli/server_createadminuser.go +++ b/cli/server_createadminuser.go @@ -72,7 +72,7 @@ func (r *RootCmd) newCreateAdminUserCommand() *serpent.Command { } } - sqlDB, err := ConnectToPostgres(ctx, logger, sqlDriver, newUserDBURL) + sqlDB, err := ConnectToPostgres(ctx, logger, false, sqlDriver, newUserDBURL) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } diff --git a/cli/server_test.go b/cli/server_test.go index 9ba963d484548..9472d708860b5 100644 --- a/cli/server_test.go +++ b/cli/server_test.go @@ -1836,7 +1836,7 @@ func TestConnectToPostgres(t *testing.T) { dbURL, err := dbtestutil.Open(t) require.NoError(t, err) - sqlDB, err := cli.ConnectToPostgres(ctx, log, "postgres", dbURL) + sqlDB, err := cli.ConnectToPostgres(ctx, log, true, "postgres", dbURL) require.NoError(t, err) t.Cleanup(func() { _ = sqlDB.Close() diff --git a/coderd/database/awsiamrds/awsiamrds_test.go b/coderd/database/awsiamrds/awsiamrds_test.go index 844b85b119850..7a23c9a9486a4 100644 --- a/coderd/database/awsiamrds/awsiamrds_test.go +++ b/coderd/database/awsiamrds/awsiamrds_test.go @@ -32,7 +32,7 @@ func TestDriver(t *testing.T) { sqlDriver, err := awsiamrds.Register(ctx, "postgres") require.NoError(t, err) - db, err := cli.ConnectToPostgres(ctx, testutil.Logger(t), sqlDriver, url) + db, err := cli.ConnectToPostgres(ctx, testutil.Logger(t), true, sqlDriver, url) require.NoError(t, err) defer func() { _ = db.Close() diff --git a/enterprise/cli/server_dbcrypt.go b/enterprise/cli/server_dbcrypt.go index 148303f85402d..52ca47d8428de 100644 --- a/enterprise/cli/server_dbcrypt.go +++ b/enterprise/cli/server_dbcrypt.go @@ -98,7 +98,7 @@ func (*RootCmd) dbcryptRotateCmd() *serpent.Command { } } - sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, sqlDriver, flags.PostgresURL) + sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, false, sqlDriver, flags.PostgresURL) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } @@ -163,7 +163,7 @@ func (*RootCmd) dbcryptDecryptCmd() *serpent.Command { } } - sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, sqlDriver, flags.PostgresURL) + sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, false, sqlDriver, flags.PostgresURL) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } @@ -219,7 +219,7 @@ Are you sure you want to continue?` } } - sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, sqlDriver, flags.PostgresURL) + sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, false, sqlDriver, flags.PostgresURL) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } From 177d34105dacef21cd0b1b8e1b766fef1c0f7988 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 30 Dec 2024 15:33:35 -0600 Subject: [PATCH 02/10] reuse ConnectToPostgres --- cli/resetpassword.go | 42 ++++++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 12 deletions(-) diff --git a/cli/resetpassword.go b/cli/resetpassword.go index 2aacc8a6e6c44..1124e8cbc696b 100644 --- a/cli/resetpassword.go +++ b/cli/resetpassword.go @@ -3,22 +3,27 @@ package cli import ( - "database/sql" "fmt" "golang.org/x/xerrors" + "cdr.dev/slog" + "cdr.dev/slog/sloggers/sloghuman" + "github.com/coder/coder/v2/coderd/database/awsiamrds" + "github.com/coder/coder/v2/codersdk" "github.com/coder/pretty" "github.com/coder/serpent" "github.com/coder/coder/v2/cli/cliui" "github.com/coder/coder/v2/coderd/database" - "github.com/coder/coder/v2/coderd/database/migrations" "github.com/coder/coder/v2/coderd/userpassword" ) func (*RootCmd) resetPassword() *serpent.Command { - var postgresURL string + var ( + postgresURL string + postgresAuth string + ) root := &serpent.Command{ Use: "reset-password ", @@ -27,20 +32,25 @@ func (*RootCmd) resetPassword() *serpent.Command { Handler: func(inv *serpent.Invocation) error { username := inv.Args[0] - sqlDB, err := sql.Open("postgres", postgresURL) - if err != nil { - return xerrors.Errorf("dial postgres: %w", err) + logger := slog.Make(sloghuman.Sink(inv.Stdout)) + if ok, _ := inv.ParsedFlags().GetBool("verbose"); ok { + logger = logger.Leveled(slog.LevelDebug) } - defer sqlDB.Close() - err = sqlDB.Ping() - if err != nil { - return xerrors.Errorf("ping postgres: %w", err) + + sqlDriver := "postgres" + if codersdk.PostgresAuth(postgresAuth) == codersdk.PostgresAuthAWSIAMRDS { + var err error + sqlDriver, err = awsiamrds.Register(inv.Context(), sqlDriver) + if err != nil { + return xerrors.Errorf("register aws rds iam auth: %w", err) + } } - err = migrations.EnsureClean(sqlDB) + sqlDB, err := ConnectToPostgres(inv.Context(), logger, false, sqlDriver, postgresURL) if err != nil { - return xerrors.Errorf("database needs migration: %w", err) + return xerrors.Errorf("dial postgres: %w", err) } + db := database.New(sqlDB) user, err := db.GetUserByEmailOrUsername(inv.Context(), database.GetUserByEmailOrUsernameParams{ @@ -97,6 +107,14 @@ func (*RootCmd) resetPassword() *serpent.Command { Env: "CODER_PG_CONNECTION_URL", Value: serpent.StringOf(&postgresURL), }, + serpent.Option{ + Name: "Postgres Connection Auth", + Description: "Type of auth to use when connecting to postgres.", + Flag: "postgres-connection-auth", + Env: "CODER_PG_CONNECTION_AUTH", + Default: "password", + Value: serpent.EnumOf(&postgresAuth, codersdk.PostgresAuthDrivers...), + }, } return root From a943524fd9740376aa64d70e67d18d0bdb657d00 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 30 Dec 2024 15:35:19 -0600 Subject: [PATCH 03/10] linting --- cli/server.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cli/server.go b/cli/server.go index d25d111e6910f..c327d96b177a8 100644 --- a/cli/server.go +++ b/cli/server.go @@ -2095,6 +2095,7 @@ func IsLocalhost(host string) bool { // If set to false, no database changes will be applied, however the migration version // will be checked. If the database is not fully up to date with its migrations, then // an error will be returned. +// nolint:revive // 'migrate' is a control flag. func ConnectToPostgres(ctx context.Context, logger slog.Logger, migrate bool, driver string, dbURL string) (sqlDB *sql.DB, err error) { logger.Debug(ctx, "connecting to postgresql") From 4f61a81f124a131b664f0f01a7b92943780902d7 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 30 Dec 2024 16:03:47 -0600 Subject: [PATCH 04/10] make gen --- docs/reference/cli/reset-password.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/docs/reference/cli/reset-password.md b/docs/reference/cli/reset-password.md index 75e94821cdb31..8ebf26a3d1d76 100644 --- a/docs/reference/cli/reset-password.md +++ b/docs/reference/cli/reset-password.md @@ -19,3 +19,13 @@ coder reset-password [flags] | Environment | $CODER_PG_CONNECTION_URL | URL of a PostgreSQL database to connect to. + +### --postgres-connection-auth + +| | | +| ----------- | -------------------------------------- | +| Type | password\|awsiamrds | +| Environment | $CODER_PG_CONNECTION_AUTH | +| Default | password | + +Type of auth to use when connecting to postgres. From 1a068beb1b1fddf1a495f762bbc335e8320a5c7c Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 30 Dec 2024 16:05:33 -0600 Subject: [PATCH 05/10] update golden files --- cli/testdata/coder_reset-password_--help.golden | 3 +++ 1 file changed, 3 insertions(+) diff --git a/cli/testdata/coder_reset-password_--help.golden b/cli/testdata/coder_reset-password_--help.golden index a7d53df12ad90..ccefb412d8fb7 100644 --- a/cli/testdata/coder_reset-password_--help.golden +++ b/cli/testdata/coder_reset-password_--help.golden @@ -6,6 +6,9 @@ USAGE: Directly connect to the database to reset a user's password OPTIONS: + --postgres-connection-auth password|awsiamrds, $CODER_PG_CONNECTION_AUTH (default: password) + Type of auth to use when connecting to postgres. + --postgres-url string, $CODER_PG_CONNECTION_URL URL of a PostgreSQL database to connect to. From 424199365b708ede1bf64b3136ea37554802076a Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Mon, 30 Dec 2024 17:15:44 -0600 Subject: [PATCH 06/10] close pg --- cli/resetpassword.go | 1 + 1 file changed, 1 insertion(+) diff --git a/cli/resetpassword.go b/cli/resetpassword.go index 1124e8cbc696b..8d7268b026176 100644 --- a/cli/resetpassword.go +++ b/cli/resetpassword.go @@ -50,6 +50,7 @@ func (*RootCmd) resetPassword() *serpent.Command { if err != nil { return xerrors.Errorf("dial postgres: %w", err) } + defer sqlDB.Close() db := database.New(sqlDB) From 9c74819ea1f6a989265de52cd695d5f2a8893f0d Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 3 Jan 2025 08:51:14 -0600 Subject: [PATCH 07/10] chore: switch from control flag to migration func Add unit test for missing migration --- cli/resetpassword.go | 2 +- cli/server.go | 32 +++++++------ cli/server_createadminuser.go | 2 +- cli/server_test.go | 50 ++++++++++++++++----- coderd/database/awsiamrds/awsiamrds_test.go | 3 +- enterprise/cli/server_dbcrypt.go | 6 +-- 6 files changed, 66 insertions(+), 29 deletions(-) diff --git a/cli/resetpassword.go b/cli/resetpassword.go index 8d7268b026176..f77ed81d14db4 100644 --- a/cli/resetpassword.go +++ b/cli/resetpassword.go @@ -46,7 +46,7 @@ func (*RootCmd) resetPassword() *serpent.Command { } } - sqlDB, err := ConnectToPostgres(inv.Context(), logger, false, sqlDriver, postgresURL) + sqlDB, err := ConnectToPostgres(inv.Context(), logger, sqlDriver, postgresURL, nil) if err != nil { return xerrors.Errorf("dial postgres: %w", err) } diff --git a/cli/server.go b/cli/server.go index c327d96b177a8..9bb4cfb0a72f2 100644 --- a/cli/server.go +++ b/cli/server.go @@ -2090,15 +2090,18 @@ func IsLocalhost(host string) bool { return host == "localhost" || host == "127.0.0.1" || host == "::1" } -// ConnectToPostgres takes a control flag "migrate". If true, `migrations.Up` will be applied -// to the database, potentially making schema changes. -// If set to false, no database changes will be applied, however the migration version -// will be checked. If the database is not fully up to date with its migrations, then -// an error will be returned. -// nolint:revive // 'migrate' is a control flag. -func ConnectToPostgres(ctx context.Context, logger slog.Logger, migrate bool, driver string, dbURL string) (sqlDB *sql.DB, err error) { +// ConnectToPostgres takes in the migration command to run on the database once +// it connects. To avoid running migrations, pass in `nil` or a no-op function. +// Regardless of the passed in migration function, if the database is not fully +// migrated, an error will be returned. This can happen if the database is on a +// future or past migration version. +// +// If no error is returned, the database is fully migrated and up to date. +func ConnectToPostgres(ctx context.Context, logger slog.Logger, driver string, dbURL string, migrate func(db *sql.DB) error) (*sql.DB, error) { logger.Debug(ctx, "connecting to postgresql") + var err error + var sqlDB *sql.DB // Try to connect for 30 seconds. ctx, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() @@ -2161,13 +2164,16 @@ func ConnectToPostgres(ctx context.Context, logger slog.Logger, migrate bool, dr } logger.Debug(ctx, "connected to postgresql", slog.F("version", versionNum)) - if migrate { - err = migrations.Up(sqlDB) - } else { - err = migrations.EnsureClean(sqlDB) + if migrate != nil { + err = migrate(sqlDB) + if err != nil { + return nil, xerrors.Errorf("migrate up: %w", err) + } } + + err = migrations.EnsureClean(sqlDB) if err != nil { - return nil, xerrors.Errorf("migrate up: %w", err) + return nil, xerrors.Errorf("migrations in database: %w", err) } // The default is 0 but the request will fail with a 500 if the DB // cannot accept new connections, so we try to limit that here. @@ -2584,7 +2590,7 @@ func getAndMigratePostgresDB(ctx context.Context, logger slog.Logger, postgresUR } } - sqlDB, err := ConnectToPostgres(ctx, logger, true, sqlDriver, dbURL) + sqlDB, err := ConnectToPostgres(ctx, logger, sqlDriver, dbURL, migrations.Up) if err != nil { return nil, "", xerrors.Errorf("connect to postgres: %w", err) } diff --git a/cli/server_createadminuser.go b/cli/server_createadminuser.go index 3ea7537859e96..ed9c7b9bcc921 100644 --- a/cli/server_createadminuser.go +++ b/cli/server_createadminuser.go @@ -72,7 +72,7 @@ func (r *RootCmd) newCreateAdminUserCommand() *serpent.Command { } } - sqlDB, err := ConnectToPostgres(ctx, logger, false, sqlDriver, newUserDBURL) + sqlDB, err := ConnectToPostgres(ctx, logger, sqlDriver, newUserDBURL, nil) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } diff --git a/cli/server_test.go b/cli/server_test.go index 9472d708860b5..f299a4bf6aed9 100644 --- a/cli/server_test.go +++ b/cli/server_test.go @@ -38,11 +38,13 @@ import ( "tailscale.com/derp/derphttp" "tailscale.com/types/key" + "cdr.dev/slog/sloggers/slogtest" "github.com/coder/coder/v2/cli" "github.com/coder/coder/v2/cli/clitest" "github.com/coder/coder/v2/cli/config" "github.com/coder/coder/v2/coderd/coderdtest" "github.com/coder/coder/v2/coderd/database/dbtestutil" + "github.com/coder/coder/v2/coderd/database/migrations" "github.com/coder/coder/v2/coderd/httpapi" "github.com/coder/coder/v2/coderd/telemetry" "github.com/coder/coder/v2/codersdk" @@ -1828,20 +1830,48 @@ func TestConnectToPostgres(t *testing.T) { if !dbtestutil.WillUsePostgres() { t.Skip("this test does not make sense without postgres") } - ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) - t.Cleanup(cancel) - log := testutil.Logger(t) + t.Run("Migrate", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) + t.Cleanup(cancel) - dbURL, err := dbtestutil.Open(t) - require.NoError(t, err) + log := testutil.Logger(t) - sqlDB, err := cli.ConnectToPostgres(ctx, log, true, "postgres", dbURL) - require.NoError(t, err) - t.Cleanup(func() { - _ = sqlDB.Close() + dbURL, err := dbtestutil.Open(t) + require.NoError(t, err) + + sqlDB, err := cli.ConnectToPostgres(ctx, log, "postgres", dbURL, migrations.Up) + require.NoError(t, err) + t.Cleanup(func() { + _ = sqlDB.Close() + }) + require.NoError(t, sqlDB.PingContext(ctx)) }) - require.NoError(t, sqlDB.PingContext(ctx)) + + t.Run("NoMigrate", func(t *testing.T) { + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) + t.Cleanup(cancel) + + log := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}) + + dbURL, err := dbtestutil.Open(t) + require.NoError(t, err) + + okDB, err := cli.ConnectToPostgres(ctx, log, "postgres", dbURL, nil) + require.NoError(t, err) + defer okDB.Close() + + // Set the migration number forward + _, err = okDB.Exec(`UPDATE schema_migrations SET version = version + 1`) + require.NoError(t, err) + + _, err = cli.ConnectToPostgres(ctx, log, "postgres", dbURL, nil) + require.Error(t, err) + require.ErrorContains(t, err, "database needs migration") + + require.NoError(t, okDB.PingContext(ctx)) + }) + } func TestServer_InvalidDERP(t *testing.T) { diff --git a/coderd/database/awsiamrds/awsiamrds_test.go b/coderd/database/awsiamrds/awsiamrds_test.go index 7a23c9a9486a4..d52da4aab7bfe 100644 --- a/coderd/database/awsiamrds/awsiamrds_test.go +++ b/coderd/database/awsiamrds/awsiamrds_test.go @@ -9,6 +9,7 @@ import ( "github.com/coder/coder/v2/cli" "github.com/coder/coder/v2/coderd/database/awsiamrds" + "github.com/coder/coder/v2/coderd/database/migrations" "github.com/coder/coder/v2/coderd/database/pubsub" "github.com/coder/coder/v2/testutil" ) @@ -32,7 +33,7 @@ func TestDriver(t *testing.T) { sqlDriver, err := awsiamrds.Register(ctx, "postgres") require.NoError(t, err) - db, err := cli.ConnectToPostgres(ctx, testutil.Logger(t), true, sqlDriver, url) + db, err := cli.ConnectToPostgres(ctx, testutil.Logger(t), sqlDriver, url, migrations.Up) require.NoError(t, err) defer func() { _ = db.Close() diff --git a/enterprise/cli/server_dbcrypt.go b/enterprise/cli/server_dbcrypt.go index 52ca47d8428de..72ac6cc6e82b0 100644 --- a/enterprise/cli/server_dbcrypt.go +++ b/enterprise/cli/server_dbcrypt.go @@ -98,7 +98,7 @@ func (*RootCmd) dbcryptRotateCmd() *serpent.Command { } } - sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, false, sqlDriver, flags.PostgresURL) + sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, sqlDriver, flags.PostgresURL, nil) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } @@ -163,7 +163,7 @@ func (*RootCmd) dbcryptDecryptCmd() *serpent.Command { } } - sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, false, sqlDriver, flags.PostgresURL) + sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, sqlDriver, flags.PostgresURL, nil) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } @@ -219,7 +219,7 @@ Are you sure you want to continue?` } } - sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, false, sqlDriver, flags.PostgresURL) + sqlDB, err := cli.ConnectToPostgres(inv.Context(), logger, sqlDriver, flags.PostgresURL, nil) if err != nil { return xerrors.Errorf("connect to postgres: %w", err) } From 37d9f11ce1d0bc3a08ca6192673a4b50ca2dd334 Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 3 Jan 2025 09:56:22 -0600 Subject: [PATCH 08/10] make gen --- docs/reference/cli/reset-password.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/cli/reset-password.md b/docs/reference/cli/reset-password.md index 8ebf26a3d1d76..ada9ad7e7db3e 100644 --- a/docs/reference/cli/reset-password.md +++ b/docs/reference/cli/reset-password.md @@ -23,7 +23,7 @@ URL of a PostgreSQL database to connect to. ### --postgres-connection-auth | | | -| ----------- | -------------------------------------- | +|-------------|----------------------------------------| | Type | password\|awsiamrds | | Environment | $CODER_PG_CONNECTION_AUTH | | Default | password | From 93a04d9d8972b5e2deca4f5c99b218c05bed9c6d Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 3 Jan 2025 10:36:45 -0600 Subject: [PATCH 09/10] add test parallel --- cli/server_test.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/cli/server_test.go b/cli/server_test.go index f299a4bf6aed9..4a6fecf3ba8d7 100644 --- a/cli/server_test.go +++ b/cli/server_test.go @@ -1832,6 +1832,8 @@ func TestConnectToPostgres(t *testing.T) { } t.Run("Migrate", func(t *testing.T) { + t.Parallel() + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) t.Cleanup(cancel) @@ -1849,6 +1851,8 @@ func TestConnectToPostgres(t *testing.T) { }) t.Run("NoMigrate", func(t *testing.T) { + t.Parallel() + ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort) t.Cleanup(cancel) From f6f5a22bc3b99959b400b8acebc3ab940d9f79ce Mon Sep 17 00:00:00 2001 From: Steven Masley Date: Fri, 3 Jan 2025 10:37:05 -0600 Subject: [PATCH 10/10] clean up newline --- cli/server_test.go | 1 - 1 file changed, 1 deletion(-) diff --git a/cli/server_test.go b/cli/server_test.go index 4a6fecf3ba8d7..0dba63e7c2fe3 100644 --- a/cli/server_test.go +++ b/cli/server_test.go @@ -1875,7 +1875,6 @@ func TestConnectToPostgres(t *testing.T) { require.NoError(t, okDB.PingContext(ctx)) }) - } func TestServer_InvalidDERP(t *testing.T) {