From b41507aefd70f8d75203c06615e8ba960603a67a Mon Sep 17 00:00:00 2001 From: Sebastian Diaz Date: Thu, 7 May 2026 20:08:38 -0400 Subject: [PATCH 1/2] fix: use basename(workspace) instead of repoName for workspaceFolder The override config was setting workspaceFolder to /workspaces/{repoName} instead of /workspaces/{basename(workspace)}, causing container exec to fail when branch folder name differs from repo name (e.g. feature/login vs carro-smart) --- plugin/core/config.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin/core/config.js b/plugin/core/config.js index e1ce8da..c2f9bf3 100644 --- a/plugin/core/config.js +++ b/plugin/core/config.js @@ -163,7 +163,7 @@ function removePortArgs(runArgs) { export async function generateOverrideConfig(workspace, port, repoName) { const baseConfig = await readDevcontainerJson(workspace) || {} const internalPort = detectInternalPort(baseConfig) - const workspaceName = repoName || basename(workspace) + const workspaceName = basename(workspace) || repoName // Build override config // Remove forwardPorts and appPort to prevent devcontainer CLI from setting up From 2e725436ff6a677cc90a43e27a37cf2eea507506 Mon Sep 17 00:00:00 2001 From: sdiazbarraza Date: Tue, 12 May 2026 23:53:20 +0000 Subject: [PATCH 2/2] test(config): add test for basename(workspace) precedence over repoName Adds a test case that verifies basename(workspace) is used for workspaceFolder and container name, taking precedence over the repoName parameter when both are provided. --- test/unit/config.test.js | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/test/unit/config.test.js b/test/unit/config.test.js index 1034a70..682c819 100644 --- a/test/unit/config.test.js +++ b/test/unit/config.test.js @@ -169,22 +169,37 @@ describe('generateOverrideConfig', () => { assert.ok(override.name.includes('13003')) }) - test('sets correct workspaceFolder using repoName', async () => { + test('uses basename(workspace) for workspaceFolder', async () => { + // When workspace path is provided, basename(workspace) is used for workspaceFolder const workspace = join(testDir, 'workspace') const overridePath = await generateOverrideConfig(workspace, 13004, 'myrepo') - + const override = JSON.parse(readFileSync(overridePath, 'utf-8')) - assert.strictEqual(override.workspaceFolder, '/workspaces/myrepo') + // workspaceFolder should use basename(workspace), not repoName + assert.strictEqual(override.workspaceFolder, '/workspaces/workspace') }) test('falls back to basename when repoName not provided', async () => { const workspace = join(testDir, 'workspace') const overridePath = await generateOverrideConfig(workspace, 13004) - + const override = JSON.parse(readFileSync(overridePath, 'utf-8')) assert.strictEqual(override.workspaceFolder, '/workspaces/workspace') }) + test('prefers basename(workspace) over repoName when both provided', async () => { + // When workspace path and repoName are both provided, + // basename(workspace) should take precedence for workspaceFolder + const workspace = join(testDir, 'my-clone') + const overridePath = await generateOverrideConfig(workspace, 13007, 'different-repo-name') + + const override = JSON.parse(readFileSync(overridePath, 'utf-8')) + // workspaceFolder should use basename(workspace), not repoName + assert.strictEqual(override.workspaceFolder, '/workspaces/my-clone') + // name should also use basename(workspace) + assert.strictEqual(override.name, 'my-clone (port 13007)') + }) + test('handles config without runArgs', async () => { writeFileSync( join(testDir, 'workspace', '.devcontainer', 'devcontainer.json'),