Skip to content

Commit b7e6775

Browse files
committed
fix(toolinstall): soft-fail auto-detect installs
Signed-off-by: pandego <7780875+pandego@users.noreply.github.com>
1 parent 170d4d7 commit b7e6775

File tree

2 files changed

+25
-7
lines changed

2 files changed

+25
-7
lines changed

pkg/toolinstall/resolver.go

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,14 +25,23 @@ func EnsureCommand(ctx context.Context, command, version string) (string, error)
2525
return command, nil
2626
}
2727

28-
lower := strings.ToLower(strings.TrimSpace(version))
28+
version = strings.TrimSpace(version)
29+
lower := strings.ToLower(version)
2930
if lower == "false" || lower == "off" {
3031
return command, nil
3132
}
3233

3334
resolvedPath, err := resolve(ctx, command, version)
3435
if err != nil {
35-
return "", fmt.Errorf("auto-installing command %q: %w", command, err)
36+
if version != "" {
37+
return "", fmt.Errorf("auto-installing command %q: %w", command, err)
38+
}
39+
40+
slog.Warn("Auto-install failed, falling back to original command",
41+
"command", command,
42+
"error", err,
43+
)
44+
return command, nil
3645
}
3746

3847
return resolvedPath, nil

pkg/toolinstall/resolver_test.go

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,16 @@ func TestEnsureCommand_DisabledPerToolset(t *testing.T) {
5050
}
5151
}
5252

53-
func TestEnsureCommand_SoftFail(t *testing.T) {
53+
func TestEnsureCommand_AutoDetectFailureFallsBackToOriginalCommand(t *testing.T) {
54+
t.Setenv("DOCKER_AGENT_TOOLS_DIR", t.TempDir())
55+
t.Setenv("DOCKER_AGENT_AUTO_INSTALL", "")
56+
57+
result, err := EnsureCommand(t.Context(), "nonexistent-tool", "")
58+
require.NoError(t, err)
59+
assert.Equal(t, "nonexistent-tool", result)
60+
}
61+
62+
func TestEnsureCommand_ExplicitVersionFailureStillErrors(t *testing.T) {
5463
t.Setenv("DOCKER_AGENT_TOOLS_DIR", t.TempDir())
5564
t.Setenv("DOCKER_AGENT_AUTO_INSTALL", "")
5665

@@ -73,7 +82,7 @@ func TestEnsureCommand_FoundInBinDir(t *testing.T) {
7382
assert.Equal(t, fakeBin, result)
7483
}
7584

76-
func TestEnsureCommand_NonExecutableInBinDirIsSkipped(t *testing.T) {
85+
func TestEnsureCommand_NonExecutableInBinDirFallsBackToOriginalCommand(t *testing.T) {
7786
toolsDir := t.TempDir()
7887
t.Setenv("DOCKER_AGENT_TOOLS_DIR", toolsDir)
7988
t.Setenv("DOCKER_AGENT_AUTO_INSTALL", "")
@@ -82,9 +91,9 @@ func TestEnsureCommand_NonExecutableInBinDirIsSkipped(t *testing.T) {
8291
require.NoError(t, os.MkdirAll(binDir, 0o755))
8392
require.NoError(t, os.WriteFile(filepath.Join(binDir, "not-executable"), []byte("data"), 0o644))
8493

85-
// Falls through to auto-install → fails → returns error.
86-
_, err := EnsureCommand(t.Context(), "not-executable", "")
87-
require.Error(t, err)
94+
result, err := EnsureCommand(t.Context(), "not-executable", "")
95+
require.NoError(t, err)
96+
assert.Equal(t, "not-executable", result)
8897
}
8998

9099
// --- resolve tests ---

0 commit comments

Comments
 (0)