-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathParallelizableBuildSummaryPlugin.m
More file actions
84 lines (69 loc) · 3.1 KB
/
Copy pathParallelizableBuildSummaryPlugin.m
File metadata and controls
84 lines (69 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
classdef ParallelizableBuildSummaryPlugin < matlab.buildtool.plugins.BuildRunnerPlugin
% Copyright 2025-2026 The MathWorks, Inc.
properties
TempFolder
end
methods
function plugin = ParallelizableBuildSummaryPlugin(options)
arguments
options.TempFolder (1,:) string = getenv("RUNNER_TEMP")
end
plugin.TempFolder = fullfile(options.TempFolder, "taskDetails");
end
end
methods (Access=protected)
function runBuild(plugin, pluginData)
% Create temp folder
mkdir(plugin.TempFolder);
cleanup = onCleanup(@()rmdir(plugin.TempFolder, "s"));
runBuild@matlab.buildtool.plugins.BuildRunnerPlugin(plugin, pluginData);
% Construct task details
taskDetails = {};
fs = what(plugin.TempFolder).mat;
for i = 1:numel(fs)
f = fs{i};
s = load(fullfile(plugin.TempFolder, f));
taskDetails = [taskDetails s.taskDetail]; %#ok<AGROW>
end
% Write to file
folder = fileparts(plugin.TempFolder);
[fID, msg] = fopen(fullfile(folder, "buildSummary" + getenv("GITHUB_RUN_ID") + ".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
function runTask(plugin, pluginData)
runTask@matlab.buildtool.plugins.BuildRunnerPlugin(plugin, pluginData);
name = fullfile(plugin.TempFolder, matlab.lang.makeValidName(pluginData.Name) + ".mat");
taskDetail = getCommonTaskDetail(pluginData);
try
save(name, "taskDetail");
catch e
warning("buildframework:BuildSummaryPlugin:UnableToSaveTrace", "Unable to save an artifact needed for the build summary.");
end
end
function skipTask(plugin, pluginData)
skipTask@matlab.buildtool.plugins.BuildRunnerPlugin(plugin, pluginData);
name = fullfile(plugin.TempFolder, matlab.lang.makeValidName(pluginData.Name) + ".mat");
taskDetail = getCommonTaskDetail(pluginData);
taskDetail.skipReason = pluginData.SkipReason;
try
save(name, "taskDetail");
catch e
warning("buildframework:BuildSummaryPlugin:UnableToSaveTrace", "Unable to save an artifact needed for the build summary.");
end
end
end
end
function taskDetail = getCommonTaskDetail(pluginData)
taskDetail = struct();
taskDetail.name = pluginData.TaskResults.Name;
taskDetail.description = pluginData.TaskGraph.Tasks.Description;
taskDetail.failed = pluginData.TaskResults.Failed;
taskDetail.skipped = pluginData.TaskResults.Skipped;
taskDetail.duration = string(pluginData.TaskResults.Duration);
end