mirror of
https://github.com/redhat-developer/odo.git
synced 2025-10-19 03:06:19 +03:00
* Document current implementations of command handlers * Add unit tests for execHAndler * Refactor pkg/devfile/image to inject Backend as dependency * Use same handler for kubedev/podmandev * Fail after SelectBackend==nil only if backend is needed * Move runHandler to dev/common * Unit tests for runHandler * Create a component.ExecuteTerminatingCommand * ExecuteTerminatingCommand/ExecuteNonTerminatingCommand for Handler * Fix calling other command types * Consider parent group to determine if a command is terminating * Replace component.execHandler by common.runHandler * Remove execHandler * Make runHandler and most of fields private and pass containersRunning to handler * Pass containersRunning value * deploy using common Handler * Fix tests * Use specific Dev/Deploy mode for Apply * Fix cmdline for job * Fix unit tests * Pass appName and componentName with ctx to handler * Move handler to pkg/component package * Update doc * Unit tests Deploy * Unit tests Build * Unit tests Run * Unit tests PostStart * Unit tests PreStop * Update doc * Fix Podman tests * Fix hotReload on podman * Change podman version timeout to 30s for tests * Cleanup + fix doc
75 lines
2.1 KiB
Go
75 lines
2.1 KiB
Go
package libdevfile
|
|
|
|
import (
|
|
"github.com/devfile/api/v2/pkg/apis/workspaces/v1alpha2"
|
|
"github.com/devfile/library/v2/pkg/devfile/parser"
|
|
parsercommon "github.com/devfile/library/v2/pkg/devfile/parser/data/v2/common"
|
|
)
|
|
|
|
// imageComponent implements the component interface
|
|
type imageComponent struct {
|
|
component v1alpha2.Component
|
|
devfileObj parser.DevfileObj
|
|
}
|
|
|
|
var _ component = (*imageComponent)(nil)
|
|
|
|
func newImageComponent(devfileObj parser.DevfileObj, component v1alpha2.Component) *imageComponent {
|
|
return &imageComponent{
|
|
component: component,
|
|
devfileObj: devfileObj,
|
|
}
|
|
}
|
|
|
|
func (e *imageComponent) CheckValidity() error {
|
|
return nil
|
|
}
|
|
|
|
func (e *imageComponent) Apply(handler Handler, kind v1alpha2.CommandGroupKind) error {
|
|
return handler.ApplyImage(e.component)
|
|
}
|
|
|
|
// GetImageComponentsToPushAutomatically returns the list of Image components that can be automatically created on startup.
|
|
// The list returned is governed by the AutoBuild field in each component.
|
|
// All components with AutoBuild set to true are included, along with those with no AutoBuild set and not-referenced.
|
|
func GetImageComponentsToPushAutomatically(devfileObj parser.DevfileObj) ([]v1alpha2.Component, error) {
|
|
imageComponents, err := devfileObj.Data.GetComponents(parsercommon.DevfileOptions{
|
|
ComponentOptions: parsercommon.ComponentOptions{ComponentType: v1alpha2.ImageComponentType},
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
allApplyCommands, err := devfileObj.Data.GetCommands(parsercommon.DevfileOptions{
|
|
CommandOptions: parsercommon.CommandOptions{CommandType: v1alpha2.ApplyCommandType},
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
m := make(map[string]v1alpha2.Component)
|
|
for _, comp := range imageComponents {
|
|
var add bool
|
|
if comp.Image.AutoBuild == nil {
|
|
// auto-created only if not referenced by any apply command
|
|
if !isComponentReferenced(allApplyCommands, comp.Name) {
|
|
add = true
|
|
}
|
|
} else if *comp.Image.AutoBuild {
|
|
add = true
|
|
}
|
|
if !add {
|
|
continue
|
|
}
|
|
if _, present := m[comp.Name]; !present {
|
|
m[comp.Name] = comp
|
|
}
|
|
}
|
|
|
|
var result []v1alpha2.Component
|
|
for _, comp := range m {
|
|
result = append(result, comp)
|
|
}
|
|
return result, nil
|
|
}
|