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) { pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy