8000 do not set workspace folder if container id · coder/coder@591a9bf · GitHub
[go: up one dir, main page]

Skip to content

Commit 591a9bf

Browse files
committed
do not set workspace folder if container id
1 parent 56c7ceb commit 591a9bf

File tree

3 files changed

+22
-16
lines changed

3 files changed

+22
-16
lines changed

agent/agentcontainers/api.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1120,7 +1120,7 @@ func (api *API) runSubAgentInContainer(ctx context.Context, dc codersdk.Workspac
11201120
logger.Info(ctx, "starting subagent in dev container")
11211121

11221122
err := api.dccli.Exec(agentCtx, dc.WorkspaceFolder, dc.ConfigPath, agentPath, []string{"agent"},
1123-
WithContainerID(container.ID),
1123+
WithExecContainerID(container.ID),
11241124
WithRemoteEnv(
11251125
"CODER_AGENT_URL="+api.subAgentURL,
11261126
"CODER_AGENT_TOKEN="+agent.AuthToken.String(),

agent/agentcontainers/devcontainercli.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,10 @@ func WithUpOutput(stdout, stderr io.Writer) DevcontainerCLIUpOptions {
5252
type DevcontainerCLIExecOptions func(*devcontainerCLIExecConfig)
5353

5454
type devcontainerCLIExecConfig struct {
55-
args []string // Additional arguments for the Exec command.
56-
stdout io.Writer
57-
stderr io.Writer
55+
args []string // Additional arguments for the Exec command.
56+
containerID string
57+
stdout io.Writer
58+
stderr io.Writer
5859
}
5960

6061
// WithExecOutput sets additional stdout and stderr writers for logs
@@ -66,10 +67,12 @@ func WithExecOutput(stdout, stderr io.Writer) DevcontainerCLIExecOptions {
6667
}
6768
}
6869

69-
// WithContainerID sets the container ID to target a specific container.
70-
func WithContainerID(id string) DevcontainerCLIExecOptions {
70+
// WithExecContainerID sets the container ID to target a specific
71+
// container. Note that this option will unset the workspace folder to
72+
// ensure properties from the container are inherited correctly.
73+
func WithExecContainerID(id string) DevcontainerCLIExecOptions {
7174
return func(o *devcontainerCLIExecConfig) {
72-
o.args = append(o.args, "--container-id", id)
75+
o.containerID = id
7376
}
7477
}
7578

@@ -165,7 +168,10 @@ func (d *devcontainerCLI) Exec(ctx context.Context, workspaceFolder, configPath
165168
logger := d.logger.With(slog.F("workspace_folder", workspaceFolder), slog.F("config_path", configPath))
166169

167170
args := []string{"exec"}
168-
if workspaceFolder != "" {
171+
switch {
172+
case conf.containerID != "":
173+
args = append(args, "--container-id", conf.containerID)
174+
case workspaceFolder != "":
169175
args = append(args, "--workspace-folder", workspaceFolder)
170176
}
171177
if configPath != "" {

agent/agentcontainers/devcontainercli_test.go

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -182,8 +182,8 @@ func TestDevcontainerCLI_ArgsAndParsing(t *testing.T) {
182182
configPath: "",
183183
cmd: "echo",
184184
cmdArgs: []string{"hello"},
185-
opts: []agentcontainers.DevcontainerCLIExecOptions{agentcontainers.WithContainerID("test-container-123")},
186-
wantArgs: "exec --workspace-folder /test/workspace --container-id test-container-123 echo hello",
185+
opts: []agentcontainers.DevcontainerCLIExecOptions{agentcontainers.WithExecContainerID("test-container-123")},
186+
wantArgs: "exec --container-id test-container-123 echo hello",
187187
wantError: false,
188188
},
189189
{
@@ -192,8 +192,8 @@ func TestDevcontainerCLI_ArgsAndParsing(t *testing.T) {
192192
configPath: "/test/config.json",
193193
cmd: "bash",
194194
cmdArgs: []string{"-c", "ls -la"},
195-
opts: []agentcontainers.DevcontainerCLIExecOptions{agentcontainers.WithContainerID("my-container")},
196-
wantArgs: "exec --workspace-folder /test/workspace --config /test/config.json --container-id my-container bash -c ls -la",
195+
opts: []agentcontainers.DevcontainerCLIExecOptions{agentcontainers.WithExecContainerID("my-container")},
196+
wantArgs: "exec --container-id my-container --config /test/config.json bash -c ls -la",
197197
wantError: false,
198198
},
199199
{
@@ -203,9 +203,9 @@ func TestDevcontainerCLI_ArgsAndParsing(t *testing.T) {
203203
cmd: "cat",
204204
cmdArgs: []string{"/etc/hostname"},
205205
opts: []agentcontainers.DevcontainerCLIExecOptions{
206-
agentcontainers.WithContainerID("test-container-789"),
206+
agentcontainers.WithExecContainerID("test-container-789"),
207207
},
208-
wantArgs: "exec --workspace-folder /test/workspace --container-id test-container-789 cat /etc/hostname",
208+
wantArgs: "exec --container-id test-container-789 cat /etc/hostname",
209209
wantError: false,
210210
},
211211
}
@@ -293,7 +293,7 @@ func TestDevcontainerCLI_WithOutput(t *testing.T) {
293293
errBuf := &bytes.Buffer{}
294294

295295
// Simulate CLI execution for exec command with container ID.
296-
wantArgs := "exec --workspace-folder /test/workspace --container-id test-container-456 echo hello"
296+
wantArgs := "exec --container-id test-container-456 echo hello"
297297
testExecer := &testDevcontainerExecer{
298298
testExePath: testExePath,
299299
wantArgs: wantArgs,
@@ -306,7 +306,7 @@ func TestDevcontainerCLI_WithOutput(t *testing.T) {
306306
// Call Exec with WithExecOutput and WithContainerID to capture any command output.
307307
ctx := testutil.Context(t, testutil.WaitMedium)
308308
err = dccli.Exec(ctx, "/test/workspace", "", "echo", []string{"hello"},
309-
agentcontainers.WithContainerID("test-container-456"),
309+
agentcontainers.WithExecContainerID("test-container-456"),
310310
agentcontainers.WithExecOutput(outBuf, errBuf),
311311
)
312312
require.NoError(t, err, "Exec should succeed")

0 commit comments

Comments
 (0)
0