• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

supabase / cli / 16976524820

14 Aug 2025 08:57PM UTC coverage: 54.808% (-0.5%) from 55.271%
16976524820

Pull #3969

github

web-flow
Merge 419dd46ad into b3d509dd5
Pull Request #3969: feat: generate jwt tokens from signing key

11 of 13 new or added lines in 1 file covered. (84.62%)

391 existing lines in 14 files now uncovered.

6196 of 11305 relevant lines covered (54.81%)

6.09 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

53.33
/internal/db/diff/migra.go
1
package diff
2

3
import (
4
        "bytes"
5
        "context"
6
        _ "embed"
7
        "strings"
8

9
        "github.com/docker/docker/api/types/container"
10
        "github.com/docker/docker/api/types/network"
11
        "github.com/go-errors/errors"
12
        "github.com/spf13/viper"
13
        "github.com/supabase/cli/internal/utils"
14
        "github.com/supabase/cli/pkg/config"
15
)
16

17
var (
18
        //go:embed templates/migra.sh
19
        diffSchemaScript string
20
        //go:embed templates/migra.ts
21
        diffSchemaTypeScript string
22

23
        managedSchemas = []string{
24
                // Local development
25
                "_analytics",
26
                "_realtime",
27
                "_supavisor",
28
                // Owned by extensions
29
                "cron",
30
                "graphql",
31
                "graphql_public",
32
                "net",
33
                "pgroonga",
34
                "pgtle",
35
                "repack",
36
                "tiger_data",
37
                "vault",
38
                // Deprecated extensions
39
                "pgsodium",
40
                "pgsodium_masks",
41
                "timescaledb_experimental",
42
                "timescaledb_information",
43
                "_timescaledb_cache",
44
                "_timescaledb_catalog",
45
                "_timescaledb_config",
46
                "_timescaledb_debug",
47
                "_timescaledb_functions",
48
                "_timescaledb_internal",
49
                // Managed by Supabase
50
                "pgbouncer",
51
                "supabase_functions",
52
                "supabase_migrations",
53
        }
54
)
55

56
// Diffs local database schema against shadow, dumps output to stdout.
UNCOV
57
func DiffSchemaMigraBash(ctx context.Context, source, target string, schema []string) (string, error) {
×
UNCOV
58
        env := []string{"SOURCE=" + source, "TARGET=" + target}
×
UNCOV
59
        // Passing in script string means command line args must be set manually, ie. "$@"
×
UNCOV
60
        args := "set -- " + strings.Join(schema, " ") + ";"
×
UNCOV
61
        cmd := []string{"/bin/sh", "-c", args + diffSchemaScript}
×
UNCOV
62
        var out, stderr bytes.Buffer
×
UNCOV
63
        if err := utils.DockerRunOnceWithConfig(
×
UNCOV
64
                ctx,
×
UNCOV
65
                container.Config{
×
UNCOV
66
                        Image: config.Images.Migra,
×
UNCOV
67
                        Env:   env,
×
UNCOV
68
                        Cmd:   cmd,
×
UNCOV
69
                },
×
UNCOV
70
                container.HostConfig{
×
UNCOV
71
                        NetworkMode: network.NetworkHost,
×
UNCOV
72
                },
×
UNCOV
73
                network.NetworkingConfig{},
×
UNCOV
74
                "",
×
UNCOV
75
                &out,
×
UNCOV
76
                &stderr,
×
UNCOV
77
        ); err != nil {
×
UNCOV
78
                return "", errors.Errorf("error diffing schema: %w:\n%s", err, stderr.String())
×
UNCOV
79
        }
×
UNCOV
80
        return out.String(), nil
×
81
}
82

83
func DiffSchemaMigra(ctx context.Context, source, target string, schema []string) (string, error) {
2✔
84
        env := []string{"SOURCE=" + source, "TARGET=" + target}
2✔
85
        if len(schema) > 0 {
4✔
86
                env = append(env, "INCLUDED_SCHEMAS="+strings.Join(schema, ","))
2✔
87
        } else {
2✔
UNCOV
88
                env = append(env, "EXCLUDED_SCHEMAS="+strings.Join(managedSchemas, ","))
×
UNCOV
89
        }
×
90
        cmd := []string{"edge-runtime", "start", "--main-service=."}
2✔
91
        if viper.GetBool("DEBUG") {
2✔
UNCOV
92
                cmd = append(cmd, "--verbose")
×
UNCOV
93
        }
×
94
        cmdString := strings.Join(cmd, " ")
2✔
95
        entrypoint := []string{"sh", "-c", `cat <<'EOF' > index.ts && ` + cmdString + `
2✔
96
` + diffSchemaTypeScript + `
2✔
97
EOF
2✔
98
`}
2✔
99
        var out, stderr bytes.Buffer
2✔
100
        if err := utils.DockerRunOnceWithConfig(
2✔
101
                ctx,
2✔
102
                container.Config{
2✔
103
                        Image:      utils.Config.EdgeRuntime.Image,
2✔
104
                        Env:        env,
2✔
105
                        Entrypoint: entrypoint,
2✔
106
                },
2✔
107
                container.HostConfig{
2✔
108
                        Binds:       []string{utils.EdgeRuntimeId + ":/root/.cache/deno:rw"},
2✔
109
                        NetworkMode: network.NetworkHost,
2✔
110
                },
2✔
111
                network.NetworkingConfig{},
2✔
112
                "",
2✔
113
                &out,
2✔
114
                &stderr,
2✔
115
        ); err != nil && !strings.HasPrefix(stderr.String(), "main worker has been destroyed") {
3✔
116
                return "", errors.Errorf("error diffing schema: %w:\n%s", err, stderr.String())
1✔
117
        }
1✔
118
        return out.String(), nil
1✔
119
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc