From e1760a3ee7962cf14d2e9f3f2a43c91942d9b72d Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 18:21:00 +0000 Subject: [PATCH 1/6] Initial plan From 6ee13595ddd1b98815b2a9193dd08eb45594b9b3 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 18:31:55 +0000 Subject: [PATCH 2/6] Fix GITHUB_AW_AGENT_OUTPUT file path handling in safe output scripts Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- .github/workflows/artifacts-summary.lock.yml | 32 +++- .github/workflows/audit-workflows.lock.yml | 32 +++- .github/workflows/brave.lock.yml | 32 +++- .../workflows/changeset-generator.lock.yml | 32 +++- .github/workflows/ci-doctor.lock.yml | 47 +++++- .../workflows/cli-version-checker.lock.yml | 32 +++- .github/workflows/daily-doc-updater.lock.yml | 32 +++- .github/workflows/daily-news.lock.yml | 32 +++- .github/workflows/dev.lock.yml | 32 +++- .../duplicate-code-detector.lock.yml | 32 +++- .../example-workflow-analyzer.lock.yml | 32 +++- .../github-mcp-tools-report.lock.yml | 47 +++++- .../workflows/go-pattern-detector.lock.yml | 32 +++- .github/workflows/issue-classifier.lock.yml | 32 +++- .github/workflows/lockfile-stats.lock.yml | 32 +++- .github/workflows/mcp-inspector.lock.yml | 32 +++- .github/workflows/pdf-summary.lock.yml | 32 +++- .github/workflows/plan.lock.yml | 32 +++- .github/workflows/poem-bot.lock.yml | 137 +++++++++++++++--- .github/workflows/q.lock.yml | 47 +++++- .github/workflows/repo-tree-map.lock.yml | 32 +++- .github/workflows/research.lock.yml | 32 +++- .github/workflows/scout.lock.yml | 32 +++- .github/workflows/security-fix-pr.lock.yml | 32 +++- .github/workflows/smoke-claude.lock.yml | 32 +++- .github/workflows/smoke-codex.lock.yml | 32 +++- .github/workflows/smoke-copilot.lock.yml | 32 +++- .github/workflows/smoke-genaiscript.lock.yml | 32 +++- .github/workflows/smoke-opencode.lock.yml | 32 +++- .../workflows/technical-doc-writer.lock.yml | 62 +++++++- .github/workflows/tidy.lock.yml | 47 +++++- .github/workflows/unbloat-docs.lock.yml | 62 +++++++- pkg/workflow/js/add_comment.cjs | 19 ++- pkg/workflow/js/add_labels.cjs | 20 ++- .../js/create_code_scanning_alert.cjs | 19 ++- pkg/workflow/js/create_discussion.cjs | 20 ++- pkg/workflow/js/create_issue.cjs | 20 ++- pkg/workflow/js/create_pr_review_comment.cjs | 19 ++- pkg/workflow/js/create_pull_request.cjs | 20 ++- pkg/workflow/js/missing_tool.cjs | 22 ++- .../js/push_to_pull_request_branch.cjs | 19 ++- pkg/workflow/js/update_issue.cjs | 19 ++- pkg/workflow/js/upload_assets.cjs | 20 ++- 43 files changed, 1263 insertions(+), 203 deletions(-) diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 67c9493b83b..e95034480ce 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -3495,11 +3495,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3730,20 +3741,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/audit-workflows.lock.yml b/.github/workflows/audit-workflows.lock.yml index 9d4b111f2ba..f45ff5cb046 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -3369,11 +3369,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3604,20 +3615,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/brave.lock.yml b/.github/workflows/brave.lock.yml index 4e80cc3741e..ccdc98dae3f 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -4328,11 +4328,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4567,20 +4578,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/changeset-generator.lock.yml b/.github/workflows/changeset-generator.lock.yml index 24b99e643e8..0fb7aa60f0c 100644 --- a/.github/workflows/changeset-generator.lock.yml +++ b/.github/workflows/changeset-generator.lock.yml @@ -3779,11 +3779,22 @@ jobs: const fs = require("fs"); async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; - if (outputContent.trim() === "") { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + if (outputEnvValue.trim() === "") { core.info("Agent output content is empty"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } const target = process.env.GITHUB_AW_PUSH_TARGET || "triggering"; const ifNoChanges = process.env.GITHUB_AW_PUSH_IF_NO_CHANGES || "warn"; if (!fs.existsSync("/tmp/gh-aw/aw.patch")) { @@ -4059,20 +4070,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 66ea1cf6090..e4533cfe7b5 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -3620,11 +3620,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3946,11 +3957,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4185,20 +4207,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/cli-version-checker.lock.yml b/.github/workflows/cli-version-checker.lock.yml index 54ac5ca05a5..6d6feb5cf98 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -3308,7 +3308,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -3701,20 +3714,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/daily-doc-updater.lock.yml b/.github/workflows/daily-doc-updater.lock.yml index b96033cec72..6ef1a1c0b06 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -3450,7 +3450,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -3843,20 +3856,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/daily-news.lock.yml b/.github/workflows/daily-news.lock.yml index eca26d361ba..c537ba2c2b0 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -3510,11 +3510,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3745,20 +3756,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/dev.lock.yml b/.github/workflows/dev.lock.yml index 3786da81d71..ad58591f8ec 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -3933,11 +3933,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4181,20 +4192,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/duplicate-code-detector.lock.yml b/.github/workflows/duplicate-code-detector.lock.yml index 5fa7ab88efd..4005001c1cf 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -3143,11 +3143,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3391,20 +3402,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/example-workflow-analyzer.lock.yml b/.github/workflows/example-workflow-analyzer.lock.yml index 7b4848cdc2d..ff8a850decd 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -3119,11 +3119,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3367,20 +3378,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/github-mcp-tools-report.lock.yml b/.github/workflows/github-mcp-tools-report.lock.yml index e2b55a3f4dd..76cb1d52adc 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -3587,11 +3587,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3880,7 +3891,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -4273,20 +4297,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/go-pattern-detector.lock.yml b/.github/workflows/go-pattern-detector.lock.yml index adb94faa1f4..eac2dfb6991 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -3236,11 +3236,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3484,20 +3495,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/issue-classifier.lock.yml b/.github/workflows/issue-classifier.lock.yml index 4d788604316..cb4bdeb833c 100644 --- a/.github/workflows/issue-classifier.lock.yml +++ b/.github/workflows/issue-classifier.lock.yml @@ -2694,11 +2694,22 @@ jobs: return sanitized.trim(); } async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -2909,20 +2920,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/lockfile-stats.lock.yml b/.github/workflows/lockfile-stats.lock.yml index 105764b27ca..0a21cffcea0 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -3432,11 +3432,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3667,20 +3678,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/mcp-inspector.lock.yml b/.github/workflows/mcp-inspector.lock.yml index e9362919d9a..75a91cc195e 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -4457,11 +4457,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4692,20 +4703,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/pdf-summary.lock.yml b/.github/workflows/pdf-summary.lock.yml index b19e33233f0..ed0c1f86dc2 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -4281,11 +4281,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4520,20 +4531,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/plan.lock.yml b/.github/workflows/plan.lock.yml index 4aec6b9b97f..fe9b7c7691f 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -4123,11 +4123,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4371,20 +4382,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/poem-bot.lock.yml b/.github/workflows/poem-bot.lock.yml index 6870f413767..2fd8046a8aa 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -4331,11 +4331,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4655,11 +4666,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4935,11 +4957,22 @@ jobs: return `${githubServer}/${context.repo.owner}/${context.repo.repo}`; } } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -5251,7 +5284,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -5663,11 +5709,22 @@ jobs: return sanitized.trim(); } async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -5884,11 +5941,22 @@ jobs: script: | async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -6098,11 +6166,22 @@ jobs: const fs = require("fs"); async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; - if (outputContent.trim() === "") { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + if (outputEnvValue.trim() === "") { core.info("Agent output content is empty"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } const target = process.env.GITHUB_AW_PUSH_TARGET || "triggering"; const ifNoChanges = process.env.GITHUB_AW_PUSH_IF_NO_CHANGES || "warn"; if (!fs.existsSync("/tmp/gh-aw/aw.patch")) { @@ -6378,20 +6457,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); @@ -6533,13 +6623,24 @@ jobs: } const normalizedBranchName = normalizeBranchName(branchName); core.info(`Using assets branch: ${normalizedBranchName}`); - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); core.setOutput("upload_count", "0"); core.setOutput("branch_name", normalizedBranchName); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); core.setOutput("upload_count", "0"); diff --git a/.github/workflows/q.lock.yml b/.github/workflows/q.lock.yml index cbdcf674c3e..cad2012c5fc 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -4676,11 +4676,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4973,7 +4984,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -5366,20 +5390,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/repo-tree-map.lock.yml b/.github/workflows/repo-tree-map.lock.yml index 179c3da5641..03ad11e4848 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -3515,11 +3515,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3750,20 +3761,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/research.lock.yml b/.github/workflows/research.lock.yml index 5bd1fe11b46..5fcde8fa85c 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -3491,11 +3491,22 @@ jobs: with: script: | async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3726,20 +3737,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/scout.lock.yml b/.github/workflows/scout.lock.yml index cc2b33f4f86..74362dbb18f 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -4704,11 +4704,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4943,20 +4954,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/security-fix-pr.lock.yml b/.github/workflows/security-fix-pr.lock.yml index 55c31d711e0..eff508edf24 100644 --- a/.github/workflows/security-fix-pr.lock.yml +++ b/.github/workflows/security-fix-pr.lock.yml @@ -3395,7 +3395,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -3788,20 +3801,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/smoke-claude.lock.yml b/.github/workflows/smoke-claude.lock.yml index dbdc8da8fb8..0cc9bd569c4 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -3077,11 +3077,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3325,20 +3336,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/smoke-codex.lock.yml b/.github/workflows/smoke-codex.lock.yml index 84164cf6b31..8efed9a9e0b 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -2889,11 +2889,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3137,20 +3148,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/smoke-copilot.lock.yml b/.github/workflows/smoke-copilot.lock.yml index 60f087f3298..a13e905310f 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -3479,11 +3479,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3727,20 +3738,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/smoke-genaiscript.lock.yml b/.github/workflows/smoke-genaiscript.lock.yml index 36c03553448..8a3a4b0f1f7 100644 --- a/.github/workflows/smoke-genaiscript.lock.yml +++ b/.github/workflows/smoke-genaiscript.lock.yml @@ -2207,11 +2207,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -2455,20 +2466,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/smoke-opencode.lock.yml b/.github/workflows/smoke-opencode.lock.yml index e48b09e69f8..29ffe106513 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -2175,11 +2175,22 @@ jobs: } async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -2423,20 +2434,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/technical-doc-writer.lock.yml b/.github/workflows/technical-doc-writer.lock.yml index eb7bc7fa697..6c5d1c1066f 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -3517,11 +3517,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -3814,7 +3825,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -4207,20 +4231,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); @@ -4361,13 +4396,24 @@ jobs: } const normalizedBranchName = normalizeBranchName(branchName); core.info(`Using assets branch: ${normalizedBranchName}`); - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); core.setOutput("upload_count", "0"); core.setOutput("branch_name", normalizedBranchName); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); core.setOutput("upload_count", "0"); diff --git a/.github/workflows/tidy.lock.yml b/.github/workflows/tidy.lock.yml index 08a4cc977a8..56d6c77a193 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -4104,7 +4104,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -4512,11 +4525,22 @@ jobs: const fs = require("fs"); async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; - if (outputContent.trim() === "") { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + if (outputEnvValue.trim() === "") { core.info("Agent output content is empty"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } const target = process.env.GITHUB_AW_PUSH_TARGET || "triggering"; const ifNoChanges = process.env.GITHUB_AW_PUSH_IF_NO_CHANGES || "warn"; if (!fs.existsSync("/tmp/gh-aw/aw.patch")) { @@ -4792,20 +4816,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index dfea3717da1..720c660f000 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -3993,11 +3993,22 @@ jobs: async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; @@ -4290,7 +4301,20 @@ jobs: if (!baseBranch) { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); } @@ -4683,20 +4707,31 @@ jobs: script: | async function main() { const fs = require("fs"); - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } const missingTools = []; - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + let agentOutput; + if (outputEnvValue.startsWith("/")) { + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + agentOutput = outputEnvValue; + } + core.info(`Agent output length: ${agentOutput.length}`); let validatedOutput; try { validatedOutput = JSON.parse(agentOutput); @@ -4837,13 +4872,24 @@ jobs: } const normalizedBranchName = normalizeBranchName(branchName); core.info(`Using assets branch: ${normalizedBranchName}`); - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); core.setOutput("upload_count", "0"); core.setOutput("branch_name", normalizedBranchName); return; } + let outputContent; + if (outputEnvValue.startsWith("/")) { + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + outputContent = outputEnvValue; + } if (outputContent.trim() === "") { core.info("Agent output content is empty"); core.setOutput("upload_count", "0"); diff --git a/pkg/workflow/js/add_comment.cjs b/pkg/workflow/js/add_comment.cjs index e729e560511..c731f9af23b 100644 --- a/pkg/workflow/js/add_comment.cjs +++ b/pkg/workflow/js/add_comment.cjs @@ -100,12 +100,27 @@ async function main() { const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; // Read the validated output content from environment variable - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/add_labels.cjs b/pkg/workflow/js/add_labels.cjs index 554432fd830..31158ae6fe5 100644 --- a/pkg/workflow/js/add_labels.cjs +++ b/pkg/workflow/js/add_labels.cjs @@ -13,11 +13,27 @@ function sanitizeLabelContent(content) { return sanitized.trim(); } async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_code_scanning_alert.cjs b/pkg/workflow/js/create_code_scanning_alert.cjs index 646895d1397..7086ef3a857 100644 --- a/pkg/workflow/js/create_code_scanning_alert.cjs +++ b/pkg/workflow/js/create_code_scanning_alert.cjs @@ -1,11 +1,26 @@ async function main() { // Read the validated output content from environment variable - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_discussion.cjs b/pkg/workflow/js/create_discussion.cjs index ff640a8d650..0032d422499 100644 --- a/pkg/workflow/js/create_discussion.cjs +++ b/pkg/workflow/js/create_discussion.cjs @@ -1,9 +1,25 @@ async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_issue.cjs b/pkg/workflow/js/create_issue.cjs index 1a44d2c3287..29fe4ec8338 100644 --- a/pkg/workflow/js/create_issue.cjs +++ b/pkg/workflow/js/create_issue.cjs @@ -54,11 +54,27 @@ function generateFooter( async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_pr_review_comment.cjs b/pkg/workflow/js/create_pr_review_comment.cjs index 2c39b2dcd59..5003e3f267b 100644 --- a/pkg/workflow/js/create_pr_review_comment.cjs +++ b/pkg/workflow/js/create_pr_review_comment.cjs @@ -61,12 +61,27 @@ async function main() { } // Read the validated output content from environment variable - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_pull_request.cjs b/pkg/workflow/js/create_pull_request.cjs index 52199deb89c..ffb835aef39 100644 --- a/pkg/workflow/js/create_pull_request.cjs +++ b/pkg/workflow/js/create_pull_request.cjs @@ -50,7 +50,25 @@ async function main() { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + + // Read agent output from file path or parse as JSON directly + let outputContent = ""; + if (outputEnvValue.trim() !== "") { + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); } diff --git a/pkg/workflow/js/missing_tool.cjs b/pkg/workflow/js/missing_tool.cjs index 86fba0ae267..ce5f40a5794 100644 --- a/pkg/workflow/js/missing_tool.cjs +++ b/pkg/workflow/js/missing_tool.cjs @@ -2,11 +2,10 @@ async function main() { const fs = require("fs"); // Get environment variables - const agentOutput = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } @@ -15,13 +14,30 @@ async function main() { const missingTools = []; // Return early if no agent output - if (!agentOutput.trim()) { + if (!outputEnvValue.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } + // Read agent output from file path or parse as JSON directly + let agentOutput; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + agentOutput = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + agentOutput = outputEnvValue; + } + + core.info(`Agent output length: ${agentOutput.length}`); + // Parse the validated output JSON let validatedOutput; try { diff --git a/pkg/workflow/js/push_to_pull_request_branch.cjs b/pkg/workflow/js/push_to_pull_request_branch.cjs index 3529f2fbbaf..65d2692db0c 100644 --- a/pkg/workflow/js/push_to_pull_request_branch.cjs +++ b/pkg/workflow/js/push_to_pull_request_branch.cjs @@ -6,12 +6,27 @@ async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; // Environment validation - fail early if required variables are missing - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; - if (outputContent.trim() === "") { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + if (outputEnvValue.trim() === "") { core.info("Agent output content is empty"); return; } + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + const target = process.env.GITHUB_AW_PUSH_TARGET || "triggering"; const ifNoChanges = process.env.GITHUB_AW_PUSH_IF_NO_CHANGES || "warn"; diff --git a/pkg/workflow/js/update_issue.cjs b/pkg/workflow/js/update_issue.cjs index d26fc8fd382..832e8a5e2d4 100644 --- a/pkg/workflow/js/update_issue.cjs +++ b/pkg/workflow/js/update_issue.cjs @@ -3,12 +3,27 @@ async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; // Read the validated output content from environment variable - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/upload_assets.cjs b/pkg/workflow/js/upload_assets.cjs index 8b31ea2c748..d5a392ace7a 100644 --- a/pkg/workflow/js/upload_assets.cjs +++ b/pkg/workflow/js/upload_assets.cjs @@ -66,13 +66,29 @@ async function main() { core.info(`Using assets branch: ${normalizedBranchName}`); // Read the validated output content from environment variable - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!outputEnvValue) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); core.setOutput("upload_count", "0"); core.setOutput("branch_name", normalizedBranchName); return; } + + // Read agent output from file path or parse as JSON directly + let outputContent; + if (outputEnvValue.startsWith("/")) { + // It's a file path, read the file + try { + outputContent = fs.readFileSync(outputEnvValue, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; + } + } else { + // It's direct JSON content (backward compatibility) + outputContent = outputEnvValue; + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); core.setOutput("upload_count", "0"); From 410807823712a848a911a6e8ca9b67c3450255f5 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 18:36:19 +0000 Subject: [PATCH 3/6] Fix code formatting with prettier Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/workflow/js/add_labels.cjs | 4 ++-- pkg/workflow/js/create_discussion.cjs | 4 ++-- pkg/workflow/js/create_issue.cjs | 4 ++-- pkg/workflow/js/create_pull_request.cjs | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/pkg/workflow/js/add_labels.cjs b/pkg/workflow/js/add_labels.cjs index 31158ae6fe5..09bb3dd355c 100644 --- a/pkg/workflow/js/add_labels.cjs +++ b/pkg/workflow/js/add_labels.cjs @@ -18,7 +18,7 @@ async function main() { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - + // Read agent output from file path or parse as JSON directly let outputContent; if (outputEnvValue.startsWith("/")) { @@ -33,7 +33,7 @@ async function main() { // It's direct JSON content (backward compatibility) outputContent = outputEnvValue; } - + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_discussion.cjs b/pkg/workflow/js/create_discussion.cjs index 0032d422499..0c9299b683b 100644 --- a/pkg/workflow/js/create_discussion.cjs +++ b/pkg/workflow/js/create_discussion.cjs @@ -4,7 +4,7 @@ async function main() { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - + // Read agent output from file path or parse as JSON directly let outputContent; if (outputEnvValue.startsWith("/")) { @@ -19,7 +19,7 @@ async function main() { // It's direct JSON content (backward compatibility) outputContent = outputEnvValue; } - + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_issue.cjs b/pkg/workflow/js/create_issue.cjs index 29fe4ec8338..9043ad5ecd0 100644 --- a/pkg/workflow/js/create_issue.cjs +++ b/pkg/workflow/js/create_issue.cjs @@ -59,7 +59,7 @@ async function main() { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - + // Read agent output from file path or parse as JSON directly let outputContent; if (outputEnvValue.startsWith("/")) { @@ -74,7 +74,7 @@ async function main() { // It's direct JSON content (backward compatibility) outputContent = outputEnvValue; } - + if (outputContent.trim() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_pull_request.cjs b/pkg/workflow/js/create_pull_request.cjs index ffb835aef39..42c863f6ff4 100644 --- a/pkg/workflow/js/create_pull_request.cjs +++ b/pkg/workflow/js/create_pull_request.cjs @@ -51,7 +51,7 @@ async function main() { } const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; - + // Read agent output from file path or parse as JSON directly let outputContent = ""; if (outputEnvValue.trim() !== "") { @@ -68,7 +68,7 @@ async function main() { outputContent = outputEnvValue; } } - + if (outputContent.trim() === "") { core.info("Agent output content is empty"); } From c1592b9ea611c8c18d669a746c53818982477893 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 17 Oct 2025 19:01:18 +0000 Subject: [PATCH 4/6] Add changeset for safe output file path fix --- .changeset/patch-fix-agent-output-file-path.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/patch-fix-agent-output-file-path.md diff --git a/.changeset/patch-fix-agent-output-file-path.md b/.changeset/patch-fix-agent-output-file-path.md new file mode 100644 index 00000000000..0a79f455bb9 --- /dev/null +++ b/.changeset/patch-fix-agent-output-file-path.md @@ -0,0 +1,5 @@ +--- +"gh-aw": patch +--- + +Fixed GITHUB_AW_AGENT_OUTPUT file path handling in safe output scripts From e0fe8e064f385b9f491fe6db7d26546189434234 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:16:59 +0000 Subject: [PATCH 5/6] Remove backward compatibility: always read GITHUB_AW_AGENT_OUTPUT as file path Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/workflow/js/add_comment.cjs | 22 ++++------ pkg/workflow/js/add_comment.test.cjs | 2 +- pkg/workflow/js/add_comment.test.cjs.tmp | 0 pkg/workflow/js/add_labels.cjs | 22 ++++------ pkg/workflow/js/add_labels.test.cjs | 2 +- pkg/workflow/js/add_labels.test.cjs.tmp | 0 .../js/create_code_scanning_alert.cjs | 22 ++++------ .../js/create_code_scanning_alert.test.cjs | 41 +++++++++++++------ pkg/workflow/js/create_discussion.cjs | 22 ++++------ pkg/workflow/js/create_discussion.test.cjs | 37 ++++++++++++----- pkg/workflow/js/create_issue.cjs | 22 ++++------ pkg/workflow/js/create_issue.test.cjs | 2 +- pkg/workflow/js/create_issue.test.cjs.tmp | 0 pkg/workflow/js/create_pr_review_comment.cjs | 22 ++++------ .../js/create_pr_review_comment.test.cjs.tmp | 0 pkg/workflow/js/create_pull_request.cjs | 22 ++++------ pkg/workflow/js/create_pull_request.test.cjs | 6 +++ .../js/create_pull_request.test.cjs.tmp | 0 pkg/workflow/js/missing_tool.cjs | 22 ++++------ pkg/workflow/js/missing_tool.test.cjs | 33 +++++++++++---- .../js/push_to_pull_request_branch.cjs | 22 ++++------ .../js/push_to_pull_request_branch.test.cjs | 37 ++++++++++++----- pkg/workflow/js/update_issue.cjs | 22 ++++------ pkg/workflow/js/update_issue.test.cjs | 2 +- pkg/workflow/js/update_issue.test.cjs.tmp | 0 pkg/workflow/js/upload_assets.cjs | 22 ++++------ 26 files changed, 204 insertions(+), 200 deletions(-) create mode 100644 pkg/workflow/js/add_comment.test.cjs.tmp create mode 100644 pkg/workflow/js/add_labels.test.cjs.tmp create mode 100644 pkg/workflow/js/create_issue.test.cjs.tmp create mode 100644 pkg/workflow/js/create_pr_review_comment.test.cjs.tmp create mode 100644 pkg/workflow/js/create_pull_request.test.cjs.tmp create mode 100644 pkg/workflow/js/update_issue.test.cjs.tmp diff --git a/pkg/workflow/js/add_comment.cjs b/pkg/workflow/js/add_comment.cjs index c731f9af23b..df6b9a706d7 100644 --- a/pkg/workflow/js/add_comment.cjs +++ b/pkg/workflow/js/add_comment.cjs @@ -100,25 +100,19 @@ async function main() { const isDiscussion = process.env.GITHUB_AW_COMMENT_DISCUSSION === "true"; // Read the validated output content from environment variable - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { diff --git a/pkg/workflow/js/add_comment.test.cjs b/pkg/workflow/js/add_comment.test.cjs index 1e20750b6b1..808c9c5e79f 100644 --- a/pkg/workflow/js/add_comment.test.cjs +++ b/pkg/workflow/js/add_comment.test.cjs @@ -106,7 +106,7 @@ describe("add_comment.cjs", () => { }); it("should skip when agent output is empty", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = " "; + setAgentOutput(""); // Execute the script await eval(`(async () => { ${createCommentScript} })()`); diff --git a/pkg/workflow/js/add_comment.test.cjs.tmp b/pkg/workflow/js/add_comment.test.cjs.tmp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/pkg/workflow/js/add_labels.cjs b/pkg/workflow/js/add_labels.cjs index 09bb3dd355c..f2b9396cd4d 100644 --- a/pkg/workflow/js/add_labels.cjs +++ b/pkg/workflow/js/add_labels.cjs @@ -13,25 +13,19 @@ function sanitizeLabelContent(content) { return sanitized.trim(); } async function main() { - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { diff --git a/pkg/workflow/js/add_labels.test.cjs b/pkg/workflow/js/add_labels.test.cjs index fba9b4f284d..c0b7e369205 100644 --- a/pkg/workflow/js/add_labels.test.cjs +++ b/pkg/workflow/js/add_labels.test.cjs @@ -106,7 +106,7 @@ describe("add_labels.cjs", () => { }); it("should skip when agent output is empty", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = " "; + setAgentOutput(""); process.env.GITHUB_AW_LABELS_ALLOWED = "bug,enhancement"; // Execute the script diff --git a/pkg/workflow/js/add_labels.test.cjs.tmp b/pkg/workflow/js/add_labels.test.cjs.tmp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/pkg/workflow/js/create_code_scanning_alert.cjs b/pkg/workflow/js/create_code_scanning_alert.cjs index 7086ef3a857..3cc928dc763 100644 --- a/pkg/workflow/js/create_code_scanning_alert.cjs +++ b/pkg/workflow/js/create_code_scanning_alert.cjs @@ -1,24 +1,18 @@ async function main() { // Read the validated output content from environment variable - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { diff --git a/pkg/workflow/js/create_code_scanning_alert.test.cjs b/pkg/workflow/js/create_code_scanning_alert.test.cjs index 73e82e6103d..a6327b2366d 100644 --- a/pkg/workflow/js/create_code_scanning_alert.test.cjs +++ b/pkg/workflow/js/create_code_scanning_alert.test.cjs @@ -67,6 +67,17 @@ global.context = mockContext; const securityReportScript = fs.readFileSync(path.join(import.meta.dirname, "create_code_scanning_alert.cjs"), "utf8"); describe("create_code_scanning_alert.cjs", () => { + let securityReportScript; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === 'string' ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; + beforeEach(() => { // Reset mocks mockCore.setOutput.mockClear(); @@ -74,13 +85,19 @@ describe("create_code_scanning_alert.cjs", () => { mockCore.summary.write.mockClear(); // Set up basic environment - process.env.GITHUB_AW_AGENT_OUTPUT = ""; + setAgentOutput(""); delete process.env.GITHUB_AW_SECURITY_REPORT_MAX; delete process.env.GITHUB_AW_SECURITY_REPORT_DRIVER; delete process.env.GITHUB_AW_WORKFLOW_FILENAME; }); afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + // Clean up any created files try { const sarifFile = path.join(process.cwd(), "code-scanning-alert.sarif"); @@ -100,14 +117,14 @@ describe("create_code_scanning_alert.cjs", () => { }); it("should handle empty agent output", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = " "; + setAgentOutput(""); await eval(`(async () => { ${securityReportScript} })()`); expect(mockCore.info).toHaveBeenCalledWith("Agent output content is empty"); }); it("should handle invalid JSON", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = "invalid json"; + setAgentOutput("invalid json"); await eval(`(async () => { ${securityReportScript} })()`); expect(mockCore.setFailed).toHaveBeenCalledWith(expect.stringMatching(/Error parsing agent output JSON:/)); @@ -151,7 +168,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(securityFindings); + setAgentOutput(securityFindings); await eval(`(async () => { ${securityReportScript} })()`); // Check that SARIF file was created @@ -209,7 +226,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(securityFindings); + setAgentOutput(securityFindings); await eval(`(async () => { ${securityReportScript} })()`); // Check that SARIF file was created with only 1 finding @@ -265,7 +282,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(mixedFindings); + setAgentOutput(mixedFindings); await eval(`(async () => { ${securityReportScript} })()`); // Check that SARIF file was created with only the 1 valid finding @@ -296,7 +313,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(securityFindings); + setAgentOutput(securityFindings); await eval(`(async () => { ${securityReportScript} })()`); const sarifFile = path.join(process.cwd(), "code-scanning-alert.sarif"); @@ -322,7 +339,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(securityFindings); + setAgentOutput(securityFindings); await eval(`(async () => { ${securityReportScript} })()`); const sarifFile = path.join(process.cwd(), "code-scanning-alert.sarif"); @@ -357,7 +374,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(securityFindings); + setAgentOutput(securityFindings); await eval(`(async () => { ${securityReportScript} })()`); const sarifFile = path.join(process.cwd(), "code-scanning-alert.sarif"); @@ -408,7 +425,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(invalidFindings); + setAgentOutput(invalidFindings); await eval(`(async () => { ${securityReportScript} })()`); // Only the first valid finding should be processed @@ -451,7 +468,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(securityFindings); + setAgentOutput(securityFindings); await eval(`(async () => { ${securityReportScript} })()`); const sarifFile = path.join(process.cwd(), "code-scanning-alert.sarif"); @@ -513,7 +530,7 @@ describe("create_code_scanning_alert.cjs", () => { ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(invalidFindings); + setAgentOutput(invalidFindings); await eval(`(async () => { ${securityReportScript} })()`); // Only the first valid finding should be processed diff --git a/pkg/workflow/js/create_discussion.cjs b/pkg/workflow/js/create_discussion.cjs index 0c9299b683b..191f6c8cd9b 100644 --- a/pkg/workflow/js/create_discussion.cjs +++ b/pkg/workflow/js/create_discussion.cjs @@ -1,23 +1,17 @@ async function main() { - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { diff --git a/pkg/workflow/js/create_discussion.test.cjs b/pkg/workflow/js/create_discussion.test.cjs index afd6cd78ffc..2695b18e4e9 100644 --- a/pkg/workflow/js/create_discussion.test.cjs +++ b/pkg/workflow/js/create_discussion.test.cjs @@ -76,6 +76,15 @@ global.context = mockContext; describe("create_discussion.cjs", () => { let createDiscussionScript; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === 'string' ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; beforeEach(() => { // Reset all mocks @@ -92,6 +101,14 @@ describe("create_discussion.cjs", () => { createDiscussionScript = createDiscussionScript.replace("export {};", ""); }); + afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + }); + it("should handle missing GITHUB_AW_AGENT_OUTPUT environment variable", async () => { // Execute the script await eval(`(async () => { ${createDiscussionScript} })()`); @@ -100,7 +117,7 @@ describe("create_discussion.cjs", () => { }); it("should handle empty agent output", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = " "; // Use spaces instead of empty string + setAgentOutput(""); // Use spaces instead of empty string // Execute the script await eval(`(async () => { ${createDiscussionScript} })()`); @@ -108,7 +125,7 @@ describe("create_discussion.cjs", () => { }); it("should handle invalid JSON in agent output", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = "invalid json"; + setAgentOutput("invalid json"); // Execute the script await eval(`(async () => { ${createDiscussionScript} })()`); @@ -121,7 +138,7 @@ describe("create_discussion.cjs", () => { const validOutput = { items: [{ type: "create_issue", title: "Test Issue", body: "Test body" }], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); // Execute the script await eval(`(async () => { ${createDiscussionScript} })()`); @@ -161,7 +178,7 @@ describe("create_discussion.cjs", () => { }, ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); // Execute the script await eval(`(async () => { ${createDiscussionScript} })()`); @@ -226,7 +243,7 @@ describe("create_discussion.cjs", () => { }, ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_DISCUSSION_TITLE_PREFIX = "[ai] "; // Execute the script @@ -275,7 +292,7 @@ describe("create_discussion.cjs", () => { }, ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_DISCUSSION_CATEGORY = "DIC_custom789"; // Execute the script @@ -304,7 +321,7 @@ describe("create_discussion.cjs", () => { }, ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); // Execute the script - should exit gracefully without throwing await eval(`(async () => { ${createDiscussionScript} })()`); @@ -353,7 +370,7 @@ describe("create_discussion.cjs", () => { }, ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_DISCUSSION_CATEGORY = "Custom"; // Use category name instead of ID // Execute the script @@ -403,7 +420,7 @@ describe("create_discussion.cjs", () => { }, ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_DISCUSSION_CATEGORY = "custom-category"; // Use category slug instead of ID or name // Execute the script @@ -450,7 +467,7 @@ describe("create_discussion.cjs", () => { }, ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_DISCUSSION_CATEGORY = "NonExistent"; // Category that doesn't exist // Execute the script diff --git a/pkg/workflow/js/create_issue.cjs b/pkg/workflow/js/create_issue.cjs index 9043ad5ecd0..b28f88f03c2 100644 --- a/pkg/workflow/js/create_issue.cjs +++ b/pkg/workflow/js/create_issue.cjs @@ -54,25 +54,19 @@ function generateFooter( async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { diff --git a/pkg/workflow/js/create_issue.test.cjs b/pkg/workflow/js/create_issue.test.cjs index 63771628e39..842108398f0 100644 --- a/pkg/workflow/js/create_issue.test.cjs +++ b/pkg/workflow/js/create_issue.test.cjs @@ -105,7 +105,7 @@ describe("create_issue.cjs", () => { }); it("should skip when agent output is empty", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = " "; + setAgentOutput(""); // Execute the script await eval(`(async () => { ${createIssueScript} })()`); diff --git a/pkg/workflow/js/create_issue.test.cjs.tmp b/pkg/workflow/js/create_issue.test.cjs.tmp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/pkg/workflow/js/create_pr_review_comment.cjs b/pkg/workflow/js/create_pr_review_comment.cjs index 5003e3f267b..f907f41edf2 100644 --- a/pkg/workflow/js/create_pr_review_comment.cjs +++ b/pkg/workflow/js/create_pr_review_comment.cjs @@ -61,25 +61,19 @@ async function main() { } // Read the validated output content from environment variable - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { diff --git a/pkg/workflow/js/create_pr_review_comment.test.cjs.tmp b/pkg/workflow/js/create_pr_review_comment.test.cjs.tmp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/pkg/workflow/js/create_pull_request.cjs b/pkg/workflow/js/create_pull_request.cjs index 42c863f6ff4..7240029c838 100644 --- a/pkg/workflow/js/create_pull_request.cjs +++ b/pkg/workflow/js/create_pull_request.cjs @@ -50,22 +50,16 @@ async function main() { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT || ""; - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent = ""; - if (outputEnvValue.trim() !== "") { - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = fs.readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + if (agentOutputFile.trim() !== "") { + try { + outputContent = fs.readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } } diff --git a/pkg/workflow/js/create_pull_request.test.cjs b/pkg/workflow/js/create_pull_request.test.cjs index 1c4773a38fb..3fdd2681b63 100644 --- a/pkg/workflow/js/create_pull_request.test.cjs +++ b/pkg/workflow/js/create_pull_request.test.cjs @@ -127,6 +127,12 @@ describe("create_pull_request.cjs", () => { }); afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + // Clean up global exec mock if (typeof global !== "undefined") { delete global.exec; diff --git a/pkg/workflow/js/create_pull_request.test.cjs.tmp b/pkg/workflow/js/create_pull_request.test.cjs.tmp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/pkg/workflow/js/missing_tool.cjs b/pkg/workflow/js/missing_tool.cjs index ce5f40a5794..72360856739 100644 --- a/pkg/workflow/js/missing_tool.cjs +++ b/pkg/workflow/js/missing_tool.cjs @@ -2,7 +2,7 @@ async function main() { const fs = require("fs"); // Get environment variables - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT || ""; const maxReports = process.env.GITHUB_AW_MISSING_TOOL_MAX ? parseInt(process.env.GITHUB_AW_MISSING_TOOL_MAX) : null; core.info("Processing missing-tool reports..."); @@ -14,26 +14,20 @@ async function main() { const missingTools = []; // Return early if no agent output - if (!outputEnvValue.trim()) { + if (!agentOutputFile.trim()) { core.info("No agent output to process"); core.setOutput("tools_reported", JSON.stringify(missingTools)); core.setOutput("total_count", missingTools.length.toString()); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let agentOutput; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - agentOutput = fs.readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - agentOutput = outputEnvValue; + try { + agentOutput = fs.readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } core.info(`Agent output length: ${agentOutput.length}`); diff --git a/pkg/workflow/js/missing_tool.test.cjs b/pkg/workflow/js/missing_tool.test.cjs index 65010cc5aba..99e984ec2f8 100644 --- a/pkg/workflow/js/missing_tool.test.cjs +++ b/pkg/workflow/js/missing_tool.test.cjs @@ -6,6 +6,15 @@ describe("missing_tool.cjs", () => { let mockCore; let missingToolScript; let originalConsole; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === 'string' ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; beforeEach(() => { // Save original console before mocking @@ -78,6 +87,12 @@ describe("missing_tool.cjs", () => { }); afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + // Clean up environment variables delete process.env.GITHUB_AW_AGENT_OUTPUT; delete process.env.GITHUB_AW_MISSING_TOOL_MAX; @@ -114,7 +129,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); await runScript(); @@ -153,7 +168,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); await runScript(); @@ -183,7 +198,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); await runScript(); @@ -207,7 +222,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); await runScript(); @@ -228,7 +243,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); process.env.GITHUB_AW_MISSING_TOOL_MAX = "2"; await runScript(); @@ -253,7 +268,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); // No GITHUB_AW_MISSING_TOOL_MAX set await runScript(); @@ -264,7 +279,7 @@ describe("missing_tool.cjs", () => { describe("Edge Cases", () => { it("should handle empty agent output", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = ""; + setAgentOutput(""); await runScript(); @@ -278,7 +293,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); await runScript(); @@ -306,7 +321,7 @@ describe("missing_tool.cjs", () => { errors: [], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(testData); + setAgentOutput(testData); const beforeTime = new Date(); await runScript(); diff --git a/pkg/workflow/js/push_to_pull_request_branch.cjs b/pkg/workflow/js/push_to_pull_request_branch.cjs index 65d2692db0c..24a65830e6b 100644 --- a/pkg/workflow/js/push_to_pull_request_branch.cjs +++ b/pkg/workflow/js/push_to_pull_request_branch.cjs @@ -6,25 +6,19 @@ async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; // Environment validation - fail early if required variables are missing - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT || ""; - if (outputEnvValue.trim() === "") { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + if (agentOutputFile.trim() === "") { core.info("Agent output content is empty"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = fs.readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = fs.readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } const target = process.env.GITHUB_AW_PUSH_TARGET || "triggering"; diff --git a/pkg/workflow/js/push_to_pull_request_branch.test.cjs b/pkg/workflow/js/push_to_pull_request_branch.test.cjs index feae144ee25..ba0fddd0802 100644 --- a/pkg/workflow/js/push_to_pull_request_branch.test.cjs +++ b/pkg/workflow/js/push_to_pull_request_branch.test.cjs @@ -62,6 +62,15 @@ describe("push_to_pull_request_branch.cjs", () => { let pushToPrBranchScript; let mockFs; let mockExec; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === 'string' ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; // Helper function to execute the script with proper globals const executeScript = async () => { @@ -150,6 +159,12 @@ const exec = global.exec;` }); afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + // Clean up globals safely if (typeof global !== "undefined") { delete global.core; @@ -172,7 +187,7 @@ const exec = global.exec;` }); it("should skip when agent output is empty", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = " "; + setAgentOutput(""); // Execute the script await executeScript(); @@ -282,7 +297,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); mockFs.existsSync.mockReturnValue(true); mockFs.readFileSync.mockReturnValue("diff --git a/file.txt b/file.txt\n+new content"); @@ -373,7 +388,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_MAX_PATCH_SIZE = "10"; // 10 KB limit mockFs.existsSync.mockReturnValue(true); @@ -401,7 +416,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_MAX_PATCH_SIZE = "1"; // 1 KB limit mockFs.existsSync.mockReturnValue(true); @@ -426,7 +441,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); delete process.env.GITHUB_AW_MAX_PATCH_SIZE; // No limit set mockFs.existsSync.mockReturnValue(true); @@ -453,7 +468,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_MAX_PATCH_SIZE = "1"; // 1 KB limit mockFs.existsSync.mockReturnValue(true); @@ -479,7 +494,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_PR_TITLE_PREFIX = "[bot] "; mockFs.existsSync.mockReturnValue(true); @@ -526,7 +541,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_PR_TITLE_PREFIX = "[bot] "; mockFs.existsSync.mockReturnValue(true); @@ -572,7 +587,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_PR_LABELS = "automation,enhancement"; mockFs.existsSync.mockReturnValue(true); @@ -619,7 +634,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_PR_LABELS = "automation,enhancement"; mockFs.existsSync.mockReturnValue(true); @@ -667,7 +682,7 @@ const exec = global.exec;` ], }; - process.env.GITHUB_AW_AGENT_OUTPUT = JSON.stringify(validOutput); + setAgentOutput(validOutput); process.env.GITHUB_AW_PR_TITLE_PREFIX = "[automated] "; process.env.GITHUB_AW_PR_LABELS = "bot,feature"; diff --git a/pkg/workflow/js/update_issue.cjs b/pkg/workflow/js/update_issue.cjs index 832e8a5e2d4..75f883c9282 100644 --- a/pkg/workflow/js/update_issue.cjs +++ b/pkg/workflow/js/update_issue.cjs @@ -3,25 +3,19 @@ async function main() { const isStaged = process.env.GITHUB_AW_SAFE_OUTPUTS_STAGED === "true"; // Read the validated output content from environment variable - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = require("fs").readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = require("fs").readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { diff --git a/pkg/workflow/js/update_issue.test.cjs b/pkg/workflow/js/update_issue.test.cjs index 2e060d64aae..3e19f832299 100644 --- a/pkg/workflow/js/update_issue.test.cjs +++ b/pkg/workflow/js/update_issue.test.cjs @@ -104,7 +104,7 @@ describe("update_issue.cjs", () => { }); it("should skip when agent output is empty", async () => { - process.env.GITHUB_AW_AGENT_OUTPUT = " "; + setAgentOutput(""); // Execute the script await eval(`(async () => { ${updateIssueScript} })()`); diff --git a/pkg/workflow/js/update_issue.test.cjs.tmp b/pkg/workflow/js/update_issue.test.cjs.tmp new file mode 100644 index 00000000000..e69de29bb2d diff --git a/pkg/workflow/js/upload_assets.cjs b/pkg/workflow/js/upload_assets.cjs index d5a392ace7a..8344b8690d8 100644 --- a/pkg/workflow/js/upload_assets.cjs +++ b/pkg/workflow/js/upload_assets.cjs @@ -66,27 +66,21 @@ async function main() { core.info(`Using assets branch: ${normalizedBranchName}`); // Read the validated output content from environment variable - const outputEnvValue = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputEnvValue) { + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT; + if (!agentOutputFile) { core.info("No GITHUB_AW_AGENT_OUTPUT environment variable found"); core.setOutput("upload_count", "0"); core.setOutput("branch_name", normalizedBranchName); return; } - // Read agent output from file path or parse as JSON directly + // Read agent output from file let outputContent; - if (outputEnvValue.startsWith("/")) { - // It's a file path, read the file - try { - outputContent = fs.readFileSync(outputEnvValue, "utf8"); - } catch (error) { - core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); - return; - } - } else { - // It's direct JSON content (backward compatibility) - outputContent = outputEnvValue; + try { + outputContent = fs.readFileSync(agentOutputFile, "utf8"); + } catch (error) { + core.setFailed(`Error reading agent output file: ${error instanceof Error ? error.message : String(error)}`); + return; } if (outputContent.trim() === "") { From efebdce7dc39ccc10c4bf1437b548c51a97d719b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 17 Oct 2025 19:20:04 +0000 Subject: [PATCH 6/6] Remove backward compatibility and update tests to use file-based agent output Co-authored-by: pelikhan <4175913+pelikhan@users.noreply.github.com> --- pkg/workflow/js/add_comment.test.cjs | 18 ++++++++++++++++++ pkg/workflow/js/add_labels.test.cjs | 18 ++++++++++++++++++ .../js/create_code_scanning_alert.test.cjs | 2 +- pkg/workflow/js/create_discussion.test.cjs | 2 +- pkg/workflow/js/create_issue.test.cjs | 18 ++++++++++++++++++ .../js/create_pr_review_comment.test.cjs | 18 ++++++++++++++++++ pkg/workflow/js/create_pull_request.test.cjs | 16 ++++++++++++++++ pkg/workflow/js/missing_tool.test.cjs | 2 +- .../js/push_to_pull_request_branch.test.cjs | 2 +- pkg/workflow/js/update_issue.test.cjs | 18 ++++++++++++++++++ 10 files changed, 110 insertions(+), 4 deletions(-) diff --git a/pkg/workflow/js/add_comment.test.cjs b/pkg/workflow/js/add_comment.test.cjs index 808c9c5e79f..60566cc3a31 100644 --- a/pkg/workflow/js/add_comment.test.cjs +++ b/pkg/workflow/js/add_comment.test.cjs @@ -78,6 +78,16 @@ global.context = mockContext; describe("add_comment.cjs", () => { let createCommentScript; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === "string" ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; + beforeEach(() => { // Reset all mocks vi.clearAllMocks(); @@ -94,6 +104,14 @@ describe("add_comment.cjs", () => { createCommentScript = fs.readFileSync(scriptPath, "utf8"); }); + afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + }); + it("should skip when no agent output is provided", async () => { // Remove the output content environment variable delete process.env.GITHUB_AW_AGENT_OUTPUT; diff --git a/pkg/workflow/js/add_labels.test.cjs b/pkg/workflow/js/add_labels.test.cjs index c0b7e369205..f54128e21e0 100644 --- a/pkg/workflow/js/add_labels.test.cjs +++ b/pkg/workflow/js/add_labels.test.cjs @@ -74,6 +74,16 @@ global.context = mockContext; describe("add_labels.cjs", () => { let addLabelsScript; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === "string" ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; + beforeEach(() => { // Reset all mocks vi.clearAllMocks(); @@ -93,6 +103,14 @@ describe("add_labels.cjs", () => { addLabelsScript = fs.readFileSync(scriptPath, "utf8"); }); + afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + }); + describe("Environment variable validation", () => { it("should skip when no agent output is provided", async () => { process.env.GITHUB_AW_LABELS_ALLOWED = "bug,enhancement"; diff --git a/pkg/workflow/js/create_code_scanning_alert.test.cjs b/pkg/workflow/js/create_code_scanning_alert.test.cjs index a6327b2366d..0c21d2660f6 100644 --- a/pkg/workflow/js/create_code_scanning_alert.test.cjs +++ b/pkg/workflow/js/create_code_scanning_alert.test.cjs @@ -73,7 +73,7 @@ describe("create_code_scanning_alert.cjs", () => { // Helper function to set agent output via file const setAgentOutput = data => { tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); - const content = typeof data === 'string' ? data : JSON.stringify(data); + const content = typeof data === "string" ? data : JSON.stringify(data); fs.writeFileSync(tempFilePath, content); process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; }; diff --git a/pkg/workflow/js/create_discussion.test.cjs b/pkg/workflow/js/create_discussion.test.cjs index 2695b18e4e9..13a1ca4658a 100644 --- a/pkg/workflow/js/create_discussion.test.cjs +++ b/pkg/workflow/js/create_discussion.test.cjs @@ -81,7 +81,7 @@ describe("create_discussion.cjs", () => { // Helper function to set agent output via file const setAgentOutput = data => { tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); - const content = typeof data === 'string' ? data : JSON.stringify(data); + const content = typeof data === "string" ? data : JSON.stringify(data); fs.writeFileSync(tempFilePath, content); process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; }; diff --git a/pkg/workflow/js/create_issue.test.cjs b/pkg/workflow/js/create_issue.test.cjs index 842108398f0..1e56dd66116 100644 --- a/pkg/workflow/js/create_issue.test.cjs +++ b/pkg/workflow/js/create_issue.test.cjs @@ -76,6 +76,16 @@ global.context = mockContext; describe("create_issue.cjs", () => { let createIssueScript; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === "string" ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; + beforeEach(() => { // Reset all mocks vi.clearAllMocks(); @@ -94,6 +104,14 @@ describe("create_issue.cjs", () => { createIssueScript = createIssueScript.replace("export {};", ""); }); + afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + }); + it("should skip when no agent output is provided", async () => { delete process.env.GITHUB_AW_AGENT_OUTPUT; diff --git a/pkg/workflow/js/create_pr_review_comment.test.cjs b/pkg/workflow/js/create_pr_review_comment.test.cjs index 8f23f64fb0c..47752467155 100644 --- a/pkg/workflow/js/create_pr_review_comment.test.cjs +++ b/pkg/workflow/js/create_pr_review_comment.test.cjs @@ -81,6 +81,16 @@ global.context = mockContext; describe("create_pr_review_comment.cjs", () => { let createPRReviewCommentScript; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === "string" ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; + beforeEach(() => { // Reset all mocks vi.clearAllMocks(); @@ -98,6 +108,14 @@ describe("create_pr_review_comment.cjs", () => { global.context = mockContext; }); + afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + }); + it("should create a single PR review comment with basic configuration", async () => { // Mock the API response mockGithub.rest.pulls.createReviewComment.mockResolvedValue({ diff --git a/pkg/workflow/js/create_pull_request.test.cjs b/pkg/workflow/js/create_pull_request.test.cjs index 3fdd2681b63..b0f1bdaf0b9 100644 --- a/pkg/workflow/js/create_pull_request.test.cjs +++ b/pkg/workflow/js/create_pull_request.test.cjs @@ -28,6 +28,16 @@ const createTestableFunction = scriptContent => { describe("create_pull_request.cjs", () => { let createMainFunction; + + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === "string" ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; let mockDependencies; beforeEach(() => { @@ -133,6 +143,12 @@ describe("create_pull_request.cjs", () => { tempFilePath = undefined; } + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + // Clean up global exec mock if (typeof global !== "undefined") { delete global.exec; diff --git a/pkg/workflow/js/missing_tool.test.cjs b/pkg/workflow/js/missing_tool.test.cjs index 99e984ec2f8..4ccfc9dbf31 100644 --- a/pkg/workflow/js/missing_tool.test.cjs +++ b/pkg/workflow/js/missing_tool.test.cjs @@ -11,7 +11,7 @@ describe("missing_tool.cjs", () => { // Helper function to set agent output via file const setAgentOutput = data => { tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); - const content = typeof data === 'string' ? data : JSON.stringify(data); + const content = typeof data === "string" ? data : JSON.stringify(data); fs.writeFileSync(tempFilePath, content); process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; }; diff --git a/pkg/workflow/js/push_to_pull_request_branch.test.cjs b/pkg/workflow/js/push_to_pull_request_branch.test.cjs index ba0fddd0802..049130a3b87 100644 --- a/pkg/workflow/js/push_to_pull_request_branch.test.cjs +++ b/pkg/workflow/js/push_to_pull_request_branch.test.cjs @@ -67,7 +67,7 @@ describe("push_to_pull_request_branch.cjs", () => { // Helper function to set agent output via file const setAgentOutput = data => { tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); - const content = typeof data === 'string' ? data : JSON.stringify(data); + const content = typeof data === "string" ? data : JSON.stringify(data); fs.writeFileSync(tempFilePath, content); process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; }; diff --git a/pkg/workflow/js/update_issue.test.cjs b/pkg/workflow/js/update_issue.test.cjs index 3e19f832299..7ac80da0577 100644 --- a/pkg/workflow/js/update_issue.test.cjs +++ b/pkg/workflow/js/update_issue.test.cjs @@ -74,6 +74,16 @@ global.context = mockContext; describe("update_issue.cjs", () => { let updateIssueScript; + let tempFilePath; + + // Helper function to set agent output via file + const setAgentOutput = data => { + tempFilePath = path.join("/tmp", `test_agent_output_${Date.now()}_${Math.random().toString(36).slice(2)}.json`); + const content = typeof data === "string" ? data : JSON.stringify(data); + fs.writeFileSync(tempFilePath, content); + process.env.GITHUB_AW_AGENT_OUTPUT = tempFilePath; + }; + beforeEach(() => { // Reset all mocks vi.clearAllMocks(); @@ -95,6 +105,14 @@ describe("update_issue.cjs", () => { updateIssueScript = fs.readFileSync(scriptPath, "utf8"); }); + afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + tempFilePath = undefined; + } + }); + it("should skip when no agent output is provided", async () => { // Execute the script await eval(`(async () => { ${updateIssueScript} })()`);