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
16 changes: 7 additions & 9 deletions plugins/+buildframework/BuildSummaryPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,13 @@
function runTaskGraph(plugin, pluginData)
runTaskGraph@matlab.buildtool.plugins.BuildRunnerPlugin(plugin, pluginData);

if strcmpi(getenv("MW_GENERATE_JOB_SUMMARY"), "true")
[fID, msg] = fopen(fullfile(getenv("RUNNER_TEMP"), "buildSummary" + getenv("GITHUB_ACTION") + "_" + string(datetime('now', 'Format', 'yyyyMMdd_HHmmss_SSS')) + ".json"), "w");
if fID == -1
warning("buildframework:BuildSummaryPlugin:UnableToOpenFile","Unable to open a file required to create the MATLAB build summary table: %s", msg);
else
closeFile = onCleanup(@()fclose(fID));
s = jsonencode(plugin.TaskDetails);
fprintf(fID, "%s",s);
end
[fID, msg] = fopen(fullfile(getenv("RUNNER_TEMP"), "buildSummary" + getenv("GITHUB_ACTION") + "_" + string(datetime('now', 'Format', 'yyyyMMdd_HHmmss_SSS')) + ".json"), "w");
if fID == -1
warning("buildframework:BuildSummaryPlugin:UnableToOpenFile","Unable to open a file required to create the MATLAB build summary table: %s", msg);
else
closeFile = onCleanup(@()fclose(fID));
s = jsonencode(plugin.TaskDetails);
fprintf(fID, "%s",s);
end
end

Expand Down
18 changes: 8 additions & 10 deletions plugins/+buildframework/ParallelizableBuildSummaryPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -34,16 +34,14 @@ function runBuild(plugin, pluginData)
end

% Write to file
if strcmpi(getenv("MW_GENERATE_JOB_SUMMARY"), "true")
folder = fileparts(plugin.TempFolder);
[fID, msg] = fopen(fullfile(folder, "buildSummary" + getenv("GITHUB_ACTION") + "_" + string(datetime('now', 'Format', 'yyyyMMdd_HHmmss_SSS')) + ".json"), "w");
if fID == -1
warning("buildframework:BuildSummaryPlugin:UnableToOpenFile","Unable to open a file required to create the MATLAB build summary table: %s", msg);
else
closeFile = onCleanup(@()fclose(fID));
s = jsonencode(taskDetails);
fprintf(fID, "%s", s);
end
folder = fileparts(plugin.TempFolder);
[fID, msg] = fopen(fullfile(folder, "buildSummary" + getenv("GITHUB_ACTION") + "_" + string(datetime('now', 'Format', 'yyyyMMdd_HHmmss_SSS')) + ".json"), "w");
if fID == -1
warning("buildframework:BuildSummaryPlugin:UnableToOpenFile","Unable to open a file required to create the MATLAB build summary table: %s", msg);
else
closeFile = onCleanup(@()fclose(fID));
s = jsonencode(taskDetails);
fprintf(fID, "%s", s);
end
end

Expand Down
16 changes: 9 additions & 7 deletions plugins/+buildframework/getDefaultPlugins.m
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,17 @@
pluginProviderData (1,1) struct = struct();
end

if isMATLABReleaseOlderThan("R2026a")
reportPlugin = buildframework.BuildSummaryPlugin();
else
reportPlugin = buildframework.ParallelizableBuildSummaryPlugin();
end

plugins = [ ...
matlab.buildtool.internal.getFactoryDefaultPlugins(pluginProviderData) ...
buildframework.GitHubLogPlugin() ...
reportPlugin ...
];

if strcmpi(getenv("MW_GENERATE_SUMMARY"), "true")
if isMATLABReleaseOlderThan("R2026a")
reportPlugin = buildframework.BuildSummaryPlugin();
else
reportPlugin = buildframework.ParallelizableBuildSummaryPlugin();
end
plugins = [plugins reportPlugin];
end
end
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
methods
function plugins = providePlugins(~, ~)
% Check if MATLAB Test license is available
if license('test', 'matlab_test')
if strcmpi(getenv("MW_GENERATE_SUMMARY"), "true") && license('test', 'matlab_test')
plugins = testframework.TestResultsSummaryPlugin();
else
plugins = matlab.unittest.plugins.TestRunnerPlugin.empty(1,0);
Expand Down
56 changes: 27 additions & 29 deletions plugins/+testframework/TestResultsSummaryPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -3,39 +3,37 @@

methods (Access=protected)
function reportFinalizedSuite(plugin, pluginData)
if strcmpi(getenv("MW_GENERATE_JOB_SUMMARY"), "true")
% Checkout MATLAB Test license
license('checkout', 'matlab_test');
% Checkout MATLAB Test license
license('checkout', 'matlab_test');

