diff --git a/.gitignore b/.gitignore index d807477..3d66646 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,3 @@ -/.* *.iml /work diff --git a/.mvn/extensions.xml b/.mvn/extensions.xml new file mode 100644 index 0000000..9ac2968 --- /dev/null +++ b/.mvn/extensions.xml @@ -0,0 +1,7 @@ + + + io.jenkins.tools.incrementals + git-changelist-maven-extension + 1.4 + + diff --git a/.mvn/maven.config b/.mvn/maven.config new file mode 100644 index 0000000..2a0299c --- /dev/null +++ b/.mvn/maven.config @@ -0,0 +1,2 @@ +-Pconsume-incrementals +-Pmight-produce-incrementals diff --git a/pom.xml b/pom.xml index 582a64c..c0c3cfe 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ cloud-stats - 0.28-SNAPSHOT + ${revision}${changelist} hpi Cloud Statistics Plugin Report Jenkins dynamic provisioning activities and statistics @@ -29,10 +29,10 @@ - scm:git:git://github.com/jenkinsci/cloud-stats-plugin.git - scm:git:git@github.com:jenkinsci/cloud-stats-plugin.git - https://github.com/jenkinsci/cloud-stats-plugin - HEAD + scm:git:git://github.com/${gitHubRepo}.git + scm:git:git@github.com:${gitHubRepo}.git + https://github.com/${gitHubRepo} + ${scmTag} @@ -42,6 +42,19 @@ 2.3 test + + org.awaitility + awaitility + 4.2.0 + test + + + + org.hamcrest + hamcrest + + + @@ -59,6 +72,9 @@ + 0.28 + -SNAPSHOT + jenkinsci/cloud-stats-plugin 2.235.1 8 false diff --git a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy index 4693342..43b8299 100644 --- a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy +++ b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudAction/summary.groovy @@ -18,7 +18,7 @@ Health.Report report = index.cloudHealth(action.cloud.name).current HealthReport hr = report.weather h2 { - l.icon("class": "${hr.iconClassName} icon-md", alt: hr.score) + l.icon("class": "${hr.iconClassName} icon-md", alt: hr.score + "") st.nbsp() text("${action.displayName} (Health ${report})") } diff --git a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy index 1cb91fa..235ee5c 100644 --- a/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy +++ b/src/main/resources/org/jenkinsci/plugins/cloudstats/CloudStatistics/index.groovy @@ -56,13 +56,13 @@ l.layout(permission: stats.getRequiredPermission()) { td() td { def score = ch.overall - l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score) + l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "") st.nbsp() text(score) } td { def score = ch.current - l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score) + l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "") st.nbsp() text(score) } @@ -76,13 +76,13 @@ l.layout(permission: stats.getRequiredPermission()) { td(template) td { def score = th.overall - l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score) + l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "") st.nbsp() text(score) } td { def score = th.current - l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score) + l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "") st.nbsp() text(score) } diff --git a/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy b/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy index 1a56d13..b2be470 100644 --- a/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy +++ b/src/main/resources/org/jenkinsci/plugins/cloudstats/StatsWidget/index.groovy @@ -50,7 +50,7 @@ if (widget.displayed) { tr { def score = index.cloudHealth(cloudName).getCurrent() td(colspan: 2) { - l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score) + l.icon("class": "${score.weather.iconClassName} icon-sm", alt: score.weather.score + "") st.nbsp() if (cloudViews && j.getCloud(cloudName) != null) { a(href: rootURL + "/cloud/" + cloudName) { @@ -68,7 +68,7 @@ if (widget.displayed) { tr { td() td { - l.icon("class": "${health.current.weather.iconClassName} icon-sm", alt: health.current.weather.score) + l.icon("class": "${health.current.weather.iconClassName} icon-sm", alt: health.current.weather.score + "") st.nbsp() text(templateName) } diff --git a/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java b/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java index b47dade..705a77d 100644 --- a/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java +++ b/src/test/java/org/jenkinsci/plugins/cloudstats/CloudStatisticsTest.java @@ -31,12 +31,7 @@ import hudson.BulkChange; import hudson.ExtensionList; import hudson.Functions; -import hudson.model.Computer; -import hudson.model.FreeStyleBuild; -import hudson.model.FreeStyleProject; -import hudson.model.Label; -import hudson.model.LoadStatistics; -import hudson.model.Node; +import hudson.model.*; import hudson.model.queue.QueueTaskFuture; import hudson.security.AuthorizationStrategy; import hudson.slaves.NodeProvisioner; @@ -56,12 +51,16 @@ import javax.annotation.Nonnull; import java.io.ObjectStreamException; import java.net.URL; +import java.time.Duration; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Random; import java.util.concurrent.Callable; +import java.util.concurrent.TimeUnit; +import static java.util.concurrent.TimeUnit.SECONDS; +import static org.awaitility.Awaitility.await; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.containsString; @@ -229,13 +228,13 @@ public void ui() throws Exception { Id okId = new Id("MyCloud", "working-template", "future-agent"); provisioningListener.onStarted(okId); - slave = TrackedAgent.create(okId, j); - provisioningListener.onComplete(okId, slave); - slave.toComputer().waitUntilOnline(); - Thread.sleep(500); - slave.toComputer().doDoDelete(); + final Node agent = TrackedAgent.create(okId, j); + provisioningListener.onComplete(okId, agent); + agent.toComputer().waitUntilOnline(); + Thread.sleep(1000L); + agent.toComputer().doDoDelete(); - Thread.sleep(500); + await().atMost(10, SECONDS).until(() -> j.jenkins.getNode(agent.getNodeName()) == null); // Then ProvisioningActivity failedToProvision = cs.getActivityFor(failId);