From cf525998d62bfc33f47ffcf54823862cd1bc69f5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 26 Apr 2026 20:51:58 +0000 Subject: [PATCH 1/2] Initial plan From 432d8e5d3a69973fc313ef24fe7c2930709c4f63 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sun, 26 Apr 2026 21:03:58 +0000 Subject: [PATCH 2/2] Migrate 6 config parsers from unmarshalConfig to parseConfigScaffold Agent-Logs-Url: https://github.com/github/gh-aw/sessions/1f058f02-6cb1-47a8-ba83-f28bf5d489c4 Co-authored-by: gh-aw-bot <259018956+gh-aw-bot@users.noreply.github.com> --- pkg/workflow/add_comment.go | 13 ++++++------- pkg/workflow/add_reviewer.go | 13 ++++++------- pkg/workflow/close_entity_helpers.go | 14 ++++++-------- pkg/workflow/create_discussion.go | 13 ++++++------- pkg/workflow/create_issue.go | 13 ++++++------- pkg/workflow/create_pull_request.go | 13 ++++++------- 6 files changed, 36 insertions(+), 43 deletions(-) diff --git a/pkg/workflow/add_comment.go b/pkg/workflow/add_comment.go index 8a3bcc58016..e2d4a998c55 100644 --- a/pkg/workflow/add_comment.go +++ b/pkg/workflow/add_comment.go @@ -32,8 +32,6 @@ func (c *Compiler) parseCommentsConfig(outputMap map[string]any) *AddCommentsCon return nil } - addCommentLog.Print("Parsing add-comment configuration") - // Get config data for pre-processing before YAML unmarshaling configData, _ := outputMap["add-comment"].(map[string]any) @@ -53,12 +51,13 @@ func (c *Compiler) parseCommentsConfig(outputMap map[string]any) *AddCommentsCon return nil } - // Unmarshal into typed config struct - var config AddCommentsConfig - if err := unmarshalConfig(outputMap, "add-comment", &config, addCommentLog); err != nil { + config := parseConfigScaffold(outputMap, "add-comment", addCommentLog, func(err error) *AddCommentsConfig { addCommentLog.Printf("Failed to unmarshal config: %v", err) // For backward compatibility, handle nil/empty config - config = AddCommentsConfig{} + return &AddCommentsConfig{} + }) + if config == nil { + return nil } // Set default max if not specified @@ -66,7 +65,7 @@ func (c *Compiler) parseCommentsConfig(outputMap map[string]any) *AddCommentsCon config.Max = defaultIntStr(1) } - return &config + return config } // buildAddCommentPermissions computes the permissions for the add_comment job based on config. diff --git a/pkg/workflow/add_reviewer.go b/pkg/workflow/add_reviewer.go index b61249df6dd..6311d15c66f 100644 --- a/pkg/workflow/add_reviewer.go +++ b/pkg/workflow/add_reviewer.go @@ -21,8 +21,6 @@ func (c *Compiler) parseAddReviewerConfig(outputMap map[string]any) *AddReviewer return nil } - addReviewerLog.Print("Parsing add-reviewer configuration") - // Get config data for pre-processing before YAML unmarshaling configData, _ := outputMap["add-reviewer"].(map[string]any) @@ -46,12 +44,13 @@ func (c *Compiler) parseAddReviewerConfig(outputMap map[string]any) *AddReviewer return nil } - // Unmarshal into typed config struct - var config AddReviewerConfig - if err := unmarshalConfig(outputMap, "add-reviewer", &config, addReviewerLog); err != nil { + config := parseConfigScaffold(outputMap, "add-reviewer", addReviewerLog, func(err error) *AddReviewerConfig { addReviewerLog.Printf("Failed to unmarshal config: %v", err) // For backward compatibility, handle nil/empty config - config = AddReviewerConfig{} + return &AddReviewerConfig{} + }) + if config == nil { + return nil } // Set default max if not specified @@ -61,5 +60,5 @@ func (c *Compiler) parseAddReviewerConfig(outputMap map[string]any) *AddReviewer addReviewerLog.Printf("Parsed add-reviewer config: allowed_reviewers=%d, target=%s", len(config.Reviewers), config.Target) - return &config + return config } diff --git a/pkg/workflow/close_entity_helpers.go b/pkg/workflow/close_entity_helpers.go index 221da19abbc..812c564a176 100644 --- a/pkg/workflow/close_entity_helpers.go +++ b/pkg/workflow/close_entity_helpers.go @@ -90,12 +90,9 @@ type CloseEntityJobParams struct { func (c *Compiler) parseCloseEntityConfig(outputMap map[string]any, params CloseEntityJobParams, logger *logger.Logger) *CloseEntityConfig { // Check if the key exists if _, exists := outputMap[params.ConfigKey]; !exists { - logger.Printf("No configuration found for %s", params.ConfigKey) return nil } - logger.Printf("Parsing %s configuration", params.ConfigKey) - // Get config data for pre-processing before YAML unmarshaling configData, _ := outputMap[params.ConfigKey].(map[string]any) @@ -105,12 +102,13 @@ func (c *Compiler) parseCloseEntityConfig(outputMap map[string]any, params Close return nil } - // Unmarshal into typed config struct - var config CloseEntityConfig - if err := unmarshalConfig(outputMap, params.ConfigKey, &config, logger); err != nil { + config := parseConfigScaffold(outputMap, params.ConfigKey, logger, func(err error) *CloseEntityConfig { logger.Printf("Failed to unmarshal config: %v", err) // For backward compatibility, handle nil/empty config - config = CloseEntityConfig{} + return &CloseEntityConfig{} + }) + if config == nil { + return nil } // Set default max if not specified @@ -121,7 +119,7 @@ func (c *Compiler) parseCloseEntityConfig(outputMap map[string]any, params Close logger.Printf("Parsed %s configuration: max=%s, target=%s", params.ConfigKey, *config.Max, config.Target) - return &config + return config } // closeEntityDefinition holds all parameters for a close entity type diff --git a/pkg/workflow/create_discussion.go b/pkg/workflow/create_discussion.go index 4c740ee6204..c5bfbf9c62c 100644 --- a/pkg/workflow/create_discussion.go +++ b/pkg/workflow/create_discussion.go @@ -34,8 +34,6 @@ func (c *Compiler) parseDiscussionsConfig(outputMap map[string]any) *CreateDiscu return nil } - discussionLog.Print("Parsing create-discussion configuration") - // Get the config data to check for special cases before unmarshaling configData, _ := outputMap["create-discussion"].(map[string]any) @@ -56,12 +54,13 @@ func (c *Compiler) parseDiscussionsConfig(outputMap map[string]any) *CreateDiscu return nil } - // Unmarshal into typed config struct - var config CreateDiscussionsConfig - if err := unmarshalConfig(outputMap, "create-discussion", &config, discussionLog); err != nil { + config := parseConfigScaffold(outputMap, "create-discussion", discussionLog, func(err error) *CreateDiscussionsConfig { discussionLog.Printf("Failed to unmarshal config: %v", err) // For backward compatibility, handle nil/empty config - config = CreateDiscussionsConfig{} + return &CreateDiscussionsConfig{} + }) + if config == nil { + return nil } // Set default max if not specified @@ -120,7 +119,7 @@ func (c *Compiler) parseDiscussionsConfig(outputMap map[string]any) *CreateDiscu discussionLog.Printf("Fallback to issue configured: %t", *config.FallbackToIssue) } - return &config + return config } // Returns normalized category (or original if it's a category ID) diff --git a/pkg/workflow/create_issue.go b/pkg/workflow/create_issue.go index 87be1954f19..374cdf1ee6c 100644 --- a/pkg/workflow/create_issue.go +++ b/pkg/workflow/create_issue.go @@ -32,8 +32,6 @@ func (c *Compiler) parseIssuesConfig(outputMap map[string]any) *CreateIssuesConf return nil } - createIssueLog.Print("Parsing create-issue configuration") - // Get the config data to check for special cases before unmarshaling configData, _ := outputMap["create-issue"].(map[string]any) @@ -55,12 +53,13 @@ func (c *Compiler) parseIssuesConfig(outputMap map[string]any) *CreateIssuesConf return nil } - // Unmarshal into typed config struct - var config CreateIssuesConfig - if err := unmarshalConfig(outputMap, "create-issue", &config, createIssueLog); err != nil { + config := parseConfigScaffold(outputMap, "create-issue", createIssueLog, func(err error) *CreateIssuesConfig { createIssueLog.Printf("Failed to unmarshal config: %v", err) // For backward compatibility, handle nil/empty config - config = CreateIssuesConfig{} + return &CreateIssuesConfig{} + }) + if config == nil { + return nil } // Handle single string assignee (YAML unmarshaling won't convert string to []string) @@ -85,7 +84,7 @@ func (c *Compiler) parseIssuesConfig(outputMap map[string]any) *CreateIssuesConf createIssueLog.Printf("Issue expiration configured: %d hours", config.Expires) } - return &config + return config } // hasCopilotAssignee checks if "copilot" is in the assignees list diff --git a/pkg/workflow/create_pull_request.go b/pkg/workflow/create_pull_request.go index c8812e30039..99ebfae0093 100644 --- a/pkg/workflow/create_pull_request.go +++ b/pkg/workflow/create_pull_request.go @@ -54,8 +54,6 @@ func (c *Compiler) parsePullRequestsConfig(outputMap map[string]any) *CreatePull return nil } - createPRLog.Print("Parsing create-pull-request configuration") - // Get the config data to check for special cases before unmarshaling configData, _ := outputMap["create-pull-request"].(map[string]any) @@ -129,12 +127,13 @@ func (c *Compiler) parsePullRequestsConfig(outputMap map[string]any) *CreatePull return nil } - // Unmarshal into typed config struct - var config CreatePullRequestsConfig - if err := unmarshalConfig(outputMap, "create-pull-request", &config, createPRLog); err != nil { + config := parseConfigScaffold(outputMap, "create-pull-request", createPRLog, func(err error) *CreatePullRequestsConfig { createPRLog.Printf("Failed to unmarshal config: %v", err) // For backward compatibility, handle nil/empty config - config = CreatePullRequestsConfig{} + return &CreatePullRequestsConfig{} + }) + if config == nil { + return nil } // Log expires if configured @@ -153,5 +152,5 @@ func (c *Compiler) parsePullRequestsConfig(outputMap map[string]any) *CreatePull createPRLog.Printf("Pull request max count configured: %s", *config.Max) } - return &config + return config }