Skip to content

Commit dab487d

Browse files
authored
fix: include storage version in services command (#4568)
2 parents c4baba6 + ffcff0e commit dab487d

File tree

4 files changed

+55
-49
lines changed

4 files changed

+55
-49
lines changed

internal/services/services.go

Lines changed: 42 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,13 @@ import (
55
"fmt"
66
"os"
77
"strings"
8-
"sync"
98

109
"github.com/go-errors/errors"
1110
"github.com/spf13/afero"
12-
"github.com/spf13/viper"
1311
"github.com/supabase/cli/internal/utils"
1412
"github.com/supabase/cli/internal/utils/flags"
1513
"github.com/supabase/cli/internal/utils/tenant"
14+
"github.com/supabase/cli/pkg/queue"
1615
)
1716

1817
func Run(ctx context.Context, fsys afero.Fs) error {
@@ -77,39 +76,53 @@ func CheckVersions(ctx context.Context, fsys afero.Fs) []imageVersion {
7776
}
7877

7978
func listRemoteImages(ctx context.Context, projectRef string) map[string]string {
80-
linked := make(map[string]string, 4)
81-
var wg sync.WaitGroup
82-
wg.Add(1)
83-
go func() {
84-
defer wg.Done()
85-
if version, err := tenant.GetDatabaseVersion(ctx, projectRef); err == nil {
86-
linked[utils.Config.Db.Image] = version
87-
}
88-
}()
79+
linked := map[string]string{}
8980
keys, err := tenant.GetApiKeys(ctx, projectRef)
9081
if err != nil {
91-
wg.Wait()
9282
return linked
9383
}
84+
jq := queue.NewJobQueue(5)
9485
api := tenant.NewTenantAPI(ctx, projectRef, keys.ServiceRole)
95-
wg.Add(2)
96-
go func() {
97-
defer wg.Done()
98-
if version, err := api.GetGotrueVersion(ctx); err == nil {
99-
linked[utils.Config.Auth.Image] = version
100-
} else if viper.GetBool("DEBUG") {
101-
fmt.Fprintln(os.Stderr, err)
102-
}
103-
}()
104-
go func() {
105-
defer wg.Done()
106-
if version, err := api.GetPostgrestVersion(ctx); err == nil {
107-
linked[utils.Config.Api.Image] = version
108-
} else if viper.GetBool("DEBUG") {
109-
fmt.Fprintln(os.Stderr, err)
86+
jobs := []func() error{
87+
func() error {
88+
version, err := tenant.GetDatabaseVersion(ctx, projectRef)
89+
if err == nil {
90+
linked[utils.Config.Db.Image] = version
91+
}
92+
return nil
93+
},
94+
func() error {
95+
version, err := api.GetGotrueVersion(ctx)
96+
if err == nil {
97+
linked[utils.Config.Auth.Image] = version
98+
}
99+
return nil
100+
},
101+
func() error {
102+
version, err := api.GetPostgrestVersion(ctx)
103+
if err == nil {
104+
linked[utils.Config.Api.Image] = version
105+
}
106+
return nil
107+
},
108+
func() error {
109+
version, err := api.GetStorageVersion(ctx)
110+
if err == nil {
111+
linked[utils.Config.Storage.Image] = version
112+
}
113+
return err
114+
},
115+
}
116+
// Ignore non-fatal errors linking services
117+
logger := utils.GetDebugLogger()
118+
for _, job := range jobs {
119+
if err := jq.Put(job); err != nil {
120+
fmt.Fprintln(logger, err)
110121
}
111-
}()
112-
wg.Wait()
122+
}
123+
if err := jq.Collect(); err != nil {
124+
fmt.Fprintln(logger, err)
125+
}
113126
return linked
114127
}
115128

internal/utils/tenant/database.go

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,17 +10,15 @@ import (
1010
var errDatabaseVersion = errors.New("Database version not found.")
1111

1212
func GetDatabaseVersion(ctx context.Context, projectRef string) (string, error) {
13-
resp, err := utils.GetSupabase().V1ListAllProjectsWithResponse(ctx)
13+
resp, err := utils.GetSupabase().V1GetProjectWithResponse(ctx, projectRef)
1414
if err != nil {
15-
return "", errors.Errorf("failed to retrieve projects: %w", err)
15+
return "", errors.Errorf("failed to retrieve project: %w", err)
1616
}
1717
if resp.JSON200 == nil {
18-
return "", errors.New("Unexpected error retrieving projects: " + string(resp.Body))
18+
return "", errors.Errorf("unexpected retrieve project status %d: %s", resp.StatusCode(), string(resp.Body))
1919
}
20-
for _, project := range *resp.JSON200 {
21-
if project.Id == projectRef && len(project.Database.Version) > 0 {
22-
return project.Database.Version, nil
23-
}
20+
if len(resp.JSON200.Database.Version) > 0 {
21+
return resp.JSON200.Database.Version, nil
2422
}
2523
return "", errors.New(errDatabaseVersion)
2624
}

internal/utils/tenant/database_test.go

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ func TestGetDatabaseVersion(t *testing.T) {
2222
mockPostgres := api.V1ProjectWithDatabaseResponse{Id: projectRef}
2323
mockPostgres.Database.Version = "14.1.0.99"
2424
gock.New(utils.DefaultApiHost).
25-
Get("/v1/projects").
25+
Get("/v1/projects/" + projectRef).
2626
Reply(http.StatusOK).
27-
JSON([]api.V1ProjectWithDatabaseResponse{mockPostgres})
27+
JSON(mockPostgres)
2828

2929
version, err := GetDatabaseVersion(context.Background(), projectRef)
3030

@@ -39,16 +39,13 @@ func TestGetDatabaseVersion(t *testing.T) {
3939

4040
defer gock.OffAll()
4141
projectRef := apitest.RandomProjectRef()
42-
mockPostgres := api.V1ProjectWithDatabaseResponse{Id: "different-project"}
43-
mockPostgres.Database.Version = "14.1.0.99"
4442
gock.New(utils.DefaultApiHost).
45-
Get("/v1/projects").
46-
Reply(http.StatusOK).
47-
JSON([]api.V1ProjectWithDatabaseResponse{mockPostgres})
43+
Get("/v1/projects/" + projectRef).
44+
Reply(http.StatusNotFound)
4845

4946
version, err := GetDatabaseVersion(context.Background(), projectRef)
5047

51-
assert.ErrorIs(t, err, errDatabaseVersion)
48+
assert.ErrorContains(t, err, "unexpected retrieve project status 404:")
5249
assert.Empty(t, version)
5350
assert.Empty(t, apitest.ListUnmatchedRequests())
5451
})
@@ -60,11 +57,9 @@ func TestGetDatabaseVersion(t *testing.T) {
6057
defer gock.OffAll()
6158
projectRef := apitest.RandomProjectRef()
6259
gock.New(utils.DefaultApiHost).
63-
Get("/v1/projects").
60+
Get("/v1/projects/" + projectRef).
6461
Reply(http.StatusOK).
65-
JSON([]api.V1ProjectWithDatabaseResponse{{
66-
Id: projectRef,
67-
}})
62+
JSON(api.V1ProjectWithDatabaseResponse{Id: projectRef})
6863

6964
version, err := GetDatabaseVersion(context.Background(), projectRef)
7065

pkg/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -629,7 +629,7 @@ func (c *config) Load(path string, fsys fs.FS, overrides ...ConfigEditor) error
629629
}
630630
if version, err := fs.ReadFile(fsys, builder.StorageVersionPath); err == nil && len(version) > 0 {
631631
// Only replace image if local storage version is newer
632-
if i := strings.IndexByte(Images.Storage, ':'); semver.Compare(string(version), Images.Storage[i+1:]) > 0 {
632+
if i := strings.IndexByte(Images.Storage, ':'); semver.Compare(strings.TrimSpace(string(version)), Images.Storage[i+1:]) > 0 {
633633
c.Storage.Image = replaceImageTag(Images.Storage, string(version))
634634
}
635635
}

0 commit comments

Comments
 (0)