Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions pkg/cli/release_candidates.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand All @@ -38,6 +42,7 @@ func sortedCompatibleReleaseCandidates(releases []string, currentVer *semverutil
}
})

releaseCandidatesLog.Printf("Found %d compatible release candidate(s)", len(compatibleReleases))
return compatibleReleases
}

Expand All @@ -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
}
8 changes: 8 additions & 0 deletions pkg/fileutil/executable.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}

Expand All @@ -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) {
Expand Down
11 changes: 11 additions & 0 deletions pkg/workflow/mcp_setup_scripts.go
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand Down Expand Up @@ -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 {
Expand Down Expand Up @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand All @@ -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 {
Expand Down
Loading