github.com/supabase/cli@v1.168.1/internal/db/diff/migra.go (about) 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/supabase/cli/internal/utils" 13 ) 14 15 //go:embed templates/migra.sh 16 var diffSchemaScript string 17 18 // Diffs local database schema against shadow, dumps output to stdout. 19 func DiffSchemaMigra(ctx context.Context, source, target string, schema []string) (string, error) { 20 env := []string{"SOURCE=" + source, "TARGET=" + target} 21 // Passing in script string means command line args must be set manually, ie. "$@" 22 args := "set -- " + strings.Join(schema, " ") + ";" 23 cmd := []string{"/bin/sh", "-c", args + diffSchemaScript} 24 var out, stderr bytes.Buffer 25 if err := utils.DockerRunOnceWithConfig( 26 ctx, 27 container.Config{ 28 Image: utils.MigraImage, 29 Env: env, 30 Cmd: cmd, 31 }, 32 container.HostConfig{ 33 NetworkMode: container.NetworkMode("host"), 34 }, 35 network.NetworkingConfig{}, 36 "", 37 &out, 38 &stderr, 39 ); err != nil { 40 return "", errors.Errorf("error diffing schema: %w:\n%s", err, stderr.String()) 41 } 42 return out.String(), nil 43 }