buildr/internal/execution/container/provider.go

45 lines
1.1 KiB
Go
Raw Permalink Normal View History

2023-04-11 20:30:48 +00:00
package container
import (
"fmt"
"code.icb4dc0.de/buildr/buildr/modules/state"
"code.icb4dc0.de/buildr/buildr/internal/containers"
2023-04-11 20:30:48 +00:00
"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 {
2023-04-11 20:30:48 +00:00
return taskProvider{
orchestrator: orchestrator,
repo: repo,
stateStore: stateStore,
2023-04-11 20:30:48 +00:00
}
}
type taskProvider struct {
orchestrator *containers.Orchestrator
repo *modules.Repository
stateStore state.Store
2023-04-11 20:30:48 +00:00
}
func (taskProvider) CanProvide(m modules.ModuleWithMeta) bool {
return m.ContainerSpec() != nil
2023-04-11 20:30:48 +00:00
}
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())
2023-04-11 20:30:48 +00:00
} else {
return &containerTask{
moduleWithMeta: m,
orchestrator: p.orchestrator,
repo: p.repo,
stateStore: p.stateStore,
2023-04-11 20:30:48 +00:00
}, nil
}
}