diff --git a/actions/setup/js/messages_header.cjs b/actions/setup/js/messages_header.cjs index 87fdcea0509..6a13fe17306 100644 --- a/actions/setup/js/messages_header.cjs +++ b/actions/setup/js/messages_header.cjs @@ -20,7 +20,14 @@ const { getMessages, getPromptPath, renderTemplate, renderTemplateFromFile, toSn const DEFAULT_DISCLOSURE_HEADER_TEMPLATE = "safe_outputs_disclosure_header.md"; const DISCLOSURE_HEADER_DEFAULT_SENTINEL = "true"; -const DEFAULT_DISCLOSURE_HEADER = renderTemplateFromFile(getPromptPath(DEFAULT_DISCLOSURE_HEADER_TEMPLATE), {}).trimEnd(); +let defaultDisclosureHeader; + +function getDefaultDisclosureHeader() { + if (defaultDisclosureHeader === undefined) { + defaultDisclosureHeader = renderTemplateFromFile(getPromptPath(DEFAULT_DISCLOSURE_HEADER_TEMPLATE), {}).trimEnd(); + } + return defaultDisclosureHeader; +} /** * Get the body header text, using the custom template if configured. @@ -55,7 +62,7 @@ function getDisclosureHeader(ctx) { let template = ""; if (disclosureHeader === true || disclosureHeader === DISCLOSURE_HEADER_DEFAULT_SENTINEL) { - template = DEFAULT_DISCLOSURE_HEADER; + template = getDefaultDisclosureHeader(); } else if (typeof disclosureHeader === "string") { template = disclosureHeader; } else { @@ -69,6 +76,8 @@ function getDisclosureHeader(ctx) { module.exports = { getBodyHeader, getDisclosureHeader, - DEFAULT_DISCLOSURE_HEADER, + get DEFAULT_DISCLOSURE_HEADER() { + return getDefaultDisclosureHeader(); + }, DISCLOSURE_HEADER_DEFAULT_SENTINEL, }; diff --git a/actions/setup/js/messages_header.test.cjs b/actions/setup/js/messages_header.test.cjs index 0a1b8ca56d2..148f3230684 100644 --- a/actions/setup/js/messages_header.test.cjs +++ b/actions/setup/js/messages_header.test.cjs @@ -24,6 +24,39 @@ let DISCLOSURE_HEADER_DEFAULT_SENTINEL; const WORKFLOW = "My Workflow"; const RUN_URL = "https://github.com/owner/repo/actions/runs/99"; +describe("messages_header module loading", () => { + it("does not require prompt templates until default disclosure text is rendered", () => { + const originalPromptsDir = process.env.GH_AW_PROMPTS_DIR; + const originalRunnerTemp = process.env.RUNNER_TEMP; + const modulePath = require.resolve("./messages_header.cjs"); + + try { + delete process.env.GH_AW_PROMPTS_DIR; + delete process.env.RUNNER_TEMP; + delete require.cache[modulePath]; + + const headerModule = require("./messages_header.cjs"); + expect(headerModule.getBodyHeader({ workflowName: WORKFLOW, runUrl: RUN_URL })).toBe(""); + + process.env.GH_AW_SAFE_OUTPUT_MESSAGES = JSON.stringify({ disclosureHeader: true }); + expect(() => headerModule.getDisclosureHeader({ workflowName: WORKFLOW, runUrl: RUN_URL })).toThrow(/Cannot resolve prompt path/); + } finally { + delete process.env.GH_AW_SAFE_OUTPUT_MESSAGES; + if (originalPromptsDir === undefined) { + delete process.env.GH_AW_PROMPTS_DIR; + } else { + process.env.GH_AW_PROMPTS_DIR = originalPromptsDir; + } + if (originalRunnerTemp === undefined) { + delete process.env.RUNNER_TEMP; + } else { + process.env.RUNNER_TEMP = originalRunnerTemp; + } + delete require.cache[modulePath]; + } + }); +}); + describe("messages_header", () => { beforeAll(() => { originalPromptsDir = process.env.GH_AW_PROMPTS_DIR;