diff --git a/pkg/cli/actions.go b/pkg/cli/actions.go index 0e3ae567eea..d8532841131 100644 --- a/pkg/cli/actions.go +++ b/pkg/cli/actions.go @@ -12,7 +12,7 @@ var actionsLog = logger.New("cli:actions") // convertToGitHubActionsEnv converts environment variables from shell syntax to GitHub Actions syntax // Uses IsSecret field to determine between secrets.* and env.* syntax // Leaves existing GitHub Actions syntax unchanged -func convertToGitHubActionsEnv(env any, envVarMetadata []EnvironmentVariable) map[string]string { +func convertToGitHubActionsEnv(env map[string]any, envVarMetadata []EnvironmentVariable) map[string]string { actionsLog.Printf("Converting environment variables: metadata_count=%d", len(envVarMetadata)) result := make(map[string]string) @@ -22,36 +22,34 @@ func convertToGitHubActionsEnv(env any, envVarMetadata []EnvironmentVariable) ma envMetaMap[envVar.Name] = envVar } - if envMap, ok := env.(map[string]any); ok { - convertedCount := 0 - unchangedCount := 0 - for key, value := range envMap { - if valueStr, ok := value.(string); ok { - // Only convert shell syntax ${TOKEN_NAME}, leave GitHub Actions syntax unchanged - if strings.HasPrefix(valueStr, "${") && strings.HasSuffix(valueStr, "}") && !strings.Contains(valueStr, "{{") { - tokenName := valueStr[2 : len(valueStr)-1] // Remove ${ and } - - // Check if we have metadata for this environment variable - if envMeta, exists := envMetaMap[tokenName]; exists { - if envMeta.IsSecret { - result[key] = fmt.Sprintf("${{ secrets.%s }}", tokenName) - } else { - result[key] = fmt.Sprintf("${{ env.%s }}", tokenName) - } - } else { - // Default to secrets if no metadata found (backward compatibility) + convertedCount := 0 + unchangedCount := 0 + for key, value := range env { + if valueStr, ok := value.(string); ok { + // Only convert shell syntax ${TOKEN_NAME}, leave GitHub Actions syntax unchanged + if strings.HasPrefix(valueStr, "${") && strings.HasSuffix(valueStr, "}") && !strings.Contains(valueStr, "{{") { + tokenName := valueStr[2 : len(valueStr)-1] // Remove ${ and } + + // Check if we have metadata for this environment variable + if envMeta, exists := envMetaMap[tokenName]; exists { + if envMeta.IsSecret { result[key] = fmt.Sprintf("${{ secrets.%s }}", tokenName) + } else { + result[key] = fmt.Sprintf("${{ env.%s }}", tokenName) } - convertedCount++ } else { - // Keep as-is if not shell syntax or already GitHub Actions syntax - result[key] = valueStr - unchangedCount++ + // Default to secrets if no metadata found (backward compatibility) + result[key] = fmt.Sprintf("${{ secrets.%s }}", tokenName) } + convertedCount++ + } else { + // Keep as-is if not shell syntax or already GitHub Actions syntax + result[key] = valueStr + unchangedCount++ } } - actionsLog.Printf("Environment variable conversion complete: converted=%d, unchanged=%d", convertedCount, unchangedCount) } + actionsLog.Printf("Environment variable conversion complete: converted=%d, unchanged=%d", convertedCount, unchangedCount) return result } diff --git a/pkg/cli/actions_test.go b/pkg/cli/actions_test.go index 323022d13b4..f627334b73d 100644 --- a/pkg/cli/actions_test.go +++ b/pkg/cli/actions_test.go @@ -11,7 +11,7 @@ import ( func TestConvertToGitHubActionsEnv(t *testing.T) { tests := []struct { name string - input any + input map[string]any envMetadata []EnvironmentVariable expected map[string]string }{ @@ -111,14 +111,6 @@ func TestConvertToGitHubActionsEnv(t *testing.T) { "STRING_VAR": "${{ secrets.TOKEN }}", }, }, - { - name: "non-map input returns empty map", - input: []string{ - "${API_TOKEN}", - }, - envMetadata: []EnvironmentVariable{}, - expected: map[string]string{}, - }, { name: "env variable not in metadata and key differs from token name", input: map[string]any{ diff --git a/pkg/cli/mcp_add.go b/pkg/cli/mcp_add.go index 7ab25c55577..a2db07d21c9 100644 --- a/pkg/cli/mcp_add.go +++ b/pkg/cli/mcp_add.go @@ -196,8 +196,10 @@ func createMCPToolConfig(server *MCPRegistryServerForProcessing, preferredTransp mcpSection["container"] = containerStr // Add environment variables for Docker container - if env, hasEnv := server.Config["env"]; hasEnv { - mcpSection["env"] = convertToGitHubActionsEnv(env, server.EnvironmentVariables) + if envRaw, hasEnv := server.Config["env"]; hasEnv { + if envMap, ok := envRaw.(map[string]any); ok { + mcpSection["env"] = convertToGitHubActionsEnv(envMap, server.EnvironmentVariables) + } } } } else { @@ -218,8 +220,10 @@ func createMCPToolConfig(server *MCPRegistryServerForProcessing, preferredTransp } // Add environment variables if present - if env, hasEnv := server.Config["env"]; hasEnv { - mcpSection["env"] = convertToGitHubActionsEnv(env, server.EnvironmentVariables) + if envRaw, hasEnv := server.Config["env"]; hasEnv { + if envMap, ok := envRaw.(map[string]any); ok { + mcpSection["env"] = convertToGitHubActionsEnv(envMap, server.EnvironmentVariables) + } } } } else { @@ -267,8 +271,10 @@ func createMCPToolConfig(server *MCPRegistryServerForProcessing, preferredTransp } // Add environment variables if present - if env, hasEnv := server.Config["env"]; hasEnv { - mcpSection["env"] = convertToGitHubActionsEnv(env, server.EnvironmentVariables) + if envRaw, hasEnv := server.Config["env"]; hasEnv { + if envMap, ok := envRaw.(map[string]any); ok { + mcpSection["env"] = convertToGitHubActionsEnv(envMap, server.EnvironmentVariables) + } } } else { return nil, errors.New("docker transport requires configuration")