Skip to content

Commit b948ec5

Browse files
committed
feat: allow Go migrations
1 parent 598c21d commit b948ec5

File tree

7 files changed

+23
-9
lines changed

7 files changed

+23
-9
lines changed

driver/factory.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"github.com/ory/x/configx"
1212
"github.com/ory/x/logrusx"
1313
"github.com/ory/x/otelx"
14+
"github.com/ory/x/popx"
1415
"github.com/ory/x/servicelocatorx"
1516
)
1617

@@ -24,6 +25,7 @@ type (
2425
skipNetworkInit bool
2526
tracerWrapper TracerWrapper
2627
extraMigrations []fs.FS
28+
goMigrations []popx.Migration
2729
}
2830
OptionsModifier func(*options)
2931

@@ -86,6 +88,12 @@ func WithExtraMigrations(m ...fs.FS) OptionsModifier {
8688
}
8789
}
8890

91+
func WithGoMigrations(m ...popx.Migration) OptionsModifier {
92+
return func(o *options) {
93+
o.goMigrations = append(o.goMigrations, m...)
94+
}
95+
}
96+
8997
func New(ctx context.Context, sl *servicelocatorx.Options, opts []OptionsModifier) (Registry, error) {
9098
o := newOptions()
9199
for _, f := range opts {
@@ -124,7 +132,7 @@ func New(ctx context.Context, sl *servicelocatorx.Options, opts []OptionsModifie
124132
r.WithTracerWrapper(o.tracerWrapper)
125133
}
126134

127-
if err = r.Init(ctx, o.skipNetworkInit, false, ctxter, o.extraMigrations); err != nil {
135+
if err = r.Init(ctx, o.skipNetworkInit, false, ctxter, o.extraMigrations, o.goMigrations); err != nil {
128136
l.WithError(err).Error("Unable to initialize service registry.")
129137
return nil, err
130138
}

driver/registry.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"go.opentelemetry.io/otel/trace"
1212

1313
"github.com/ory/x/httprouterx"
14+
"github.com/ory/x/popx"
1415

1516
"github.com/ory/hydra/v2/aead"
1617
"github.com/ory/hydra/v2/hsm"
@@ -45,7 +46,7 @@ import (
4546
type Registry interface {
4647
dbal.Driver
4748

48-
Init(ctx context.Context, skipNetworkInit bool, migrate bool, ctxer contextx.Contextualizer, extraMigrations []fs.FS) error
49+
Init(ctx context.Context, skipNetworkInit bool, migrate bool, ctxer contextx.Contextualizer, extraMigrations []fs.FS, goMigrations []popx.Migration) error
4950

5051
WithBuildInfo(v, h, d string) Registry
5152
WithConfig(c *config.DefaultProvider) Registry
@@ -90,7 +91,7 @@ func NewRegistryFromDSN(ctx context.Context, c *config.DefaultProvider, l *logru
9091
if err != nil {
9192
return nil, err
9293
}
93-
if err := registry.Init(ctx, skipNetworkInit, migrate, ctxer, nil); err != nil {
94+
if err := registry.Init(ctx, skipNetworkInit, migrate, ctxer, nil, nil); err != nil {
9495
return nil, err
9596
}
9697
return registry, nil

driver/registry_base_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ func TestRegistryBase_newKeyStrategy_handlesNetworkError(t *testing.T) {
6767
r := registry.(*RegistrySQL)
6868
r.initialPing = failedPing(errors.New("snizzles"))
6969

70-
_ = r.Init(context.Background(), true, false, &contextx.TestContextualizer{}, nil)
70+
_ = r.Init(context.Background(), true, false, &contextx.TestContextualizer{}, nil, nil)
7171

7272
registryBase := RegistryBase{r: r, l: l}
7373
registryBase.WithConfig(c)

driver/registry_sql.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"github.com/ory/x/dbal"
2525
"github.com/ory/x/errorsx"
2626
otelsql "github.com/ory/x/otelx/sql"
27+
"github.com/ory/x/popx"
2728
"github.com/ory/x/resilience"
2829
"github.com/ory/x/sqlcon"
2930
)
@@ -70,6 +71,7 @@ func (m *RegistrySQL) Init(
7071
migrate bool,
7172
ctxer contextx.Contextualizer,
7273
extraMigrations []fs.FS,
74+
goMigrations []popx.Migration,
7375
) error {
7476
if m.persister == nil {
7577
m.WithContextualizer(ctxer)
@@ -105,7 +107,7 @@ func (m *RegistrySQL) Init(
105107
return errorsx.WithStack(err)
106108
}
107109

108-
p, err := sql.NewPersister(ctx, c, m, m.Config(), extraMigrations)
110+
p, err := sql.NewPersister(ctx, c, m, m.Config(), extraMigrations, goMigrations)
109111
if err != nil {
110112
return err
111113
}

driver/registry_sql_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ func TestDefaultKeyManager_HsmDisabled(t *testing.T) {
3131
reg, err := NewRegistryWithoutInit(c, l)
3232
r := reg.(*RegistrySQL)
3333
r.initialPing = sussessfulPing()
34-
if err := r.Init(context.Background(), true, false, &contextx.Default{}, nil); err != nil {
34+
if err := r.Init(context.Background(), true, false, &contextx.Default{}, nil, nil); err != nil {
3535
t.Fatalf("unable to init registry: %s", err)
3636
}
3737
assert.NoError(t, err)

hsm/manager_hsm_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ func TestDefaultKeyManager_HSMEnabled(t *testing.T) {
5252
reg.WithLogger(l)
5353
reg.WithConfig(c)
5454
reg.WithHsmContext(mockHsmContext)
55-
err := reg.Init(context.Background(), false, true, &contextx.TestContextualizer{}, nil)
55+
err := reg.Init(context.Background(), false, true, &contextx.TestContextualizer{}, nil, nil)
5656
assert.NoError(t, err)
5757
assert.IsType(t, &jwk.ManagerStrategy{}, reg.KeyManager())
5858
assert.IsType(t, &sql.Persister{}, reg.SoftwareKeyManager())

persistence/sql/persister.go

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -105,8 +105,11 @@ func (p *Persister) Rollback(ctx context.Context) (err error) {
105105
return errorsx.WithStack(tx.TX.Rollback())
106106
}
107107

108-
func NewPersister(ctx context.Context, c *pop.Connection, r Dependencies, config *config.DefaultProvider, extraMigrations []fs.FS) (*Persister, error) {
109-
mb, err := popx.NewMigrationBox(fsx.Merge(append([]fs.FS{migrations}, extraMigrations...)...), popx.NewMigrator(c, r.Logger(), r.Tracer(ctx), 0))
108+
func NewPersister(ctx context.Context, c *pop.Connection, r Dependencies, config *config.DefaultProvider, extraMigrations []fs.FS, goMigrations []popx.Migration) (*Persister, error) {
109+
mb, err := popx.NewMigrationBox(
110+
fsx.Merge(append([]fs.FS{migrations}, extraMigrations...)...),
111+
popx.NewMigrator(c, r.Logger(), r.Tracer(ctx), 0),
112+
popx.WithGoMigrations(goMigrations))
110113
if err != nil {
111114
return nil, errorsx.WithStack(err)
112115
}

0 commit comments

Comments
 (0)