Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add skip reason for skipped tasks in build results table #356

Merged
merged 13 commits into from
Sep 5, 2024
2 changes: 1 addition & 1 deletion azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ trigger:
- master

steps:
- task: Maven@3
- task: Maven@4
inputs:
mavenPomFile: 'pom.xml'
mavenOptions: '-Xmx3072m -Dmaven.javadoc.skip=true'
Expand Down
24 changes: 23 additions & 1 deletion src/main/java/com/mathworks/ci/BuildArtifactAction.java
Original file line number Diff line number Diff line change
Expand Up @@ -204,7 +204,7 @@ private void setCounts() throws InterruptedException, ParseException {
private void iterateAllTaskAttributes(Entry pair, BuildArtifactData data) {
// Iterates across all task attributes and updates
String key = pair.getKey().toString();
switch(key.toLowerCase()){
switch(key){
case "duration":
data.setTaskDuration(pair.getValue().toString());
break;
Expand All @@ -220,6 +220,28 @@ private void iterateAllTaskAttributes(Entry pair, BuildArtifactData data) {
case "skipped":
data.setTaskSkipped((Boolean) pair.getValue());
break;
case "skipReason":
String skipReasonKey = pair.getValue().toString();
String skipReason;
switch(skipReasonKey){
case "UpToDate":
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
skipReason = "Up-To-Date";
break;
case "UserSpecified":
skipReason = "User Specified";
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
break;
case "UserRequested":
skipReason = "User Requested";
break;
case "DependencyFailed":
skipReason = "Dependency Failed";
break;
default:
skipReason = skipReasonKey;
break;
}
data.setSkipReason(skipReason);
break;
default :
break;
}
Expand Down
11 changes: 10 additions & 1 deletion src/main/java/com/mathworks/ci/BuildArtifactData.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,12 @@ public class BuildArtifactData {

private String taskDescription;
private boolean taskSkipped;
private String skipReason;

public BuildArtifactData() {
skipReason = "";
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
}


public String getTaskDuration() {
return this.taskDuration;
}
Expand All @@ -37,6 +38,14 @@ public void setTaskSkipped(boolean taskSkipped) {
this.taskSkipped = taskSkipped;
}

public String getSkipReason() {
return this.skipReason;
}

public void setSkipReason(String skipReason) {
this.skipReason = skipReason;
}

public boolean getTaskFailed() {
return this.taskFailed;
}
Expand Down
49 changes: 36 additions & 13 deletions src/main/resources/+ciplugins/+jenkins/BuildReportPlugin.m
Original file line number Diff line number Diff line change
Expand Up @@ -2,27 +2,50 @@

% Copyright 2024 The MathWorks, Inc.

methods (Access=protected)
properties
taskDetails = {};
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
end

methods (Access=protected)
function runTaskGraph(plugin, pluginData)
runTaskGraph@matlab.buildtool.plugins.BuildRunnerPlugin(plugin, pluginData);

[fID, msg] = fopen(fullfile(getenv("MW_MATLAB_TEMP_FOLDER"),"buildArtifact.json"), "w");
if fID == -1
warning("ciplugins:jenkins:BuildReportPlugin:UnableToOpenFile","Could not open a file for Jenkins build result table due to: %s", msg);
else
closeFile = onCleanup(@()fclose(fID));
taskDetails = struct();
for idx = 1:numel(pluginData.TaskResults)
taskDetails(idx).name = pluginData.TaskResults(idx).Name;
taskDetails(idx).description = pluginData.TaskGraph.Tasks(idx).Description;
taskDetails(idx).failed = pluginData.TaskResults(idx).Failed;
taskDetails(idx).skipped = pluginData.TaskResults(idx).Skipped;
taskDetails(idx).duration = string(pluginData.TaskResults(idx).Duration);
end
a = struct("taskDetails",taskDetails);
s = jsonencode(a,PrettyPrint=true);
fprintf(fID, "%s",s);
a = struct();
a.taskDetails = plugin.taskDetails;
s = jsonencode(a, PrettyPrint=true);
fprintf(fID, "%s", s);
end
end

function runTask(plugin, pluginData)
runTask@matlab.buildtool.plugins.BuildRunnerPlugin(plugin, pluginData);

taskDetail = plugin.getCommonTaskData(pluginData);
plugin.taskDetails = [plugin.taskDetails, taskDetail];
end

function skipTask(plugin, pluginData)
skipTask@matlab.buildtool.plugins.BuildRunnerPlugin(plugin, pluginData);

taskDetail = plugin.getCommonTaskData(pluginData);
taskDetail.skipReason = pluginData.SkipReason;
plugin.taskDetails = [plugin.taskDetails, taskDetail];
end
end

methods(Static, Access=private)
function taskDetail = getCommonTaskData(pluginData)
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
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
end
end
end
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

<?jelly escape-by-default='true'?>
<j:jelly xmlns:j="jelly:core" xmlns:st="jelly:stapler" xmlns:d="jelly:define"
xmlns:l="/lib/layout" xmlns:t="/lib/hudson" xmlns:f="/lib/form" xmlns:r="/lib/hudson/test" xmlns:p="/lib/test">
Expand Down Expand Up @@ -66,7 +65,7 @@
<a href="../console#matlab-${p.taskName}">${p.taskName}</a>
</j:if>
</td>
<td class="pane" style="width:9em">
<td class="pane no-wrap" style="width:auto">
<span class="${pst.cssClass}">
<j:if test="${p.taskFailed != false}">
<j:if test="${it.actionID != ''}">
Expand All @@ -82,7 +81,12 @@
</j:if>
</j:if>
<j:if test="${p.taskSkipped == true}">
<font color="#FCE94F"> SKIPPED </font>
<font color="#FCE94F">
SKIPPED
<j:if test="${p.skipReason != ''}">
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
(${p.skipReason})
</j:if>
</font>
</j:if>
</span>
</td>
Expand Down
19 changes: 19 additions & 0 deletions src/test/java/integ/com/mathworks/ci/BuildArtifactActionTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,24 @@ public void verifySkipCount() throws ExecutionException, InterruptedException, U
Assert.assertEquals("The task is not skipped",true,ba.get(0).getTaskSkipped());
}

/**
* Verify if skip reason is returned from artifact file.
*
*/

@Test
public void verifySkipReasonIsAccurate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
FreeStyleBuild build = getFreestyleBuild();
final String actionID = "abc123";
final String targetFile = "buildArtifact"+ actionID + ".json";
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
FilePath artifactRoot = new FilePath(build.getRootDir());
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json",targetFile,artifactRoot);
List<BuildArtifactData> ba = ac.getBuildArtifact();
Assert.assertEquals("The task is not skipped",true,ba.get(0).getTaskSkipped());
Assert.assertEquals("Skip reason absent for skipped task ","User Specified",ba.get(0).getSkipReason());
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
mw-kapilg marked this conversation as resolved.
Show resolved Hide resolved
}

/**
* Verify if duration returned from artifact file.
*
Expand Down Expand Up @@ -215,6 +233,7 @@ public void verifyTotalFailedTaskCountIsAccurate() throws ExecutionException, In
Assert.assertEquals("Total task count is not correct",3,ac.getTotalCount());
Assert.assertEquals("Total task failed count is not correct",1,ac.getFailCount());
}

/**
* Verify if total skipped count returned from artifact file.
*
Expand Down
1 change: 1 addition & 0 deletions src/test/resources/buildArtifacts.t2/buildArtifact.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"description": "Test show",
"failed": false,
"skipped": true,
"skipReason": "UserSpecified",
"duration": "00:02:53"
}
}
1 change: 1 addition & 0 deletions src/test/resources/buildArtifacts/t1/buildArtifact.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"description": "tests Dscription",
"failed": false,
"skipped": true,
"skipReason": "UserSpecified",
"duration": "00:00:00"
}
]
Expand Down