Skip to content
This repository was archived by the owner on Mar 27, 2025. It is now read-only.

Commit b4a268a

Browse files
committed
Fixed issue 338
1 parent 7b77260 commit b4a268a

File tree

7 files changed

+90
-32
lines changed

7 files changed

+90
-32
lines changed

src/main/java/com/mathworks/ci/BuildArtifactAction.java

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@ public class BuildArtifactAction implements Action {
2424
private int totalCount;
2525
private int skipCount;
2626
private int failCount;
27+
private String actionID;
2728
private static final String ROOT_ELEMENT = "taskDetails";
28-
private static final String BUILD_ARTIFACT_FILE = "buildArtifact.json";
29+
private static final String BUILD_ARTIFACT_FILE = "buildArtifact";
2930

30-
public BuildArtifactAction(Run<?, ?> build) {
31+
public BuildArtifactAction(Run<?, ?> build, String actionID) {
3132
this.build = build;
33+
this.actionID = actionID;
3234

3335
// Setting the counts of task when Action is created.
3436
try{
@@ -40,6 +42,9 @@ public BuildArtifactAction(Run<?, ?> build) {
4042
}
4143
}
4244

45+
public String getActionID(){
46+
return this.actionID;
47+
}
4348
@CheckForNull
4449
@Override
4550
public String getIconFileName() {
@@ -55,12 +60,12 @@ public String getDisplayName() {
5560
@CheckForNull
5661
@Override
5762
public String getUrlName() {
58-
return "buildresults";
63+
return "buildresults" + this.actionID ;
5964
}
6065

6166
public List<BuildArtifactData> getBuildArtifact() throws ParseException, InterruptedException, IOException {
6267
List<BuildArtifactData> artifactData = new ArrayList<BuildArtifactData>();
63-
FilePath fl = new FilePath(new File(build.getRootDir().getAbsolutePath() + "/" + BUILD_ARTIFACT_FILE));
68+
FilePath fl = new FilePath(new File(build.getRootDir().getAbsolutePath() + "/" + BUILD_ARTIFACT_FILE + this.actionID +".json"));
6469
try (InputStreamReader reader = new InputStreamReader(new FileInputStream(new File(fl.toURI())), "UTF-8")) {
6570
Object obj = new JSONParser().parse(reader);
6671
JSONObject jo = (JSONObject) obj;
@@ -131,7 +136,7 @@ public void setOwner(Run owner) {
131136

132137
private void setCounts() throws InterruptedException, ParseException {
133138
List<BuildArtifactData> artifactData = new ArrayList<BuildArtifactData>();
134-
FilePath fl = new FilePath(new File(build.getRootDir(), BUILD_ARTIFACT_FILE));
139+
FilePath fl = new FilePath(new File(build.getRootDir(), BUILD_ARTIFACT_FILE + this.actionID + ".json"));
135140
try (InputStreamReader reader = new InputStreamReader(new FileInputStream(new File(fl.toURI())), "UTF-8")) {
136141
Object obj = new JSONParser().parse(reader);
137142
JSONObject jo = (JSONObject) obj;

src/main/java/com/mathworks/ci/actions/RunMatlabBuildAction.java

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
*
66
*/
77

8+
import com.mathworks.ci.Utilities;
9+
import com.sun.javafx.scene.control.skin.Utils;
810
import java.io.File;
911
import java.io.IOException;
1012

@@ -17,6 +19,8 @@
1719
import com.mathworks.ci.MatlabExecutionException;
1820
import com.mathworks.ci.parameters.BuildActionParameters;
1921
import com.mathworks.ci.utilities.MatlabCommandRunner;
22+
import java.util.UUID;
23+
import org.apache.commons.lang.RandomStringUtils;
2024

2125
public class RunMatlabBuildAction {
2226
private BuildActionParameters params;
@@ -29,6 +33,15 @@ public class RunMatlabBuildAction {
2933
"+ciplugins/+jenkins/BuildReportPlugin.m";
3034
private static String TASK_RUN_PROGRESS_PLUGIN =
3135
"+ciplugins/+jenkins/TaskRunProgressPlugin.m";
36+
private String actionID;
37+
38+
public String getActionID(){
39+
return this.actionID;
40+
}
41+
42+
private void setActionID(){
43+
this.actionID = RandomStringUtils.randomAlphanumeric(8);
44+
}
3245

3346
public RunMatlabBuildAction(MatlabCommandRunner runner, BuildConsoleAnnotator annotator, BuildActionParameters params) {
3447
this.runner = runner;
@@ -45,15 +58,19 @@ public RunMatlabBuildAction(BuildActionParameters params) throws IOException, In
4558
}
4659

4760
public void run() throws IOException, InterruptedException, MatlabExecutionException {
61+
// set unique action ID for each build task
62+
this.setActionID();
4863
// Copy plugins and override default plugins function
4964
runner.copyFileToTempFolder(DEFAULT_PLUGIN, DEFAULT_PLUGIN);
5065
runner.copyFileToTempFolder(BUILD_REPORT_PLUGIN, BUILD_REPORT_PLUGIN);
5166
runner.copyFileToTempFolder(TASK_RUN_PROGRESS_PLUGIN, TASK_RUN_PROGRESS_PLUGIN);
67+
5268

5369
// Set environment variable
5470
runner.addEnvironmentVariable(
5571
"MW_MATLAB_BUILDTOOL_DEFAULT_PLUGINS_FCN_OVERRIDE",
5672
"ciplugins.jenkins.getDefaultPlugins");
73+
runner.addEnvironmentVariable("MW_BUILD_PLUGIN_ACTION_ID",this.getActionID());
5774

5875
// Redirect output to the build annotator
5976
runner.redirectStdOut(annotator);
@@ -100,10 +117,10 @@ public void run() throws IOException, InterruptedException, MatlabExecutionExcep
100117
build.getRootDir()
101118
.getAbsolutePath()
102119
+ File.separator
103-
+ "buildArtifact.json"));
120+
+ "buildArtifact" + this.getActionID() + ".json"));
104121
jsonFile.copyTo(rootLocation);
105122
jsonFile.delete();
106-
build.addAction(new BuildArtifactAction(build));
123+
build.addAction(new BuildArtifactAction(build, this.getActionID()));
107124
}
108125
}
109126
}

src/main/resources/+ciplugins/+jenkins/TaskRunProgressPlugin.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
methods (Access=protected)
77

88
function runTask(plugin, pluginData)
9-
disp("[MATLAB-Build-" + pluginData.TaskResults.Name + "]");
9+
disp("[MATLAB-Build-" + pluginData.TaskResults.Name + "-" + getenv('MW_BUILD_PLUGIN_ACTION_ID') +"]");
1010
[email protected](plugin, pluginData);
1111
end
1212
end

src/main/resources/com/mathworks/ci/BuildArtifactAction/index.jelly

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,12 @@
5959
<j:forEach var="p" items="${it.buildArtifact}" varStatus="status">
6060
<tr>
6161
<td class="pane" align="left">
62-
<a href="../console#matlab-${p.taskName}">${p.taskName}</a>
62+
<a href="../console#matlab-${p.taskName}-${it.actionID}">${p.taskName}</a>
6363
</td>
6464
<td class="pane" style="width:9em">
6565
<span class="${pst.cssClass}">
6666
<j:if test="${p.taskFailed != false}">
67-
<a href="../console#matlab-${p.taskName}"><font color="#EF2929"> FAILED </font> </a>
67+
<a href="../console#matlab-${p.taskName}-${it.actionID}"><font color="#EF2929"> FAILED </font> </a>
6868
</j:if>
6969
<j:if test="${p.taskFailed == false}">
7070
<j:if test="${p.taskSkipped == false}">

src/main/resources/com/mathworks/ci/BuildArtifactAction/summary.jelly

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
xmlns:f="/lib/form"
77
xmlns:i="jelly:fmt">
88
<t:summary icon="document.png">
9-
<p><a href="buildresults">MATLAB Build Results</a></p>
9+
<p><a href="buildresults${it.actionID}">MATLAB Build Results</a></p>
1010
<span class="${pst.cssClass}">
1111
<j:if test="${it.totalCount == 0}">
1212
<font color="#EF2929"><h5>Unable to generate a build artifact. </h5></font>

src/test/java/integ/com/mathworks/ci/BuildArtifactActionTest.java

Lines changed: 56 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,11 @@ private URL getResource(String resource) {
7171
@Test
7272
public void verifyBuildArtifactsReturned() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
7373
FreeStyleBuild build = getFreestyleBuild();
74-
BuildArtifactAction ac = new BuildArtifactAction(build);
74+
final String actionID = "abc123";
75+
final String targetFile = "buildArtifact"+ actionID + ".json";
76+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
7577
FilePath artifactRoot = new FilePath(build.getRootDir());
76-
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json","buildArtifact.json",artifactRoot);
78+
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json",targetFile,artifactRoot);
7779
List<BuildArtifactData> ba = ac.getBuildArtifact();
7880
int expectedSize = ba.size();
7981
Assert.assertEquals("The build names are not matching",3,expectedSize);
@@ -87,9 +89,11 @@ public void verifyBuildArtifactsReturned() throws ExecutionException, Interrupte
8789
@Test
8890
public void verifyFailedCount() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
8991
FreeStyleBuild build = getFreestyleBuild();
90-
BuildArtifactAction ac = new BuildArtifactAction(build);
92+
final String actionID = "abc123";
93+
final String targetFile = "buildArtifact"+ actionID + ".json";
94+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
9195
FilePath artifactRoot = new FilePath(build.getRootDir());
92-
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json","buildArtifact.json",artifactRoot);
96+
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json",targetFile,artifactRoot);
9397
List<BuildArtifactData> ba = ac.getBuildArtifact();
9498
boolean expectedStatus = ba.get(0).getTaskFailed();
9599
Assert.assertEquals("The task is passed",false,expectedStatus);
@@ -103,9 +107,11 @@ public void verifyFailedCount() throws ExecutionException, InterruptedException,
103107
@Test
104108
public void verifySkipCount() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
105109
FreeStyleBuild build = getFreestyleBuild();
106-
BuildArtifactAction ac = new BuildArtifactAction(build);
110+
final String actionID = "abc123";
111+
final String targetFile = "buildArtifact"+ actionID + ".json";
112+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
107113
FilePath artifactRoot = new FilePath(build.getRootDir());
108-
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json","buildArtifact.json",artifactRoot);
114+
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json",targetFile,artifactRoot);
109115
List<BuildArtifactData> ba = ac.getBuildArtifact();
110116
Assert.assertEquals("The task is not skipped",true,ba.get(0).getTaskSkipped());
111117
}
@@ -118,9 +124,11 @@ public void verifySkipCount() throws ExecutionException, InterruptedException, U
118124
@Test
119125
public void verifyDurationIsAccurate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
120126
FreeStyleBuild build = getFreestyleBuild();
121-
BuildArtifactAction ac = new BuildArtifactAction(build);
127+
final String actionID = "abc123";
128+
final String targetFile = "buildArtifact"+ actionID + ".json";
129+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
122130
FilePath artifactRoot = new FilePath(build.getRootDir());
123-
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json","buildArtifact.json",artifactRoot);
131+
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json",targetFile,artifactRoot);
124132
List<BuildArtifactData> ba = ac.getBuildArtifact();
125133
Assert.assertEquals("The task duration is not matching","00:02:53",ba.get(0).getTaskDuration());
126134
}
@@ -133,9 +141,11 @@ public void verifyDurationIsAccurate() throws ExecutionException, InterruptedExc
133141
@Test
134142
public void verifyTaskDescriptionIsAccurate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
135143
FreeStyleBuild build = getFreestyleBuild();
136-
BuildArtifactAction ac = new BuildArtifactAction(build);
144+
final String actionID = "abc123";
145+
final String targetFile = "buildArtifact"+ actionID + ".json";
146+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
137147
FilePath artifactRoot = new FilePath(build.getRootDir());
138-
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json","buildArtifact.json",artifactRoot);
148+
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json",targetFile,artifactRoot);
139149
List<BuildArtifactData> ba = ac.getBuildArtifact();
140150
Assert.assertEquals("The task description is not matching","Test show",ba.get(0).getTaskDescription());
141151
}
@@ -148,9 +158,11 @@ public void verifyTaskDescriptionIsAccurate() throws ExecutionException, Interru
148158
@Test
149159
public void verifyTaskNameIsAccurate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
150160
FreeStyleBuild build = getFreestyleBuild();
151-
BuildArtifactAction ac = new BuildArtifactAction(build);
161+
final String actionID = "abc123";
162+
final String targetFile = "buildArtifact"+ actionID + ".json";
163+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
152164
FilePath artifactRoot = new FilePath(build.getRootDir());
153-
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json","buildArtifact.json",artifactRoot);
165+
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json",targetFile,artifactRoot);
154166
List<BuildArtifactData> ba = ac.getBuildArtifact();
155167
Assert.assertEquals("The task name is not matching","show",ba.get(0).getTaskName());
156168
}
@@ -164,8 +176,10 @@ public void verifyTaskNameIsAccurate() throws ExecutionException, InterruptedExc
164176
public void verifyTotalTaskCountIsAccurate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
165177
FreeStyleBuild build = getFreestyleBuild();
166178
FilePath artifactRoot = new FilePath(build.getRootDir());
167-
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json","buildArtifact.json",artifactRoot);
168-
BuildArtifactAction ac = new BuildArtifactAction(build);
179+
final String actionID = "abc123";
180+
final String targetFile = "buildArtifact"+ actionID + ".json";
181+
copyFileInWorkspace("buildArtifacts.t2/buildArtifact.json",targetFile,artifactRoot);
182+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
169183
Assert.assertEquals("Total task count is not correct",1,ac.getTotalCount());
170184
}
171185

@@ -178,8 +192,10 @@ public void verifyTotalTaskCountIsAccurate() throws ExecutionException, Interrup
178192
public void verifyTotalTaskCountIsAccurate2() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
179193
FreeStyleBuild build = getFreestyleBuild();
180194
FilePath artifactRoot = new FilePath(build.getRootDir());
181-
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json","buildArtifact.json",artifactRoot);
182-
BuildArtifactAction ac = new BuildArtifactAction(build);
195+
final String actionID = "abc123";
196+
final String targetFile = "buildArtifact"+ actionID + ".json";
197+
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json",targetFile,artifactRoot);
198+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
183199
Assert.assertEquals("Total task count is not correct",3,ac.getTotalCount());
184200
}
185201

@@ -192,8 +208,10 @@ public void verifyTotalTaskCountIsAccurate2() throws ExecutionException, Interru
192208
public void verifyTotalFailedTaskCountIsAccurate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
193209
FreeStyleBuild build = getFreestyleBuild();
194210
FilePath artifactRoot = new FilePath(build.getRootDir());
195-
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json","buildArtifact.json",artifactRoot);
196-
BuildArtifactAction ac = new BuildArtifactAction(build);
211+
final String actionID = "abc123";
212+
final String targetFile = "buildArtifact"+ actionID + ".json";
213+
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json",targetFile,artifactRoot);
214+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
197215
Assert.assertEquals("Total task count is not correct",3,ac.getTotalCount());
198216
Assert.assertEquals("Total task failed count is not correct",1,ac.getFailCount());
199217
}
@@ -206,12 +224,30 @@ public void verifyTotalFailedTaskCountIsAccurate() throws ExecutionException, In
206224
public void verifyTotalSkipTaskCountIsAccurate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
207225
FreeStyleBuild build = getFreestyleBuild();
208226
FilePath artifactRoot = new FilePath(build.getRootDir());
209-
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json","buildArtifact.json",artifactRoot);
210-
BuildArtifactAction ac = new BuildArtifactAction(build);
227+
final String actionID = "abc123";
228+
final String targetFile = "buildArtifact"+ actionID + ".json";
229+
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json",targetFile,artifactRoot);
230+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
211231
Assert.assertEquals("Total task count is not correct",3,ac.getTotalCount());
212232
Assert.assertEquals("Total task skip count is not correct",1,ac.getSkipCount());
213233
}
214234

