From 9ee0a1702c433369f53420119502d4c3f55db48c Mon Sep 17 00:00:00 2001 From: Soumil Paranjpay Date: Tue, 24 Oct 2023 18:27:05 +0530 Subject: [PATCH] feat: use podman for building custom images if executable is found Signed-off-by: Soumil Paranjpay --- .../containerimagespushscript/templates/pushimages.sh | 2 +- .../dockerimagebuildscript/templates/buildimages.sh | 2 +- common/utils.go | 10 ++++++++++ .../containerimagespushscripttransformer.go | 5 ++++- .../dockerfile/dockerfilebuildscripttransformer.go | 2 ++ 5 files changed, 18 insertions(+), 3 deletions(-) diff --git a/assets/built-in/transformers/containerimagespushscript/templates/pushimages.sh b/assets/built-in/transformers/containerimagespushscript/templates/pushimages.sh index 963376653..62258ed2b 100755 --- a/assets/built-in/transformers/containerimagespushscript/templates/pushimages.sh +++ b/assets/built-in/transformers/containerimagespushscript/templates/pushimages.sh @@ -21,7 +21,7 @@ REGISTRY_URL={{ .RegistryURL }} REGISTRY_NAMESPACE={{ .RegistryNamespace }} -CONTAINER_RUNTIME=docker +CONTAINER_RUNTIME={{ .ContainerRuntime }} if [ "$#" -gt 1 ]; then REGISTRY_URL=$1 REGISTRY_NAMESPACE=$2 diff --git a/assets/built-in/transformers/dockerfile/dockerimagebuildscript/templates/buildimages.sh b/assets/built-in/transformers/dockerfile/dockerimagebuildscript/templates/buildimages.sh index 28f99e058..d719b80d7 100755 --- a/assets/built-in/transformers/dockerfile/dockerimagebuildscript/templates/buildimages.sh +++ b/assets/built-in/transformers/dockerfile/dockerimagebuildscript/templates/buildimages.sh @@ -22,7 +22,7 @@ if [[ "$(basename "$PWD")" != 'scripts' ]] ; then echo 'please run this script from the "scripts" directory' exit 1 fi -CONTAINER_RUNTIME=docker +CONTAINER_RUNTIME={{ .ContainerRuntime }} if [ "$#" -eq 1 ]; then CONTAINER_RUNTIME=$1 fi diff --git a/common/utils.go b/common/utils.go index 5a7edd52a..56143979d 100644 --- a/common/utils.go +++ b/common/utils.go @@ -32,6 +32,7 @@ import ( "math/rand" "net/url" "os" + "os/exec" "path/filepath" "reflect" "regexp" @@ -1565,3 +1566,12 @@ func IsHTTPURL(str string) bool { return regex.MatchString(str) } + +// GetDefaultContainerRuntime returns the preferred container runtime of the host +func GetDefaultContainerRuntime() string { + _, err := exec.LookPath("podman") + if err == nil { + return "podman" + } + return "docker" +} diff --git a/transformer/containerimage/containerimagespushscripttransformer.go b/transformer/containerimage/containerimagespushscripttransformer.go index 92ee738fd..cc59d6d06 100644 --- a/transformer/containerimage/containerimagespushscripttransformer.go +++ b/transformer/containerimage/containerimagespushscripttransformer.go @@ -46,6 +46,7 @@ type DockerfileImagePushScriptConfig struct { // ImagePushTemplateConfig represents template config used by ImagePush script type ImagePushTemplateConfig struct { + ContainerRuntime string RegistryURL string RegistryNamespace string Images []string @@ -79,7 +80,9 @@ func (t *ContainerImagesPushScript) DirectoryDetect(dir string) (services map[st // Transform transforms the artifacts func (t *ContainerImagesPushScript) Transform(newArtifacts []transformertypes.Artifact, alreadySeenArtifacts []transformertypes.Artifact) ([]transformertypes.PathMapping, []transformertypes.Artifact, error) { pathMappings := []transformertypes.PathMapping{} - ipt := ImagePushTemplateConfig{} + ipt := ImagePushTemplateConfig{ + ContainerRuntime: common.GetDefaultContainerRuntime(), + } for _, a := range newArtifacts { if a.Type != artifacts.NewImagesArtifactType { continue diff --git a/transformer/dockerfile/dockerfilebuildscripttransformer.go b/transformer/dockerfile/dockerfilebuildscripttransformer.go index c9f1a3a42..5e7aae1bd 100644 --- a/transformer/dockerfile/dockerfilebuildscripttransformer.go +++ b/transformer/dockerfile/dockerfilebuildscripttransformer.go @@ -48,6 +48,7 @@ type DockerfileImageBuildScriptConfig struct { // DockerfileImageBuildScriptTemplateConfig represents the data used to fill the build script generator template type DockerfileImageBuildScriptTemplateConfig struct { + ContainerRuntime string RelParentOfSourceDir string DockerfilesConfig []DockerfileImageBuildConfig RegistryURL string @@ -177,6 +178,7 @@ func (t *DockerfileImageBuildScript) Transform(newArtifacts []transformertypes.A RegistryURL: commonqa.ImageRegistry(), RegistryNamespace: commonqa.ImageRegistryNamespace(), DockerfilesConfig: dockerfilesImageBuildConfig, + ContainerRuntime: common.GetDefaultContainerRuntime(), } pathMappings = append(pathMappings, transformertypes.PathMapping{ Type: transformertypes.TemplatePathMappingType,