From 6173f435181e49a43a367508329fb0704be2df82 Mon Sep 17 00:00:00 2001 From: Cedric Cordenier Date: Fri, 3 Oct 2025 17:50:44 +0100 Subject: [PATCH] [PRIV-200] Add build args to CTF --- framework/.changeset/v0.10.33 | 1 + framework/components/clnode/clnode.go | 3 ++- framework/components/jd/jd.go | 2 +- .../components/simple_node_set/node_set.go | 1 + framework/docker.go | 20 ++++++++++++++----- 5 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 framework/.changeset/v0.10.33 diff --git a/framework/.changeset/v0.10.33 b/framework/.changeset/v0.10.33 new file mode 100644 index 000000000..a43a7d972 --- /dev/null +++ b/framework/.changeset/v0.10.33 @@ -0,0 +1 @@ +- Support passing buildArgs to docker when building images diff --git a/framework/components/clnode/clnode.go b/framework/components/clnode/clnode.go index 01c189d0c..806e05cb8 100644 --- a/framework/components/clnode/clnode.go +++ b/framework/components/clnode/clnode.go @@ -51,6 +51,7 @@ type NodeInput struct { Name string `toml:"name"` DockerFilePath string `toml:"docker_file"` DockerContext string `toml:"docker_ctx"` + DockerBuildArgs map[string]string `toml:"docker_build_args"` PullImage bool `toml:"pull_image"` CapabilitiesBinaryPaths []string `toml:"capabilities"` CapabilityContainerDir string `toml:"capabilities_container_dir"` @@ -340,7 +341,7 @@ func newNode(in *Input, pgOut *postgres.Output) (*NodeOut, error) { } if req.Image == "" { req.Image = TmpImageName - if err := framework.BuildImageOnce(once, in.Node.DockerContext, in.Node.DockerFilePath, req.Image); err != nil { + if err := framework.BuildImageOnce(once, in.Node.DockerContext, in.Node.DockerFilePath, req.Image, nil); err != nil { return nil, err } req.KeepImage = false diff --git a/framework/components/jd/jd.go b/framework/components/jd/jd.go index ddeb62877..65496ad83 100644 --- a/framework/components/jd/jd.go +++ b/framework/components/jd/jd.go @@ -111,7 +111,7 @@ func NewJD(in *Input) (*Output, error) { } if req.Image == "" { req.Image = TmpImageName - if err := framework.BuildImage(in.DockerContext, in.DockerFilePath, req.Image); err != nil { + if err := framework.BuildImage(in.DockerContext, in.DockerFilePath, req.Image, nil); err != nil { return nil, err } req.KeepImage = false diff --git a/framework/components/simple_node_set/node_set.go b/framework/components/simple_node_set/node_set.go index 43078e3c6..01d7abeaf 100644 --- a/framework/components/simple_node_set/node_set.go +++ b/framework/components/simple_node_set/node_set.go @@ -150,6 +150,7 @@ func sharedDBSetup(in *Input, bcOut *blockchain.Output) (*Output, error) { PullImage: in.NodeSpecs[overrideIdx].Node.PullImage, DockerFilePath: in.NodeSpecs[overrideIdx].Node.DockerFilePath, DockerContext: in.NodeSpecs[overrideIdx].Node.DockerContext, + DockerBuildArgs: in.NodeSpecs[overrideIdx].Node.DockerBuildArgs, CapabilitiesBinaryPaths: in.NodeSpecs[overrideIdx].Node.CapabilitiesBinaryPaths, CapabilityContainerDir: in.NodeSpecs[overrideIdx].Node.CapabilityContainerDir, TestConfigOverrides: net, diff --git a/framework/docker.go b/framework/docker.go index 6a13c2976..f28fe8029 100644 --- a/framework/docker.go +++ b/framework/docker.go @@ -346,10 +346,10 @@ func SaveContainerLogs(dir string) ([]string, error) { return logFilePaths, nil } -func BuildImageOnce(once *sync.Once, dctx, dfile, nameAndTag string) error { +func BuildImageOnce(once *sync.Once, dctx, dfile, nameAndTag string, buildArgs map[string]string) error { var err error once.Do(func() { - err = BuildImage(dctx, dfile, nameAndTag) + err = BuildImage(dctx, dfile, nameAndTag, buildArgs) if err != nil { err = fmt.Errorf("failed to build Docker image: %w", err) } @@ -357,12 +357,22 @@ func BuildImageOnce(once *sync.Once, dctx, dfile, nameAndTag string) error { return err } -func BuildImage(dctx, dfile, nameAndTag string) error { +func BuildImage(dctx, dfile, nameAndTag string, buildArgs map[string]string) error { dfilePath := filepath.Join(dctx, dfile) if os.Getenv("CTF_CLNODE_DLV") == "true" { - return RunCommand("docker", "build", "--build-arg", `GO_GCFLAGS=all=-N -l`, "--build-arg", "CHAINLINK_USER=chainlink", "--build-arg", "CL_INSTALL_PRIVATE_PLUGINS=false", "-t", nameAndTag, "-f", dfilePath, dctx) + commandParts := []string{"docker", "build", "--build-arg", `GO_GCFLAGS=all=-N -l`, "--build-arg", "CHAINLINK_USER=chainlink", "--build-arg", "CL_INSTALL_PRIVATE_PLUGINS=false"} + for k, v := range buildArgs { + commandParts = append(commandParts, "--build-arg", fmt.Sprintf("%s=%s", k, v)) + } + commandParts = append(commandParts, "-t", nameAndTag, "-f", dfilePath, dctx) + return RunCommand(commandParts[0], commandParts[1:]...) + } + commandParts := []string{"docker", "build", "--build-arg", "CHAINLINK_USER=chainlink", "--build-arg", "CL_INSTALL_PRIVATE_PLUGINS=false"} + for k, v := range buildArgs { + commandParts = append(commandParts, "--build-arg", fmt.Sprintf("%s=%s", k, v)) } - return RunCommand("docker", "build", "--build-arg", "CHAINLINK_USER=chainlink", "--build-arg", "CL_INSTALL_PRIVATE_PLUGINS=false", "-t", nameAndTag, "-f", dfilePath, dctx) + commandParts = append(commandParts, "-t", nameAndTag, "-f", dfilePath, dctx) + return RunCommand(commandParts[0], commandParts[1:]...) } // RemoveTestContainers removes all test containers, volumes and CTF docker network