Skip to content

Commit 1ddf2c5

Browse files
introduce new migration and refactor migrations resolution to be generic
1 parent e3eeaef commit 1ddf2c5

File tree

3 files changed

+70
-107
lines changed

3 files changed

+70
-107
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
-- +migrate Down
2+
DROP TABLE IF EXISTS backward_let;
3+
4+
-- +migrate Up
5+
CREATE TABLE
6+
backward_let (
7+
block_num INTEGER NOT NULL REFERENCES block (num) ON DELETE CASCADE,
8+
block_pos INTEGER NOT NULL,
9+
previous_deposit_count TEXT NOT NULL,
10+
previous_root VARCHAR NOT NULL,
11+
new_deposit_count TEXT NOT NULL,
12+
new_root VARCHAR NOT NULL,
13+
PRIMARY KEY (block_num, block_pos)
14+
);
Lines changed: 51 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,86 +1,70 @@
11
package migrations
22

33
import (
4-
_ "embed"
4+
"embed"
5+
"fmt"
6+
"sort"
7+
"strings"
58

69
"github.com/agglayer/aggkit/db"
710
"github.com/agglayer/aggkit/db/types"
8-
treeMigrations "github.com/agglayer/aggkit/tree/migrations"
11+
treemigrations "github.com/agglayer/aggkit/tree/migrations"
912
)
1013

11-
//go:embed bridgesync0001.sql
12-
var mig0001 string
14+
var (
15+
//go:embed *.sql
16+
migrationFS embed.FS
17+
migrations []types.Migration
18+
)
1319

14-
//go:embed bridgesync0002.sql
15-
var mig0002 string
20+
func init() {
21+
entries, err := migrationFS.ReadDir(".")
22+
if err != nil {
23+
panic(fmt.Errorf("failed to read embedded migrations: %w", err))
24+
}
1625

17-
//go:embed bridgesync0003.sql
18-
var mig0003 string
26+
for _, e := range entries {
27+
name := e.Name() // e.g. "bridgesync0004.sql"
1928

20-
//go:embed bridgesync0004.sql
21-
var mig0004 string
29+
sqlBytes, err := migrationFS.ReadFile(name)
30+
if err != nil {
31+
panic(err)
32+
}
2233

23-
//go:embed bridgesync0005.sql
24-
var mig0005 string
34+
id := strings.TrimSuffix(name, ".sql") // "bridgesync0004"
2535

26-
//go:embed bridgesync0006.sql
27-
var mig0006 string
36+
migrations = append(migrations, types.Migration{
37+
ID: id,
38+
SQL: string(sqlBytes),
39+
})
40+
}
2841

29-
//go:embed bridgesync0007.sql
30-
var mig0007 string
42+
// Ensure deterministic canonical order
43+
sort.Slice(migrations, func(i, j int) bool {
44+
return migrations[i].ID < migrations[j].ID
45+
})
46+
}
3147

32-
//go:embed bridgesync0008.sql
33-
var mig0008 string
48+
func RunMigrations(dbPath string) error {
49+
// Pre-calculate total length
50+
total := len(migrations) + len(treemigrations.Migrations)
3451

35-
//go:embed bridgesync0009.sql
36-
var mig0009 string
52+
combined := make([]types.Migration, 0, total)
53+
// Copy migrations
54+
combined = append(combined, migrations...)
55+
combined = append(combined, treemigrations.Migrations...)
3756

38-
//go:embed bridgesync0010.sql
39-
var mig0010 string
57+
// Pass the copy to db.RunMigrations
58+
return db.RunMigrations(dbPath, combined)
59+
}
4060

41-
func RunMigrations(dbPath string) error {
42-
migrations := []types.Migration{
43-
{
44-
ID: "bridgesync0001",
45-
SQL: mig0001,
46-
},
47-
{
48-
ID: "bridgesync0002",
49-
SQL: mig0002,
50-
},
51-
{
52-
ID: "bridgesync0003",
53-
SQL: mig0003,
54-
},
55-
{
56-
ID: "bridgesync0004",
57-
SQL: mig0004,
58-
},
59-
{
60-
ID: "bridgesync0005",
61-
SQL: mig0005,
62-
},
63-
{
64-
ID: "bridgesync0006",
65-
SQL: mig0006,
66-
},
67-
{
68-
ID: "bridgesync0007",
69-
SQL: mig0007,
70-
},
71-
{
72-
ID: "bridgesync0008",
73-
SQL: mig0008,
74-
},
75-
{
76-
ID: "bridgesync0009",
77-
SQL: mig0009,
78-
},
79-
{
80-
ID: "bridgesync0010",
81-
SQL: mig0010,
82-
},
83-
}
84-
migrations = append(migrations, treeMigrations.Migrations...)
85-
return db.RunMigrations(dbPath, migrations)
61+
// GetUpTo returns all migrations up to and including the migration with the given ID.
62+
func GetUpTo(lastID string) []types.Migration {
63+
idx := sort.Search(len(migrations), func(i int) bool {
64+
return migrations[i].ID > lastID
65+
})
66+
67+
out := make([]types.Migration, idx)
68+
copy(out, migrations[:idx])
69+
return out
8670
}

bridgesync/migrations/migrations_test.go

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"testing"
88

99
"github.com/agglayer/aggkit/db"
10-
"github.com/agglayer/aggkit/db/types"
1110
"github.com/agglayer/aggkit/log"
1211
"github.com/ethereum/go-ethereum/common"
1312
migrate "github.com/rubenv/sql-migrate"
@@ -266,23 +265,10 @@ func TestMigration0004(t *testing.T) {
266265
require.NoError(t, err)
267266
defer database.Close()
268267

269-
// Define migrations up to 0003
270-
migrations := []types.Migration{
271-
{
272-
ID: "bridgesync0001",
273-
SQL: mig0001,
274-
},
275-
{
276-
ID: "bridgesync0002",
277-
SQL: mig0002,
278-
},
279-
{
280-
ID: "bridgesync0003",
281-
SQL: mig0003,
282-
},
283-
}
268+
// Define migrations up to bridgesync0003
269+
migrations := GetUpTo("bridgesync0003")
284270

285-
// Run migrations up to 0003 (3 migrations)
271+
// Run migrations up to bridgesync0003 (3 migrations)
286272
err = db.RunMigrationsDBExtended(log.GetDefaultLogger(), database, migrations, migrate.Up, 3)
287273
require.NoError(t, err)
288274

@@ -458,29 +444,8 @@ func TestMigration0006(t *testing.T) {
458444
require.NoError(t, err)
459445
defer database.Close()
460446

461-
// Define migrations up to 0005
462-
migrations := []types.Migration{
463-
{
464-
ID: "bridgesync0001",
465-
SQL: mig0001,
466-
},
467-
{
468-
ID: "bridgesync0002",
469-
SQL: mig0002,
470-
},
471-
{
472-
ID: "bridgesync0003",
473-
SQL: mig0003,
474-
},
475-
{
476-
ID: "bridgesync0004",
477-
SQL: mig0004,
478-
},
479-
{
480-
ID: "bridgesync0005",
481-
SQL: mig0005,
482-
},
483-
}
447+
// Define migrations up to bridgesync0005
448+
migrations := GetUpTo("bridgesync0005")
484449

485450
// Run migrations up to 0005 (5 migrations)
486451
err = db.RunMigrationsDBExtended(log.GetDefaultLogger(), database, migrations, migrate.Up, 5)

0 commit comments

Comments
 (0)