Documentation ¶
Index ¶
- Constants
- Variables
- func AbsImportMapPath(importMapPath, slug string, fsys afero.Fs) (string, error)
- func Aqua(str string) string
- func AssertDockerIsRunning(ctx context.Context) error
- func AssertProjectRefIsValid(projectRef string) error
- func AssertSupabaseCliIsSetUpFS(fsys afero.Fs) error
- func AssertSupabaseDbIsRunning() error
- func Bold(str string) string
- func ConnectByUrl(ctx context.Context, url string, options ...func(*pgx.ConnConfig)) (*pgx.Conn, error)
- func ConnectLocalPostgres(ctx context.Context, config pgconn.Config, options ...func(*pgx.ConnConfig)) (*pgx.Conn, error)
- func ConnectRemotePostgres(ctx context.Context, config pgconn.Config, options ...func(*pgx.ConnConfig)) (*pgx.Conn, error)
- func DockerAddFile(ctx context.Context, container string, fileName string, content []byte) error
- func DockerExec(ctx context.Context, container string, cmd []string) (io.Reader, error)
- func DockerExecOnce(ctx context.Context, container string, env []string, cmd []string) (string, error)
- func DockerExecOnceWithStream(ctx context.Context, container, workdir string, env, cmd []string, ...) error
- func DockerImagePull(ctx context.Context, image string, w io.Writer) error
- func DockerImagePullWithRetry(ctx context.Context, image string, retries int) error
- func DockerNetworkCreateIfNotExists(ctx context.Context, networkId string) error
- func DockerPullImageIfNotCached(ctx context.Context, imageName string) error
- func DockerRemove(containerId string)
- func DockerRemoveAll(ctx context.Context)
- func DockerRunOnce(ctx context.Context, image string, env []string, cmd []string) (string, error)
- func DockerRunOnceWithConfig(ctx context.Context, config container.Config, hostConfig container.HostConfig, ...) error
- func DockerRunOnceWithStream(ctx context.Context, image string, env, cmd []string, stdout, stderr io.Writer) error
- func DockerStart(ctx context.Context, config container.Config, hostConfig container.HostConfig, ...) (string, error)
- func DockerStreamLogs(ctx context.Context, container string, stdout, stderr io.Writer) error
- func EncodeOutput(format string, w io.Writer, value any) error
- func FallbackLookupIP(ctx context.Context, host string) ([]string, error)
- func FormatTimestamp(timestamp string) string
- func GetCurrentBranchFS(fsys afero.Fs) (string, error)
- func GetCurrentTimestamp() string
- func GetDenoPath() (string, error)
- func GetId(name string) string
- func GetPathHash(path string) string
- func GetProjectRoot(fsys afero.Fs) (string, error)
- func GetRegistryAuth() string
- func GetRegistryImageUrl(imageName string) string
- func GetSupabase() *supabase.ClientWithResponses
- func GetSupabaseAPIHost() string
- func GetSupabaseDashboardURL() string
- func GetSupabaseDbHost(projectRef string) string
- func GetSupabaseHost(projectRef string) string
- func InitConfig(projectId string, fsys afero.Fs) error
- func InstallOrUpgradeDeno(ctx context.Context, fsys afero.Fs) error
- func IsBranchNameReserved(branch string) bool
- func IsGitRepo() bool
- func LoadAccessToken() (string, error)
- func LoadAccessTokenFS(fsys afero.Fs) (string, error)
- func LoadConfigFS(fsys afero.Fs) error
- func LoadProjectRef(fsys afero.Fs) (string, error)
- func MkdirIfNotExist(path string) error
- func MkdirIfNotExistFS(fsys afero.Fs, path string) error
- func NewDocker() *client.Client
- func NewError(s string) error
- func ProcessDiffOutput(diffBytes []byte) ([]byte, error)
- func ProcessDiffProgress(p Program, out io.Reader) error
- func ProcessPsqlOutput(out io.Reader, p Program) error
- func ProcessPullOutput(out io.ReadCloser, p Program) error
- func PromptYesNo(label string, def bool, stdin *os.File) bool
- func Red(str string) string
- func ResolveCNAME(ctx context.Context, host string) (string, error)
- func RunProgram(ctx context.Context, f func(p Program, ctx context.Context) error) error
- func SaveAccessToken(accessToken string, fsys afero.Fs) error
- func ShortContainerImageName(imageName string) string
- func SliceContains[T comparable](s []T, e T) bool
- func SliceEqual[T comparable](a, b []T) bool
- func ToPostgresURL(config pgconn.Config) string
- func ValidateFunctionSlug(slug string) error
- func WaitAll(containers []string, exec func(container string) error) []error
- func WithTraceContext(ctx context.Context) context.Context
- func WriteConfig(fsys afero.Fs, _test bool) error
- func WriteFile(path string, contents []byte, fsys afero.Fs) error
- func Yellow(str string) string
- type AddressFamily
- type DenoScriptDir
- type DialContextFunc
- type DiffDependencies
- type DiffEntry
- type DiffStream
- type EnumFlag
- type ImportMap
- type LogflareBackend
- type PoolMode
- type Program
- type ProgressMsg
- type PromptItem
- type PsqlMsg
- type StatusMsg
- type StatusWriter
Constants ¶
const ( DNS_GO_NATIVE = "native" DNS_OVER_HTTPS = "https" )
const ( DefaultApiHost = "https://api.supabase.com" // DEPRECATED DeprecatedApiHost = "https://api.supabase.io" )
const ( DockerDenoDir = "/home/deno" DockerModsDir = DockerDenoDir + "/modules" )
const ( Pg13Image = "supabase/postgres:13.3.0" Pg14Image = "supabase/postgres:14.1.0.89" Pg15Image = "supabase/postgres:15.1.0.117" // Append to ServiceImages when adding new dependencies below KongImage = "library/kong:2.8.1" InbucketImage = "inbucket/inbucket:3.0.3" PostgrestImage = "postgrest/postgrest:v11.2.0" DifferImage = "supabase/pgadmin-schema-diff:cli-0.0.5" MigraImage = "djrobstep/migra:3.0.1621480950" PgmetaImage = "supabase/postgres-meta:v0.68.0" StudioImage = "supabase/studio:20230921-d657f29" ImageProxyImage = "darthsim/imgproxy:v3.8.0" EdgeRuntimeImage = "supabase/edge-runtime:v1.20.2" VectorImage = "timberio/vector:0.28.1-alpine" PgbouncerImage = "bitnami/pgbouncer:1.20.1-debian-11-r39" GotrueImage = "supabase/gotrue:v2.92.1" RealtimeImage = "supabase/realtime:v2.10.1" StorageImage = "supabase/storage-api:v0.40.4" LogflareImage = "supabase/logflare:1.4.0" // Should be kept in-sync with EdgeRuntimeImage DenoVersion = "1.30.3" )
const ( OutputEnv = "env" OutputJson = "json" OutputPretty = "pretty" OutputToml = "toml" OutputYaml = "yaml" // OutputMetadata is used with certain SSO commands only. OutputMetadata = "metadata" )
const AccessTokenKey = "access-token"
const ( // https://dba.stackexchange.com/a/11895 // Args: dbname TerminateDbSqlFmt = `` /* 244-byte string literal not displayed */ )
Variables ¶
var ( AccessTokenPattern = regexp.MustCompile(`^sbp_[a-f0-9]{40}$`) ErrInvalidToken = errors.New("Invalid access token format. Must be like `sbp_0102...1920`.") ErrMissingToken = errors.New("Access token not provided. Supply an access token by running " + Aqua("supabase login") + " or setting the SUPABASE_ACCESS_TOKEN environment variable.") )
var ( NetId string DbId string ConfigId string KongId string GotrueId string InbucketId string RealtimeId string RestId string StorageId string ImgProxyId string DifferId string PgmetaId string StudioId string EdgeRuntimeId string LogflareId string VectorId string PoolerId string DbAliases = []string{"db", "db.supabase.internal"} KongAliases = []string{"kong", "api.supabase.internal"} GotrueAliases = []string{"auth"} InbucketAliases = []string{"inbucket"} RealtimeAliases = []string{"realtime"} RestAliases = []string{"rest"} StorageAliases = []string{"storage"} ImgProxyAliases = []string{"imgproxy"} PgmetaAliases = []string{"pg_meta"} StudioAliases = []string{"studio"} EdgeRuntimeAliases = []string{"edge_runtime"} LogflareAliases = []string{"analytics"} VectorAliases = []string{"vector"} PoolerAliases = []string{"pooler"} InitialSchemaSql string //go:embed templates/initial_schemas/13.sql InitialSchemaPg13Sql string //go:embed templates/initial_schemas/14.sql InitialSchemaPg14Sql string )
var ( Containers []string Volumes []string )
Used by unit tests NOTE: There's a risk of data race with reads & writes from `DockerRun` and reads from `DockerRemoveAll`, but since they're expected to be run on the same thread, this is fine.
var ( CmdSuggestion string // pg_dumpall --globals-only --no-role-passwords --dbname $DB_URL \ // | sed '/^CREATE ROLE postgres;/d' \ // | sed '/^ALTER ROLE postgres WITH /d' \ // | sed "/^ALTER ROLE .* WITH .* LOGIN /s/;$/ PASSWORD 'postgres';/" //go:embed templates/globals.sql GlobalsSql string ProjectRefPattern = regexp.MustCompile(`^[a-z]{20}$`) UUIDPattern = regexp.MustCompile(`^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$`) ProjectHostPattern = regexp.MustCompile(`^(db\.)[a-z]{20}\.supabase\.(co|red)$`) MigrateFilePattern = regexp.MustCompile(`^([0-9]+)_(.*)\.sql$`) BranchNamePattern = regexp.MustCompile(`[[:word:]-]+`) FuncSlugPattern = regexp.MustCompile(`^[A-Za-z][A-Za-z0-9_-]*$`) ImageNamePattern = regexp.MustCompile(`\/(.*):`) // These schemas are ignored from db diff and db dump SystemSchemas = []string{ "information_schema", "pg_*", "cron", "graphql", "graphql_public", "net", "pgsodium", "pgsodium_masks", "pgtle", "repack", "tiger", "tiger_data", "timescaledb_*", "_timescaledb_*", "topology", "vault", } InternalSchemas = append([]string{ "auth", "extensions", "pgbouncer", "realtime", "_realtime", "storage", "_analytics", "supabase_functions", "supabase_migrations", }, SystemSchemas...) ReservedRoles = []string{ "anon", "authenticated", "authenticator", "dashboard_user", "pgbouncer", "postgres", "service_role", "supabase_admin", "supabase_auth_admin", "supabase_functions_admin", "supabase_read_only_user", "supabase_replication_admin", "supabase_storage_admin", "pgsodium_keyholder", "pgsodium_keyiduser", "pgsodium_keymaker", "pgtle_admin", } AllowedConfigs = []string{ "pgaudit.*", "pgrst.*", "session_replication_role", "statement_timeout", "track_io_timing", } SupabaseDirPath = "supabase" ConfigPath = filepath.Join(SupabaseDirPath, "config.toml") GitIgnorePath = filepath.Join(SupabaseDirPath, ".gitignore") TempDir = ".temp" ImportMapsDir = filepath.Join(SupabaseDirPath, TempDir, "import_maps") ProjectRefPath = filepath.Join(SupabaseDirPath, TempDir, "project-ref") RemoteDbPath = filepath.Join(SupabaseDirPath, TempDir, "remote-db-url") PostgresVersionPath = filepath.Join(SupabaseDirPath, TempDir, "postgres-version") GotrueVersionPath = filepath.Join(SupabaseDirPath, TempDir, "gotrue-version") RestVersionPath = filepath.Join(SupabaseDirPath, TempDir, "rest-version") CurrBranchPath = filepath.Join(SupabaseDirPath, ".branches", "_current_branch") MigrationsDir = filepath.Join(SupabaseDirPath, "migrations") FunctionsDir = filepath.Join(SupabaseDirPath, "functions") FallbackImportMapPath = filepath.Join(FunctionsDir, "import_map.json") FallbackEnvFilePath = filepath.Join(FunctionsDir, ".env") DbTestsDir = filepath.Join(SupabaseDirPath, "tests") SeedDataPath = filepath.Join(SupabaseDirPath, "seed.sql") CustomRolesPath = filepath.Join(SupabaseDirPath, "roles.sql") ErrNotLinked = errors.New("Cannot find project ref. Have you run " + Aqua("supabase link") + "?") ErrInvalidRef = errors.New("Invalid project ref format. Must be like `abcdefghijklmnopqrst`.") ErrNotRunning = errors.New(Aqua("supabase start") + " is not running.") )
var Config = config{ Api: api{ Image: PostgrestImage, }, Db: db{ Image: Pg15Image, Password: "postgres", }, Realtime: realtime{ IpVersion: AddressIPv6, }, Auth: auth{ Image: GotrueImage, Email: email{ Template: map[string]emailTemplate{ "invite": {}, "confirmation": {}, "recovery": {}, "magic_link": {}, "email_change": {}, }, }, External: map[string]provider{ "apple": {}, "azure": {}, "bitbucket": {}, "discord": {}, "facebook": {}, "github": {}, "gitlab": {}, "google": {}, "keycloak": {}, "linkedin": {}, "notion": {}, "twitch": {}, "twitter": {}, "slack": {}, "spotify": {}, "workos": {}, "zoom": {}, }, JwtExpiry: 3600, JwtSecret: "super-secret-jwt-token-with-at-least-32-characters-long", AnonKey: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6ImFub24iLCJleHAiOjE5ODM4MTI5OTZ9.CRXP1A7WOeoJeXxjNni43kdQwgnWNReilDMblYTn_I0", ServiceRoleKey: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZS1kZW1vIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImV4cCI6MTk4MzgxMjk5Nn0.EGIM96RAZx35lJzdJsyH-qQwv8Hdp7fsn3W0YpN81IU", }, Analytics: analytics{ ApiKey: "api-key", Backend: LogflareBigQuery, }, }
var ( DNSResolver = EnumFlag{ Allowed: []string{DNS_GO_NATIVE, DNS_OVER_HTTPS}, Value: DNS_GO_NATIVE, } )
var ( // Used by unit tests DenoPathOverride string )
var Docker = NewDocker()
var FlyRegions = map[string]string{
"ams": "Amsterdam, Netherlands",
"arn": "Stockholm, Sweden",
"bog": "Bogotá, Colombia",
"bos": "Boston, Massachusetts (US)",
"cdg": "Paris, France",
"den": "Denver, Colorado (US)",
"dfw": "Dallas, Texas (US",
"ewr": "Secaucus, NJ (US)",
"fra": "Frankfurt, Germany",
"gdl": "Guadalajara, Mexico",
"gig": "Rio de Janeiro, Brazil",
"gru": "Sao Paulo, Brazil",
"hkg": "Hong Kong, Hong Kong",
"iad": "Ashburn, Virginia (US",
"jnb": "Johannesburg, South Africa",
"lax": "Los Angeles, California (US",
"lhr": "London, United Kingdom",
"maa": "Chennai (Madras), India",
"mad": "Madrid, Spain",
"mia": "Miami, Florida (US)",
"nrt": "Tokyo, Japan",
"ord": "Chicago, Illinois (US",
"otp": "Bucharest, Romania",
"qro": "Querétaro, Mexico",
"scl": "Santiago, Chile",
"sea": "Seattle, Washington (US",
"sin": "Singapore, Singapore",
"sjc": "San Jose, California (US",
"syd": "Sydney, Australia",
"waw": "Warsaw, Poland",
"yul": "Montreal, Canada",
"yyz": "Toronto, Canada",
}
var ( OutputDefaultAllowed = []string{ OutputPretty, OutputJson, OutputToml, OutputYaml, } )
var RegionMap = map[string]string{
"ap-northeast-1": "Northeast Asia (Tokyo)",
"ap-northeast-2": "Northeast Asia (Seoul)",
"ap-south-1": "South Asia (Mumbai)",
"ap-southeast-1": "Southeast Asia (Singapore)",
"ap-southeast-2": "Oceania (Sydney)",
"ca-central-1": "Canada (Central)",
"eu-central-1": "Central EU (Frankfurt)",
"eu-west-1": "West EU (Ireland)",
"eu-west-2": "West EU (London)",
"eu-west-3": "West EU (Paris)",
"sa-east-1": "South America (São Paulo)",
"us-east-1": "East US (North Virginia)",
"us-west-1": "West US (North California)",
"us-west-2": "West US (Oregon)",
}
var ServiceImages = []string{ GotrueImage, RealtimeImage, StorageImage, ImageProxyImage, KongImage, InbucketImage, PostgrestImage, DifferImage, MigraImage, PgmetaImage, StudioImage, EdgeRuntimeImage, LogflareImage, VectorImage, PgbouncerImage, }
var Version string
Version is assigned using `-ldflags` https://stackoverflow.com/q/11354518.
Functions ¶
func AbsImportMapPath ¶ added in v1.59.0
func AssertDockerIsRunning ¶
func AssertProjectRefIsValid ¶ added in v1.58.0
func AssertSupabaseCliIsSetUpFS ¶ added in v0.32.0
func AssertSupabaseDbIsRunning ¶ added in v0.33.1
func AssertSupabaseDbIsRunning() error
func ConnectByUrl ¶ added in v1.28.0
func ConnectLocalPostgres ¶ added in v1.17.4
func ConnectLocalPostgres(ctx context.Context, config pgconn.Config, options ...func(*pgx.ConnConfig)) (*pgx.Conn, error)
Connnect to local Postgres with optimised settings. The caller is responsible for closing the connection returned.
func ConnectRemotePostgres ¶ added in v1.17.4
func ConnectRemotePostgres(ctx context.Context, config pgconn.Config, options ...func(*pgx.ConnConfig)) (*pgx.Conn, error)
Connnect to remote Postgres with optimised settings. The caller is responsible for closing the connection returned.
func DockerAddFile ¶ added in v0.28.2
func DockerExec ¶
func DockerExecOnce ¶ added in v0.37.0
func DockerExecOnce(ctx context.Context, container string, env []string, cmd []string) (string, error)
Exec a command once inside a container, returning stdout and throwing error on non-zero exit code.
func DockerExecOnceWithStream ¶ added in v1.50.13
func DockerImagePull ¶ added in v1.26.9
func DockerImagePullWithRetry ¶ added in v1.5.2
func DockerNetworkCreateIfNotExists ¶ added in v1.16.0
func DockerPullImageIfNotCached ¶ added in v0.37.0
func DockerRemove ¶ added in v1.27.1
func DockerRemove(containerId string)
func DockerRemoveAll ¶
func DockerRunOnce ¶ added in v0.37.0
Runs a container image exactly once, returning stdout and throwing error on non-zero exit code.
func DockerRunOnceWithConfig ¶ added in v1.41.4
func DockerRunOnceWithStream ¶ added in v1.27.2
func DockerStart ¶ added in v1.11.2
func DockerStreamLogs ¶ added in v1.49.0
func FallbackLookupIP ¶ added in v1.41.0
Performs DNS lookup via HTTPS, in case firewall blocks native netgo resolver.
func FormatTimestamp ¶ added in v1.79.0
func GetCurrentTimestamp ¶
func GetCurrentTimestamp() string
func GetDenoPath ¶ added in v1.4.7
func GetPathHash ¶ added in v1.53.0
func GetProjectRoot ¶ added in v1.8.2
If the `os.Getwd()` is within a supabase project, this will return the root of the given project as the current working directory. Otherwise, the `os.Getwd()` is kept as is.
func GetRegistryAuth ¶ added in v1.16.2
func GetRegistryAuth() string
func GetRegistryImageUrl ¶ added in v1.0.1
func GetSupabase ¶ added in v0.38.5
func GetSupabase() *supabase.ClientWithResponses
func GetSupabaseAPIHost ¶ added in v0.31.1
func GetSupabaseAPIHost() string
func GetSupabaseDashboardURL ¶ added in v0.31.1
func GetSupabaseDashboardURL() string
func GetSupabaseDbHost ¶ added in v1.4.10
func GetSupabaseHost ¶ added in v1.10.0
func InstallOrUpgradeDeno ¶ added in v0.19.0
func IsBranchNameReserved ¶ added in v0.13.0
func LoadAccessToken ¶ added in v0.20.0
func LoadConfigFS ¶ added in v0.32.0
func MkdirIfNotExist ¶ added in v0.19.0
func ProcessDiffOutput ¶ added in v0.9.0
func ProcessDiffProgress ¶ added in v1.27.2
func ProcessPullOutput ¶ added in v0.9.0
func ProcessPullOutput(out io.ReadCloser, p Program) error
func PromptYesNo ¶ added in v1.52.0
PromptYesNo asks yes/no questions using the label.
func ResolveCNAME ¶ added in v1.10.0
func RunProgram ¶ added in v1.27.2
func SaveAccessToken ¶ added in v1.50.15
func ShortContainerImageName ¶ added in v1.19.0
func SliceContains ¶ added in v1.87.0
func SliceContains[T comparable](s []T, e T) bool
func SliceEqual ¶ added in v1.87.0
func SliceEqual[T comparable](a, b []T) bool
func ToPostgresURL ¶ added in v1.42.0
func ValidateFunctionSlug ¶ added in v0.20.6
Types ¶
type AddressFamily ¶ added in v1.92.0
type AddressFamily string
const ( AddressIPv6 AddressFamily = "IPv6" AddressIPv4 AddressFamily = "IPv4" )
type DenoScriptDir ¶ added in v1.34.0
func CopyDenoScripts ¶ added in v1.34.0
Copy Deno scripts needed for function deploy and downloads, returning a DenoScriptDir struct or an error.
type DialContextFunc ¶ added in v1.41.1
type DiffDependencies ¶ added in v0.13.0
type DiffDependencies struct {
Type string `json:"type"`
}
type DiffStream ¶ added in v1.27.2
type DiffStream struct {
// contains filtered or unexported fields
}
func NewDiffStream ¶ added in v1.27.2
func NewDiffStream(p Program) *DiffStream
func (DiffStream) Collect ¶ added in v1.27.2
func (c DiffStream) Collect() ([]byte, error)
func (DiffStream) Stderr ¶ added in v1.27.2
func (c DiffStream) Stderr() io.Writer
func (DiffStream) Stdout ¶ added in v1.27.2
func (c DiffStream) Stdout() io.Writer
type EnumFlag ¶ added in v0.39.0
Ref: https://github.com/spf13/pflag/issues/236#issuecomment-931600452
type ImportMap ¶ added in v1.53.0
type ImportMap struct { Imports map[string]string `json:"imports"` Scopes map[string]map[string]string `json:"scopes"` }
func NewImportMap ¶ added in v1.53.0
func (*ImportMap) BindModules ¶ added in v1.53.0
type LogflareBackend ¶ added in v1.83.7
type LogflareBackend string
const ( LogflarePostgres LogflareBackend = "postgres" LogflareBigQuery LogflareBackend = "bigquery" )
type Program ¶ added in v0.17.1
An interface describing the parts of BubbleTea's Program that we actually use.
func NewProgram ¶ added in v0.17.1
func NewProgram(model tea.Model, opts ...tea.ProgramOption) Program
type ProgressMsg ¶ added in v0.9.0
type ProgressMsg *float64
type PromptItem ¶ added in v0.39.0
PromptItem is exposed as prompt input, empty summary + details will be excluded.
func PromptChoice ¶ added in v0.39.0
func PromptChoice(ctx context.Context, title string, items []PromptItem) (PromptItem, error)
Prompt user to choose from a list of items, returns the chosen index.
func (PromptItem) Description ¶ added in v0.39.0
func (i PromptItem) Description() string
func (PromptItem) FilterValue ¶ added in v0.39.0
func (i PromptItem) FilterValue() string
func (PromptItem) Title ¶ added in v0.39.0
func (i PromptItem) Title() string
type StatusWriter ¶ added in v1.28.0
type StatusWriter struct {
Program
}