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 diff --git a/.github/workflows/artifacts-summary.lock.yml b/.github/workflows/artifacts-summary.lock.yml index 634e5226269..44fbef4dc2d 100644 --- a/.github/workflows/artifacts-summary.lock.yml +++ b/.github/workflows/artifacts-summary.lock.yml @@ -3203,11 +3203,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; @@ -3644,20 +3655,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 09cc455256c..50307ada8df 100644 --- a/.github/workflows/audit-workflows.lock.yml +++ b/.github/workflows/audit-workflows.lock.yml @@ -3065,11 +3065,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; @@ -3518,20 +3529,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 77ad5d1ec59..81b887823cd 100644 --- a/.github/workflows/brave.lock.yml +++ b/.github/workflows/brave.lock.yml @@ -678,11 +678,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; @@ -4479,20 +4490,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 807b404d88a..e79eedf9d48 100644 --- a/.github/workflows/changeset-generator.lock.yml +++ b/.github/workflows/changeset-generator.lock.yml @@ -3677,20 +3677,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); @@ -3896,11 +3907,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")) { diff --git a/.github/workflows/ci-doctor.lock.yml b/.github/workflows/ci-doctor.lock.yml index 7c85b46b9c2..514d0f0bb95 100644 --- a/.github/workflows/ci-doctor.lock.yml +++ b/.github/workflows/ci-doctor.lock.yml @@ -177,11 +177,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; @@ -3731,11 +3742,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; @@ -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 082bd4a7023..87c85aa084a 100644 --- a/.github/workflows/cli-version-checker.lock.yml +++ b/.github/workflows/cli-version-checker.lock.yml @@ -3004,7 +3004,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"); } @@ -3615,20 +3628,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 cdfa9d99877..43db304234d 100644 --- a/.github/workflows/daily-doc-updater.lock.yml +++ b/.github/workflows/daily-doc-updater.lock.yml @@ -3146,7 +3146,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"); } @@ -3757,20 +3770,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 1e4c543a980..8c16665f634 100644 --- a/.github/workflows/daily-news.lock.yml +++ b/.github/workflows/daily-news.lock.yml @@ -3218,11 +3218,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; @@ -3659,20 +3670,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 c9b602ddfe2..aa220faed6f 100644 --- a/.github/workflows/dev.lock.yml +++ b/.github/workflows/dev.lock.yml @@ -3590,11 +3590,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; @@ -4044,20 +4055,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 33d7851c9ec..bc3fb71a239 100644 --- a/.github/workflows/duplicate-code-detector.lock.yml +++ b/.github/workflows/duplicate-code-detector.lock.yml @@ -2855,11 +2855,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; @@ -3305,20 +3316,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 a5b666d6e58..fe6b1a147ef 100644 --- a/.github/workflows/example-workflow-analyzer.lock.yml +++ b/.github/workflows/example-workflow-analyzer.lock.yml @@ -2815,11 +2815,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; @@ -3281,20 +3292,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 f122ced8cb5..8352965cbdc 100644 --- a/.github/workflows/github-mcp-tools-report.lock.yml +++ b/.github/workflows/github-mcp-tools-report.lock.yml @@ -3283,11 +3283,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; @@ -3576,7 +3587,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"); } @@ -4187,20 +4211,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 45132736ccd..1dc2e1ae4a8 100644 --- a/.github/workflows/go-pattern-detector.lock.yml +++ b/.github/workflows/go-pattern-detector.lock.yml @@ -2932,11 +2932,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; @@ -3398,20 +3409,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 ecc75415256..4e8cf2eb460 100644 --- a/.github/workflows/issue-classifier.lock.yml +++ b/.github/workflows/issue-classifier.lock.yml @@ -611,11 +611,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; @@ -2823,20 +2834,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 c5a099e8482..3929775fa4f 100644 --- a/.github/workflows/lockfile-stats.lock.yml +++ b/.github/workflows/lockfile-stats.lock.yml @@ -3128,11 +3128,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; @@ -3581,20 +3592,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 cdab4102652..667a555439f 100644 --- a/.github/workflows/mcp-inspector.lock.yml +++ b/.github/workflows/mcp-inspector.lock.yml @@ -4165,11 +4165,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; @@ -4606,20 +4617,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 d610026e305..ff380609c3f 100644 --- a/.github/workflows/pdf-summary.lock.yml +++ b/.github/workflows/pdf-summary.lock.yml @@ -696,11 +696,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; @@ -4429,20 +4440,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 0e54f16144e..38a0bd57270 100644 --- a/.github/workflows/plan.lock.yml +++ b/.github/workflows/plan.lock.yml @@ -3829,11 +3829,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; @@ -4283,20 +4294,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 e3aa36bcf3e..6271d4db308 100644 --- a/.github/workflows/poem-bot.lock.yml +++ b/.github/workflows/poem-bot.lock.yml @@ -709,11 +709,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; @@ -967,11 +978,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; @@ -4585,11 +4607,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; @@ -4874,11 +4907,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; @@ -5190,7 +5234,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"); } @@ -5789,20 +5846,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); @@ -6010,11 +6078,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")) { @@ -6296,11 +6375,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; @@ -6665,13 +6755,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 2ea2df66fa1..8548ca5dae4 100644 --- a/.github/workflows/q.lock.yml +++ b/.github/workflows/q.lock.yml @@ -712,11 +712,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; @@ -4670,7 +4681,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"); } @@ -5269,20 +5293,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 f9737096165..16c87e5752a 100644 --- a/.github/workflows/repo-tree-map.lock.yml +++ b/.github/workflows/repo-tree-map.lock.yml @@ -3223,11 +3223,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; @@ -3664,20 +3675,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 be01b146217..c4349c8a9bd 100644 --- a/.github/workflows/research.lock.yml +++ b/.github/workflows/research.lock.yml @@ -3199,11 +3199,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; @@ -3640,20 +3651,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 ba78a0c0ba3..2ec11314600 100644 --- a/.github/workflows/scout.lock.yml +++ b/.github/workflows/scout.lock.yml @@ -720,11 +720,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; @@ -4842,20 +4853,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 4ab3ef04fdb..34028a75ce2 100644 --- a/.github/workflows/security-fix-pr.lock.yml +++ b/.github/workflows/security-fix-pr.lock.yml @@ -3091,7 +3091,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"); } @@ -3702,20 +3715,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 a3ece965713..7ca51ef45b5 100644 --- a/.github/workflows/smoke-claude.lock.yml +++ b/.github/workflows/smoke-claude.lock.yml @@ -2773,11 +2773,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; @@ -3239,20 +3250,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 2481709c13c..98b0826c433 100644 --- a/.github/workflows/smoke-codex.lock.yml +++ b/.github/workflows/smoke-codex.lock.yml @@ -2601,11 +2601,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; @@ -3051,20 +3062,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 2c826b94374..b13387013f7 100644 --- a/.github/workflows/smoke-copilot.lock.yml +++ b/.github/workflows/smoke-copilot.lock.yml @@ -3187,11 +3187,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; @@ -3641,20 +3652,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 ce3ccbed1a6..24316263ac3 100644 --- a/.github/workflows/smoke-genaiscript.lock.yml +++ b/.github/workflows/smoke-genaiscript.lock.yml @@ -1911,11 +1911,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; @@ -2369,20 +2380,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 b3038205625..1cdd5f2c4c8 100644 --- a/.github/workflows/smoke-opencode.lock.yml +++ b/.github/workflows/smoke-opencode.lock.yml @@ -1895,11 +1895,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; @@ -2337,20 +2348,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 477a640cdcb..c4b17c6abe1 100644 --- a/.github/workflows/technical-doc-writer.lock.yml +++ b/.github/workflows/technical-doc-writer.lock.yml @@ -180,11 +180,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; @@ -3510,7 +3521,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"); } @@ -4121,20 +4145,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); @@ -4488,13 +4523,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 284fe690ccd..e58e1b0392c 100644 --- a/.github/workflows/tidy.lock.yml +++ b/.github/workflows/tidy.lock.yml @@ -3809,7 +3809,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"); } @@ -4408,20 +4421,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); @@ -4629,11 +4653,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")) { diff --git a/.github/workflows/unbloat-docs.lock.yml b/.github/workflows/unbloat-docs.lock.yml index 74c819f66d7..cea18fbc466 100644 --- a/.github/workflows/unbloat-docs.lock.yml +++ b/.github/workflows/unbloat-docs.lock.yml @@ -523,11 +523,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; @@ -3983,7 +3994,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"); } @@ -4594,20 +4618,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); @@ -4964,13 +4999,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..df6b9a706d7 100644 --- a/pkg/workflow/js/add_comment.cjs +++ b/pkg/workflow/js/add_comment.cjs @@ -100,12 +100,21 @@ 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 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/add_comment.test.cjs b/pkg/workflow/js/add_comment.test.cjs index 1e20750b6b1..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; @@ -106,7 +124,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 554432fd830..f2b9396cd4d 100644 --- a/pkg/workflow/js/add_labels.cjs +++ b/pkg/workflow/js/add_labels.cjs @@ -13,11 +13,21 @@ function sanitizeLabelContent(content) { return sanitized.trim(); } async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/add_labels.test.cjs b/pkg/workflow/js/add_labels.test.cjs index fba9b4f284d..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"; @@ -106,7 +124,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 646895d1397..3cc928dc763 100644 --- a/pkg/workflow/js/create_code_scanning_alert.cjs +++ b/pkg/workflow/js/create_code_scanning_alert.cjs @@ -1,11 +1,20 @@ async function main() { // Read the validated output content from environment variable - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_code_scanning_alert.test.cjs b/pkg/workflow/js/create_code_scanning_alert.test.cjs index 73e82e6103d..0c21d2660f6 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 ff640a8d650..191f6c8cd9b 100644 --- a/pkg/workflow/js/create_discussion.cjs +++ b/pkg/workflow/js/create_discussion.cjs @@ -1,9 +1,19 @@ async function main() { - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_discussion.test.cjs b/pkg/workflow/js/create_discussion.test.cjs index afd6cd78ffc..13a1ca4658a 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 1a44d2c3287..b28f88f03c2 100644 --- a/pkg/workflow/js/create_issue.cjs +++ b/pkg/workflow/js/create_issue.cjs @@ -54,11 +54,21 @@ 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 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/create_issue.test.cjs b/pkg/workflow/js/create_issue.test.cjs index 63771628e39..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; @@ -105,7 +123,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 2c39b2dcd59..f907f41edf2 100644 --- a/pkg/workflow/js/create_pr_review_comment.cjs +++ b/pkg/workflow/js/create_pr_review_comment.cjs @@ -61,12 +61,21 @@ async function main() { } // Read the validated output content from environment variable - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT; - if (!outputContent) { + 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); return; 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_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 52199deb89c..7240029c838 100644 --- a/pkg/workflow/js/create_pull_request.cjs +++ b/pkg/workflow/js/create_pull_request.cjs @@ -50,7 +50,19 @@ async function main() { throw new Error("GITHUB_AW_BASE_BRANCH environment variable is required"); } - const outputContent = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + const agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + + // Read agent output from file + let outputContent = ""; + 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; + } + } + if (outputContent.trim() === "") { core.info("Agent output content is empty"); } diff --git a/pkg/workflow/js/create_pull_request.test.cjs b/pkg/workflow/js/create_pull_request.test.cjs index 1c4773a38fb..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(() => { @@ -127,6 +137,18 @@ describe("create_pull_request.cjs", () => { }); afterEach(() => { + // Clean up temporary file + if (tempFilePath && require("fs").existsSync(tempFilePath)) { + require("fs").unlinkSync(tempFilePath); + 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/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 86fba0ae267..72360856739 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 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..."); - core.info(`Agent output length: ${agentOutput.length}`); if (maxReports) { core.info(`Maximum reports allowed: ${maxReports}`); } @@ -15,13 +14,24 @@ async function main() { const missingTools = []; // Return early if no agent output - if (!agentOutput.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 + let agentOutput; + 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}`); + // Parse the validated output JSON let validatedOutput; try { diff --git a/pkg/workflow/js/missing_tool.test.cjs b/pkg/workflow/js/missing_tool.test.cjs index 65010cc5aba..4ccfc9dbf31 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 3529f2fbbaf..24a65830e6b 100644 --- a/pkg/workflow/js/push_to_pull_request_branch.cjs +++ b/pkg/workflow/js/push_to_pull_request_branch.cjs @@ -6,12 +6,21 @@ 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 agentOutputFile = process.env.GITHUB_AW_AGENT_OUTPUT || ""; + if (agentOutputFile.trim() === "") { core.info("Agent output content is empty"); return; } + // Read agent output from file + let outputContent; + 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"; const ifNoChanges = process.env.GITHUB_AW_PUSH_IF_NO_CHANGES || "warn"; 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..049130a3b87 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 d26fc8fd382..75f883c9282 100644 --- a/pkg/workflow/js/update_issue.cjs +++ b/pkg/workflow/js/update_issue.cjs @@ -3,12 +3,21 @@ 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 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); return; diff --git a/pkg/workflow/js/update_issue.test.cjs b/pkg/workflow/js/update_issue.test.cjs index 2e060d64aae..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} })()`); @@ -104,7 +122,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 8b31ea2c748..8344b8690d8 100644 --- a/pkg/workflow/js/upload_assets.cjs +++ b/pkg/workflow/js/upload_assets.cjs @@ -66,13 +66,23 @@ 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 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 + let outputContent; + 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() === "") { core.info("Agent output content is empty"); core.setOutput("upload_count", "0");