Skip to content

Commit

Permalink
fix: ImageBuildSpec build_file feature (#2313)
Browse files Browse the repository at this point in the history
## Description
This is simply a copy of @leovct work on
#2298 to address merge
conflicts and git guardian secrets issues.

## Is this change user facing?
YES

## References
#2298

---------

Co-authored-by: leovct <l009.vincent@gmail.com>
  • Loading branch information
tedim52 and leovct committed Mar 18, 2024
1 parent 4e5076c commit 0c58631
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 17 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ import (
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/concurrent_writer"
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/image_utils"
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/uuid_generator"
"github.com/kurtosis-tech/kurtosis/path-compression"
path_compression "github.com/kurtosis-tech/kurtosis/path-compression"
"github.com/kurtosis-tech/stacktrace"
"github.com/sirupsen/logrus"

Expand Down Expand Up @@ -153,8 +153,6 @@ const (

kurtosisTagPrefix = "kurtosistech/"

defaultContainerImageFile = "Dockerfile"

// Per https://github.com/hashicorp/waypoint/pull/1937/files
buildkitSessionSharedKey = ""

Expand Down Expand Up @@ -1408,6 +1406,7 @@ func (manager *DockerManager) BuildImage(ctx context.Context, imageName string,
}()
defer buildkitSession.Close() //nolint

buildFile := imageBuildSpec.GetBuildFile()
buildArgs := imageBuildSpec.GetBuildArgs()
buildArgsMapStringStringPtr := map[string]*string{}
for k, v := range buildArgs {
Expand All @@ -1433,7 +1432,7 @@ func (manager *DockerManager) BuildImage(ctx context.Context, imageName string,
CgroupParent: "",
NetworkMode: "",
ShmSize: 0,
Dockerfile: defaultContainerImageFile,
Dockerfile: buildFile,
Ulimits: []*units.Ulimit{},
BuildArgs: buildArgsMapStringStringPtr,
AuthConfigs: map[string]registry.AuthConfig{},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,19 @@ type privateImageBuildSpec struct {
//
TargetStage string

// Name of the build file
BuildFile string

// Dockerfile build args
BuildArgs map[string]string
}

func NewImageBuildSpec(contextDirPath string, containerImageFilePath string, targetStage string, buildArgs map[string]string) *ImageBuildSpec {
func NewImageBuildSpec(contextDirPath string, containerImageFilePath string, targetStage string, buildFile string, buildArgs map[string]string) *ImageBuildSpec {
internalImageBuildSpec := &privateImageBuildSpec{
ContainerImageFilePath: containerImageFilePath,
ContextDirPath: contextDirPath,
TargetStage: targetStage,
BuildFile: buildFile,
BuildArgs: buildArgs,
}
return &ImageBuildSpec{internalImageBuildSpec}
Expand All @@ -65,6 +69,10 @@ func (imageBuildSpec *ImageBuildSpec) GetTargetStage() string {
return imageBuildSpec.privateImageBuildSpec.TargetStage
}

func (imageBuildSpec *ImageBuildSpec) GetBuildFile() string {
return imageBuildSpec.privateImageBuildSpec.BuildFile
}

func (imageBuildSpec *ImageBuildSpec) GetBuildArgs() map[string]string {
return imageBuildSpec.privateImageBuildSpec.BuildArgs
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,7 @@ func testImageBuildSpec() *image_build_spec.ImageBuildSpec {
"test-image",
"path",
"",
"",
nil)
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package test_engine

import (
"fmt"
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/image_download_mode"
"testing"

"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/image_download_mode"

"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/image_build_spec"
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/port_spec"
"github.com/kurtosis-tech/kurtosis/container-engine-lib/lib/backend_interface/objects/service"
Expand Down Expand Up @@ -40,12 +41,14 @@ func (suite *KurtosisTypeConstructorTestSuite) TestServiceConfigWithImageBuildSp
}

func (t *serviceConfigImageBuildSpecTestCase) GetStarlarkCode() string {
imageBuildSpec := fmt.Sprintf("%s(%s=%q, %s=%q, %s=%q, %s=%s)",
imageBuildSpec := fmt.Sprintf("%s(%s=%q, %s=%q, %s=%q, %s=%q, %s=%s)",
service_config.ImageBuildSpecTypeName,
service_config.BuiltImageNameAttr,
testContainerImageName,
service_config.BuildContextAttr,
testBuildContextDir,
service_config.BuildFileAttr,
defaultBuildFile,
service_config.TargetStageAttr,
testTargetStage,
service_config.BuildArgsAttr,
Expand Down Expand Up @@ -76,6 +79,7 @@ func (t *serviceConfigImageBuildSpecTestCase) Assert(typeValue builtin_argument.
testOnDiskContextDirPath,
testOnDiskContainerImagePath,
testTargetStage,
defaultBuildFile,
expectedBuildArgs)
expectedServiceConfig, err := service.CreateServiceConfig(
testContainerImageName,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,12 +28,11 @@ var (
testModuleFileName = "github.com/kurtosistech/test-package/helpers.star"
testModuleRelativeLocator = "./helpers.star"

testModuleAbsoluteLocator = startosis_packages.NewPackageAbsoluteLocator(testModuleFileName, "")

emptyAbsoluteLocator = startosis_packages.NewPackageAbsoluteLocator("", "")

testModuleAbsoluteLocator = startosis_packages.NewPackageAbsoluteLocator(testModuleFileName, "")
emptyAbsoluteLocator = startosis_packages.NewPackageAbsoluteLocator("", "")
testContainerImageName = "kurtosistech/example-datastore-server"
testBuildContextDir = "./"
defaultBuildFile = "Dockerfile"
testBuildFile = "foo.Dockerfile"
testTargetStage = "builder"
testBuildArgName1 = "BUILD_ARG_1"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,7 @@ func (imageBuildSpec *ImageBuildSpec) ToKurtosisType(
return nil, interpretationErr
}

return image_build_spec.NewImageBuildSpec(buildContextDirPathOnDisk, containerImageFilePathOnDisk, targetStageStr, buildArgs), nil
return image_build_spec.NewImageBuildSpec(buildContextDirPathOnDisk, containerImageFilePathOnDisk, targetStageStr, buildFile, buildArgs), nil
}

// Returns the filepath of the build context directory and container image on APIC based on package info
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,9 @@ func (suite *StartosisPackageTestSuite) TestStartosisPackage_ImageBuildSpec() {
require.Empty(t, runResult.ValidationErrors)
require.Nil(t, runResult.ExecutionError)

expectedScriptOutputSubstring := `Service 'service' added with service UUID`

require.Contains(t, string(runResult.RunOutput), expectedScriptOutputSubstring)
require.Len(t, runResult.Instructions, 1)
require.Contains(t, string(runResult.RunOutput), `Service 'service-1' added with service UUID`)
require.Contains(t, string(runResult.RunOutput), `Service 'service-2' added with service UUID`)
require.Len(t, runResult.Instructions, 2)

// TODO: Figure out a way to clean image
logrus.Warnf("THIS TEST GENERATES A SMALL DOCKER IMAGE. IF YOU ARE RUNNING TESTSUITE LOCALLY(NOT IN CI), YOU MUST MANUALLY REMOVE IT!")
Expand Down
13 changes: 12 additions & 1 deletion internal_testsuites/starlark/image-build-package/main.star
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
def run(plan, args):
plan.add_service(
name="service",
name="service-1",
config=ServiceConfig(
image=ImageBuildSpec(
image_name="kurtosistech/service",
Expand All @@ -11,3 +11,14 @@ def run(plan, args):
),
)
)

plan.add_service(
name="service-2",
config=ServiceConfig(
image=ImageBuildSpec(
image_name="kurtosistech/service",
build_context_dir="./test",
build_file="test.Dockerfile",
)
)
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
FROM alpine:latest

WORKDIR /app

COPY . .

CMD ["echo", "Hello, Kurtosis!"]

0 comments on commit 0c58631

Please sign in to comment.