testDetails = struct([]);
for idx = 1:numel(pluginData.TestResult)
testDetails(idx).TestResult.Duration = pluginData.TestResult(idx).Duration;
if isfield(pluginData.TestResult(idx).Details, "DiagnosticRecord") && ~isempty(pluginData.TestResult(idx).Details.DiagnosticRecord)
testDetails(idx).TestResult.Details.DiagnosticRecord.Event = pluginData.TestResult(idx).Details.DiagnosticRecord.Event;
testDetails(idx).TestResult.Details.DiagnosticRecord.Report = pluginData.TestResult(idx).Details.DiagnosticRecord.Report;
else
testDetails(idx).TestResult.Details = struct();
end
testDetails(idx).TestResult.Name = pluginData.TestResult(idx).Name;
testDetails(idx).TestResult.Passed = pluginData.TestResult(idx).Passed;
testDetails(idx).TestResult.Failed = pluginData.TestResult(idx).Failed;
testDetails(idx).TestResult.Incomplete = pluginData.TestResult(idx).Incomplete;
testDetails(idx).BaseFolder = pluginData.TestSuite(idx).BaseFolder;
testDetails = struct([]);
for idx = 1:numel(pluginData.TestResult)
testDetails(idx).TestResult.Duration = pluginData.TestResult(idx).Duration;
if isfield(pluginData.TestResult(idx).Details, "DiagnosticRecord") && ~isempty(pluginData.TestResult(idx).Details.DiagnosticRecord)
testDetails(idx).TestResult.Details.DiagnosticRecord.Event = pluginData.TestResult(idx).Details.DiagnosticRecord.Event;
testDetails(idx).TestResult.Details.DiagnosticRecord.Report = pluginData.TestResult(idx).Details.DiagnosticRecord.Report;
else
testDetails(idx).TestResult.Details = struct();
end
testDetails(idx).TestResult.Name = pluginData.TestResult(idx).Name;
testDetails(idx).TestResult.Passed = pluginData.TestResult(idx).Passed;
testDetails(idx).TestResult.Failed = pluginData.TestResult(idx).Failed;
testDetails(idx).TestResult.Incomplete = pluginData.TestResult(idx).Incomplete;
testDetails(idx).BaseFolder = pluginData.TestSuite(idx).BaseFolder;
end

try
jsonTestResults = jsonencode(testDetails, "PrettyPrint", true);
testArtifactFile = fullfile(getenv("RUNNER_TEMP"), "matlabTestResults" + getenv("GITHUB_ACTION") + "_" + string(datetime('now', 'Format', 'yyyyMMdd_HHmmss_SSS')) + ".json");
[fID, msg] = fopen(testArtifactFile, "w");
if fID == -1
warning("testframework:TestResultsSummaryPlugin:UnableToOpenFile","Unable to open a file required to create the table of test results. (Cause: %s)", msg);
else
closeFile = onCleanup(@()fclose(fID));
fprintf(fID, '%s', jsonTestResults);
end
catch e
warning("testframework:TestResultsSummaryPlugin:UnableToJsonEncode","Unable to jsonencode test results data. (Cause: %s)", e.message);
try
jsonTestResults = jsonencode(testDetails, "PrettyPrint", true);
testArtifactFile = fullfile(getenv("RUNNER_TEMP"), "matlabTestResults" + getenv("GITHUB_ACTION") + "_" + string(datetime('now', 'Format', 'yyyyMMdd_HHmmss_SSS')) + ".json");
[fID, msg] = fopen(testArtifactFile, "w");
if fID == -1
warning("testframework:TestResultsSummaryPlugin:UnableToOpenFile","Unable to open a file required to create the table of test results. (Cause: %s)", msg);
else
closeFile = onCleanup(@()fclose(fID));
fprintf(fID, '%s', jsonTestResults);
end
catch e
warning("testframework:TestResultsSummaryPlugin:UnableToJsonEncode","Unable to jsonencode test results data. (Cause: %s)", e.message);
end

% Invoke the superclass method
Expand Down
16 changes: 5 additions & 11 deletions src/testResultsSummary.ts
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,6 @@ export function getTestResults(
actionName: string,
workspace: string,
): TestResultsData | null {
let testResultsData = null;
const filePrefix = `matlabTestResults${actionName}_`;
const fileSuffix = `.json`;

Expand Down Expand Up @@ -118,12 +117,6 @@ export function getTestResults(
Duration: 0,
};

testResultsData = {
TestSessions: testSessions,
OverallStats: overallStats,
};

// Process each test result file
for (const fileName of testResultFiles) {
const resultsPath = path.join(runnerTemp, fileName);

Expand All @@ -140,21 +133,18 @@ export function getTestResults(
};

const map = new Map<string, MatlabTestFile>();

const testCases = Array.isArray(testArtifact) ? testArtifact : [testArtifact];

for (const jsonTestCase of testCases) {
processTestCase(sessionResults, jsonTestCase, map, sessionStats, workspace);
}

// Add this session to the list
testSessions.push({
FileName: fileName,
TestResults: sessionResults,
Stats: sessionStats,
});

// Update overall stats
overallStats.Total += sessionStats.Total;
overallStats.Passed += sessionStats.Passed;
overallStats.Failed += sessionStats.Failed;
Expand All @@ -178,7 +168,11 @@ export function getTestResults(
}
}

return testResultsData;
if (testSessions.length === 0) {
return null;
}

return { TestSessions: testSessions, OverallStats: overallStats };
}
export function addSummary(
testResultsData: TestResultsData | null,
Expand Down
4 changes: 1 addition & 3 deletions src/testResultsSummary.unit.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -653,9 +653,7 @@ describe("Error Handling Tests", () => {

try {
const result = testResultsSummary.getTestResults(runnerTemp, "", "");
expect(result).not.toBeNull();
expect(result!.TestSessions.length).toBe(0);
expect(result!.OverallStats.Total).toBe(0);
expect(result).toBeNull();

expect(consoleSpy).toHaveBeenCalledWith(
expect.stringContaining(
Expand Down
2 changes: 1 addition & 1 deletion tests/tParallelizableBuildSummaryPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ function createPlugin(testCase)

testCase.applyFixture(WorkingFolderFixture);
testCase.TempFolder = pwd();
testCase.applyFixture(EnvironmentVariableFixture("MW_GENERATE_JOB_SUMMARY", "true"));
testCase.applyFixture(EnvironmentVariableFixture("MW_GENERATE_SUMMARY", "true"));
testCase.applyFixture(EnvironmentVariableFixture("GITHUB_ACTION", "my-action"));

testCase.Plugin = ParallelizableBuildSummaryPlugin(TempFolder=testCase.TempFolder);
Expand Down
Loading