This commit adds and passes context around to (almost) every function. This allows cancelling (almost) every function call globally.
46 lines
1.4 KiB
Go
46 lines
1.4 KiB
Go
package component
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/FAU-CDI/wisski-distillery/pkg/environment"
|
|
"github.com/tkw1536/goprogram/stream"
|
|
)
|
|
|
|
// Installable implements an installable component.
|
|
type Installable interface {
|
|
Component
|
|
|
|
// Path returns the path this component is installed at.
|
|
// By convention it is /var/www/deploy/internal/core/${Name()}
|
|
Path() string
|
|
|
|
// Stack can be used to gain access to the "docker compose" stack.
|
|
//
|
|
// This should internally call [ComponentBase.MakeStack]
|
|
Stack(env environment.Environment) StackWithResources
|
|
|
|
// Context returns a new InstallationContext to be used during installation from the command line.
|
|
// Typically this should just pass through the parent, but might perform other tasks.
|
|
Context(parent InstallationContext) InstallationContext
|
|
}
|
|
|
|
// MakeStack registers the Installable as a stack
|
|
func MakeStack(component Installable, env environment.Environment, stack StackWithResources) StackWithResources {
|
|
stack.Env = env
|
|
stack.Dir = component.Path()
|
|
return stack
|
|
}
|
|
|
|
// Updatable represents a component with an Update method.
|
|
type Updatable interface {
|
|
Component
|
|
|
|
// Update updates or initializes the provided components.
|
|
// It is called after the component has been installed (if applicable).
|
|
//
|
|
// It may send output to the provided stream.
|
|
//
|
|
// Updating should be idempotent, meaning running it multiple times must not break the existing system.
|
|
Update(ctx context.Context, stream stream.IOStream) error
|
|
}
|