235+
/**
236+
* Verify if ActionID is set correctly.
237+
*
238+
*/
239+
240+
@Test
241+
public void verifyActionIDisAppropriate() throws ExecutionException, InterruptedException, URISyntaxException, IOException, ParseException {
242+
FreeStyleBuild build = getFreestyleBuild();
243+
FilePath artifactRoot = new FilePath(build.getRootDir());
244+
final String actionID = "abc123";
245+
final String targetFile = "buildArtifact"+ actionID + ".json";
246+
copyFileInWorkspace("buildArtifacts/t1/buildArtifact.json",targetFile,artifactRoot);
247+
BuildArtifactAction ac = new BuildArtifactAction(build, actionID);
248+
Assert.assertEquals("Incorrect ActionID",actionID,ac.getActionID());
249+
}
250+
215251

216252

217253
private void copyFileInWorkspace(String sourceFile, String targetFile, FilePath targetWorkspace)

src/test/java/unit/com/mathworks/ci/actions/RunMatlabBuildActionTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ public void shouldCopyBuildResultsToRootAndAddsAction() throws IOException, Inte
166166
// Should have deleted original file
167167
assertFalse(json.exists());
168168
// Should have copied file to root dir
169-
assertTrue(new File(tmp, "buildArtifact.json").exists());
169+
assertTrue(new File(tmp, "buildArtifact"+ action.getActionID() + ".json").exists());
170170
}
171171

172172
@Test

0 commit comments

Comments
 (0)