in src/PrDisplay.js [694:783]
renderChecks(checkRuns, s3Artifacts) {
const checks = [];
const testResultArtifacts = {};
if (!s3Artifacts) {
s3Artifacts = [];
}
let artifactsByName = {};
for (const artifact of s3Artifacts) {
let prefix = artifact.Key["#text"];
let name = prefix.split("/").slice(-1)[0];
artifactsByName[name] = artifact;
}
for (const [index, check] of checkRuns.entries()) {
// Show the log viewer + toggle chevron
const toggle = () => {
check.log.shown = !check.log.shown;
this.setState(this.state);
};
const [log, isShowing] = this.renderLogViewer(check);
const iconStyle = { cursor: "pointer" };
let icon = <BsFillCaretRightFill style={iconStyle} onClick={toggle} />;
if (isShowing) {
icon = <BsFillCaretDownFill style={iconStyle} onClick={toggle} />;
}
// Determine the check's status and turn that into an icon
const statuses = {
SUCCESS: <GoCheck style={{ color: "#22863a" }} />,
FAILURE: <GoX style={{ color: "#cb2431" }} />,
NEUTRAL: <GoCircleSlash style={{ color: "#959da5" }} />,
CANCELLED: <GoCircleSlash style={{ color: "rgb(255 86 86)" }} />,
};
let statusIcon = statuses[check.conclusion] || (
<GoPrimitiveDot style={{ color: "#dbab09" }} />
);
let renderResultsButton = null;
let artifactDetails = null;
let artifactName = this.getArtifactName(check.name);
if (artifactsByName[artifactName]) {
const artifact = artifactsByName[artifactName];
const size = formatBytes(parseInt(artifact.Size["#text"]));
renderResultsButton = (
<button
style={{ marginLeft: "5px", fontSize: "0.7em", fontWeight: "bold" }}
className="btn btn-info"
onClick={async () => {
// showReport might be undefined the first time so explicitly
// spell it out here to avoid any falsiness
if (artifact.showReport) {
artifact.showReport = false;
} else {
artifact.showReport = true;
}
this.setState(this.state);
this.render();
}}
>
{artifact.showReport ? "Hide" : `Tests (${size})`}
</button>
);
testResultArtifacts[artifact.Key["#text"]] = true;
let prefix = artifact.Key["#text"];
check.artifactUrl = `https://gha-artifacts.s3.amazonaws.com/${prefix}`;
check.artifact = artifact;
if (artifact.showReport) {
const key = `s3-${check.name}-${artifactName}`;
let prefix = artifact.Key["#text"];
let url = `https://gha-artifacts.s3.amazonaws.com/${prefix}`;
artifactDetails = (
<TestReportRenderer testReportZip={url} key={key} />
);
}
}
checks.push({
data: check,
element: (
<div style={{ marginBottom: "2px" }} key={"check-run-" + index}>
{statusIcon} <a href={check.detailsUrl}>{check.name}</a> {icon}{" "}
{log}
{renderResultsButton}
{artifactDetails}
</div>
),
});
}
return [checks, testResultArtifacts];
}