Documentation
¶
Overview ¶
Package run starts and tracks running Encore applications.
Index ¶
- Constants
- func AsErrorList(err error) *errlist.List
- func CallAPI(ctx context.Context, run *Run, p *ApiCallParams) (map[string]any, error)
- func DebugModeFromProto(d daemonpb.RunRequest_DebugMode) builder.DebugMode
- func GenID() string
- func IgnoreEvents(events []watcher.Event) bool
- type ApiCallParams
- type BrowserMode
- type CheckParams
- type EventListener
- type ExecCommandParams
- type ExecScriptParams
- type GatewayConfig
- type Manager
- func (mgr *Manager) AddListener(ln EventListener)
- func (m *Manager) CanDeleteNamespace(ctx context.Context, app *apps.Instance, ns *namespace.Namespace) error
- func (mgr *Manager) Check(ctx context.Context, p CheckParams) (buildDir string, err error)
- func (m *Manager) DeleteNamespace(ctx context.Context, app *apps.Instance, ns *namespace.Namespace) error
- func (mgr *Manager) ExecCommand(ctx context.Context, p ExecCommandParams) (err error)
- func (mgr *Manager) ExecScript(ctx context.Context, p ExecScriptParams) (err error)
- func (mgr *Manager) FindProc(procID string) *ProcGroup
- func (mgr *Manager) FindRunByAppID(appID string) *Run
- func (mgr *Manager) ListRuns() []*Run
- func (mgr *Manager) RunError(r *Run, err *errlist.List)
- func (mgr *Manager) RunStderr(r *Run, out []byte)
- func (mgr *Manager) RunStdout(r *Run, out []byte)
- func (mgr *Manager) Start(ctx context.Context, params StartParams) (run *Run, err error)
- func (mgr *Manager) Test(ctx context.Context, params TestParams) (err error)
- func (mgr *Manager) TestSpec(ctx context.Context, params TestSpecParams) (*TestSpecResponse, error)
- type Proc
- type ProcConfig
- type ProcGroup
- func (pg *ProcGroup) Close()
- func (pg *ProcGroup) Done() <-chan struct{}
- func (pg *ProcGroup) Kill()
- func (pg *ProcGroup) NewAllInOneProc(spec builder.Cmd, listenAddr netip.AddrPort, env []string) error
- func (pg *ProcGroup) NewProcForGateway(gatewayName string, listenAddr netip.AddrPort, spec builder.Cmd, env []string) error
- func (pg *ProcGroup) NewProcForService(serviceName string, listenAddr netip.AddrPort, spec builder.Cmd, env []string) error
- func (pg *ProcGroup) ProxyReq(w http.ResponseWriter, req *http.Request)
- func (pg *ProcGroup) Start() (err error)
- func (pg *ProcGroup) SymTable(ctx context.Context) (*sym.Table, error)
- func (pg *ProcGroup) Warnings() (rtn []warning)
- type Run
- func (r *Run) Close()
- func (r *Run) Done() <-chan struct{}
- func (r *Run) ProcGroup() *ProcGroup
- func (r *Run) Reload() error
- func (r *Run) ServeHTTP(w http.ResponseWriter, req *http.Request)
- func (r *Run) StartProcGroup(params *StartProcGroupParams) (p *ProcGroup, err error)
- func (r *Run) StoreProc(p *ProcGroup)
- type RunLogger
- type RuntimeConfigGenerator
- func (g *RuntimeConfigGenerator) AllInOneProc() (*ProcConfig, error)
- func (g *RuntimeConfigGenerator) ForTests(newRuntimeConf bool) (envs []string, err error)
- func (g *RuntimeConfigGenerator) MissingSecrets() []string
- func (g *RuntimeConfigGenerator) ProcEnvs(proc *ProcConfig, useRuntimeConfigV2 bool) ([]string, error)
- func (g *RuntimeConfigGenerator) ProcPerService(proxy *svcproxy.SvcProxy) (services, gateways map[string]*ProcConfig, err error)
- func (g *RuntimeConfigGenerator) ProcPerServiceWithNewRuntimeConfig(proxy *svcproxy.SvcProxy) (conf *runtimev1.RuntimeConfig, services, gateways map[string]*ProcConfig, ...)
- type StartParams
- type StartProcGroupParams
- type TestParams
- type TestSpecParams
- type TestSpecResponse
Constants ¶
const TestHeaderDisablePlatformAuth = "X-Encore-Test-Disable-Platform-Auth"
Variables ¶
This section is empty.
Functions ¶
func AsErrorList ¶
func DebugModeFromProto ¶
func DebugModeFromProto(d daemonpb.RunRequest_DebugMode) builder.DebugMode
func GenID ¶
func GenID() string
GenID generates a random run/process id. It panics if it cannot get random bytes.
func IgnoreEvents ¶
IgnoreEvents will return true if _all_ events are on files that should be ignored as the do not impact the running app, or are the result of Encore itself generating code.
Types ¶
type ApiCallParams ¶
type BrowserMode ¶
type BrowserMode int
BrowserMode specifies how to open the browser when starting 'encore run'.
const ( BrowserModeAuto BrowserMode = iota // open if not already open BrowserModeNever // never open BrowserModeAlways // always open )
func BrowserModeFromConfig ¶
func BrowserModeFromConfig(cfg *userconfig.Config) BrowserMode
func BrowserModeFromProto ¶
func BrowserModeFromProto(b daemonpb.RunRequest_BrowserMode) BrowserMode
type CheckParams ¶
type CheckParams struct {
// App is the app to start.
App *apps.Instance
// WorkingDir is the working dir, for formatting
// error messages with relative paths.
WorkingDir string
// CodegenDebug, if true, specifies to keep the output
// around for codegen debugging purposes.
CodegenDebug bool
// Environ are the environment variables to set,
// in the same format as os.Environ().
Environ []string
// Tests specifies whether to parse and codegen for tests as well.
Tests bool
}
type EventListener ¶
type EventListener interface {
// OnStart is called when a run starts.
OnStart(r *Run)
// OnCompileStart is called when a run starts compiling.
OnCompileStart(r *Run)
// OnReload is called when a run reloads.
OnReload(r *Run)
// OnStop is called when a run stops.
OnStop(r *Run)
// OnStdout is called when a run outputs something on stdout.
OnStdout(r *Run, out []byte)
// OnStderr is called when a run outputs something on stderr.
OnStderr(r *Run, out []byte)
// OnError is called when a run encounters an error.
OnError(r *Run, err *errlist.List)
}
EventListener is the interface for listening to events about running apps.
type ExecCommandParams ¶
type ExecCommandParams struct {
// App is the app to execute the script for.
App *apps.Instance
// NS is the namespace to use.
NS *namespace.Namespace
// Command to execute
Command string
// ScriptArgs are the arguments to pass to the script binary.
ScriptArgs []string
// WorkingDir is the working dir to execute the script from.
// It's relative to the app root.
WorkingDir string
// Environ are the environment variables to set when running the tests,
// in the same format as os.Environ().
Environ []string
// Stdout and Stderr are where "go test" output should be written.
Stdout, Stderr io.Writer
OpTracker *optracker.OpTracker
}
ExecCommandParams groups the parameters for the ExecCommand method.
type ExecScriptParams ¶
type ExecScriptParams struct {
// App is the app to execute the script for.
App *apps.Instance
// NS is the namespace to use.
NS *namespace.Namespace
// MainPkg is the package path to the command to execute.
MainPkg paths.Pkg
// ScriptArgs are the arguments to pass to the script binary.
ScriptArgs []string
// WorkingDir is the working dir to execute the script from.
// It's relative to the app root.
WorkingDir string
// Environ are the environment variables to set when running the tests,
// in the same format as os.Environ().
Environ []string
// Stdout and Stderr are where "go test" output should be written.
Stdout, Stderr io.Writer
OpTracker *optracker.OpTracker
}
ExecScriptParams groups the parameters for the ExecScript method.
type GatewayConfig ¶
type Manager ¶
type Manager struct {
RuntimePort int // port for Encore runtime
DBProxyPort int // port for sqldb proxy
DashBaseURL string // base url for the dev dashboard
Secret *secret.Manager
ClusterMgr *sqldb.ClusterManager
ObjectsMgr *objects.ClusterManager
PublicBuckets *objects.PublicBucketServer
// contains filtered or unexported fields
}
Manager manages the set of running applications.
func (*Manager) AddListener ¶
func (mgr *Manager) AddListener(ln EventListener)
AddListener adds an event listener to mgr. It must be called before starting the first run.
func (*Manager) CanDeleteNamespace ¶
func (m *Manager) CanDeleteNamespace(ctx context.Context, app *apps.Instance, ns *namespace.Namespace) error
CanDeleteNamespace implements namespace.DeletionHandler.
func (*Manager) Check ¶
Check checks the app for errors. It reports a buildDir (if available) when codegenDebug is true.
func (*Manager) DeleteNamespace ¶
func (m *Manager) DeleteNamespace(ctx context.Context, app *apps.Instance, ns *namespace.Namespace) error
DeleteNamespace implements namespace.DeletionHandler.
func (*Manager) ExecCommand ¶
func (mgr *Manager) ExecCommand(ctx context.Context, p ExecCommandParams) (err error)
ExecCommand executes the script.
func (*Manager) ExecScript ¶
func (mgr *Manager) ExecScript(ctx context.Context, p ExecScriptParams) (err error)
ExecScript executes the script.
func (*Manager) FindProc ¶
FindProc finds the proc with the given id. It reports nil if no such proc was found.
func (*Manager) FindRunByAppID ¶
FindRunByAppID finds the run with the given app id. It reports nil if no such run was found.
func (*Manager) Test ¶
func (mgr *Manager) Test(ctx context.Context, params TestParams) (err error)
Test runs the tests.
func (*Manager) TestSpec ¶
func (mgr *Manager) TestSpec(ctx context.Context, params TestSpecParams) (*TestSpecResponse, error)
TestSpec returns how to run the tests.
type Proc ¶
type Proc struct {
// The following fields are only valid after Start() has been called.
Started atomic.Bool // whether the process has started
StartedAt time.Time // when the process started
Pid int // the OS process id
// contains filtered or unexported fields
}
Proc represents a single Encore process running within a ProcGroup.
func (*Proc) Close ¶
func (p *Proc) Close()
Close closes the process and waits for it to exit. It is safe to call Close multiple times.
func (*Proc) Kill ¶
func (p *Proc) Kill()
Kill causes the Process to exit immediately. Kill does not wait until the Process has actually exited. This only kills the Process itself, not any other processes it may have started.
type ProcConfig ¶
type ProcGroup ¶
type ProcGroup struct {
ID string // unique process id
Run *Run // the run the process belongs to
Meta *meta.Data // app metadata snapshot
Experiments *experiments.Set // enabled experiments
Gateways map[string]*Proc // the gateway processes, by name (if any)
Services map[string]*Proc // all the service processes by name
ConfigGen *RuntimeConfigGenerator // generates runtime configuration
// contains filtered or unexported fields
}
ProcGroup represents a running Encore application
It is a collection of Proc's that are all part of the same application, where each Proc represents a one or more services or an API gateway.
func (*ProcGroup) Close ¶
func (pg *ProcGroup) Close()
Close closes the process and waits for it to shutdown. It can safely be called multiple times.
func (*ProcGroup) Done ¶
func (pg *ProcGroup) Done() <-chan struct{}
Done returns a channel that is closed when all processes in the group have exited.
func (*ProcGroup) Kill ¶
func (pg *ProcGroup) Kill()
Kill kills all the processes in the group. It does not wait for them to exit.
func (*ProcGroup) NewAllInOneProc ¶
func (*ProcGroup) NewProcForGateway ¶
func (*ProcGroup) NewProcForService ¶
func (*ProcGroup) ProxyReq ¶
func (pg *ProcGroup) ProxyReq(w http.ResponseWriter, req *http.Request)
type Run ¶
type Run struct {
ID string // unique ID for this instance of the running app
App *apps.Instance
ListenAddr string // the address the app is listening on
SvcProxy *svcproxy.SvcProxy
ResourceManager *infra.ResourceManager
NS *namespace.Namespace
Builder builder.Impl
Mgr *Manager
Params *StartParams
// contains filtered or unexported fields
}
Run represents a running Encore application.
func (*Run) Done ¶
func (r *Run) Done() <-chan struct{}
Done returns a channel that is closed when the run is closed.
func (*Run) ProcGroup ¶
ProcGroup returns the current running process. It may have already exited. If the proc has not yet started it may return nil.
If run is nil then nil will be returned
func (*Run) Reload ¶
Reload rebuilds the app and, if successful, starts a new proc and switches over.
func (*Run) ServeHTTP ¶
func (r *Run) ServeHTTP(w http.ResponseWriter, req *http.Request)
ServeHTTP implements http.Handler by forwarding the request to the currently running process.
func (*Run) StartProcGroup ¶
func (r *Run) StartProcGroup(params *StartProcGroupParams) (p *ProcGroup, err error)
StartProcGroup starts a single actual OS process for app.
type RunLogger ¶
RunLogger is the interface for listening to run logs. The log methods are called for each logline on stdout and stderr respectively.
type RuntimeConfigGenerator ¶
type RuntimeConfigGenerator struct {
AppID option.Option[string]
EnvID option.Option[string]
EnvName option.Option[string]
EnvType option.Option[runtimev1.Environment_Type]
EnvCloud option.Option[runtimev1.Environment_Cloud]
TraceEndpoint option.Option[string]
DeployID option.Option[string]
Gateways map[string]GatewayConfig
AuthKey config.EncoreAuthKey
// Whether to include the metadata as an environment variable.
IncludeMetaEnv bool
// The values of defined secrets.
DefinedSecrets map[string]string
// The configs, per service.
SvcConfigs map[string]string
// contains filtered or unexported fields
}
func (*RuntimeConfigGenerator) AllInOneProc ¶
func (g *RuntimeConfigGenerator) AllInOneProc() (*ProcConfig, error)
func (*RuntimeConfigGenerator) ForTests ¶
func (g *RuntimeConfigGenerator) ForTests(newRuntimeConf bool) (envs []string, err error)
func (*RuntimeConfigGenerator) MissingSecrets ¶
func (g *RuntimeConfigGenerator) MissingSecrets() []string
func (*RuntimeConfigGenerator) ProcEnvs ¶
func (g *RuntimeConfigGenerator) ProcEnvs(proc *ProcConfig, useRuntimeConfigV2 bool) ([]string, error)
func (*RuntimeConfigGenerator) ProcPerService ¶
func (g *RuntimeConfigGenerator) ProcPerService(proxy *svcproxy.SvcProxy) (services, gateways map[string]*ProcConfig, err error)
func (*RuntimeConfigGenerator) ProcPerServiceWithNewRuntimeConfig ¶
func (g *RuntimeConfigGenerator) ProcPerServiceWithNewRuntimeConfig(proxy *svcproxy.SvcProxy) (conf *runtimev1.RuntimeConfig, services, gateways map[string]*ProcConfig, err error)
type StartParams ¶
type StartParams struct {
// App is the app to start.
App *apps.Instance
// NS is the namespace to use.
NS *namespace.Namespace
// WorkingDir is the working dir, for formatting
// error messages with relative paths.
WorkingDir string
// Watch enables watching for code changes for live reloading.
Watch bool
Listener net.Listener // listener to use
ListenAddr string // address we're listening on
// Environ are the environment variables to set for the running app,
// in the same format as os.Environ().
Environ []string
// The Ops tracker being used for this run
OpsTracker *optracker.OpTracker
// Browser specifies the browser mode to use.
Browser BrowserMode
// Debug specifies to compile the application for debugging.
Debug builder.DebugMode
}
StartParams groups the parameters for the Run method.
type StartProcGroupParams ¶
type TestParams ¶
type TestParams struct {
*TestSpecParams
// Stdout and Stderr are where "go test" output should be written.
Stdout, Stderr io.Writer
}
TestParams groups the parameters for the Test method.
type TestSpecParams ¶
type TestSpecParams struct {
// App is the app to test.
App *apps.Instance
// NS is the namespace to use.
NS *namespace.Namespace
// Secrets are the secrets to use.
Secrets *secret.LoadResult
// Args are the arguments to pass to the test command.
Args []string
// WorkingDir is the working dir, for formatting
// error messages with relative paths.
WorkingDir string
// Environ are the environment variables to set when running the tests,
// in the same format as os.Environ().
Environ []string
// CodegenDebug, if true, specifies to keep the output
// around for codegen debugging purposes.
CodegenDebug bool
}
TestSpecParams are the parameters for computing a test spec.