Files
odo/pkg/libdevfile/component_image.go
Philippe Martin 9a239c4e77 Use a single handler for executing all commands (#6826)
* 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
2023-05-26 11:01:21 -04:00

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
}