From 1f2261644ef28a9e0d4ec695ef9ac07a86b7e310 Mon Sep 17 00:00:00 2001 From: Samuel K Date: Wed, 13 May 2026 09:12:36 -0500 Subject: [PATCH] fix(delivery): ensure target directory exists before docker cp in RemoteDockerDelivery The busybox and other minimal container images lack /usr/local/bin/, causing docker cp to fail with "Could not find the file". Run mkdir -p inside the container before copying the agent binary. --- pkg/agent/delivery/remote_docker.go | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/pkg/agent/delivery/remote_docker.go b/pkg/agent/delivery/remote_docker.go index cb309622c..b646bf068 100644 --- a/pkg/agent/delivery/remote_docker.go +++ b/pkg/agent/delivery/remote_docker.go @@ -6,6 +6,7 @@ import ( "io" "os" "os/exec" + "path" "github.com/devsy-org/devsy/pkg/agent" "github.com/devsy-org/devsy/pkg/log" @@ -40,6 +41,10 @@ func (d *RemoteDockerDelivery) DeliverPostStart(ctx context.Context, opts PostSt destPath := agent.ContainerDevsyHelperLocation + if err := d.ensureDir(ctx, destPath); err != nil { + return fmt.Errorf("ensure target directory: %w", err) + } + if err := d.copyBinaryFromSource(ctx, opts.BinarySource, opts.Arch, destPath); err != nil { return fmt.Errorf("copy binary to container: %w", err) } @@ -98,6 +103,15 @@ func (d *RemoteDockerDelivery) chmodBinary(ctx context.Context, destPath string) return nil } +func (d *RemoteDockerDelivery) ensureDir(ctx context.Context, filePath string) error { + dir := path.Dir(filePath) + out, err := d.cmd(ctx, "exec", d.ContainerID, "mkdir", "-p", dir).CombinedOutput() + if err != nil { + return fmt.Errorf("%s: %w", string(out), err) + } + return nil +} + func (d *RemoteDockerDelivery) cmd(ctx context.Context, args ...string) *exec.Cmd { // #nosec G204 -- args are constructed internally, not from user input cmd := exec.CommandContext(ctx, d.dockerCommand(), args...)