updateMigrationTracking connects to the running server's database and captures current migration state. Called after the server health check passes.
(ctx context.Context, _ slog.Logger, cfg *devConfig)
| 455 | // database and captures current migration state. Called after |
| 456 | // the server health check passes. |
| 457 | func updateMigrationTracking(ctx context.Context, _ slog.Logger, cfg *devConfig) error { |
| 458 | pgURL := os.Getenv("CODER_PG_CONNECTION_URL") |
| 459 | if pgURL == "" { |
| 460 | var err error |
| 461 | pgURL, err = builtinPostgresURL(cfg) |
| 462 | if err != nil { |
| 463 | return xerrors.Errorf("resolve builtin postgres URL: %w", err) |
| 464 | } |
| 465 | } |
| 466 | |
| 467 | db, err := connectDB(ctx, pgURL) |
| 468 | if err != nil { |
| 469 | return xerrors.Errorf("connect for tracking update: %w", err) |
| 470 | } |
| 471 | defer db.Close() |
| 472 | |
| 473 | if _, err := db.ExecContext(ctx, trackingDDL); err != nil { |
| 474 | return xerrors.Errorf("ensure tracking table: %w", err) |
| 475 | } |
| 476 | |
| 477 | dbVersion, _, err := currentMigrationVersion(ctx, db) |
| 478 | if err != nil { |
| 479 | return xerrors.Errorf("get db version: %w", err) |
| 480 | } |
| 481 | if dbVersion < 0 { |
| 482 | return nil |
| 483 | } |
| 484 | |
| 485 | migrDir := filepath.Join(cfg.projectRoot, "coderd", "database", "migrations") |
| 486 | return captureDownSQL(ctx, db, migrDir, dbVersion) |
| 487 | } |
| 488 | |
| 489 | func builtinPostgresURL(cfg *devConfig) (string, error) { |
| 490 | pgDir := filepath.Join(cfg.configDir, "postgres") |
no test coverage detected