Thanks to visit codestin.com
Credit goes to github.com

Skip to content

fix: set GH_AW_WORKFLOW_SOURCE_URL for local workflows in failure issues#34090

Merged
pelikhan merged 1 commit into
mainfrom
copilot/fix-workflow-link-in-failure-text
May 22, 2026
Merged

fix: set GH_AW_WORKFLOW_SOURCE_URL for local workflows in failure issues#34090
pelikhan merged 1 commit into
mainfrom
copilot/fix-workflow-link-in-failure-text

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented May 22, 2026

Local workflows (no external source: frontmatter) never had GH_AW_WORKFLOW_SOURCE_URL emitted by the compiler, so handle_agent_failure.cjs fell back to "#" — producing [Linter Miner](#) in failure issue bodies, a link pointing to the issue itself.

External workflows (e.g. ci-doctor, dependabot-repair) were unaffected because they already have a pinned external source URL.

Changes

  • frontmatter_extraction_metadata.go — new buildLocalWorkflowSourceURL(markdownPath) that builds a GitHub blob URL from the local markdown path using runtime expressions:
    ${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/.github/workflows/linter-miner.md
    
  • safe_outputs_env.gobuildWorkflowMetadataEnvVars / buildWorkflowMetadataEnvVarsWithTrackerID accept a new localSourceURL parameter used as fallback when workflowSource is empty
  • notify_comment.go, compiler_safe_outputs_job.go — all call sites pass buildLocalWorkflowSourceURL(c.markdownPath)
  • 229 local workflow lock files recompiled — each handle_agent_failure step now includes the correct GH_AW_WORKFLOW_SOURCE_URL; 5 external-source workflows unchanged

Local workflows (no external `source:` frontmatter field) never had
GH_AW_WORKFLOW_SOURCE_URL set, causing `handle_agent_failure.cjs` to
fall back to `"#"`. This made the Workflow link in failure issue bodies
point to the issue itself instead of the workflow source file.

- Add buildLocalWorkflowSourceURL() to derive a GitHub URL from the
  markdown path using ${{ github.server_url }}, ${{ github.repository }},
  and ${{ github.ref_name }} expressions
- Modify buildWorkflowMetadataEnvVars/WithTrackerID to accept a
  localSourceURL fallback used when workflowSource is empty
- Update all callers (notify_comment.go, safe_outputs_env.go,
  compiler_safe_outputs_job.go) to pass the local URL
- Recompile all 229 local workflows to apply the fix

Co-authored-by: pelikhan <[email protected]>
Copilot AI requested a review from pelikhan May 22, 2026 18:56
@pelikhan pelikhan marked this pull request as ready for review May 22, 2026 20:51
Copilot AI review requested due to automatic review settings May 22, 2026 20:51
@pelikhan pelikhan merged commit eb7ca53 into main May 22, 2026
@pelikhan pelikhan deleted the copilot/fix-workflow-link-in-failure-text branch May 22, 2026 20:52
Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR fixes missing GH_AW_WORKFLOW_SOURCE_URL emission for local workflows (no external source: frontmatter), ensuring failure-issue bodies link to the workflow markdown file instead of falling back to "#".

Changes:

  • Add buildLocalWorkflowSourceURL(markdownPath) to derive a repo blob URL for local workflow markdown files.
  • Extend workflow metadata env-var builders to accept a localSourceURL fallback when workflowSource is empty, and plumb it through compiler call sites.
  • Recompile workflow lock files so GH_AW_WORKFLOW_SOURCE_URL is present in handle_agent_failure/safe-outputs contexts.
Show a summary per file
File Description
pkg/workflow/frontmatter_extraction_metadata.go Add helper to derive local workflow source blob URL from markdown path.
pkg/workflow/frontmatter_extraction_metadata_test.go Add unit tests covering local URL derivation behavior.
pkg/workflow/safe_outputs_env.go Add localSourceURL fallback for GH_AW_WORKFLOW_SOURCE_URL when no external source is set.
pkg/workflow/safe_output_helpers_test.go Expand tests to cover local URL fallback and precedence rules.
pkg/workflow/safe_outputs_test.go Update tests for new buildWorkflowMetadataEnvVarsWithTrackerID signature.
pkg/workflow/compiler_safe_outputs_job.go Populate GH_AW_WORKFLOW_SOURCE_URL at job level for local workflows.
.github/workflows/workflow-normalizer.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/workflow-generator.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/video-analyzer.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/update-astro.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/unbloat-docs.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/typist.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/tidy.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/test-workflow.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/test-quality-sentinel.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/test-project-url-default.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/test-dispatcher.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/terminal-stylist.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/super-linter.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/step-name-alignment.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/static-analysis-report.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/stale-pr-cleanup.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/spec-extractor.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/spec-enforcer.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-test-tools.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-project.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-pi.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-opencode.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-gemini.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-crush.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-claude.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/smoke-ci.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/sergo.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/semantic-function-refactor.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/security-review.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/security-compliance.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/scout.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/schema-consistency-checker.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/safe-output-health.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/research.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/repo-tree-map.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/release.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/refiner.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/q.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/pr-triage-agent.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/pr-sous-chef.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/pr-description-caveman.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/pr-code-quality-reviewer.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/plan.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/pdf-summary.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/outcome-collector.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/metrics-collector.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/mergefest.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/mcp-inspector.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/linter-miner.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/lint-monster.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/issue-monster.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/instructions-janitor.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/hourly-ci-cleaner.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/hippo-embed.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/gpclean.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/go-pattern-detector.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/go-logger.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/go-fan.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/glossary-maintainer.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/firewall.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/example-workflow-analyzer.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/example-permissions-warning.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/draft-pr-cleanup.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/dictation-prompt.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/dev.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/dev-hawk.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/deployment-incident-monitor.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/dependabot-worker.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/delight.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/dead-code-remover.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/daily-regulatory.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/daily-malicious-code-scan.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/daily-cli-performance.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/daily-choice-test.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/craft.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/copilot-opt.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/copilot-agent-analysis.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/contribution-check.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/codex-github-remote-mcp-test.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/code-simplifier.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/cloclo.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/cli-version-checker.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/ci-coach.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/changeset.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/brave.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/bot-detection.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/blog-auditor.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/artifacts-summary.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/architecture-guardian.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/archie.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/approach-validator.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/ai-moderator.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.
.github/workflows/ace-editor.lock.yml Emit GH_AW_WORKFLOW_SOURCE_URL for local workflow failure/metadata env.

Copilot's findings

Tip

Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

  • Files reviewed: 236/236 changed files
  • Comments generated: 1

Comment on lines +200 to +202
url := fmt.Sprintf("${{ github.server_url }}/${{ github.repository }}/blob/${{ github.ref_name }}/%s", relPath)
frontmatterMetadataLog.Printf("Built local workflow source URL for %s", relPath)
return url
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants