From ae395144671403d63667f5e3581250052443840b Mon Sep 17 00:00:00 2001 From: gh-aw bot Date: Tue, 24 Feb 2026 20:34:03 +0000 Subject: [PATCH] Add debug logging to workflow pkg files for better troubleshooting Enhanced 5 workflow package files with meaningful debug logging to improve observability and aid troubleshooting during development: - trigger_parser.go: Log parsed trigger types (push-to-branch, push-tags, pull_request merged, issue with/without label filter, manual with/without input) - safe_outputs_env.go: Log env var setup details (staged mode, target repo slug, upload assets config, engine metadata) - update_entity_helpers.go: Log entity config parsing entry/completion with entity type, config key, and field count - yaml.go: Log OrderMapFields field counts for YAML generation tracing - safe_outputs_domains_validation.go: Log ecosystem identifier skips and validation pass/fail outcomes for network and safe-outputs domains Co-Authored-By: Claude Sonnet 4.6 --- pkg/workflow/safe_outputs_domains_validation.go | 17 +++++++++++++++-- pkg/workflow/safe_outputs_env.go | 8 ++++++++ pkg/workflow/trigger_parser.go | 9 +++++++++ pkg/workflow/update_entity_helpers.go | 3 +++ pkg/workflow/yaml.go | 2 ++ 5 files changed, 37 insertions(+), 2 deletions(-) diff --git a/pkg/workflow/safe_outputs_domains_validation.go b/pkg/workflow/safe_outputs_domains_validation.go index 164b410aa65..5f186c2b9d3 100644 --- a/pkg/workflow/safe_outputs_domains_validation.go +++ b/pkg/workflow/safe_outputs_domains_validation.go @@ -23,6 +23,7 @@ func (c *Compiler) validateNetworkAllowedDomains(network *NetworkPermissions) er for i, domain := range network.Allowed { // Skip ecosystem identifiers - they don't need domain pattern validation if isEcosystemIdentifier(domain) { + safeOutputsDomainsValidationLog.Printf("Skipping ecosystem identifier: %s", domain) continue } @@ -34,7 +35,13 @@ func (c *Compiler) validateNetworkAllowedDomains(network *NetworkPermissions) er } } - return collector.Error() + if err := collector.Error(); err != nil { + safeOutputsDomainsValidationLog.Printf("Network allowed domains validation failed: %v", err) + return err + } + + safeOutputsDomainsValidationLog.Print("Network allowed domains validation passed") + return nil } // isEcosystemIdentifier checks if a domain string is actually an ecosystem identifier @@ -73,7 +80,13 @@ func (c *Compiler) validateSafeOutputsAllowedDomains(config *SafeOutputsConfig) } } - return collector.Error() + if err := collector.Error(); err != nil { + safeOutputsDomainsValidationLog.Printf("Safe outputs allowed domains validation failed: %v", err) + return err + } + + safeOutputsDomainsValidationLog.Print("Safe outputs allowed domains validation passed") + return nil } // validateDomainPattern validates a single domain pattern diff --git a/pkg/workflow/safe_outputs_env.go b/pkg/workflow/safe_outputs_env.go index 4593227f97c..16f88d808f3 100644 --- a/pkg/workflow/safe_outputs_env.go +++ b/pkg/workflow/safe_outputs_env.go @@ -21,6 +21,8 @@ func applySafeOutputEnvToMap(env map[string]string, data *WorkflowData) { return } + safeOutputsEnvLog.Printf("Applying safe output env vars: trial_mode=%t, staged=%t", data.TrialMode, data.SafeOutputs.Staged) + env["GH_AW_SAFE_OUTPUTS"] = "${{ env.GH_AW_SAFE_OUTPUTS }}" // Add staged flag if specified @@ -33,6 +35,7 @@ func applySafeOutputEnvToMap(env map[string]string, data *WorkflowData) { // Add branch name if upload assets is configured if data.SafeOutputs.UploadAssets != nil { + safeOutputsEnvLog.Printf("Adding upload assets env vars: branch=%s", data.SafeOutputs.UploadAssets.BranchName) env["GH_AW_ASSETS_BRANCH"] = fmt.Sprintf("%q", data.SafeOutputs.UploadAssets.BranchName) env["GH_AW_ASSETS_MAX_SIZE_KB"] = strconv.Itoa(data.SafeOutputs.UploadAssets.MaxSizeKB) env["GH_AW_ASSETS_ALLOWED_EXTS"] = fmt.Sprintf("%q", strings.Join(data.SafeOutputs.UploadAssets.AllowedExts, ",")) @@ -103,13 +106,16 @@ func buildSafeOutputJobEnvVars(trialMode bool, trialLogicalRepoSlug string, stag // Pass the staged flag if it's set to true if trialMode || staged { + safeOutputsEnvLog.Printf("Setting staged flag: trial_mode=%t, staged=%t", trialMode, staged) customEnvVars = append(customEnvVars, " GH_AW_SAFE_OUTPUTS_STAGED: \"true\"\n") } // Set GH_AW_TARGET_REPO_SLUG - prefer target-repo config over trial target repo if targetRepoSlug != "" { + safeOutputsEnvLog.Printf("Setting target repo slug from config: %s", targetRepoSlug) customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_TARGET_REPO_SLUG: %q\n", targetRepoSlug)) } else if trialMode && trialLogicalRepoSlug != "" { + safeOutputsEnvLog.Printf("Setting target repo slug from trial mode: %s", trialLogicalRepoSlug) customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_TARGET_REPO_SLUG: %q\n", trialLogicalRepoSlug)) } @@ -189,6 +195,8 @@ func buildEngineMetadataEnvVars(engineConfig *EngineConfig) []string { return customEnvVars } + safeOutputsEnvLog.Printf("Building engine metadata env vars: id=%s, version=%s", engineConfig.ID, engineConfig.Version) + // Add engine ID if present if engineConfig.ID != "" { customEnvVars = append(customEnvVars, fmt.Sprintf(" GH_AW_ENGINE_ID: %q\n", engineConfig.ID)) diff --git a/pkg/workflow/trigger_parser.go b/pkg/workflow/trigger_parser.go index 910fc824902..68e480863f2 100644 --- a/pkg/workflow/trigger_parser.go +++ b/pkg/workflow/trigger_parser.go @@ -187,6 +187,7 @@ func parsePushTrigger(tokens []string) (*TriggerIR, error) { if len(tokens) >= 3 && tokens[1] == "to" { // "push to " branch := strings.Join(tokens[2:], " ") + triggerParserLog.Printf("Parsed push-to-branch trigger: branch=%s", branch) return &TriggerIR{ Event: "push", Filters: map[string]any{ @@ -201,6 +202,7 @@ func parsePushTrigger(tokens []string) (*TriggerIR, error) { if len(tokens) >= 3 && tokens[1] == "tags" { // "push tags " pattern := strings.Join(tokens[2:], " ") + triggerParserLog.Printf("Parsed push-tags trigger: pattern=%s", pattern) return &TriggerIR{ Event: "push", Filters: map[string]any{ @@ -242,6 +244,7 @@ func parsePullRequestTrigger(tokens []string) (*TriggerIR, error) { // Special case: "merged" is not a real type, it's a condition on "closed" if activityType == "merged" { + triggerParserLog.Print("Parsed pull_request merged trigger (maps to closed with merge condition)") return &TriggerIR{ Event: "pull_request", Types: []string{"closed"}, @@ -344,9 +347,12 @@ func parseIssueTrigger(tokens []string) (*TriggerIR, error) { // Check for label filter: "issue opened labeled