From 3a4fd8464fcec0d072e9f6f49d186156ba76b083 Mon Sep 17 00:00:00 2001 From: Martin d'Anjou Date: Wed, 28 Sep 2022 20:22:02 -0400 Subject: [PATCH] Support more action types in build info --- src/main/docker/Dockerfile | 2 +- src/main/docker/plugins.yml | 1 + .../jenkins/rest/domain/job/Action.java | 17 ++++++++-- .../rest/features/JobsApiLiveTest.java | 34 +++++++++++++++++++ .../rest/features/JobsApiMockTest.java | 6 ++++ src/test/resources/build-info.json | 11 +++++- src/test/resources/pipeline-with-action.xml | 12 +++++++ 7 files changed, 78 insertions(+), 5 deletions(-) create mode 100644 src/test/resources/pipeline-with-action.xml diff --git a/src/main/docker/Dockerfile b/src/main/docker/Dockerfile index 409c6931..fa10494d 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 7907d2ad..8e0a7f32 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 c82cedce..8f709a65 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 96e41399..274bb5f3 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 e7ae9e72..a078884e 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 092a830a..75d5ff39 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 00000000..aa65b057 --- /dev/null +++ b/src/test/resources/pipeline-with-action.xml @@ -0,0 +1,12 @@ + + + + false + + + + true + + + false +