fix: link both storage version and migration (#4315) · cameronraysmith/supabase-cli@e83bb4c · GitHub
Skip to content

Commit e83bb4c

Browse files
authored
fix: link both storage version and migration (supabase#4315)
1 parent fcafbbc commit e83bb4c

5 files changed

Lines changed: 52 additions & 63 deletions

File tree

‎internal/link/link.go‎

Lines changed: 26 additions & 57 deletions

‎internal/link/link_test.go‎

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,11 @@ func TestLinkCommand(t *testing.T) {
113113
Get("/rest/v1/").
114114
Reply(200).
115115
JSON(rest)
116+
storage := "1.28.0"
117+
gock.New("https://" + utils.GetSupabaseHost(project)).
118+
Get("/storage/v1/version").
119+
Reply(200).
120+
BodyString(storage)
116121
// Run test
117122
err := Run(context.Background(), project, fsys, conn.Intercept)
118123
// Check error
@@ -128,6 +133,9 @@ func TestLinkCommand(t *testing.T) {
128133
authVersion, err := afero.ReadFile(fsys, utils.GotrueVersionPath)
129134
assert.NoError(t, err)
130135
assert.Equal(t, []byte(auth.Version), authVersion)
136+
storageVersion, err := afero.ReadFile(fsys, utils.StorageVersionPath)
137+
assert.NoError(t, err)
138+
assert.Equal(t, []byte("v"+storage), storageVersion)
131139
postgresVersion, err := afero.ReadFile(fsys, utils.PostgresVersionPath)
132140
assert.NoError(t, err)
133141
assert.Equal(t, []byte(mockPostgres.Database.Version), postgresVersion)
@@ -180,6 +188,9 @@ func TestLinkCommand(t *testing.T) {
180188
gock.New("https://" + utils.GetSupabaseHost(project)).
181189
Get("/rest/v1/").
182190
ReplyError(errors.New("network error"))
191+
gock.New("https://" + utils.GetSupabaseHost(project)).
192+
Get("/storage/v1/version").
193+
ReplyError(errors.New("network error"))
183194
// Run test
184195
err := Run(context.Background(), project, fsys, func(cc *pgx.ConnConfig) {
185196
cc.LookupFunc = func(ctx context.Context, host string) (addrs []string, err error) {
@@ -251,6 +262,9 @@ func TestLinkCommand(t *testing.T) {
251262
gock.New("https://" + utils.GetSupabaseHost(project)).
252263
Get("/rest/v1/").
253264
ReplyError(errors.New("network error"))
265+
gock.New("https://" + utils.GetSupabaseHost(project)).
266+
Get("/storage/v1/version").
267+
ReplyError(errors.New("network error"))
254268
gock.New(utils.DefaultApiHost).
255269
Get("/v1/projects").
256270
ReplyError(errors.New("network error"))
@@ -430,7 +444,7 @@ func TestLinkDatabase(t *testing.T) {
430444
err := linkDatabase(context.Background(), dbConfig, fsys, conn.Intercept)
431445
// Check error
432446
assert.NoError(t, err)
433-
version, err := afero.ReadFile(fsys, utils.StorageVersionPath)
447+
version, err := afero.ReadFile(fsys, utils.StorageMigrationPath)
434448
assert.NoError(t, err)
435449
assert.Equal(t, "custom-metadata", string(version))
436450
})
@@ -454,7 +468,7 @@ func TestLinkDatabase(t *testing.T) {
454468
// Check error
455469
assert.NoError(t, err)
456470
assert.Equal(t, uint(15), utils.Config.Db.MajorVersion)
457-
version, err := afero.ReadFile(fsys, utils.StorageVersionPath)
471+
version, err := afero.ReadFile(fsys, utils.StorageMigrationPath)
458472
assert.NoError(t, err)
459473
assert.Equal(t, "custom-metadata", string(version))
460474
})
@@ -479,7 +493,7 @@ func TestLinkDatabase(t *testing.T) {
479493
err := linkDatabase(context.Background(), dbConfig, fsys, conn.Intercept)
480494
// Check error
481495
assert.ErrorContains(t, err, "ERROR: permission denied for relation supabase_migrations (SQLSTATE 42501)")
482-
exists, err := afero.Exists(fsys, utils.StorageVersionPath)
496+
exists, err := afero.Exists(fsys, utils.StorageMigrationPath)
483497
assert.NoError(t, err)
484498
assert.False(t, exists)
485499
})

‎internal/utils/misc.go‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -69,6 +69,7 @@ var (
6969
GotrueVersionPath = filepath.Join(TempDir, "gotrue-version")
7070
RestVersionPath = filepath.Join(TempDir, "rest-version")
7171
StorageVersionPath = filepath.Join(TempDir, "storage-version")
72+
StorageMigrationPath = filepath.Join(TempDir, "storage-migration")
7273
StudioVersionPath = filepath.Join(TempDir, "studio-version")
7374
PgmetaVersionPath = filepath.Join(TempDir, "pgmeta-version")
7475
PoolerVersionPath = filepath.Join(TempDir, "pooler-version")

‎pkg/config/config.go‎

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -607,11 +607,14 @@ func (c *config) Load(path string, fsys fs.FS) error {
607607
}
608608
}
609609
if version, err := fs.ReadFile(fsys, builder.StorageVersionPath); err == nil && len(version) > 0 {
610-
// For backwards compatibility, exclude all strings that look like semver
611-
if v := strings.TrimSpace(string(version)); !semver.IsValid(v) {
612-
c.Storage.TargetMigration = v
610+
// Only replace image if local storage version is newer
611+
if i := strings.IndexByte(Images.Storage, ':'); VersionCompare(string(version), Images.Storage[i+1:]) > 0 {
612+
c.Storage.Image = replaceImageTag(Images.Storage, string(version))
613613
}
614614
}
615+
if version, err := fs.ReadFile(fsys, builder.StorageMigrationPath); err == nil && len(version) > 0 {
616+
c.Storage.TargetMigration = string(version)
617+
}
615618
if version, err := fs.ReadFile(fsys, builder.EdgeRuntimeVersionPath); err == nil && len(version) > 0 {
616619
c.EdgeRuntime.Image = replaceImageTag(Images.EdgeRuntime, string(version))
617620
}

‎pkg/config/utils.go‎

Lines changed: 2 additions & 0 deletions

0 commit comments

Comments
 (0)