mirror of
https://github.com/github/codeql-action.git
synced 2026-10-29 09:07:12 +00:00
78 lines
2.4 KiB
TypeScript
78 lines
2.4 KiB
TypeScript
import fs from "fs";
|
|
|
|
import * as core from "@actions/core";
|
|
|
|
import * as sarif from "../src/sarif";
|
|
|
|
function checkStatusPageNotification(n) {
|
|
const expectedMessage = "Plaintext message";
|
|
if (n.message.text !== expectedMessage) {
|
|
core.setFailed(
|
|
`Expected the status page diagnostic to have the message '${expectedMessage}', but found '${n.message.text}'.`,
|
|
);
|
|
}
|
|
if (n.locations.length !== 1) {
|
|
core.setFailed(
|
|
`Expected the status page diagnostic to have exactly 1 location, but found ${n.locations.length}.`,
|
|
);
|
|
}
|
|
}
|
|
|
|
const sarifPath = process.env["SARIF_PATH"];
|
|
|
|
if (sarifPath === undefined) {
|
|
throw new Error("The path to a SARIF file must be set in 'SARIF_PATH'.");
|
|
}
|
|
|
|
const log = JSON.parse(fs.readFileSync(sarifPath, "utf8")) as sarif.Log;
|
|
const run = log.runs[0];
|
|
|
|
if (run.invocations === undefined) {
|
|
throw new Error("run.invocations is undefined");
|
|
}
|
|
|
|
const toolExecutionNotifications =
|
|
run.invocations[0].toolExecutionNotifications;
|
|
|
|
if (toolExecutionNotifications === undefined) {
|
|
throw new Error("toolExecutionNotifications is undefined");
|
|
}
|
|
|
|
const statusPageNotifications = toolExecutionNotifications.filter(
|
|
(n) =>
|
|
n.descriptor?.id === "lang/diagnostics/example" &&
|
|
n.properties?.visibility?.statusPage,
|
|
);
|
|
if (statusPageNotifications.length !== 1) {
|
|
core.setFailed(
|
|
"Expected exactly one status page reporting descriptor for this diagnostic in the " +
|
|
`'runs[].invocations[].toolExecutionNotifications[]' SARIF property, but found ` +
|
|
`${statusPageNotifications.length}. All notification reporting descriptors: ` +
|
|
`${JSON.stringify(toolExecutionNotifications)}.`,
|
|
);
|
|
}
|
|
checkStatusPageNotification(statusPageNotifications[0]);
|
|
|
|
const notifications = run.tool.driver.notifications;
|
|
|
|
if (notifications === undefined) {
|
|
throw new Error("notifications is undefined");
|
|
}
|
|
|
|
const diagnosticNotification = notifications.filter(
|
|
(n) =>
|
|
n.id === "lang/diagnostics/example" &&
|
|
n.name === "lang/diagnostics/example" &&
|
|
n.fullDescription?.text === "Diagnostic name",
|
|
);
|
|
if (diagnosticNotification.length !== 1) {
|
|
core.setFailed(
|
|
"Expected exactly one notification for this diagnostic in the " +
|
|
`'runs[].tool.driver.notifications[]' SARIF property, but found ` +
|
|
`${diagnosticNotification.length}. All notifications: ` +
|
|
`${JSON.stringify(notifications)}.`,
|
|
);
|
|
}
|
|
|
|
core.info("Finished diagnostic export test");
|