From da36104fdf9aa5d2223d1bde0464e4af582eb88a Mon Sep 17 00:00:00 2001 From: Timofey Kirillov Date: Mon, 24 Jan 2022 20:12:14 +0300 Subject: [PATCH] feat(images-dependencies): introduce basic image dependencies configuration structs --- pkg/config/dependency.go | 8 +++++++ pkg/config/dependency_import.go | 31 ++++++++++++++++++++++++++++ pkg/config/dependency_import_type.go | 9 ++++++++ pkg/config/image_from_dockerfile.go | 4 ++++ pkg/config/image_interface.go | 1 + pkg/config/stapel_image_base.go | 4 ++++ 6 files changed, 57 insertions(+) create mode 100644 pkg/config/dependency.go create mode 100644 pkg/config/dependency_import.go create mode 100644 pkg/config/dependency_import_type.go diff --git a/pkg/config/dependency.go b/pkg/config/dependency.go new file mode 100644 index 0000000000..32839366dc --- /dev/null +++ b/pkg/config/dependency.go @@ -0,0 +1,8 @@ +package config + +type Dependency struct { + ImageName string + Imports []*DependencyImport + + // TODO: raw *rawDependencies +} diff --git a/pkg/config/dependency_import.go b/pkg/config/dependency_import.go new file mode 100644 index 0000000000..62154b3db1 --- /dev/null +++ b/pkg/config/dependency_import.go @@ -0,0 +1,31 @@ +package config + +import ( + "fmt" + "strings" +) + +type DependencyImport struct { + Type DependencyImportType + TargetBuildArg string + TargetEnv string + + // TODO: raw *rawDependencyImport +} + +func (i *DependencyImport) validate(img ImageInterface) error { + switch { + case img.IsStapel() && i.TargetBuildArg != "": + return newDetailedConfigError("`targetBuildArg cannot be used in the stapel image", nil, nil) // TODO: raw + case !img.IsStapel() && i.TargetEnv != "": + return newDetailedConfigError("`targetEnv cannot be used in the dockerfile image", nil, nil) // TODO: raw + } + + switch i.Type { + case ImageNameImport, ImageTagImport, ImageRepoImport: + default: + return newDetailedConfigError(fmt.Sprintf("invalid `type: %s` for dependency import, expected one of: %s", i.Type, strings.Join([]string{string(ImageNameImport), string(ImageTagImport), string(ImageRepoImport)}, ", ")), nil, nil) // TODO: raw + } + + return nil +} diff --git a/pkg/config/dependency_import_type.go b/pkg/config/dependency_import_type.go new file mode 100644 index 0000000000..cce3916b6a --- /dev/null +++ b/pkg/config/dependency_import_type.go @@ -0,0 +1,9 @@ +package config + +type DependencyImportType string + +const ( + ImageNameImport DependencyImportType = "ImageName" + ImageTagImport DependencyImportType = "ImageTag" + ImageRepoImport DependencyImportType = "ImageRepo" +) diff --git a/pkg/config/image_from_dockerfile.go b/pkg/config/image_from_dockerfile.go index c5bbd54370..68558216c3 100644 --- a/pkg/config/image_from_dockerfile.go +++ b/pkg/config/image_from_dockerfile.go @@ -42,3 +42,7 @@ func (c *ImageFromDockerfile) validate(giterminismManager giterminism_manager.In func (c *ImageFromDockerfile) GetName() string { return c.Name } + +func (c *ImageFromDockerfile) IsStapel() bool { + return false +} diff --git a/pkg/config/image_interface.go b/pkg/config/image_interface.go index 9c6671b5c1..3e8f7a9b24 100644 --- a/pkg/config/image_interface.go +++ b/pkg/config/image_interface.go @@ -2,4 +2,5 @@ package config type ImageInterface interface { GetName() string + IsStapel() bool } diff --git a/pkg/config/stapel_image_base.go b/pkg/config/stapel_image_base.go index 3a2b748508..fb193557ba 100644 --- a/pkg/config/stapel_image_base.go +++ b/pkg/config/stapel_image_base.go @@ -28,6 +28,10 @@ func (c *StapelImageBase) GetName() string { return c.Name } +func (c *StapelImageBase) IsStapel() bool { + return true +} + func (c *StapelImageBase) imports() []*Import { return c.Import }