diff --git a/build.gradle b/build.gradle index 4485309..3c8c7c8 100644 --- a/build.gradle +++ b/build.gradle @@ -39,7 +39,7 @@ dependencies { testImplementation ('ch.qos.logback:logback-classic:1.4.1') } -ext.compatibilityVersion = JavaVersion.VERSION_1_8 +ext.compatibilityVersion = JavaVersion.VERSION_11 ext.javadocPath = compatibilityVersion.isJava8() ? '' : 'en/java/' sourceCompatibility = compatibilityVersion targetCompatibility = compatibilityVersion diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile index 409c693..fa10494 100644 --- a/src/main/docker/Dockerfile +++ b/src/main/docker/Dockerfile @@ -1,4 +1,4 @@ -ARG jenkins_tag=2.277.4-jdk11 +ARG jenkins_tag=2.303.3-lts-jdk11 FROM jenkins/jenkins:$jenkins_tag diff --git a/src/main/docker/plugins.yml b/src/main/docker/plugins.yml index 7907d2a..8e0a7f3 100644 --- a/src/main/docker/plugins.yml +++ b/src/main/docker/plugins.yml @@ -4,3 +4,4 @@ plugins: - artifactId: cloudbees-folder - artifactId: configuration-as-code - artifactId: workflow-aggregator + - artifactId: badge diff --git a/src/main/java/com/cdancy/jenkins/rest/domain/job/Action.java b/src/main/java/com/cdancy/jenkins/rest/domain/job/Action.java index c82cedc..8f709a6 100644 --- a/src/main/java/com/cdancy/jenkins/rest/domain/job/Action.java +++ b/src/main/java/com/cdancy/jenkins/rest/domain/job/Action.java @@ -19,6 +19,7 @@ import com.google.auto.value.AutoValue; import com.google.common.collect.ImmutableList; +import org.jclouds.javax.annotation.Nullable; import org.jclouds.json.SerializedNames; import java.util.List; @@ -30,14 +31,24 @@ public abstract class Action { public abstract List parameters(); + @Nullable + public abstract String text(); + + @Nullable + public abstract String iconPath(); + + @Nullable + public abstract String _class(); Action() { } - @SerializedNames({"causes", "parameters"}) - public static Action create(final List causes, final List parameters) { + @SerializedNames({"causes", "parameters", "text", "iconPath", "_class"}) + public static Action create(final List causes, final List parameters, final String text, final String iconPath, final String _class) { return new AutoValue_Action( causes != null ? ImmutableList.copyOf(causes) : ImmutableList.of(), - parameters != null ? ImmutableList.copyOf(parameters) : ImmutableList.of()); + parameters != null ? ImmutableList.copyOf(parameters) : ImmutableList.of(), + text, iconPath, _class + ); } } diff --git a/src/test/java/com/cdancy/jenkins/rest/features/JobsApiLiveTest.java b/src/test/java/com/cdancy/jenkins/rest/features/JobsApiLiveTest.java index 96e4139..274bb5f 100644 --- a/src/test/java/com/cdancy/jenkins/rest/features/JobsApiLiveTest.java +++ b/src/test/java/com/cdancy/jenkins/rest/features/JobsApiLiveTest.java @@ -43,6 +43,7 @@ public class JobsApiLiveTest extends BaseJenkinsApiLiveTest { private static final String FREESTYLE_JOB_NAME = "FreeStyleSleep"; private static final String PIPELINE_JOB_NAME = "PipelineSleep"; + private static final String PIPELINE_WITH_ACTION_JOB_NAME = "PipelineAction"; @Test public void testCreateJob() { @@ -249,6 +250,39 @@ public void testGetBuildParametersOfLastJob() { assertEquals(parameters.size(), 0); } + @Test + public void testBuildInfoActions() throws InterruptedException { + String config = payloadFromResource("/pipeline-with-action.xml"); + RequestStatus createStatus = api().create(null, PIPELINE_WITH_ACTION_JOB_NAME, config); + assertTrue(createStatus.value()); + IntegerResponse qId = api().build(null, PIPELINE_WITH_ACTION_JOB_NAME); + assertNotNull(qId); + assertTrue(qId.value() > 0); + QueueItem queueItem = getRunningQueueItem(qId.value()); + assertNotNull(queueItem); + assertNotNull(queueItem.executable()); + assertNotNull(queueItem.executable().number()); + BuildInfo buildInfo = getCompletedBuild(PIPELINE_WITH_ACTION_JOB_NAME, queueItem); + assertEquals(buildInfo.result(), "SUCCESS"); + System.out.println(buildInfo); + boolean found = false; + for (int idx = 0; idx < buildInfo.actions().size(); idx++) { + if (buildInfo.actions().get(idx).text() != null) { + if (buildInfo.actions().get(idx).text().equals("Hudson, we have a problem.") && + buildInfo.actions().get(idx).iconPath().equals("error.svg") && + buildInfo.actions().get(idx)._class().equals("com.jenkinsci.plugins.badge.action.BadgeSummaryAction")) { + found = true; + } + } + } + assertTrue(found); + + // The Job is no longer needed, delete it. + RequestStatus success = api().delete(null, PIPELINE_WITH_ACTION_JOB_NAME); + assertNotNull(success); + assertTrue(success.value()); + } + @Test(dependsOnMethods = "testGetBuildParametersOfLastJob") public void testCreateJobThatAlreadyExists() { String config = payloadFromResource("/freestyle-project.xml"); diff --git a/src/test/java/com/cdancy/jenkins/rest/features/JobsApiMockTest.java b/src/test/java/com/cdancy/jenkins/rest/features/JobsApiMockTest.java index e7ae9e7..a078884 100644 --- a/src/test/java/com/cdancy/jenkins/rest/features/JobsApiMockTest.java +++ b/src/test/java/com/cdancy/jenkins/rest/features/JobsApiMockTest.java @@ -127,6 +127,12 @@ public void testGetBuildInfo() throws Exception { assertNotNull(output); assertEquals(output.fullDisplayName(), "fish #10"); assertEquals(output.artifacts().size(), 1); + assertEquals(output.actions().size(), 5); + assertEquals(output.actions().get(2).text(), "There could be HTML text here"); + assertEquals(output.actions().get(2).iconPath(), "clipboard.png"); + assertEquals(output.actions().get(2)._class(), "com.jenkinsci.plugins.badge.action.BadgeSummaryAction"); + assertEquals(output.actions().get(3).text(), null); + assertEquals(output.actions().get(4)._class(), "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction"); assertSent(server, "GET", "/job/fish/10/api/json"); } finally { jenkinsApi.close(); diff --git a/src/test/resources/build-info.json b/src/test/resources/build-info.json index 092a830..75d5ff3 100644 --- a/src/test/resources/build-info.json +++ b/src/test/resources/build-info.json @@ -20,6 +20,15 @@ "userName" : "anonymous" } ] + }, + { + "text" : "There could be HTML text here", + "iconPath" : "clipboard.png", + "_class" : "com.jenkinsci.plugins.badge.action.BadgeSummaryAction" + }, + {}, + { + "_class" : "org.jenkinsci.plugins.displayurlapi.actions.RunDisplayAction" } ], "artifacts" : [ @@ -56,4 +65,4 @@ "fullName": "username" } ] -} \ No newline at end of file +} diff --git a/src/test/resources/pipeline-with-action.xml b/src/test/resources/pipeline-with-action.xml new file mode 100644 index 0000000..aa65b05 --- /dev/null +++ b/src/test/resources/pipeline-with-action.xml @@ -0,0 +1,12 @@ + + + + false + + + + true + + + false +