diff --git a/pom.xml b/pom.xml index 6ab2a68d..8355db2a 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ org.jenkins-ci.plugins plugin - 5.10 + 6.2211.v27f680c93c53 @@ -49,6 +49,7 @@ 2.2254.v2a_978de46f35 true jenkinsci/${project.artifactId}-plugin + false @@ -136,6 +137,10 @@ + + io.jenkins.plugins + commons-lang3-api + org.jenkins-ci.plugins apache-httpcomponents-client-4-api diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java index d3c01f87..0ac71f53 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSCloud.java @@ -52,8 +52,8 @@ import com.cloudbees.jenkins.plugins.amazonecs.pipeline.TaskTemplateMap; import com.cloudbees.jenkins.plugins.awscredentials.AWSCredentialsHelper; -import org.apache.commons.lang.RandomStringUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.RandomStringUtils; +import org.apache.commons.lang3.StringUtils; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; import org.kohsuke.stapler.QueryParameter; diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSLauncher.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSLauncher.java index ab4656b6..8a56d7e4 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSLauncher.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSLauncher.java @@ -50,7 +50,7 @@ import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.kohsuke.stapler.DataBoundConstructor; import hudson.AbortException; diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSService.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSService.java index 639ab136..18b60f57 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSService.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSService.java @@ -25,7 +25,9 @@ package com.cloudbees.jenkins.plugins.amazonecs; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; +import java.util.Objects; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -56,8 +58,7 @@ import com.cloudbees.jenkins.plugins.amazonecs.aws.MaxTimeRetryStrategy; import com.cloudbees.jenkins.plugins.awscredentials.AmazonWebServicesCredentials; -import org.apache.commons.lang.ObjectUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import hudson.AbortException; import hudson.slaves.SlaveComputer; @@ -172,6 +173,11 @@ public void stopTask(String taskArn, String clusterArn) { * If no, register a new task definition with desired parameters and returns the new TaskDefinition. * If a TaskDefinitionOverride is set, we only look to see if the task definition exists and return it. */ + @SuppressFBWarnings( + value = "EC_UNRELATED_TYPES", + justification = "Pre-existing: template tags and task definition tags are different Tag" + + " types, so the comparison is always false. Preserved as-is by the Commons" + + " Lang 3 migration; fixing it would change behaviour.") TaskDefinition registerTemplate(final String cloudName, final ECSTaskTemplate template) { if (template.getTaskDefinitionOverride() != null){ TaskDefinition overrideTaskDefinition = findTaskDefinition(template.getTaskDefinitionOverride()); @@ -264,7 +270,11 @@ TaskDefinition registerTemplate(final String cloudName, final ECSTaskTemplate te final ContainerDefinition currentContainerDefinition = currentTaskDefinition.getContainerDefinitions().get(0); final List tags = getTaskDefinitionTags(currentTaskDefinition.getTaskDefinitionArn()); - templateTagsMatchesExistingTags = ObjectUtils.equals(template.getTags(), tags); + // NB: these two lists hold different Tag types (ECSTaskTemplate.Tag vs the AWS SDK's + // Tag), so the comparison is only ever true when both are empty. That was already the + // case with ObjectUtils.equals — keeping it as-is here so this migration does not + // change behaviour. See the PR description. + templateTagsMatchesExistingTags = Objects.equals(template.getTags(), tags); LOGGER.log(Level.INFO, "Match on tags: {0}", new Object[]{templateTagsMatchesExistingTags}); LOGGER.log(Level.FINE, "Match on tags: {0}; template={1}; last={2}", new Object[]{templateTagsMatchesExistingTags, template.getTags(), tags}); @@ -272,7 +282,7 @@ TaskDefinition registerTemplate(final String cloudName, final ECSTaskTemplate te LOGGER.log(Level.INFO, "Match on container definition: {0}", new Object[]{templateMatchesExistingContainerDefinition}); LOGGER.log(Level.FINE, "Match on container definition: {0}; template={1}; last={2}", new Object[]{templateMatchesExistingContainerDefinition, def, currentContainerDefinition}); - templateMatchesExistingVolumes = ObjectUtils.equals(template.getVolumeEntries(), currentTaskDefinition.getVolumes()); + templateMatchesExistingVolumes = Objects.equals(template.getVolumeEntries(), currentTaskDefinition.getVolumes()); LOGGER.log(Level.INFO, "Match on volumes: {0}", new Object[]{templateMatchesExistingVolumes}); LOGGER.log(Level.FINE, "Match on volumes: {0}; template={1}; last={2}", new Object[]{templateMatchesExistingVolumes, template.getVolumeEntries(), currentTaskDefinition.getVolumes()}); diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java index ff91567a..5c0da2c4 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplate.java @@ -67,8 +67,8 @@ import hudson.util.FormValidation; import hudson.util.ListBoxModel; import static org.apache.commons.collections.CollectionUtils.isEmpty; -import org.apache.commons.lang.BooleanUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.BooleanUtils; +import org.apache.commons.lang3.StringUtils; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; import org.kohsuke.stapler.QueryParameter; diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/BaseAWSService.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/BaseAWSService.java index 64d11507..21921b86 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/BaseAWSService.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/BaseAWSService.java @@ -10,7 +10,7 @@ import com.google.common.base.Joiner; import hudson.ProxyConfiguration; import jenkins.model.Jenkins; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import javax.annotation.CheckForNull; import javax.annotation.Nullable; diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/EFSService.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/EFSService.java index 344389e2..d116d0d9 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/EFSService.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/aws/EFSService.java @@ -43,7 +43,7 @@ import com.amazonaws.services.elasticfilesystem.model.FileSystemDescription; import com.cloudbees.jenkins.plugins.awscredentials.AmazonWebServicesCredentials; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; /** * Encapsulates interactions with Amazon EFS. diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgent.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgent.java index 30c05759..eddc2243 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgent.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgent.java @@ -1,7 +1,7 @@ package com.cloudbees.jenkins.plugins.amazonecs.pipeline; import com.cloudbees.jenkins.plugins.amazonecs.ECSTaskTemplate; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.jenkinsci.Symbol; import org.jenkinsci.plugins.pipeline.modeldefinition.agent.DeclarativeAgent; import org.jenkinsci.plugins.pipeline.modeldefinition.agent.DeclarativeAgentDescriptor; diff --git a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSTaskTemplateStepExecution.java b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSTaskTemplateStepExecution.java index 6cd8e32e..ef50acd5 100644 --- a/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSTaskTemplateStepExecution.java +++ b/src/main/java/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSTaskTemplateStepExecution.java @@ -7,7 +7,7 @@ import hudson.AbortException; import hudson.slaves.Cloud; import jenkins.model.Jenkins; -import org.apache.commons.lang.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; import org.jenkinsci.plugins.workflow.steps.AbstractStepExecutionImpl; import org.jenkinsci.plugins.workflow.steps.BodyExecutionCallback; import org.jenkinsci.plugins.workflow.steps.StepContext; diff --git a/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript-old.groovy b/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript-old.groovy index cd02ddaa..9fbc764f 100644 --- a/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript-old.groovy +++ b/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript-old.groovy @@ -28,7 +28,7 @@ import org.jenkinsci.plugins.pipeline.modeldefinition.SyntheticStageNames import org.jenkinsci.plugins.pipeline.modeldefinition.agent.CheckoutScript import org.jenkinsci.plugins.pipeline.modeldefinition.agent.DeclarativeAgentScript import org.jenkinsci.plugins.workflow.cps.CpsScript -import org.apache.commons.lang.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; public class ECSDeclarativeAgentScript extends DeclarativeAgentScript { diff --git a/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript.groovy b/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript.groovy index d2752766..79221a7c 100644 --- a/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript.groovy +++ b/src/main/resources/com/cloudbees/jenkins/plugins/amazonecs/pipeline/ECSDeclarativeAgentScript.groovy @@ -28,7 +28,7 @@ import org.jenkinsci.plugins.pipeline.modeldefinition.SyntheticStageNames import org.jenkinsci.plugins.pipeline.modeldefinition.agent.CheckoutScript import org.jenkinsci.plugins.pipeline.modeldefinition.agent.DeclarativeAgentScript2 import org.jenkinsci.plugins.workflow.cps.CpsScript -import org.apache.commons.lang.RandomStringUtils; +import org.apache.commons.lang3.RandomStringUtils; public class ECSDeclarativeAgentScript extends DeclarativeAgentScript2 { diff --git a/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplateTest.java b/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplateTest.java index f0248400..43cac19e 100644 --- a/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplateTest.java +++ b/src/test/java/com/cloudbees/jenkins/plugins/amazonecs/ECSTaskTemplateTest.java @@ -3,7 +3,7 @@ import static org.junit.Assert.assertEquals; import org.junit.Test; import static org.junit.Assert.assertTrue; -import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang3.builder.EqualsBuilder; import java.util.ArrayList;