From a34634cd9ce4a2dbe895081dae15efdb00182cda Mon Sep 17 00:00:00 2001 From: Michael McCracken Date: Wed, 28 Jan 2026 11:48:32 -0800 Subject: [PATCH 1/3] fix: better error for failed run section run section output can be long and it can be a pain to find which image failed to build in multiple-image situations. This just adds the obvious information to the error you see at the end. Signed-off-by: Michael McCracken --- pkg/stacker/build.go | 2 +- pkg/types/stackerfile.go | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/stacker/build.go b/pkg/stacker/build.go index 8d5ce707..b76fd470 100644 --- a/pkg/stacker/build.go +++ b/pkg/stacker/build.go @@ -522,7 +522,7 @@ func (b *Builder) build(s types.Storage, file string) error { log.Infof("failed executing %s: %s\n", opts.OnRunFailure, err2) } } - return errors.Errorf("run commands failed: %s", err) + return errors.Errorf("run commands failed for image %q in %q: %s", name, sf.FilePath(), err) } } diff --git a/pkg/types/stackerfile.go b/pkg/types/stackerfile.go index 5ae33287..4ef6e61b 100644 --- a/pkg/types/stackerfile.go +++ b/pkg/types/stackerfile.go @@ -53,6 +53,10 @@ func (sf *Stackerfile) Get(name string) (Layer, bool) { return layer, ok } +func (sf *Stackerfile) FilePath() string { + return sf.path +} + func (sf *Stackerfile) Len() int { return len(sf.internal) } From 41da9c86e8d9f4f25d3daa2887ee384b2c10be29 Mon Sep 17 00:00:00 2001 From: Michael McCracken Date: Wed, 28 Jan 2026 13:42:10 -0800 Subject: [PATCH 2/3] ci: fix convert test for elastic dockerfile elastic/dockerfiles recently removed the actual dockerfiles from main, so now you have to go to a specific branch to get it Signed-off-by: Michael McCracken --- test/convert.bats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/convert.bats b/test/convert.bats index f173b8a6..0dd17aec 100644 --- a/test/convert.bats +++ b/test/convert.bats @@ -72,7 +72,7 @@ EOF @test "elasticsearch" { skip_slow_test - git clone https://github.com/elastic/dockerfiles.git + git clone -b v9.2.4 https://github.com/elastic/dockerfiles.git chmod -R a+rwx dockerfiles cd dockerfiles/elasticsearch stacker convert --docker-file Dockerfile --output-file stacker.yaml --substitute-file stacker-subs.yaml From ac6b265e609b183546ee8488eadd254fbd56fb89 Mon Sep 17 00:00:00 2001 From: Michael McCracken Date: Wed, 28 Jan 2026 15:24:38 -0800 Subject: [PATCH 3/3] fix: convert: WORKDIR creates its argument ref https://docs.docker.com/reference/dockerfile/#workdir "If the WORKDIR doesn't exist, it will be created even if it's not used in any subsequent Dockerfile instruction." Signed-off-by: Michael McCracken --- pkg/stacker/convert.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/stacker/convert.go b/pkg/stacker/convert.go index 364bf9c4..7588d5b6 100644 --- a/pkg/stacker/convert.go +++ b/pkg/stacker/convert.go @@ -210,6 +210,7 @@ func (c *Converter) convertCommand(cmd *Command) error { c.env[key] = val } case "workdir": + layer.Run = append(layer.Run, fmt.Sprintf("mkdir -p %s", cmd.Value[0])) layer.Run = append(layer.Run, fmt.Sprintf("cd %s", cmd.Value[0])) c.currDir = cmd.Value[0] case "arg":