on main help sign in
test: run migration setup once to avoid race condition
4b3dff3Andrey Nering
internal/db/connect.go+13−6
@@ -3,6 +3,7 @@ package db
3import (
3import (
4 "context"
4 "context"
5 "database/sql"
5 "database/sql"
6+ "embed"
6 "fmt"
7 "fmt"
7 "log/slog"
8 "log/slog"
8 "path/filepath"
9 "path/filepath"
@@ -21,6 +22,18 @@ var pragmas = map[string]string{
21 "busy_timeout": "30000",
22 "busy_timeout": "30000",
22}
23}
23
24
25+//go:embed migrations/*.sql
26+var FS embed.FS
27+
28+func init() {
29+ goose.SetBaseFS(FS)
30+
31+ if testing.Testing() {
32+ goose.SetLogger(goose.NopLogger())
33+ }
34+
35+}
36+
24// Connect opens a SQLite database connection and runs migrations.
37// Connect opens a SQLite database connection and runs migrations.
25func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
38func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
26 if dataDir == "" {
39 if dataDir == "" {
@@ -38,12 +51,6 @@ func Connect(ctx context.Context, dataDir string) (*sql.DB, error) {
38 return nil, fmt.Errorf("failed to connect to database: %w", err)
51 return nil, fmt.Errorf("failed to connect to database: %w", err)
39 }
52 }
40
53
41− goose.SetBaseFS(FS)
42−
43− if testing.Testing() {
44− goose.SetLogger(goose.NopLogger())
45− }
46−
47 if err := goose.SetDialect("sqlite3"); err != nil {
54 if err := goose.SetDialect("sqlite3"); err != nil {
48 slog.Error("Failed to set dialect", "error", err)
55 slog.Error("Failed to set dialect", "error", err)
49 return nil, fmt.Errorf("failed to set dialect: %w", err)
56 return nil, fmt.Errorf("failed to set dialect: %w", err)
internal/db/embed.godeleted−6
@@ -1,6 +0,0 @@
1−package db
2−
3−import "embed"
4−
5−//go:embed migrations/*.sql
6−var FS embed.FS