Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 12 additions & 3 deletions actions/setup/js/messages_header.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand Down Expand Up @@ -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 {
Expand All @@ -69,6 +76,8 @@ function getDisclosureHeader(ctx) {
module.exports = {
getBodyHeader,
getDisclosureHeader,
DEFAULT_DISCLOSURE_HEADER,
get DEFAULT_DISCLOSURE_HEADER() {
return getDefaultDisclosureHeader();
},
DISCLOSURE_HEADER_DEFAULT_SENTINEL,
};
33 changes: 33 additions & 0 deletions actions/setup/js/messages_header.test.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
Loading