diff --git a/pkg/cli/release_candidates.go b/pkg/cli/release_candidates.go index 35564f6e42f..7fff8a1ae0a 100644 --- a/pkg/cli/release_candidates.go +++ b/pkg/cli/release_candidates.go @@ -3,9 +3,12 @@ package cli import ( "slices" + "github.com/github/gh-aw/pkg/logger" "github.com/github/gh-aw/pkg/semverutil" ) +var releaseCandidatesLog = logger.New("cli:release_candidates") + type releaseCandidate struct { tag string version *semverutil.SemanticVersion @@ -15,6 +18,7 @@ type releaseCandidate struct { // applies the major-version compatibility rule, and returns candidates sorted // newest-first. func sortedCompatibleReleaseCandidates(releases []string, currentVer *semverutil.SemanticVersion, allowMajor bool) []releaseCandidate { + releaseCandidatesLog.Printf("Filtering %d release(s) for compatibility: allowMajor=%v", len(releases), allowMajor) var compatibleReleases []releaseCandidate for _, release := range releases { releaseVer := parseVersion(release) @@ -38,6 +42,7 @@ func sortedCompatibleReleaseCandidates(releases []string, currentVer *semverutil } }) + releaseCandidatesLog.Printf("Found %d compatible release candidate(s)", len(compatibleReleases)) return compatibleReleases } @@ -54,5 +59,6 @@ func newerReleaseCandidates(candidates []releaseCandidate, currentVer *semveruti newer = append(newer, c) } } + releaseCandidatesLog.Printf("Retained %d candidate(s) newer than current version out of %d", len(newer), len(candidates)) return newer } diff --git a/pkg/fileutil/executable.go b/pkg/fileutil/executable.go index 7fae34cd1b3..0883f786a23 100644 --- a/pkg/fileutil/executable.go +++ b/pkg/fileutil/executable.go @@ -7,11 +7,16 @@ import ( "os/exec" "path/filepath" "runtime" + + "github.com/github/gh-aw/pkg/logger" ) +var executableLog = logger.New("fileutil:executable") + // ValidateExecutablePath validates that an executable path is absolute, resolves // symlinks when possible, points to a file, and is executable on non-Windows platforms. func ValidateExecutablePath(path string) (string, error) { + executableLog.Printf("Validating executable path: %s", path) cleanPath, err := ValidateAbsolutePath(path) if err != nil { return "", err @@ -40,6 +45,7 @@ func ValidateExecutablePath(path string) (string, error) { return "", fmt.Errorf("executable path %q is not executable", cleanPath) } + executableLog.Printf("Validated executable path: %s -> %s", path, cleanPath) return cleanPath, nil } @@ -49,8 +55,10 @@ func ResolveExecutablePath(name string) (string, error) { return "", errors.New("executable name cannot be empty") } + executableLog.Printf("Resolving executable from PATH: %s", name) path, err := exec.LookPath(name) if err != nil { + executableLog.Printf("Executable %q not found on PATH: %v", name, err) return "", err } if !filepath.IsAbs(path) { diff --git a/pkg/workflow/mcp_setup_scripts.go b/pkg/workflow/mcp_setup_scripts.go index 659511b03b8..082a71540b1 100644 --- a/pkg/workflow/mcp_setup_scripts.go +++ b/pkg/workflow/mcp_setup_scripts.go @@ -6,13 +6,19 @@ import ( "strings" "github.com/github/gh-aw/pkg/constants" + "github.com/github/gh-aw/pkg/logger" "github.com/github/gh-aw/pkg/sliceutil" ) +var mcpSetupScriptsLog = logger.New("workflow:mcp_setup_scripts") + func generateMCPScriptsSetup(yaml *strings.Builder, workflowData *WorkflowData) error { if !IsMCPScriptsEnabled(workflowData.MCPScripts) { + mcpSetupScriptsLog.Print("MCP scripts not enabled, skipping setup generation") return nil } + + mcpSetupScriptsLog.Printf("Generating MCP scripts setup: tools=%d", len(workflowData.MCPScripts.Tools)) yaml.WriteString(" - name: Write MCP Scripts Config\n") yaml.WriteString(" run: |\n") yaml.WriteString(" mkdir -p \"${RUNNER_TEMP}/gh-aw/mcp-scripts/logs\"\n") @@ -45,6 +51,7 @@ func generateMCPScriptsSetup(yaml *strings.Builder, workflowData *WorkflowData) yaml.WriteString(" run: |\n") mcpScriptToolNames := sliceutil.MapKeys(workflowData.MCPScripts.Tools) sort.Strings(mcpScriptToolNames) + mcpSetupScriptsLog.Printf("Writing %d MCP script tool file(s)", len(mcpScriptToolNames)) for _, toolName := range mcpScriptToolNames { toolConfig := workflowData.MCPScripts.Tools[toolName] if err := appendMCPScriptToolFile(yaml, workflowData, toolName, toolConfig); err != nil { @@ -98,6 +105,7 @@ func generateMCPScriptsSetup(yaml *strings.Builder, workflowData *WorkflowData) func appendMCPScriptToolFile(yaml *strings.Builder, workflowData *WorkflowData, toolName string, toolConfig *MCPScriptToolConfig) error { if toolConfig.Script != "" { + mcpSetupScriptsLog.Printf("Appending MCP script tool %q (type=js)", toolName) toolScript := GenerateMCPScriptJavaScriptToolScript(toolConfig) jsDelimiter := GenerateHeredocDelimiterFromContent("MCP_SCRIPTS_JS_"+strings.ToUpper(toolName), toolScript) if err := ValidateHeredocContent(toolScript, jsDelimiter); err != nil { @@ -111,6 +119,7 @@ func appendMCPScriptToolFile(yaml *strings.Builder, workflowData *WorkflowData, return nil } if toolConfig.Run != "" { + mcpSetupScriptsLog.Printf("Appending MCP script tool %q (type=sh)", toolName) toolScript := GenerateMCPScriptShellToolScript(toolConfig) shDelimiter := GenerateHeredocDelimiterFromContent("MCP_SCRIPTS_SH_"+strings.ToUpper(toolName), toolScript) if err := ValidateHeredocContent(toolScript, shDelimiter); err != nil { @@ -125,6 +134,7 @@ func appendMCPScriptToolFile(yaml *strings.Builder, workflowData *WorkflowData, return nil } if toolConfig.Py != "" { + mcpSetupScriptsLog.Printf("Appending MCP script tool %q (type=py)", toolName) toolScript := GenerateMCPScriptPythonToolScript(toolConfig) pyDelimiter := GenerateHeredocDelimiterFromContent("MCP_SCRIPTS_PY_"+strings.ToUpper(toolName), toolScript) if err := ValidateHeredocContent(toolScript, pyDelimiter); err != nil { @@ -139,6 +149,7 @@ func appendMCPScriptToolFile(yaml *strings.Builder, workflowData *WorkflowData, return nil } if toolConfig.Go != "" { + mcpSetupScriptsLog.Printf("Appending MCP script tool %q (type=go)", toolName) toolScript := GenerateMCPScriptGoToolScript(toolConfig) goDelimiter := GenerateHeredocDelimiterFromContent("MCP_SCRIPTS_GO_"+strings.ToUpper(toolName), toolScript) if err := ValidateHeredocContent(toolScript, goDelimiter); err != nil {