README
¶
Engine Design Doc
Engine is primarily a for
loop that takes inputs from a variety of sources, updates state, and makes a decision based off of that state. The rough shape of the for loop is as follows:
state := &state{}
for {
select {
// sources like local filesystem, kubernetes, ui, etc
case ev := <- fsCh:
e.handleFsEvent(ev)
case ev := <- k8sCh:
e.handleK8sEvent(ev)
}
// decide what to do: start a pipeline, stop a pipeline
actions := handle(state)
// tell subscribers what we took
updateSubscribers(actions, state.copy())
}
When state changes, and only when state changes, can we make decisions about what to do. Only after actions have been taken do we tell subscribers.
Rules
- No blocking I/O in the for loop
- No long operations in the for loop
- Actions taken in
handle
shouldn’t directly send to channels that thisfor
select
s on.
Documentation
¶
Index ¶
- Variables
- func NewErrorAction(err error) store.ErrorAction
- func ParseYAMLFromManifests(manifests ...model.Manifest) ([]k8s.K8sEntity, error)
- func ProvideSubscribers(hudsc *server.HeadsUpServerController, ...) []store.Subscriber
- func ProvideSubscribersAPIOnly(hudsc *server.HeadsUpServerController, ...) []store.Subscriber
- func SpanIDForBuildLog(buildCount int) logstore.SpanID
- type BuildController
- type BuildLogActionWriter
- type BuildOrder
- type CompositeBuildAndDeployer
- type FallbackTester
- type HudStoppedAction
- type InitAction
- type ManifestReloadedAction
- type PodWatcherMaker
- type ServiceWatcherMaker
- type TelemetryScriptRanAction
- type UIDUpdateAction
- type Upper
Constants ¶
This section is empty.
Variables ¶
var DeployerBaseWireSet = wire.NewSet(buildcontrol.BaseWireSet, wire.Value(UpperReducer), DefaultBuildOrder, wire.Bind(new(buildcontrol.BuildAndDeployer), new(*CompositeBuildAndDeployer)), NewCompositeBuildAndDeployer)
var DeployerWireSet = wire.NewSet(
DeployerBaseWireSet,
)
var DeployerWireSetTest = wire.NewSet(
DeployerBaseWireSet, wire.InterfaceValue(new(trace.SpanProcessor), (trace.SpanProcessor)(nil)),
)
var UpperReducer = store.Reducer(upperReducerFn)
Functions ¶
func NewErrorAction ¶
func NewErrorAction(err error) store.ErrorAction
func ParseYAMLFromManifests ¶
func ParseYAMLFromManifests(manifests ...model.Manifest) ([]k8s.K8sEntity, error)
func ProvideSubscribers ¶ added in v0.8.0
func ProvideSubscribers(
hudsc *server.HeadsUpServerController,
tscm *controllers.TiltServerControllerManager,
cb *controllers.ControllerBuilder,
hud hud.HeadsUpDisplay,
ts *hud.TerminalStream,
tp *prompt.TerminalPrompt,
kdms *k8swatch.ManifestSubscriber,
pw *k8swatch.PodWatcher,
sw *k8swatch.ServiceWatcher,
plm *runtimelog.PodLogManager,
pfs *portforward.Subscriber,
fsms *fswatch.ManifestSubscriber,
bc *BuildController,
cc *configs.ConfigsController,
dcw *dcwatch.EventWatcher,
dclm *runtimelog.DockerComposeLogManager,
ar *analytics.AnalyticsReporter,
au *analytics.AnalyticsUpdater,
ewm *k8swatch.EventWatchManager,
tcum *cloud.CloudStatusManager,
dp *dockerprune.DockerPruner,
tc *telemetry.Controller,
lsc *local.ServerController,
podm *k8srollout.PodMonitor,
sc *session.Controller,
mc *metrics.Controller,
pfr *apiportforward.Reconciler,
uss *uisession.Subscriber,
urs *uiresource.Subscriber,
) []store.Subscriber
func ProvideSubscribersAPIOnly ¶ added in v0.19.0
func ProvideSubscribersAPIOnly(
hudsc *server.HeadsUpServerController,
tscm *controllers.TiltServerControllerManager,
cb *controllers.ControllerBuilder,
ts *hud.TerminalStream,
) []store.Subscriber
Subscribers that only read from the new Tilt API, and run the API server.
func SpanIDForBuildLog ¶ added in v0.10.24
func SpanIDForBuildLog(buildCount int) logstore.SpanID
Types ¶
type BuildController ¶
type BuildController struct {
// contains filtered or unexported fields
}
func NewBuildController ¶
func NewBuildController(b buildcontrol.BuildAndDeployer) *BuildController
func (*BuildController) DisableForTesting ¶ added in v0.1.0
func (c *BuildController) DisableForTesting()
type BuildLogActionWriter ¶ added in v0.2.0
type BuildLogActionWriter struct {
// contains filtered or unexported fields
}
type BuildOrder ¶
type BuildOrder []buildcontrol.BuildAndDeployer
func DefaultBuildOrder ¶
func DefaultBuildOrder(lubad *buildcontrol.LiveUpdateBuildAndDeployer, ibad *buildcontrol.ImageBuildAndDeployer, dcbad *buildcontrol.DockerComposeBuildAndDeployer,
ltbad *buildcontrol.LocalTargetBuildAndDeployer, updMode buildcontrol.UpdateMode, env k8s.Env, runtime container.Runtime) BuildOrder
type CompositeBuildAndDeployer ¶
type CompositeBuildAndDeployer struct {
// contains filtered or unexported fields
}
CompositeBuildAndDeployer tries to run each builder in order. If a builder emits an error, it uses the FallbackTester to determine whether the error is critical enough to stop the whole pipeline, or to fallback to the next builder.
func NewCompositeBuildAndDeployer ¶
func NewCompositeBuildAndDeployer(builders BuildOrder, tracer trace.Tracer) *CompositeBuildAndDeployer
func (*CompositeBuildAndDeployer) BuildAndDeploy ¶
func (composite *CompositeBuildAndDeployer) BuildAndDeploy(ctx context.Context, st store.RStore, specs []model.TargetSpec, currentState store.BuildStateSet) (store.BuildResultSet, error)
type FallbackTester ¶
type FallbackTester func(error) bool
type HudStoppedAction ¶ added in v0.1.0
type HudStoppedAction struct {
// contains filtered or unexported fields
}
func NewHudStoppedAction ¶ added in v0.1.0
func NewHudStoppedAction(err error) HudStoppedAction
type InitAction ¶
type InitAction struct {
EngineMode store.EngineMode
TiltfilePath string
ConfigFiles []string
UserArgs []string
TiltBuild model.TiltBuild
StartTime time.Time
AnalyticsUserOpt analytics.Opt
CloudAddress string
Token token.Token
TerminalMode store.TerminalMode
}
type ManifestReloadedAction ¶
type ManifestReloadedAction struct {
OldManifest model.Manifest
NewManifest model.Manifest
Error error
}
type PodWatcherMaker ¶
type PodWatcherMaker func(context.Context, *store.Store) error
type ServiceWatcherMaker ¶
type ServiceWatcherMaker func(context.Context, *store.Store) error
type TelemetryScriptRanAction ¶ added in v0.10.25
type TelemetryScriptRanAction struct {
At time.Time
}
type UIDUpdateAction ¶ added in v0.8.9
type UIDUpdateAction struct {
UID types.UID
EventType watch.EventType
ManifestName model.ManifestName
Entity k8s.K8sEntity
}
type Upper ¶
type Upper struct {
// contains filtered or unexported fields
}
TODO(nick): maybe this should be called 'BuildEngine' or something? Upper seems like a poor and undescriptive name.
func NewUpper ¶
func NewUpper(ctx context.Context, st *store.Store, subs []store.Subscriber) (Upper, error)
Source Files
¶
Directories
¶
Path | Synopsis |
---|---|
Package analytics handles reporting of anonymized usage statistics about what features of Tilt are in use.
|
Package analytics handles reporting of anonymized usage statistics about what features of Tilt are in use. |
Package metrics handles reporting of identifable metrics about user code for personal and team consumption.
|
Package metrics handles reporting of identifable metrics about user code for personal and team consumption. |