buildr/internal/execution/container/provider.go
Peter fee941a0e4
feat(state): introduce SQLite based state store
Allow modules to keep a state of their latest execution and skp if not necessary
2023-05-02 18:44:47 +02:00

45 lines
1.1 KiB
Go

package container
import (
"fmt"
"code.icb4dc0.de/buildr/buildr/modules/state"
"code.icb4dc0.de/buildr/buildr/internal/containers"
"code.icb4dc0.de/buildr/buildr/internal/execution"
"code.icb4dc0.de/buildr/buildr/modules"
)
var _ execution.TaskProvider = (*taskProvider)(nil)
func Provider(orchestrator *containers.Orchestrator, repo *modules.Repository, stateStore state.Store) execution.TaskProvider {
return taskProvider{
orchestrator: orchestrator,
repo: repo,
stateStore: stateStore,
}
}
type taskProvider struct {
orchestrator *containers.Orchestrator
repo *modules.Repository
stateStore state.Store
}
func (taskProvider) CanProvide(m modules.ModuleWithMeta) bool {
return m.ContainerSpec() != nil
}
func (p taskProvider) Create(m modules.ModuleWithMeta) (execution.Task, error) {
if m.ContainerSpec() == nil {
return nil, fmt.Errorf("module %v doesn't have a container spec - should be handled differently", m.Name())
} else {
return &containerTask{
moduleWithMeta: m,
orchestrator: p.orchestrator,
repo: p.repo,
stateStore: p.stateStore,
}, nil
}
}