diff --git a/.github/workflows/agent-performance-analyzer.lock.yml b/.github/workflows/agent-performance-analyzer.lock.yml
index fa3c0df55c..ff39bb4cdf 100644
--- a/.github/workflows/agent-performance-analyzer.lock.yml
+++ b/.github/workflows/agent-performance-analyzer.lock.yml
@@ -1336,8 +1336,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/archie.lock.yml b/.github/workflows/archie.lock.yml
index 164c6773dc..cf433d386d 100644
--- a/.github/workflows/archie.lock.yml
+++ b/.github/workflows/archie.lock.yml
@@ -1133,6 +1133,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/bot-detection.lock.yml b/.github/workflows/bot-detection.lock.yml
index baee931703..28e3a64b77 100644
--- a/.github/workflows/bot-detection.lock.yml
+++ b/.github/workflows/bot-detection.lock.yml
@@ -1855,6 +1855,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml
index 9a503cdef9..97cd66e053 100644
--- a/.github/workflows/brave.lock.yml
+++ b/.github/workflows/brave.lock.yml
@@ -1118,6 +1118,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/breaking-change-checker.lock.yml b/.github/workflows/breaking-change-checker.lock.yml
index c7606df8d7..2efd80e683 100644
--- a/.github/workflows/breaking-change-checker.lock.yml
+++ b/.github/workflows/breaking-change-checker.lock.yml
@@ -1114,6 +1114,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/changeset.lock.yml b/.github/workflows/changeset.lock.yml
index 7a480fae0f..aab6b82939 100644
--- a/.github/workflows/changeset.lock.yml
+++ b/.github/workflows/changeset.lock.yml
@@ -1174,6 +1174,8 @@ jobs:
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
+ push_commit_sha: ${{ steps.process_safe_outputs.outputs.push_commit_sha }}
+ push_commit_url: ${{ steps.process_safe_outputs.outputs.push_commit_url }}
steps:
- name: Checkout actions folder
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/ci-coach.lock.yml b/.github/workflows/ci-coach.lock.yml
index f431593f48..86f4c42a90 100644
--- a/.github/workflows/ci-coach.lock.yml
+++ b/.github/workflows/ci-coach.lock.yml
@@ -1146,6 +1146,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml
index c3c54d8388..06ef38af21 100644
--- a/.github/workflows/ci-doctor.lock.yml
+++ b/.github/workflows/ci-doctor.lock.yml
@@ -1324,8 +1324,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/cli-consistency-checker.lock.yml b/.github/workflows/cli-consistency-checker.lock.yml
index c78543ca08..a04960cb16 100644
--- a/.github/workflows/cli-consistency-checker.lock.yml
+++ b/.github/workflows/cli-consistency-checker.lock.yml
@@ -1032,6 +1032,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml
index 0f2c077571..7f4d8fac94 100644
--- a/.github/workflows/cli-version-checker.lock.yml
+++ b/.github/workflows/cli-version-checker.lock.yml
@@ -1134,6 +1134,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/cloclo.lock.yml b/.github/workflows/cloclo.lock.yml
index d7b95a713b..abde12ad9a 100644
--- a/.github/workflows/cloclo.lock.yml
+++ b/.github/workflows/cloclo.lock.yml
@@ -1505,8 +1505,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/code-scanning-fixer.lock.yml b/.github/workflows/code-scanning-fixer.lock.yml
index e2f0996d40..48e97c6aa3 100644
--- a/.github/workflows/code-scanning-fixer.lock.yml
+++ b/.github/workflows/code-scanning-fixer.lock.yml
@@ -1256,6 +1256,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/code-simplifier.lock.yml b/.github/workflows/code-simplifier.lock.yml
index 023b4ba58d..cfd2bfd286 100644
--- a/.github/workflows/code-simplifier.lock.yml
+++ b/.github/workflows/code-simplifier.lock.yml
@@ -1122,6 +1122,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/contribution-check.lock.yml b/.github/workflows/contribution-check.lock.yml
index 3fa4eb2544..1732bac825 100644
--- a/.github/workflows/contribution-check.lock.yml
+++ b/.github/workflows/contribution-check.lock.yml
@@ -1111,8 +1111,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/craft.lock.yml b/.github/workflows/craft.lock.yml
index 12e586c4a8..3c4c0622a5 100644
--- a/.github/workflows/craft.lock.yml
+++ b/.github/workflows/craft.lock.yml
@@ -1156,10 +1156,14 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
+ push_commit_sha: ${{ steps.process_safe_outputs.outputs.push_commit_sha }}
+ push_commit_url: ${{ steps.process_safe_outputs.outputs.push_commit_url }}
steps:
- name: Checkout actions folder
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/daily-architecture-diagram.lock.yml b/.github/workflows/daily-architecture-diagram.lock.yml
index b54325f8d8..0470ab3e03 100644
--- a/.github/workflows/daily-architecture-diagram.lock.yml
+++ b/.github/workflows/daily-architecture-diagram.lock.yml
@@ -1060,6 +1060,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-assign-issue-to-user.lock.yml b/.github/workflows/daily-assign-issue-to-user.lock.yml
index 9300095c59..1bcc6c44ea 100644
--- a/.github/workflows/daily-assign-issue-to-user.lock.yml
+++ b/.github/workflows/daily-assign-issue-to-user.lock.yml
@@ -1050,6 +1050,8 @@ jobs:
assign_to_user_assigned: ${{ steps.process_safe_outputs.outputs.assigned }}
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/daily-cli-performance.lock.yml b/.github/workflows/daily-cli-performance.lock.yml
index 0eb5086d16..e208dfe252 100644
--- a/.github/workflows/daily-cli-performance.lock.yml
+++ b/.github/workflows/daily-cli-performance.lock.yml
@@ -1337,8 +1337,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-cli-tools-tester.lock.yml b/.github/workflows/daily-cli-tools-tester.lock.yml
index 84df18dd79..06ed3b920f 100644
--- a/.github/workflows/daily-cli-tools-tester.lock.yml
+++ b/.github/workflows/daily-cli-tools-tester.lock.yml
@@ -1105,6 +1105,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-doc-healer.lock.yml b/.github/workflows/daily-doc-healer.lock.yml
index ea5eb39784..263a8f02f3 100644
--- a/.github/workflows/daily-doc-healer.lock.yml
+++ b/.github/workflows/daily-doc-healer.lock.yml
@@ -1246,6 +1246,10 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml
index cf2c09d95c..be8bf80eee 100644
--- a/.github/workflows/daily-doc-updater.lock.yml
+++ b/.github/workflows/daily-doc-updater.lock.yml
@@ -1173,6 +1173,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-fact.lock.yml b/.github/workflows/daily-fact.lock.yml
index 0837a97c91..a277214281 100644
--- a/.github/workflows/daily-fact.lock.yml
+++ b/.github/workflows/daily-fact.lock.yml
@@ -980,6 +980,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/daily-file-diet.lock.yml b/.github/workflows/daily-file-diet.lock.yml
index d1ed40ff25..45d5d2c1ba 100644
--- a/.github/workflows/daily-file-diet.lock.yml
+++ b/.github/workflows/daily-file-diet.lock.yml
@@ -1129,6 +1129,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml
index 68801cb2f8..3420219a68 100644
--- a/.github/workflows/daily-mcp-concurrency-analysis.lock.yml
+++ b/.github/workflows/daily-mcp-concurrency-analysis.lock.yml
@@ -1134,6 +1134,8 @@ jobs:
create_agent_session_session_url: ${{ steps.create_agent_session.outputs.session_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-multi-device-docs-tester.lock.yml b/.github/workflows/daily-multi-device-docs-tester.lock.yml
index c410cd86b9..5a025a9853 100644
--- a/.github/workflows/daily-multi-device-docs-tester.lock.yml
+++ b/.github/workflows/daily-multi-device-docs-tester.lock.yml
@@ -1223,6 +1223,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-rendering-scripts-verifier.lock.yml b/.github/workflows/daily-rendering-scripts-verifier.lock.yml
index 41c11ba5b8..2239441dc4 100644
--- a/.github/workflows/daily-rendering-scripts-verifier.lock.yml
+++ b/.github/workflows/daily-rendering-scripts-verifier.lock.yml
@@ -1301,6 +1301,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-safe-output-optimizer.lock.yml b/.github/workflows/daily-safe-output-optimizer.lock.yml
index b72b406f65..169cb998aa 100644
--- a/.github/workflows/daily-safe-output-optimizer.lock.yml
+++ b/.github/workflows/daily-safe-output-optimizer.lock.yml
@@ -1267,6 +1267,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-safe-outputs-conformance.lock.yml b/.github/workflows/daily-safe-outputs-conformance.lock.yml
index 93fd028878..b64b8790e2 100644
--- a/.github/workflows/daily-safe-outputs-conformance.lock.yml
+++ b/.github/workflows/daily-safe-outputs-conformance.lock.yml
@@ -1102,6 +1102,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-security-red-team.lock.yml b/.github/workflows/daily-security-red-team.lock.yml
index 38e92b99c3..a3c05ce229 100644
--- a/.github/workflows/daily-security-red-team.lock.yml
+++ b/.github/workflows/daily-security-red-team.lock.yml
@@ -1106,6 +1106,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-syntax-error-quality.lock.yml b/.github/workflows/daily-syntax-error-quality.lock.yml
index 96d40f1761..203f375591 100644
--- a/.github/workflows/daily-syntax-error-quality.lock.yml
+++ b/.github/workflows/daily-syntax-error-quality.lock.yml
@@ -1066,6 +1066,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-team-status.lock.yml b/.github/workflows/daily-team-status.lock.yml
index 8ebb33601f..c02be35688 100644
--- a/.github/workflows/daily-team-status.lock.yml
+++ b/.github/workflows/daily-team-status.lock.yml
@@ -1099,6 +1099,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-testify-uber-super-expert.lock.yml b/.github/workflows/daily-testify-uber-super-expert.lock.yml
index 9f7a283624..28591a5a5b 100644
--- a/.github/workflows/daily-testify-uber-super-expert.lock.yml
+++ b/.github/workflows/daily-testify-uber-super-expert.lock.yml
@@ -1229,6 +1229,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/daily-workflow-updater.lock.yml b/.github/workflows/daily-workflow-updater.lock.yml
index 7181fec66a..a23d48645a 100644
--- a/.github/workflows/daily-workflow-updater.lock.yml
+++ b/.github/workflows/daily-workflow-updater.lock.yml
@@ -1059,6 +1059,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/deep-report.lock.yml b/.github/workflows/deep-report.lock.yml
index 47a39b4b1e..acbf0ab0b7 100644
--- a/.github/workflows/deep-report.lock.yml
+++ b/.github/workflows/deep-report.lock.yml
@@ -1354,6 +1354,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/delight.lock.yml b/.github/workflows/delight.lock.yml
index 4f7c3542f6..e793ca227a 100644
--- a/.github/workflows/delight.lock.yml
+++ b/.github/workflows/delight.lock.yml
@@ -1233,6 +1233,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/dependabot-burner.lock.yml b/.github/workflows/dependabot-burner.lock.yml
index 0051cb70a7..36ab99dc4e 100644
--- a/.github/workflows/dependabot-burner.lock.yml
+++ b/.github/workflows/dependabot-burner.lock.yml
@@ -1069,6 +1069,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/dependabot-go-checker.lock.yml b/.github/workflows/dependabot-go-checker.lock.yml
index d3a8f4df78..75cbf2f5e3 100644
--- a/.github/workflows/dependabot-go-checker.lock.yml
+++ b/.github/workflows/dependabot-go-checker.lock.yml
@@ -1079,6 +1079,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/dev-hawk.lock.yml b/.github/workflows/dev-hawk.lock.yml
index 71d6df2926..dba5e9d58d 100644
--- a/.github/workflows/dev-hawk.lock.yml
+++ b/.github/workflows/dev-hawk.lock.yml
@@ -1151,6 +1151,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml
index 7f45065ceb..f0a2e9e82f 100644
--- a/.github/workflows/dev.lock.yml
+++ b/.github/workflows/dev.lock.yml
@@ -1029,6 +1029,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/developer-docs-consolidator.lock.yml b/.github/workflows/developer-docs-consolidator.lock.yml
index 33ca8396dc..3851c0ff88 100644
--- a/.github/workflows/developer-docs-consolidator.lock.yml
+++ b/.github/workflows/developer-docs-consolidator.lock.yml
@@ -1251,6 +1251,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/dictation-prompt.lock.yml b/.github/workflows/dictation-prompt.lock.yml
index ae227502eb..22e41787f3 100644
--- a/.github/workflows/dictation-prompt.lock.yml
+++ b/.github/workflows/dictation-prompt.lock.yml
@@ -1059,6 +1059,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/discussion-task-miner.lock.yml b/.github/workflows/discussion-task-miner.lock.yml
index 38306f086f..4f7ed4c522 100644
--- a/.github/workflows/discussion-task-miner.lock.yml
+++ b/.github/workflows/discussion-task-miner.lock.yml
@@ -1214,8 +1214,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/draft-pr-cleanup.lock.yml b/.github/workflows/draft-pr-cleanup.lock.yml
index 1bad6fcd43..40c5e42bdb 100644
--- a/.github/workflows/draft-pr-cleanup.lock.yml
+++ b/.github/workflows/draft-pr-cleanup.lock.yml
@@ -1080,6 +1080,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml
index 5bb89f5c41..d43eec4fd9 100644
--- a/.github/workflows/duplicate-code-detector.lock.yml
+++ b/.github/workflows/duplicate-code-detector.lock.yml
@@ -1075,6 +1075,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/functional-pragmatist.lock.yml b/.github/workflows/functional-pragmatist.lock.yml
index 3a141e961e..4579d3c54c 100644
--- a/.github/workflows/functional-pragmatist.lock.yml
+++ b/.github/workflows/functional-pragmatist.lock.yml
@@ -1072,6 +1072,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml
index 93bbc113c0..d7c6e32659 100644
--- a/.github/workflows/github-mcp-tools-report.lock.yml
+++ b/.github/workflows/github-mcp-tools-report.lock.yml
@@ -1208,6 +1208,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/glossary-maintainer.lock.yml b/.github/workflows/glossary-maintainer.lock.yml
index 25efa51e0b..551a7ead82 100644
--- a/.github/workflows/glossary-maintainer.lock.yml
+++ b/.github/workflows/glossary-maintainer.lock.yml
@@ -1144,6 +1144,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/go-logger.lock.yml b/.github/workflows/go-logger.lock.yml
index f07ccc181d..f37eba2486 100644
--- a/.github/workflows/go-logger.lock.yml
+++ b/.github/workflows/go-logger.lock.yml
@@ -1335,6 +1335,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml
index f9b7fefc05..d95c71d311 100644
--- a/.github/workflows/go-pattern-detector.lock.yml
+++ b/.github/workflows/go-pattern-detector.lock.yml
@@ -1143,6 +1143,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/gpclean.lock.yml b/.github/workflows/gpclean.lock.yml
index d850d3a8bb..04b9380665 100644
--- a/.github/workflows/gpclean.lock.yml
+++ b/.github/workflows/gpclean.lock.yml
@@ -1066,6 +1066,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/hourly-ci-cleaner.lock.yml b/.github/workflows/hourly-ci-cleaner.lock.yml
index 74aad62c87..adb6758a42 100644
--- a/.github/workflows/hourly-ci-cleaner.lock.yml
+++ b/.github/workflows/hourly-ci-cleaner.lock.yml
@@ -1171,6 +1171,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/instructions-janitor.lock.yml b/.github/workflows/instructions-janitor.lock.yml
index e8740c83a2..a01d8990e7 100644
--- a/.github/workflows/instructions-janitor.lock.yml
+++ b/.github/workflows/instructions-janitor.lock.yml
@@ -1163,6 +1163,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/issue-arborist.lock.yml b/.github/workflows/issue-arborist.lock.yml
index 9e8f957cca..1d5b953183 100644
--- a/.github/workflows/issue-arborist.lock.yml
+++ b/.github/workflows/issue-arborist.lock.yml
@@ -1146,6 +1146,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/issue-monster.lock.yml b/.github/workflows/issue-monster.lock.yml
index e22800643b..55a56a859a 100644
--- a/.github/workflows/issue-monster.lock.yml
+++ b/.github/workflows/issue-monster.lock.yml
@@ -1149,6 +1149,8 @@ jobs:
assign_to_agent_assignment_errors: ${{ steps.assign_to_agent.outputs.assignment_errors }}
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/issue-triage-agent.lock.yml b/.github/workflows/issue-triage-agent.lock.yml
index 171982104e..dac3551078 100644
--- a/.github/workflows/issue-triage-agent.lock.yml
+++ b/.github/workflows/issue-triage-agent.lock.yml
@@ -1031,6 +1031,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/jsweep.lock.yml b/.github/workflows/jsweep.lock.yml
index ee8ff237d1..c8bdd615cd 100644
--- a/.github/workflows/jsweep.lock.yml
+++ b/.github/workflows/jsweep.lock.yml
@@ -1108,6 +1108,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/layout-spec-maintainer.lock.yml b/.github/workflows/layout-spec-maintainer.lock.yml
index 401c64d15a..58bd4c6e85 100644
--- a/.github/workflows/layout-spec-maintainer.lock.yml
+++ b/.github/workflows/layout-spec-maintainer.lock.yml
@@ -1101,6 +1101,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/mergefest.lock.yml b/.github/workflows/mergefest.lock.yml
index 3e489dfc85..1f91874f1b 100644
--- a/.github/workflows/mergefest.lock.yml
+++ b/.github/workflows/mergefest.lock.yml
@@ -1154,6 +1154,8 @@ jobs:
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
+ push_commit_sha: ${{ steps.process_safe_outputs.outputs.push_commit_sha }}
+ push_commit_url: ${{ steps.process_safe_outputs.outputs.push_commit_url }}
steps:
- name: Checkout actions folder
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml
index c100e50816..0c38e2fc79 100644
--- a/.github/workflows/pdf-summary.lock.yml
+++ b/.github/workflows/pdf-summary.lock.yml
@@ -1227,6 +1227,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml
index 1a173f859e..68b128b2f3 100644
--- a/.github/workflows/plan.lock.yml
+++ b/.github/workflows/plan.lock.yml
@@ -1190,6 +1190,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml
index 939f01549d..8e66a4504c 100644
--- a/.github/workflows/poem-bot.lock.yml
+++ b/.github/workflows/poem-bot.lock.yml
@@ -1831,12 +1831,20 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_agent_session_session_number: ${{ steps.create_agent_session.outputs.session_number }}
create_agent_session_session_url: ${{ steps.create_agent_session.outputs.session_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
+ push_commit_sha: ${{ steps.process_safe_outputs.outputs.push_commit_sha }}
+ push_commit_url: ${{ steps.process_safe_outputs.outputs.push_commit_url }}
steps:
- name: Checkout actions folder
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/pr-triage-agent.lock.yml b/.github/workflows/pr-triage-agent.lock.yml
index 8b7751a4ff..c71a8f1094 100644
--- a/.github/workflows/pr-triage-agent.lock.yml
+++ b/.github/workflows/pr-triage-agent.lock.yml
@@ -1219,8 +1219,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml
index bd4732923c..7197470e63 100644
--- a/.github/workflows/q.lock.yml
+++ b/.github/workflows/q.lock.yml
@@ -1360,8 +1360,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/refiner.lock.yml b/.github/workflows/refiner.lock.yml
index dfe035a1d6..486984fffa 100644
--- a/.github/workflows/refiner.lock.yml
+++ b/.github/workflows/refiner.lock.yml
@@ -1164,8 +1164,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml
index 856ec64a6b..89275da45f 100644
--- a/.github/workflows/scout.lock.yml
+++ b/.github/workflows/scout.lock.yml
@@ -1366,6 +1366,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/security-alert-burndown.campaign.g.lock.yml b/.github/workflows/security-alert-burndown.campaign.g.lock.yml
index ef7e145d2b..b871b1bfac 100644
--- a/.github/workflows/security-alert-burndown.campaign.g.lock.yml
+++ b/.github/workflows/security-alert-burndown.campaign.g.lock.yml
@@ -1511,8 +1511,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/security-compliance.lock.yml b/.github/workflows/security-compliance.lock.yml
index 35c9a4daa0..1e67eab625 100644
--- a/.github/workflows/security-compliance.lock.yml
+++ b/.github/workflows/security-compliance.lock.yml
@@ -1166,6 +1166,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/semantic-function-refactor.lock.yml b/.github/workflows/semantic-function-refactor.lock.yml
index ba942ec26f..a8a235c776 100644
--- a/.github/workflows/semantic-function-refactor.lock.yml
+++ b/.github/workflows/semantic-function-refactor.lock.yml
@@ -1179,6 +1179,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/slide-deck-maintainer.lock.yml b/.github/workflows/slide-deck-maintainer.lock.yml
index bfb6ae922a..5029ee5f53 100644
--- a/.github/workflows/slide-deck-maintainer.lock.yml
+++ b/.github/workflows/slide-deck-maintainer.lock.yml
@@ -1211,6 +1211,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-agent.lock.yml b/.github/workflows/smoke-agent.lock.yml
index 48f8e9bc6b..7ff428cda7 100644
--- a/.github/workflows/smoke-agent.lock.yml
+++ b/.github/workflows/smoke-agent.lock.yml
@@ -1147,6 +1147,8 @@ jobs:
assign_to_agent_assignment_errors: ${{ steps.assign_to_agent.outputs.assignment_errors }}
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml
index 0974d1bf89..27d54fda45 100644
--- a/.github/workflows/smoke-claude.lock.yml
+++ b/.github/workflows/smoke-claude.lock.yml
@@ -2723,10 +2723,16 @@ jobs:
add_reviewer_reviewers_added: ${{ steps.process_safe_outputs.outputs.reviewers_added }}
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
+ push_commit_sha: ${{ steps.process_safe_outputs.outputs.push_commit_sha }}
+ push_commit_url: ${{ steps.process_safe_outputs.outputs.push_commit_url }}
steps:
- name: Checkout actions folder
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml
index 617072acfa..cbe5e08920 100644
--- a/.github/workflows/smoke-codex.lock.yml
+++ b/.github/workflows/smoke-codex.lock.yml
@@ -1617,8 +1617,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-copilot-arm.lock.yml b/.github/workflows/smoke-copilot-arm.lock.yml
index c848fad0ef..4a4d252ea3 100644
--- a/.github/workflows/smoke-copilot-arm.lock.yml
+++ b/.github/workflows/smoke-copilot-arm.lock.yml
@@ -2141,8 +2141,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml
index 3876e6ec5d..12ab1a8dc4 100644
--- a/.github/workflows/smoke-copilot.lock.yml
+++ b/.github/workflows/smoke-copilot.lock.yml
@@ -2138,8 +2138,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-gemini.lock.yml b/.github/workflows/smoke-gemini.lock.yml
index e55fab10dd..4e76ab25bd 100644
--- a/.github/workflows/smoke-gemini.lock.yml
+++ b/.github/workflows/smoke-gemini.lock.yml
@@ -1359,8 +1359,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-multi-pr.lock.yml b/.github/workflows/smoke-multi-pr.lock.yml
index e43c1f97ea..c275c7c34e 100644
--- a/.github/workflows/smoke-multi-pr.lock.yml
+++ b/.github/workflows/smoke-multi-pr.lock.yml
@@ -1231,8 +1231,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-project.lock.yml b/.github/workflows/smoke-project.lock.yml
index 7999a6e109..bb2da43782 100644
--- a/.github/workflows/smoke-project.lock.yml
+++ b/.github/workflows/smoke-project.lock.yml
@@ -1624,8 +1624,14 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-temporary-id.lock.yml b/.github/workflows/smoke-temporary-id.lock.yml
index 028baaa866..5dabd6b4c2 100644
--- a/.github/workflows/smoke-temporary-id.lock.yml
+++ b/.github/workflows/smoke-temporary-id.lock.yml
@@ -1229,8 +1229,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/smoke-test-tools.lock.yml b/.github/workflows/smoke-test-tools.lock.yml
index 9b35e616d9..63ed4f1e72 100644
--- a/.github/workflows/smoke-test-tools.lock.yml
+++ b/.github/workflows/smoke-test-tools.lock.yml
@@ -1116,6 +1116,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/smoke-workflow-call.lock.yml b/.github/workflows/smoke-workflow-call.lock.yml
index e988e89362..043db8e878 100644
--- a/.github/workflows/smoke-workflow-call.lock.yml
+++ b/.github/workflows/smoke-workflow-call.lock.yml
@@ -28,7 +28,14 @@
name: "Smoke Workflow Call"
"on":
workflow_call:
- workflow_dispatch:
+ outputs:
+ comment_id:
+ description: ID of the first added comment
+ value: ${{ jobs.safe_outputs.outputs.comment_id }}
+ comment_url:
+ description: URL of the first added comment
+ value: ${{ jobs.safe_outputs.outputs.comment_url }}
+ workflow_dispatch: null
permissions: {}
@@ -1054,6 +1061,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/stale-repo-identifier.lock.yml b/.github/workflows/stale-repo-identifier.lock.yml
index 5e58951587..5400571465 100644
--- a/.github/workflows/stale-repo-identifier.lock.yml
+++ b/.github/workflows/stale-repo-identifier.lock.yml
@@ -1194,6 +1194,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/step-name-alignment.lock.yml b/.github/workflows/step-name-alignment.lock.yml
index 4109dc6d32..ecd6d830b0 100644
--- a/.github/workflows/step-name-alignment.lock.yml
+++ b/.github/workflows/step-name-alignment.lock.yml
@@ -1133,6 +1133,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/sub-issue-closer.lock.yml b/.github/workflows/sub-issue-closer.lock.yml
index 9326611e0f..668dd611f5 100644
--- a/.github/workflows/sub-issue-closer.lock.yml
+++ b/.github/workflows/sub-issue-closer.lock.yml
@@ -1120,6 +1120,8 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
diff --git a/.github/workflows/super-linter.lock.yml b/.github/workflows/super-linter.lock.yml
index 70d098e849..517295f970 100644
--- a/.github/workflows/super-linter.lock.yml
+++ b/.github/workflows/super-linter.lock.yml
@@ -1081,6 +1081,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml
index 8b79db8f12..cdf87bbbfa 100644
--- a/.github/workflows/technical-doc-writer.lock.yml
+++ b/.github/workflows/technical-doc-writer.lock.yml
@@ -1210,8 +1210,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/test-create-pr-error-handling.lock.yml b/.github/workflows/test-create-pr-error-handling.lock.yml
index 6182c459c3..fec298541b 100644
--- a/.github/workflows/test-create-pr-error-handling.lock.yml
+++ b/.github/workflows/test-create-pr-error-handling.lock.yml
@@ -1135,6 +1135,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml
index 50fa89b8b7..c5d6be74f9 100644
--- a/.github/workflows/tidy.lock.yml
+++ b/.github/workflows/tidy.lock.yml
@@ -1251,8 +1251,12 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
+ push_commit_sha: ${{ steps.process_safe_outputs.outputs.push_commit_sha }}
+ push_commit_url: ${{ steps.process_safe_outputs.outputs.push_commit_url }}
steps:
- name: Checkout actions folder
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
diff --git a/.github/workflows/ubuntu-image-analyzer.lock.yml b/.github/workflows/ubuntu-image-analyzer.lock.yml
index ae64aa1126..7a0f3af557 100644
--- a/.github/workflows/ubuntu-image-analyzer.lock.yml
+++ b/.github/workflows/ubuntu-image-analyzer.lock.yml
@@ -1141,6 +1141,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml
index 0105be7497..c50db68b6a 100644
--- a/.github/workflows/unbloat-docs.lock.yml
+++ b/.github/workflows/unbloat-docs.lock.yml
@@ -1422,8 +1422,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/video-analyzer.lock.yml b/.github/workflows/video-analyzer.lock.yml
index ff2b8a6792..ecf58b7562 100644
--- a/.github/workflows/video-analyzer.lock.yml
+++ b/.github/workflows/video-analyzer.lock.yml
@@ -1073,6 +1073,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/weekly-editors-health-check.lock.yml b/.github/workflows/weekly-editors-health-check.lock.yml
index 0fcd39a1b1..eea4481d3f 100644
--- a/.github/workflows/weekly-editors-health-check.lock.yml
+++ b/.github/workflows/weekly-editors-health-check.lock.yml
@@ -1143,6 +1143,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml
index 2cd029b90f..f69d1805ee 100644
--- a/.github/workflows/weekly-safe-outputs-spec-review.lock.yml
+++ b/.github/workflows/weekly-safe-outputs-spec-review.lock.yml
@@ -1063,6 +1063,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_pr_number: ${{ steps.process_safe_outputs.outputs.created_pr_number }}
+ created_pr_url: ${{ steps.process_safe_outputs.outputs.created_pr_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/workflow-health-manager.lock.yml b/.github/workflows/workflow-health-manager.lock.yml
index cbfbef8061..36efd8be44 100644
--- a/.github/workflows/workflow-health-manager.lock.yml
+++ b/.github/workflows/workflow-health-manager.lock.yml
@@ -1337,8 +1337,12 @@ jobs:
outputs:
code_push_failure_count: ${{ steps.process_safe_outputs.outputs.code_push_failure_count }}
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
+ comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}
+ comment_url: ${{ steps.process_safe_outputs.outputs.comment_url }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/workflow-normalizer.lock.yml b/.github/workflows/workflow-normalizer.lock.yml
index a7db5a6323..740b8aed4c 100644
--- a/.github/workflows/workflow-normalizer.lock.yml
+++ b/.github/workflows/workflow-normalizer.lock.yml
@@ -1116,6 +1116,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/.github/workflows/workflow-skill-extractor.lock.yml b/.github/workflows/workflow-skill-extractor.lock.yml
index 00064ce423..4a063edd11 100644
--- a/.github/workflows/workflow-skill-extractor.lock.yml
+++ b/.github/workflows/workflow-skill-extractor.lock.yml
@@ -1119,6 +1119,8 @@ jobs:
code_push_failure_errors: ${{ steps.process_safe_outputs.outputs.code_push_failure_errors }}
create_discussion_error_count: ${{ steps.process_safe_outputs.outputs.create_discussion_error_count }}
create_discussion_errors: ${{ steps.process_safe_outputs.outputs.create_discussion_errors }}
+ created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}
+ created_issue_url: ${{ steps.process_safe_outputs.outputs.created_issue_url }}
process_safe_outputs_processed_count: ${{ steps.process_safe_outputs.outputs.processed_count }}
process_safe_outputs_temporary_id_map: ${{ steps.process_safe_outputs.outputs.temporary_id_map }}
steps:
diff --git a/actions/setup/js/push_to_pull_request_branch.cjs b/actions/setup/js/push_to_pull_request_branch.cjs
index 76e2261a7a..485654b99d 100644
--- a/actions/setup/js/push_to_pull_request_branch.cjs
+++ b/actions/setup/js/push_to_pull_request_branch.cjs
@@ -491,6 +491,7 @@ async function main(config = {}) {
return {
success: true,
branch_name: branchName,
+ commit_sha: commitSha,
commit_url: commitUrl,
};
};
diff --git a/actions/setup/js/safe_output_unified_handler_manager.cjs b/actions/setup/js/safe_output_unified_handler_manager.cjs
index 3283317272..6799268539 100644
--- a/actions/setup/js/safe_output_unified_handler_manager.cjs
+++ b/actions/setup/js/safe_output_unified_handler_manager.cjs
@@ -27,6 +27,7 @@ const { sortSafeOutputMessages } = require("./safe_output_topological_sort.cjs")
const { loadCustomSafeOutputJobTypes } = require("./safe_output_helpers.cjs");
const { createReviewBuffer } = require("./pr_review_buffer.cjs");
const { createManifestLogger, ensureManifestExists, extractCreatedItemFromResult } = require("./safe_output_manifest.cjs");
+const { emitSafeOutputActionOutputs } = require("./safe_outputs_action_outputs.cjs");
/**
* Handler map configuration for regular handlers
@@ -1150,6 +1151,10 @@ async function main() {
core.setOutput("issues_to_assign_copilot", "");
}
+ // Emit individual named outputs for the first successful result of each safe output type.
+ // These outputs enable workflow_call callers to access specific results.
+ emitSafeOutputActionOutputs(processingResult);
+
// Ensure the manifest file always exists for artifact upload (even if no items were created).
// Skip in staged mode — no real items were created so no manifest should be emitted.
// Note: createManifestLogger() also calls ensureManifestExists() when the logger is created,
diff --git a/actions/setup/js/safe_outputs_action_outputs.cjs b/actions/setup/js/safe_outputs_action_outputs.cjs
new file mode 100644
index 0000000000..2c4a0f6363
--- /dev/null
+++ b/actions/setup/js/safe_outputs_action_outputs.cjs
@@ -0,0 +1,98 @@
+// @ts-check
+///
+
+/**
+ * Action outputs for safe-output results
+ *
+ * Emits individual named step outputs for the first successful result of each
+ * safe output type. These outputs allow workflow_call callers to access specific
+ * results without having to parse the temporary_id_map.
+ */
+
+/**
+ * @typedef {Object} ProcessingResultItem
+ * @property {boolean} success
+ * @property {string} type
+ * @property {any} result
+ */
+
+/**
+ * @typedef {Object} ProcessingResult
+ * @property {ProcessingResultItem[]} results
+ */
+
+/**
+ * Emit individual named step outputs for the first successful result of each
+ * safe output type in processingResult.
+ *
+ * Output names:
+ * create_issue → created_issue_number, created_issue_url
+ * create_pull_request → created_pr_number, created_pr_url
+ * add_comment → comment_id, comment_url
+ * push_to_pull_request_branch → push_commit_sha, push_commit_url
+ *
+ * @param {ProcessingResult} processingResult - Result from processMessages()
+ */
+function emitSafeOutputActionOutputs(processingResult) {
+ const successfulResults = processingResult.results.filter(r => r.success && r.result);
+
+ // create_issue: created_issue_number, created_issue_url
+ const firstIssueResult = successfulResults.find(r => r.type === "create_issue");
+ if (firstIssueResult?.result && !Array.isArray(firstIssueResult.result)) {
+ const r = firstIssueResult.result;
+ if (r.number != null) {
+ core.setOutput("created_issue_number", String(r.number));
+ core.info(`Exported created_issue_number: ${r.number}`);
+ }
+ if (r.url) {
+ core.setOutput("created_issue_url", r.url);
+ core.info(`Exported created_issue_url: ${r.url}`);
+ }
+ }
+
+ // create_pull_request: created_pr_number, created_pr_url
+ const firstPRResult = successfulResults.find(r => r.type === "create_pull_request");
+ if (firstPRResult?.result && !Array.isArray(firstPRResult.result)) {
+ const r = firstPRResult.result;
+ if (r.pull_request_number != null) {
+ core.setOutput("created_pr_number", String(r.pull_request_number));
+ core.info(`Exported created_pr_number: ${r.pull_request_number}`);
+ }
+ if (r.pull_request_url) {
+ core.setOutput("created_pr_url", r.pull_request_url);
+ core.info(`Exported created_pr_url: ${r.pull_request_url}`);
+ }
+ }
+
+ // add_comment: comment_id, comment_url
+ // add_comment handlers may return an array when multiple comments were queued for the same
+ // message (e.g., fallback retries). We take the first element to get the primary comment.
+ const firstCommentResult = successfulResults.find(r => r.type === "add_comment");
+ if (firstCommentResult?.result) {
+ const r = Array.isArray(firstCommentResult.result) ? firstCommentResult.result[0] : firstCommentResult.result;
+ if (r?.commentId != null) {
+ core.setOutput("comment_id", String(r.commentId));
+ core.info(`Exported comment_id: ${r.commentId}`);
+ }
+ if (r?.url) {
+ core.setOutput("comment_url", r.url);
+ core.info(`Exported comment_url: ${r.url}`);
+ }
+ }
+
+ // push_to_pull_request_branch: push_commit_sha, push_commit_url
+ const firstPushResult = successfulResults.find(r => r.type === "push_to_pull_request_branch");
+ if (firstPushResult?.result && !Array.isArray(firstPushResult.result)) {
+ const r = firstPushResult.result;
+ if (r.commit_sha) {
+ core.setOutput("push_commit_sha", r.commit_sha);
+ core.info(`Exported push_commit_sha: ${r.commit_sha}`);
+ }
+ if (r.commit_url) {
+ core.setOutput("push_commit_url", r.commit_url);
+ core.info(`Exported push_commit_url: ${r.commit_url}`);
+ }
+ }
+}
+
+module.exports = { emitSafeOutputActionOutputs };
diff --git a/actions/setup/js/safe_outputs_action_outputs.test.cjs b/actions/setup/js/safe_outputs_action_outputs.test.cjs
new file mode 100644
index 0000000000..3e23a4d4dd
--- /dev/null
+++ b/actions/setup/js/safe_outputs_action_outputs.test.cjs
@@ -0,0 +1,146 @@
+// @ts-check
+import { describe, it, expect, beforeEach } from "vitest";
+import { emitSafeOutputActionOutputs } from "./safe_outputs_action_outputs.cjs";
+
+describe("emitSafeOutputActionOutputs", () => {
+ /** @type {Record} */
+ let outputs;
+ /** @type {string[]} */
+ let infoMessages;
+
+ beforeEach(() => {
+ outputs = {};
+ infoMessages = [];
+
+ global.core = {
+ info: (/** @type {string} */ msg) => {
+ infoMessages.push(msg);
+ },
+ setOutput: (/** @type {string} */ name, /** @type {string} */ value) => {
+ outputs[name] = value;
+ },
+ };
+ });
+
+ it("emits created_issue_number and created_issue_url for create_issue result", () => {
+ emitSafeOutputActionOutputs({
+ results: [{ success: true, type: "create_issue", result: { number: 42, url: "https://github.com/owner/repo/issues/42" } }],
+ });
+
+ expect(outputs["created_issue_number"]).toBe("42");
+ expect(outputs["created_issue_url"]).toBe("https://github.com/owner/repo/issues/42");
+ });
+
+ it("emits only the first successful create_issue result", () => {
+ emitSafeOutputActionOutputs({
+ results: [
+ { success: true, type: "create_issue", result: { number: 1, url: "https://github.com/owner/repo/issues/1" } },
+ { success: true, type: "create_issue", result: { number: 2, url: "https://github.com/owner/repo/issues/2" } },
+ ],
+ });
+
+ expect(outputs["created_issue_number"]).toBe("1");
+ expect(outputs["created_issue_url"]).toBe("https://github.com/owner/repo/issues/1");
+ });
+
+ it("skips failed create_issue results", () => {
+ emitSafeOutputActionOutputs({
+ results: [
+ { success: false, type: "create_issue", result: { number: 99, url: "https://github.com/owner/repo/issues/99" } },
+ { success: true, type: "create_issue", result: { number: 5, url: "https://github.com/owner/repo/issues/5" } },
+ ],
+ });
+
+ expect(outputs["created_issue_number"]).toBe("5");
+ });
+
+ it("emits created_pr_number and created_pr_url for create_pull_request result", () => {
+ emitSafeOutputActionOutputs({
+ results: [{ success: true, type: "create_pull_request", result: { pull_request_number: 7, pull_request_url: "https://github.com/owner/repo/pull/7" } }],
+ });
+
+ expect(outputs["created_pr_number"]).toBe("7");
+ expect(outputs["created_pr_url"]).toBe("https://github.com/owner/repo/pull/7");
+ });
+
+ it("emits comment_id and comment_url for add_comment result", () => {
+ emitSafeOutputActionOutputs({
+ results: [{ success: true, type: "add_comment", result: { commentId: 123, url: "https://github.com/owner/repo/issues/1#issuecomment-123" } }],
+ });
+
+ expect(outputs["comment_id"]).toBe("123");
+ expect(outputs["comment_url"]).toBe("https://github.com/owner/repo/issues/1#issuecomment-123");
+ });
+
+ it("unwraps array result for add_comment and uses the first element", () => {
+ emitSafeOutputActionOutputs({
+ results: [
+ {
+ success: true,
+ type: "add_comment",
+ result: [
+ { commentId: 10, url: "https://github.com/owner/repo/issues/1#issuecomment-10" },
+ { commentId: 20, url: "https://github.com/owner/repo/issues/1#issuecomment-20" },
+ ],
+ },
+ ],
+ });
+
+ expect(outputs["comment_id"]).toBe("10");
+ expect(outputs["comment_url"]).toBe("https://github.com/owner/repo/issues/1#issuecomment-10");
+ });
+
+ it("emits push_commit_sha and push_commit_url for push_to_pull_request_branch result", () => {
+ emitSafeOutputActionOutputs({
+ results: [{ success: true, type: "push_to_pull_request_branch", result: { commit_sha: "abc123", commit_url: "https://github.com/owner/repo/commit/abc123" } }],
+ });
+
+ expect(outputs["push_commit_sha"]).toBe("abc123");
+ expect(outputs["push_commit_url"]).toBe("https://github.com/owner/repo/commit/abc123");
+ });
+
+ it("emits outputs for multiple different types in a single run", () => {
+ emitSafeOutputActionOutputs({
+ results: [
+ { success: true, type: "create_issue", result: { number: 1, url: "https://github.com/owner/repo/issues/1" } },
+ { success: true, type: "add_comment", result: { commentId: 200, url: "https://github.com/owner/repo/issues/1#issuecomment-200" } },
+ { success: true, type: "push_to_pull_request_branch", result: { commit_sha: "sha1", commit_url: "https://github.com/owner/repo/commit/sha1" } },
+ ],
+ });
+
+ expect(outputs["created_issue_number"]).toBe("1");
+ expect(outputs["comment_id"]).toBe("200");
+ expect(outputs["push_commit_sha"]).toBe("sha1");
+ });
+
+ it("emits no outputs when there are no successful results", () => {
+ emitSafeOutputActionOutputs({
+ results: [{ success: false, type: "create_issue", result: null }],
+ });
+
+ expect(Object.keys(outputs)).toHaveLength(0);
+ });
+
+ it("emits no outputs when results array is empty", () => {
+ emitSafeOutputActionOutputs({ results: [] });
+
+ expect(Object.keys(outputs)).toHaveLength(0);
+ });
+
+ it("skips create_issue result with array result (not a single issue)", () => {
+ emitSafeOutputActionOutputs({
+ results: [{ success: true, type: "create_issue", result: [{ number: 1 }] }],
+ });
+
+ expect(outputs["created_issue_number"]).toBeUndefined();
+ });
+
+ it("logs info messages for each emitted output", () => {
+ emitSafeOutputActionOutputs({
+ results: [{ success: true, type: "create_issue", result: { number: 3, url: "https://github.com/owner/repo/issues/3" } }],
+ });
+
+ expect(infoMessages.some(m => m.includes("created_issue_number"))).toBe(true);
+ expect(infoMessages.some(m => m.includes("created_issue_url"))).toBe(true);
+ });
+});
diff --git a/pkg/workflow/compiled_lock_files_test.go b/pkg/workflow/compiled_lock_files_test.go
new file mode 100644
index 0000000000..a731e955ed
--- /dev/null
+++ b/pkg/workflow/compiled_lock_files_test.go
@@ -0,0 +1,322 @@
+//go:build !integration
+
+package workflow
+
+import (
+ "os"
+ "path/filepath"
+ "strings"
+ "testing"
+
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+// workflowsDir is the path to the .github/workflows directory relative to this test file.
+const workflowsDir = "../../.github/workflows"
+
+// lockFileOutputMapping describes what outputs a compiled lock file must expose, derived from
+// the SafeOutputsConfig parsed from the source .md file.
+type lockFileOutputMapping struct {
+ // configPresent returns true when the safe-output type is configured.
+ configPresent func(*SafeOutputsConfig) bool
+ // jobOutputKeys are the keys that must appear in the safe_outputs job's outputs section.
+ jobOutputKeys []string
+ // workflowCallOutputKeys are the keys that must appear in on.workflow_call.outputs when the
+ // workflow uses workflow_call as a trigger.
+ workflowCallOutputKeys []string
+}
+
+// lockFileOutputMappings enumerates all safe-output types that produce named outputs.
+var lockFileOutputMappings = []lockFileOutputMapping{
+ {
+ configPresent: func(s *SafeOutputsConfig) bool { return s.CreateIssues != nil },
+ jobOutputKeys: []string{"created_issue_number:", "created_issue_url:"},
+ workflowCallOutputKeys: []string{"created_issue_number:", "created_issue_url:"},
+ },
+ {
+ configPresent: func(s *SafeOutputsConfig) bool { return s.CreatePullRequests != nil },
+ jobOutputKeys: []string{"created_pr_number:", "created_pr_url:"},
+ workflowCallOutputKeys: []string{"created_pr_number:", "created_pr_url:"},
+ },
+ {
+ configPresent: func(s *SafeOutputsConfig) bool { return s.AddComments != nil },
+ jobOutputKeys: []string{"comment_id:", "comment_url:"},
+ workflowCallOutputKeys: []string{"comment_id:", "comment_url:"},
+ },
+ {
+ configPresent: func(s *SafeOutputsConfig) bool { return s.PushToPullRequestBranch != nil },
+ jobOutputKeys: []string{"push_commit_sha:", "push_commit_url:"},
+ workflowCallOutputKeys: []string{"push_commit_sha:", "push_commit_url:"},
+ },
+}
+
+// extractSafeOutputsJobSection returns the text of the safe_outputs job block from a lock file.
+// The block starts at " safe_outputs:" and extends until the next top-level job entry or EOF.
+func extractSafeOutputsJobSection(lockContent string) string {
+ marker := "\n safe_outputs:"
+ idx := strings.Index(lockContent, marker)
+ if idx < 0 {
+ return ""
+ }
+ rest := lockContent[idx+1:] // skip the leading newline
+ lines := strings.Split(rest, "\n")
+ var sb strings.Builder
+ for i, line := range lines {
+ if i == 0 {
+ sb.WriteString(line + "\n")
+ continue
+ }
+ // A new top-level job starts with exactly two spaces then a word char (not more spaces).
+ if len(line) > 2 && line[0] == ' ' && line[1] == ' ' && line[2] != ' ' && strings.Contains(line, ":") {
+ break
+ }
+ sb.WriteString(line + "\n")
+ }
+ return sb.String()
+}
+
+// extractWorkflowCallSection returns the text of the on section (up to but not including the
+// first top-level non-on key) from a compiled lock file.
+func extractWorkflowCallSection(lockContent string) string {
+ for _, trigger := range []string{"\n\"on\":\n", "\non:\n"} {
+ idx := strings.Index(lockContent, trigger)
+ if idx < 0 {
+ continue
+ }
+ onStart := idx + len(trigger)
+ rest := lockContent[onStart:]
+ lines := strings.Split(rest, "\n")
+ var sb strings.Builder
+ for _, line := range lines {
+ // Top-level YAML key (no leading spaces) ends the "on" block.
+ if len(line) > 0 && line[0] != ' ' && strings.Contains(line, ":") {
+ break
+ }
+ sb.WriteString(line + "\n")
+ }
+ return sb.String()
+ }
+ return ""
+}
+
+// parseSafeOutputsForLockFileTest parses the source .md workflow file and returns the
+// SafeOutputsConfig and the "on" section text, using the compiler's own parsing logic.
+// Returns nil config when the workflow does not have safe-outputs configured.
+func parseSafeOutputsForLockFileTest(mdPath string) (*SafeOutputsConfig, string, error) {
+ compiler := NewCompiler()
+ data, err := compiler.ParseWorkflowFile(mdPath)
+ if err != nil {
+ return nil, "", err
+ }
+ return data.SafeOutputs, data.On, nil
+}
+
+// TestCompiledLockFiles_SafeOutputsJobOutputs validates that every compiled lock file exposes
+// the expected individual named outputs on its safe_outputs job, based on what safe-output
+// types are configured in the corresponding source .md file.
+func TestCompiledLockFiles_SafeOutputsJobOutputs(t *testing.T) {
+ mdFiles, err := filepath.Glob(filepath.Join(workflowsDir, "*.md"))
+ require.NoError(t, err, "should glob .md workflow files")
+ require.NotEmpty(t, mdFiles, "should find at least one .md workflow file")
+
+ checkedWorkflows := 0
+
+ for _, mdPath := range mdFiles {
+ lockPath := strings.TrimSuffix(mdPath, ".md") + ".lock.yml"
+
+ safeOutputs, _, parseErr := parseSafeOutputsForLockFileTest(mdPath)
+ if parseErr != nil || safeOutputs == nil {
+ continue // skip workflows without safe-outputs or that fail to parse
+ }
+
+ lockBytes, err := os.ReadFile(lockPath)
+ if err != nil {
+ continue // lock file may not exist yet
+ }
+ lockContent := string(lockBytes)
+
+ safeOutputsJob := extractSafeOutputsJobSection(lockContent)
+ if safeOutputsJob == "" {
+ continue // workflow may not produce a safe_outputs job (e.g. runtime-import)
+ }
+
+ baseName := filepath.Base(mdPath)
+
+ for _, mapping := range lockFileOutputMappings {
+ if !mapping.configPresent(safeOutputs) {
+ continue
+ }
+ for _, outputKey := range mapping.jobOutputKeys {
+ assert.Contains(t, safeOutputsJob, outputKey,
+ "lock file %s: safe_outputs job should expose %s", baseName, outputKey)
+ }
+ }
+
+ checkedWorkflows++
+ }
+
+ assert.Positive(t, checkedWorkflows, "should have validated at least one workflow with safe-outputs")
+ t.Logf("Validated safe_outputs job outputs for %d workflow(s)", checkedWorkflows)
+}
+
+// TestCompiledLockFiles_WorkflowCallOutputs validates that compiled lock files for workflows
+// using workflow_call + safe-outputs automatically include on.workflow_call.outputs declarations.
+func TestCompiledLockFiles_WorkflowCallOutputs(t *testing.T) {
+ mdFiles, err := filepath.Glob(filepath.Join(workflowsDir, "*.md"))
+ require.NoError(t, err, "should glob .md workflow files")
+ require.NotEmpty(t, mdFiles, "should find at least one .md workflow file")
+
+ checkedWorkflows := 0
+
+ for _, mdPath := range mdFiles {
+ lockPath := strings.TrimSuffix(mdPath, ".md") + ".lock.yml"
+
+ safeOutputs, onSection, parseErr := parseSafeOutputsForLockFileTest(mdPath)
+ if parseErr != nil || safeOutputs == nil {
+ continue
+ }
+ // Only check workflows that have workflow_call as a trigger.
+ if !strings.Contains(onSection, "workflow_call") {
+ continue
+ }
+
+ lockBytes, err := os.ReadFile(lockPath)
+ if err != nil {
+ t.Errorf("lock file missing for %s: %v", filepath.Base(mdPath), err)
+ continue
+ }
+ lockContent := string(lockBytes)
+ baseName := filepath.Base(mdPath)
+
+ onLockSection := extractWorkflowCallSection(lockContent)
+
+ // The on section must contain a workflow_call: key.
+ assert.Contains(t, onLockSection, "workflow_call:", "lock file %s should have workflow_call trigger", baseName)
+
+ workflowCallIdx := strings.Index(onLockSection, "workflow_call:")
+ if workflowCallIdx < 0 {
+ continue
+ }
+ workflowCallBlock := onLockSection[workflowCallIdx:]
+
+ // Determine which outputs we expect based on configured safe-output types.
+ expectedOutputs := buildWorkflowCallOutputsMap(safeOutputs)
+ if len(expectedOutputs) > 0 {
+ assert.Contains(t, workflowCallBlock, "outputs:",
+ "lock file %s: on.workflow_call should contain an outputs: section", baseName)
+
+ for _, mapping := range lockFileOutputMappings {
+ if !mapping.configPresent(safeOutputs) {
+ continue
+ }
+ for _, outputKey := range mapping.workflowCallOutputKeys {
+ assert.Contains(t, workflowCallBlock, outputKey,
+ "lock file %s: on.workflow_call.outputs should include %s", baseName, outputKey)
+ }
+ }
+ }
+
+ checkedWorkflows++
+ }
+
+ assert.Positive(t, checkedWorkflows,
+ "should have validated at least one workflow with workflow_call + safe-outputs")
+ t.Logf("Validated on.workflow_call.outputs for %d workflow(s)", checkedWorkflows)
+}
+
+// TestCompiledLockFiles_NoSpuriousWorkflowCallOutputs validates that workflows WITHOUT
+// workflow_call do NOT have outputs injected into the on section.
+func TestCompiledLockFiles_NoSpuriousWorkflowCallOutputs(t *testing.T) {
+ mdFiles, err := filepath.Glob(filepath.Join(workflowsDir, "*.md"))
+ require.NoError(t, err, "should glob .md workflow files")
+ require.NotEmpty(t, mdFiles, "should find at least one .md workflow file")
+
+ checkedWorkflows := 0
+
+ for _, mdPath := range mdFiles {
+ lockPath := strings.TrimSuffix(mdPath, ".md") + ".lock.yml"
+
+ safeOutputs, onSection, parseErr := parseSafeOutputsForLockFileTest(mdPath)
+ if parseErr != nil || safeOutputs == nil {
+ continue
+ }
+ // Only check workflows that have safe-outputs but do NOT use workflow_call.
+ if strings.Contains(onSection, "workflow_call") {
+ continue
+ }
+
+ lockBytes, err := os.ReadFile(lockPath)
+ if err != nil {
+ continue
+ }
+ lockContent := string(lockBytes)
+
+ onLockSection := extractWorkflowCallSection(lockContent)
+ baseName := filepath.Base(mdPath)
+
+ // If the on section somehow has workflow_call, its outputs sub-key must be absent.
+ if strings.Contains(onLockSection, "workflow_call:") {
+ workflowCallIdx := strings.Index(onLockSection, "workflow_call:")
+ workflowCallBlock := onLockSection[workflowCallIdx:]
+ assert.NotContains(t, workflowCallBlock, "outputs:",
+ "lock file %s: on.workflow_call should NOT have outputs (no workflow_call trigger in source)", baseName)
+ }
+
+ checkedWorkflows++
+ }
+
+ assert.Positive(t, checkedWorkflows,
+ "should have validated at least one workflow with safe-outputs but without workflow_call")
+ t.Logf("Validated no spurious workflow_call outputs for %d workflow(s)", checkedWorkflows)
+}
+
+// TestCompiledLockFiles_SmokeWorkflowCallHasExpectedOutputs is a focused test on the
+// smoke-workflow-call workflow, the canonical workflow_call example in this repo.
+func TestCompiledLockFiles_SmokeWorkflowCallHasExpectedOutputs(t *testing.T) {
+ lockPath := filepath.Join(workflowsDir, "smoke-workflow-call.lock.yml")
+ mdPath := filepath.Join(workflowsDir, "smoke-workflow-call.md")
+
+ safeOutputs, onSection, err := parseSafeOutputsForLockFileTest(mdPath)
+ require.NoError(t, err, "should parse smoke-workflow-call.md")
+ require.NotNil(t, safeOutputs, "smoke-workflow-call.md should have safe-outputs")
+
+ lockBytes, err := os.ReadFile(lockPath)
+ require.NoError(t, err, "smoke-workflow-call.lock.yml should be readable")
+ lockContent := string(lockBytes)
+
+ t.Run("SourceHasWorkflowCallTrigger", func(t *testing.T) {
+ assert.Contains(t, onSection, "workflow_call", "source md should have workflow_call trigger")
+ })
+
+ t.Run("LockHasWorkflowCallTrigger", func(t *testing.T) {
+ assert.Contains(t, lockContent, "workflow_call:", "lock file should contain workflow_call trigger")
+ })
+
+ t.Run("LockHasSafeOutputsJob", func(t *testing.T) {
+ assert.Contains(t, lockContent, "safe_outputs:", "lock file should contain safe_outputs job")
+ })
+
+ // The smoke workflow uses add-comment – verify its outputs appear in both places.
+ require.NotNil(t, safeOutputs.AddComments, "smoke-workflow-call.md should have add-comment configured")
+
+ t.Run("WorkflowCallOutputs_CommentID", func(t *testing.T) {
+ onLockSection := extractWorkflowCallSection(lockContent)
+ workflowCallIdx := strings.Index(onLockSection, "workflow_call:")
+ require.GreaterOrEqual(t, workflowCallIdx, 0, "on section should contain workflow_call:")
+ workflowCallBlock := onLockSection[workflowCallIdx:]
+ assert.Contains(t, workflowCallBlock, "outputs:", "on.workflow_call should have outputs")
+ assert.Contains(t, workflowCallBlock, "comment_id:", "on.workflow_call.outputs should include comment_id")
+ assert.Contains(t, workflowCallBlock, "comment_url:", "on.workflow_call.outputs should include comment_url")
+ assert.Contains(t, workflowCallBlock, "jobs.safe_outputs.outputs.comment_id",
+ "workflow_call output value should reference safe_outputs job")
+ })
+
+ t.Run("SafeOutputsJobOutputs_CommentID", func(t *testing.T) {
+ safeOutputsJob := extractSafeOutputsJobSection(lockContent)
+ assert.Contains(t, safeOutputsJob, "comment_id:", "safe_outputs job should expose comment_id output")
+ assert.Contains(t, safeOutputsJob, "comment_url:", "safe_outputs job should expose comment_url output")
+ assert.Contains(t, safeOutputsJob, "steps.process_safe_outputs.outputs.comment_id",
+ "safe_outputs job output should reference process_safe_outputs step")
+ })
+}
diff --git a/pkg/workflow/compiler_safe_outputs_job.go b/pkg/workflow/compiler_safe_outputs_job.go
index 83d2b08040..e7f874af23 100644
--- a/pkg/workflow/compiler_safe_outputs_job.go
+++ b/pkg/workflow/compiler_safe_outputs_job.go
@@ -218,6 +218,27 @@ func (c *Compiler) buildConsolidatedSafeOutputsJob(data *WorkflowData, mainJobNa
outputs["assign_to_user_assigned"] = "${{ steps.process_safe_outputs.outputs.assigned }}"
}
+ // Individual named outputs for first-created items (enables workflow_call consumers to access results)
+ if data.SafeOutputs.CreateIssues != nil {
+ outputs["created_issue_number"] = "${{ steps.process_safe_outputs.outputs.created_issue_number }}"
+ outputs["created_issue_url"] = "${{ steps.process_safe_outputs.outputs.created_issue_url }}"
+ }
+
+ if data.SafeOutputs.CreatePullRequests != nil {
+ outputs["created_pr_number"] = "${{ steps.process_safe_outputs.outputs.created_pr_number }}"
+ outputs["created_pr_url"] = "${{ steps.process_safe_outputs.outputs.created_pr_url }}"
+ }
+
+ if data.SafeOutputs.AddComments != nil {
+ outputs["comment_id"] = "${{ steps.process_safe_outputs.outputs.comment_id }}"
+ outputs["comment_url"] = "${{ steps.process_safe_outputs.outputs.comment_url }}"
+ }
+
+ if data.SafeOutputs.PushToPullRequestBranch != nil {
+ outputs["push_commit_sha"] = "${{ steps.process_safe_outputs.outputs.push_commit_sha }}"
+ outputs["push_commit_url"] = "${{ steps.process_safe_outputs.outputs.push_commit_url }}"
+ }
+
// If no steps were added, return nil
if len(safeOutputStepNames) == 0 {
consolidatedSafeOutputsJobLog.Print("No safe output steps were added")
diff --git a/pkg/workflow/compiler_workflow_call.go b/pkg/workflow/compiler_workflow_call.go
new file mode 100644
index 0000000000..7c727c0cba
--- /dev/null
+++ b/pkg/workflow/compiler_workflow_call.go
@@ -0,0 +1,154 @@
+package workflow
+
+import (
+ "maps"
+ "strings"
+
+ "github.com/github/gh-aw/pkg/logger"
+ "github.com/goccy/go-yaml"
+)
+
+var workflowCallLog = logger.New("workflow:compiler_workflow_call")
+
+// workflowCallOutputEntry represents a single on.workflow_call.outputs entry
+type workflowCallOutputEntry struct {
+ Description string `yaml:"description"`
+ Value string `yaml:"value"`
+}
+
+// injectWorkflowCallOutputs adds on.workflow_call.outputs declarations for safe-output results
+// when the workflow uses workflow_call as a trigger.
+//
+// This enables callers of the workflow to access results such as:
+// - created_issue_number / created_issue_url (when create-issue is configured)
+// - created_pr_number / created_pr_url (when create-pull-request is configured)
+// - comment_id / comment_url (when add-comment is configured)
+// - push_commit_sha / push_commit_url (when push-to-pull-request-branch is configured)
+//
+// The function is a no-op if safeOutputs is nil or workflow_call is not in the on section.
+// Any outputs the user has already declared in the on.workflow_call.outputs section are preserved.
+func (c *Compiler) injectWorkflowCallOutputs(onSection string, safeOutputs *SafeOutputsConfig) string {
+ if safeOutputs == nil || !strings.Contains(onSection, "workflow_call") {
+ return onSection
+ }
+
+ // Build the auto-generated outputs map based on configured safe output types
+ generatedOutputs := buildWorkflowCallOutputsMap(safeOutputs)
+ if len(generatedOutputs) == 0 {
+ return onSection
+ }
+
+ // Parse the on section YAML
+ var onData map[string]any
+ if err := yaml.Unmarshal([]byte(onSection), &onData); err != nil {
+ workflowCallLog.Printf("Warning: failed to parse on section for workflow_call outputs injection: %v", err)
+ return onSection
+ }
+
+ // Get the 'on' map
+ onMap, ok := onData["on"].(map[string]any)
+ if !ok {
+ return onSection
+ }
+
+ // Get the workflow_call entry
+ workflowCallVal, hasWorkflowCall := onMap["workflow_call"]
+ if !hasWorkflowCall {
+ return onSection
+ }
+
+ // Convert workflow_call to a map (it may be nil if declared without options)
+ var workflowCallMap map[string]any
+ if workflowCallVal == nil {
+ workflowCallMap = make(map[string]any)
+ } else if m, ok := workflowCallVal.(map[string]any); ok {
+ workflowCallMap = m
+ } else {
+ workflowCallMap = make(map[string]any)
+ }
+
+ // Merge auto-generated outputs with any existing user-defined outputs.
+ // User-defined outputs take precedence (their keys overwrite generated ones).
+ mergedOutputs := make(map[string]workflowCallOutputEntry)
+ maps.Copy(mergedOutputs, generatedOutputs)
+ if existingOutputs, hasOutputs := workflowCallMap["outputs"].(map[string]any); hasOutputs {
+ for k, v := range existingOutputs {
+ // User-defined entries may be maps with description+value or plain strings
+ if outputMap, ok := v.(map[string]any); ok {
+ entry := workflowCallOutputEntry{}
+ if desc, ok := outputMap["description"].(string); ok {
+ entry.Description = desc
+ }
+ if val, ok := outputMap["value"].(string); ok {
+ entry.Value = val
+ }
+ mergedOutputs[k] = entry
+ }
+ }
+ }
+
+ workflowCallMap["outputs"] = mergedOutputs
+ onMap["workflow_call"] = workflowCallMap
+
+ // Re-marshal to YAML
+ newOnData := map[string]any{"on": onMap}
+ newYAML, err := yaml.Marshal(newOnData)
+ if err != nil {
+ workflowCallLog.Printf("Warning: failed to marshal on section with workflow_call outputs: %v", err)
+ return onSection
+ }
+
+ return strings.TrimSuffix(string(newYAML), "\n")
+}
+
+// buildWorkflowCallOutputsMap constructs the outputs map for on.workflow_call.outputs
+// based on which safe output types are configured.
+func buildWorkflowCallOutputsMap(safeOutputs *SafeOutputsConfig) map[string]workflowCallOutputEntry {
+ outputs := make(map[string]workflowCallOutputEntry)
+
+ if safeOutputs.CreateIssues != nil {
+ outputs["created_issue_number"] = workflowCallOutputEntry{
+ Description: "Number of the first created issue",
+ Value: "${{ jobs.safe_outputs.outputs.created_issue_number }}",
+ }
+ outputs["created_issue_url"] = workflowCallOutputEntry{
+ Description: "URL of the first created issue",
+ Value: "${{ jobs.safe_outputs.outputs.created_issue_url }}",
+ }
+ }
+
+ if safeOutputs.CreatePullRequests != nil {
+ outputs["created_pr_number"] = workflowCallOutputEntry{
+ Description: "Number of the first created pull request",
+ Value: "${{ jobs.safe_outputs.outputs.created_pr_number }}",
+ }
+ outputs["created_pr_url"] = workflowCallOutputEntry{
+ Description: "URL of the first created pull request",
+ Value: "${{ jobs.safe_outputs.outputs.created_pr_url }}",
+ }
+ }
+
+ if safeOutputs.AddComments != nil {
+ outputs["comment_id"] = workflowCallOutputEntry{
+ Description: "ID of the first added comment",
+ Value: "${{ jobs.safe_outputs.outputs.comment_id }}",
+ }
+ outputs["comment_url"] = workflowCallOutputEntry{
+ Description: "URL of the first added comment",
+ Value: "${{ jobs.safe_outputs.outputs.comment_url }}",
+ }
+ }
+
+ if safeOutputs.PushToPullRequestBranch != nil {
+ outputs["push_commit_sha"] = workflowCallOutputEntry{
+ Description: "SHA of the pushed commit",
+ Value: "${{ jobs.safe_outputs.outputs.push_commit_sha }}",
+ }
+ outputs["push_commit_url"] = workflowCallOutputEntry{
+ Description: "URL of the pushed commit",
+ Value: "${{ jobs.safe_outputs.outputs.push_commit_url }}",
+ }
+ }
+
+ return outputs
+}
diff --git a/pkg/workflow/compiler_workflow_call_test.go b/pkg/workflow/compiler_workflow_call_test.go
new file mode 100644
index 0000000000..a4396d8b9f
--- /dev/null
+++ b/pkg/workflow/compiler_workflow_call_test.go
@@ -0,0 +1,304 @@
+//go:build !integration
+
+package workflow
+
+import (
+ "os"
+ "path/filepath"
+ "testing"
+
+ "github.com/github/gh-aw/pkg/testutil"
+ "github.com/stretchr/testify/assert"
+ "github.com/stretchr/testify/require"
+)
+
+func TestInjectWorkflowCallOutputs(t *testing.T) {
+ compiler := NewCompiler()
+
+ tests := []struct {
+ name string
+ onSection string
+ safeOutputs *SafeOutputsConfig
+ expectContains []string
+ expectAbsent []string
+ expectUnchanged bool
+ }{
+ {
+ name: "no workflow_call - no injection",
+ onSection: `"on":
+ push:
+ workflow_dispatch:`,
+ safeOutputs: &SafeOutputsConfig{
+ CreateIssues: &CreateIssuesConfig{},
+ },
+ expectUnchanged: true,
+ },
+ {
+ name: "nil safe outputs - no injection",
+ onSection: `"on":
+ workflow_call:`,
+ safeOutputs: nil,
+ expectUnchanged: true,
+ },
+ {
+ name: "empty SafeOutputsConfig - no injection",
+ onSection: `"on":
+ workflow_call:`,
+ safeOutputs: &SafeOutputsConfig{},
+ expectUnchanged: true,
+ },
+ {
+ name: "workflow_call with create-issue outputs",
+ onSection: `"on":
+ workflow_call:
+ workflow_dispatch:`,
+ safeOutputs: &SafeOutputsConfig{
+ CreateIssues: &CreateIssuesConfig{},
+ },
+ expectContains: []string{
+ "workflow_call:",
+ "outputs:",
+ "created_issue_number:",
+ "created_issue_url:",
+ "jobs.safe_outputs.outputs.created_issue_number",
+ "jobs.safe_outputs.outputs.created_issue_url",
+ },
+ },
+ {
+ name: "workflow_call with create-pull-request outputs",
+ onSection: `"on":
+ workflow_call:`,
+ safeOutputs: &SafeOutputsConfig{
+ CreatePullRequests: &CreatePullRequestsConfig{},
+ },
+ expectContains: []string{
+ "created_pr_number:",
+ "created_pr_url:",
+ "jobs.safe_outputs.outputs.created_pr_number",
+ "jobs.safe_outputs.outputs.created_pr_url",
+ },
+ expectAbsent: []string{
+ "created_issue_number:",
+ },
+ },
+ {
+ name: "workflow_call with add-comment outputs",
+ onSection: `"on":
+ workflow_call:`,
+ safeOutputs: &SafeOutputsConfig{
+ AddComments: &AddCommentsConfig{},
+ },
+ expectContains: []string{
+ "comment_id:",
+ "comment_url:",
+ "jobs.safe_outputs.outputs.comment_id",
+ "jobs.safe_outputs.outputs.comment_url",
+ },
+ },
+ {
+ name: "workflow_call with push-to-pull-request-branch outputs",
+ onSection: `"on":
+ workflow_call:`,
+ safeOutputs: &SafeOutputsConfig{
+ PushToPullRequestBranch: &PushToPullRequestBranchConfig{},
+ },
+ expectContains: []string{
+ "push_commit_sha:",
+ "push_commit_url:",
+ "jobs.safe_outputs.outputs.push_commit_sha",
+ "jobs.safe_outputs.outputs.push_commit_url",
+ },
+ },
+ {
+ name: "workflow_call with multiple safe output types",
+ onSection: `"on":
+ workflow_call:
+ issues:
+ types: [opened]`,
+ safeOutputs: &SafeOutputsConfig{
+ CreateIssues: &CreateIssuesConfig{},
+ CreatePullRequests: &CreatePullRequestsConfig{},
+ AddComments: &AddCommentsConfig{},
+ },
+ expectContains: []string{
+ "created_issue_number:",
+ "created_issue_url:",
+ "created_pr_number:",
+ "created_pr_url:",
+ "comment_id:",
+ "comment_url:",
+ },
+ },
+ {
+ name: "workflow_call with no relevant safe output types",
+ onSection: `"on":
+ workflow_call:`,
+ safeOutputs: &SafeOutputsConfig{
+ AssignToAgent: &AssignToAgentConfig{},
+ },
+ expectUnchanged: true,
+ },
+ {
+ name: "user-defined outputs are preserved when merged",
+ onSection: `"on":
+ workflow_call:
+ outputs:
+ my_custom_output:
+ description: Custom output
+ value: ${{ jobs.my_job.outputs.my_value }}`,
+ safeOutputs: &SafeOutputsConfig{
+ CreateIssues: &CreateIssuesConfig{},
+ },
+ expectContains: []string{
+ "my_custom_output:",
+ "created_issue_number:",
+ "created_issue_url:",
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ result := compiler.injectWorkflowCallOutputs(tt.onSection, tt.safeOutputs)
+
+ if tt.expectUnchanged {
+ assert.Equal(t, tt.onSection, result, "on section should be unchanged")
+ return
+ }
+
+ require.NotEmpty(t, result, "result should not be empty")
+
+ for _, expected := range tt.expectContains {
+ assert.Contains(t, result, expected,
+ "expected result to contain %q", expected)
+ }
+ for _, absent := range tt.expectAbsent {
+ assert.NotContains(t, result, absent,
+ "expected result NOT to contain %q", absent)
+ }
+ })
+ }
+}
+
+func TestBuildWorkflowCallOutputsMap(t *testing.T) {
+ tests := []struct {
+ name string
+ safeOutputs *SafeOutputsConfig
+ expectKeys []string
+ absentKeys []string
+ }{
+ {
+ name: "create-issue adds 2 outputs",
+ safeOutputs: &SafeOutputsConfig{CreateIssues: &CreateIssuesConfig{}},
+ expectKeys: []string{"created_issue_number", "created_issue_url"},
+ absentKeys: []string{"created_pr_number", "comment_id", "push_commit_sha"},
+ },
+ {
+ name: "create-pull-request adds 2 outputs",
+ safeOutputs: &SafeOutputsConfig{CreatePullRequests: &CreatePullRequestsConfig{}},
+ expectKeys: []string{"created_pr_number", "created_pr_url"},
+ absentKeys: []string{"created_issue_number"},
+ },
+ {
+ name: "add-comment adds 2 outputs",
+ safeOutputs: &SafeOutputsConfig{AddComments: &AddCommentsConfig{}},
+ expectKeys: []string{"comment_id", "comment_url"},
+ },
+ {
+ name: "push-to-pull-request-branch adds 2 outputs",
+ safeOutputs: &SafeOutputsConfig{PushToPullRequestBranch: &PushToPullRequestBranchConfig{}},
+ expectKeys: []string{"push_commit_sha", "push_commit_url"},
+ },
+ {
+ name: "no relevant types returns empty map",
+ safeOutputs: &SafeOutputsConfig{AssignToAgent: &AssignToAgentConfig{}},
+ absentKeys: []string{"created_issue_number", "created_pr_number", "comment_id", "push_commit_sha"},
+ },
+ {
+ name: "multiple types produce all outputs",
+ safeOutputs: &SafeOutputsConfig{
+ CreateIssues: &CreateIssuesConfig{},
+ CreatePullRequests: &CreatePullRequestsConfig{},
+ AddComments: &AddCommentsConfig{},
+ PushToPullRequestBranch: &PushToPullRequestBranchConfig{},
+ },
+ expectKeys: []string{
+ "created_issue_number", "created_issue_url",
+ "created_pr_number", "created_pr_url",
+ "comment_id", "comment_url",
+ "push_commit_sha", "push_commit_url",
+ },
+ },
+ }
+
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ result := buildWorkflowCallOutputsMap(tt.safeOutputs)
+
+ for _, key := range tt.expectKeys {
+ entry, ok := result[key]
+ assert.True(t, ok, "expected key %q in outputs map", key)
+ assert.NotEmpty(t, entry.Description, "description for %q should not be empty", key)
+ assert.NotEmpty(t, entry.Value, "value for %q should not be empty", key)
+ assert.Contains(t, entry.Value, "jobs.safe_outputs.outputs.",
+ "value for %q should reference safe_outputs job", key)
+ }
+ for _, key := range tt.absentKeys {
+ _, ok := result[key]
+ assert.False(t, ok, "key %q should not be in outputs map", key)
+ }
+ })
+ }
+}
+
+// TestWorkflowCallOutputsEndToEnd tests that compiling a workflow with workflow_call + safe-outputs
+// produces the correct on.workflow_call.outputs section in the compiled YAML.
+func TestWorkflowCallOutputsEndToEnd(t *testing.T) {
+ workflowContent := `---
+on:
+ workflow_call:
+ workflow_dispatch:
+engine: copilot
+safe-outputs:
+ create-issue:
+ title-prefix: "[ai] "
+ add-comment:
+ max: 1
+---
+
+# Test Workflow
+
+Create an issue and add a comment.
+`
+
+ tmpDir := testutil.TempDir(t, "workflow-call-outputs-test")
+ testFile := filepath.Join(tmpDir, "test.md")
+ err := os.WriteFile(testFile, []byte(workflowContent), 0644)
+ require.NoError(t, err, "failed to write test file")
+
+ compiler := NewCompiler()
+ workflowData, err := compiler.ParseWorkflowFile(testFile)
+ require.NoError(t, err, "failed to parse workflow file")
+
+ yamlOutput, err := compiler.generateYAML(workflowData, testFile)
+ require.NoError(t, err, "failed to generate YAML")
+
+ // Verify workflow_call outputs section is present
+ assert.Contains(t, yamlOutput, "workflow_call:", "should contain workflow_call trigger")
+ assert.Contains(t, yamlOutput, "outputs:", "should contain outputs section")
+
+ // Verify create-issue outputs
+ assert.Contains(t, yamlOutput, "created_issue_number:", "should contain created_issue_number")
+ assert.Contains(t, yamlOutput, "created_issue_url:", "should contain created_issue_url")
+ assert.Contains(t, yamlOutput, "jobs.safe_outputs.outputs.created_issue_number", "should reference safe_outputs job created_issue_number")
+
+ // Verify add-comment outputs
+ assert.Contains(t, yamlOutput, "comment_id:", "should contain comment_id")
+ assert.Contains(t, yamlOutput, "comment_url:", "should contain comment_url")
+
+ // Verify safe_outputs job outputs contain the new individual outputs
+ assert.Contains(t, yamlOutput, "created_issue_number: ${{ steps.process_safe_outputs.outputs.created_issue_number }}",
+ "safe_outputs job should expose created_issue_number")
+ assert.Contains(t, yamlOutput, "comment_id: ${{ steps.process_safe_outputs.outputs.comment_id }}",
+ "safe_outputs job should expose comment_id")
+}
diff --git a/pkg/workflow/compiler_yaml.go b/pkg/workflow/compiler_yaml.go
index 640d65e55c..f0a7940530 100644
--- a/pkg/workflow/compiler_yaml.go
+++ b/pkg/workflow/compiler_yaml.go
@@ -150,7 +150,13 @@ func (c *Compiler) generateWorkflowHeader(yaml *strings.Builder, data *WorkflowD
func (c *Compiler) generateWorkflowBody(yaml *strings.Builder, data *WorkflowData) {
// Write basic workflow structure
fmt.Fprintf(yaml, "name: \"%s\"\n", data.Name)
- yaml.WriteString(data.On + "\n\n")
+
+ // Inject on.workflow_call.outputs when workflow_call is configured and safe-outputs are present
+ onSection := data.On
+ if data.SafeOutputs != nil {
+ onSection = c.injectWorkflowCallOutputs(onSection, data.SafeOutputs)
+ }
+ yaml.WriteString(onSection + "\n\n")
// Note: GitHub Actions doesn't support workflow-level if conditions
// The workflow_run safety check is added to individual jobs instead