diff --git a/pom.xml b/pom.xml index d60932d3..c08115fb 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ org.jenkins-ci.plugins plugin - 4.80 + 5.7 de.taimos @@ -23,7 +23,7 @@ io.jenkins.tools.bom bom-${jenkins.baseline}.x - 2928.ved44ea_84e034 + 4051.v78dce3ce8b_d6 import pom @@ -32,8 +32,9 @@ The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo + https://www.apache.org/licenses/LICENSE-2.0.txt + repo + https://github.com/jenkinsci/${project.artifactId}-plugin @@ -79,8 +80,8 @@ 1.46 -SNAPSHOT - 2.414 - ${jenkins.baseline}.3 + 2.479 + ${jenkins.baseline}.1 jenkinsci/${project.artifactId}-plugin @@ -88,14 +89,13 @@ org.apache.maven.plugins maven-checkstyle-plugin - 3.0.0 + 3.6.0 validate validate checkstyle.xml - UTF-8 true true @@ -246,11 +246,9 @@ 3.25.3 test - - net.bytebuddy - byte-buddy - 1.14.12 + io.jenkins.plugins + byte-buddy-api test diff --git a/src/main/java/de/taimos/pipeline/aws/AWSClientFactory.java b/src/main/java/de/taimos/pipeline/aws/AWSClientFactory.java index abb4fd4d..b0775ea9 100644 --- a/src/main/java/de/taimos/pipeline/aws/AWSClientFactory.java +++ b/src/main/java/de/taimos/pipeline/aws/AWSClientFactory.java @@ -41,6 +41,7 @@ import org.kohsuke.accmod.restrictions.NoExternalUse; import java.io.IOException; +import java.io.Serial; import java.io.Serializable; @@ -106,11 +107,11 @@ private static ClientConfiguration getClientConfiguration(EnvVars vars) { ClientConfiguration clientConfiguration = new ClientConfiguration(); // The default SDK max retry is 3, increasing this to be more resilient to upstream errors - Integer retries = Integer.valueOf(vars.get(AWS_SDK_RETRIES, "10")); + int retries = Integer.parseInt(vars.get(AWS_SDK_RETRIES, "10")); clientConfiguration.setRetryPolicy(new RetryPolicy(null, null, retries, false)); // The default SDK socket timeout is 50000, use as deafult and allow to override via environment variable - Integer socketTimeout = Integer.valueOf(vars.get(AWS_SDK_SOCKET_TIMEOUT, "50000")); + int socketTimeout = Integer.parseInt(vars.get(AWS_SDK_SOCKET_TIMEOUT, "50000")); clientConfiguration.setSocketTimeout(socketTimeout); ProxyConfiguration.configure(vars, clientConfiguration); @@ -129,7 +130,7 @@ private static AWSCredentialsProvider getCredentials(EnvVars vars, StepContext c } if (context != null) { - if (PluginImpl.getInstance().isEnableCredentialsFromNode() || Boolean.valueOf(vars.get(AWS_PIPELINE_STEPS_FROM_NODE))) { + if (PluginImpl.getInstance().isEnableCredentialsFromNode() || Boolean.TRUE.equals(Boolean.valueOf(vars.get(AWS_PIPELINE_STEPS_FROM_NODE)))) { try { return AWSClientFactory.getCredentialsFromNode(context, vars); } catch (Exception e) { @@ -189,6 +190,7 @@ private static Region getRegion(EnvVars vars) { return Region.getRegion(Regions.DEFAULT_REGION); } + @Serial private static final long serialVersionUID = 1L; @Restricted(NoExternalUse.class) diff --git a/src/main/java/de/taimos/pipeline/aws/AWSCredentialsProviderCallable.java b/src/main/java/de/taimos/pipeline/aws/AWSCredentialsProviderCallable.java index 175db6f9..bc1b8540 100644 --- a/src/main/java/de/taimos/pipeline/aws/AWSCredentialsProviderCallable.java +++ b/src/main/java/de/taimos/pipeline/aws/AWSCredentialsProviderCallable.java @@ -30,6 +30,7 @@ import java.io.File; import java.io.IOException; +import java.io.Serial; /* * Use the FilePath abstraction to execute code on the remote node @@ -51,6 +52,7 @@ public SerializableAWSCredentialsProvider invoke(File f, VirtualChannel vc) thro return new SerializableAWSCredentialsProvider(provider); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/AWSIdentityStep.java b/src/main/java/de/taimos/pipeline/aws/AWSIdentityStep.java index 9040b4ba..f8d53488 100644 --- a/src/main/java/de/taimos/pipeline/aws/AWSIdentityStep.java +++ b/src/main/java/de/taimos/pipeline/aws/AWSIdentityStep.java @@ -21,11 +21,12 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.HashMap; import java.util.Map; import java.util.Set; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import org.jenkinsci.plugins.workflow.steps.Step; import org.jenkinsci.plugins.workflow.steps.StepContext; @@ -94,6 +95,7 @@ protected Map run() throws Exception { return info; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/AwsSdkResponseToJson.java b/src/main/java/de/taimos/pipeline/aws/AwsSdkResponseToJson.java index a89e1aba..deb5260b 100644 --- a/src/main/java/de/taimos/pipeline/aws/AwsSdkResponseToJson.java +++ b/src/main/java/de/taimos/pipeline/aws/AwsSdkResponseToJson.java @@ -18,7 +18,7 @@ public static Map convertToMap(Object o) throws IOException { //convert to json so the method calls do not have to be ObjectMapper objectMapper = new ObjectMapper(); String jsonResult = objectMapper.writer().writeValueAsString(o); - return objectMapper.readValue(jsonResult, new TypeReference>() { + return objectMapper.readValue(jsonResult, new TypeReference<>() { }); } } diff --git a/src/main/java/de/taimos/pipeline/aws/CFInvalidateStep.java b/src/main/java/de/taimos/pipeline/aws/CFInvalidateStep.java index ff4b6943..dc9b4fd7 100644 --- a/src/main/java/de/taimos/pipeline/aws/CFInvalidateStep.java +++ b/src/main/java/de/taimos/pipeline/aws/CFInvalidateStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.Arrays; import java.util.Set; @@ -38,7 +39,6 @@ import com.amazonaws.services.cloudfront.model.GetInvalidationRequest; import com.amazonaws.services.cloudfront.model.InvalidationBatch; import com.amazonaws.services.cloudfront.model.Paths; -import com.amazonaws.services.cloudfront.waiters.AmazonCloudFrontWaiters; import com.amazonaws.waiters.WaiterParameters; import de.taimos.pipeline.aws.utils.StepUtils; @@ -127,13 +127,14 @@ protected Void run() throws Exception { if (waitForCompletion) { listener.getLogger().format("Waiting for invalidation %s to be completed...%n", invalidationId); - client.waiters().invalidationCompleted().run(new WaiterParameters(new GetInvalidationRequest(distribution, invalidationId))); + client.waiters().invalidationCompleted().run(new WaiterParameters<>(new GetInvalidationRequest(distribution, invalidationId))); listener.getLogger().format("Invalidation %s completed%n", invalidationId); } return null; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/DateTimeUtils.java b/src/main/java/de/taimos/pipeline/aws/DateTimeUtils.java index e346eb3a..f986c146 100644 --- a/src/main/java/de/taimos/pipeline/aws/DateTimeUtils.java +++ b/src/main/java/de/taimos/pipeline/aws/DateTimeUtils.java @@ -1,17 +1,14 @@ package de.taimos.pipeline.aws; import java.time.ZonedDateTime; -import java.time.Period; import java.time.format.DateTimeFormatter; import static java.time.format.DateTimeFormatter.ISO_LOCAL_DATE_TIME; import java.time.format.DateTimeParseException; import java.time.format.DateTimeFormatterBuilder; -import java.time.format.ResolverStyle; -import java.time.chrono.IsoChronology; import java.time.temporal.ChronoField; public final class DateTimeUtils { - private static final DateTimeFormatter DATE_TIME_NANOSECONDS_OFFSET_FORMATTER = + private static final DateTimeFormatter DATE_TIME_NANOSECONDS_OFFSET_FORMATTER = new DateTimeFormatterBuilder() .parseCaseInsensitive() .append(ISO_LOCAL_DATE_TIME) diff --git a/src/main/java/de/taimos/pipeline/aws/DeployAPIStep.java b/src/main/java/de/taimos/pipeline/aws/DeployAPIStep.java index 1e55b1c3..28e4d7e2 100644 --- a/src/main/java/de/taimos/pipeline/aws/DeployAPIStep.java +++ b/src/main/java/de/taimos/pipeline/aws/DeployAPIStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -139,6 +140,7 @@ protected Void run() throws Exception { return null; } + @Serial private static final long serialVersionUID = 1L; private Map parseVariables(String[] variables) { diff --git a/src/main/java/de/taimos/pipeline/aws/EC2ShareAmiStep.java b/src/main/java/de/taimos/pipeline/aws/EC2ShareAmiStep.java index 8fff0bbc..39b39e6d 100644 --- a/src/main/java/de/taimos/pipeline/aws/EC2ShareAmiStep.java +++ b/src/main/java/de/taimos/pipeline/aws/EC2ShareAmiStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.List; import java.util.Set; import java.util.stream.Collectors; @@ -122,6 +123,7 @@ protected String run() throws Exception { return null; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/ECRLoginStep.java b/src/main/java/de/taimos/pipeline/aws/ECRLoginStep.java index 53966859..2f1747a6 100644 --- a/src/main/java/de/taimos/pipeline/aws/ECRLoginStep.java +++ b/src/main/java/de/taimos/pipeline/aws/ECRLoginStep.java @@ -21,10 +21,11 @@ package de.taimos.pipeline.aws; +import java.io.Serial; +import java.nio.charset.StandardCharsets; import java.util.List; import java.util.Set; -import org.apache.commons.codec.Charsets; import org.jenkinsci.plugins.workflow.steps.Step; import org.jenkinsci.plugins.workflow.steps.StepContext; import org.jenkinsci.plugins.workflow.steps.StepDescriptor; @@ -120,7 +121,7 @@ protected String run() throws Exception { AuthorizationData authorizationData = token.getAuthorizationData().get(0); byte[] bytes = org.apache.commons.codec.binary.Base64.decodeBase64(authorizationData.getAuthorizationToken()); - String data = new String(bytes, Charsets.UTF_8); + String data = new String(bytes, StandardCharsets.UTF_8); String[] parts = data.split(":"); if (parts.length != 2) { throw new RuntimeException("Got invalid authorizationData from AWS"); @@ -130,6 +131,7 @@ protected String run() throws Exception { return String.format("docker login -u %s -p %s %s %s", parts[0], parts[1], emailString, authorizationData.getProxyEndpoint()); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/FileWrapper.java b/src/main/java/de/taimos/pipeline/aws/FileWrapper.java index 0287f33e..cb60d19b 100644 --- a/src/main/java/de/taimos/pipeline/aws/FileWrapper.java +++ b/src/main/java/de/taimos/pipeline/aws/FileWrapper.java @@ -50,9 +50,10 @@ */ import java.io.IOException; +import java.io.Serial; import java.io.Serializable; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import org.jenkinsci.plugins.scriptsecurity.sandbox.whitelists.Whitelisted; @@ -64,6 +65,7 @@ * @author Robert Sandell <rsandell@cloudbees.com>. */ public class FileWrapper implements Serializable { + @Serial private static final long serialVersionUID = 1L; private static final String PATH_SUFFIX = "/"; @@ -140,12 +142,10 @@ public boolean equals(Object o) { if (this == o) { return true; } - if (!(o instanceof FileWrapper)) { + if (!(o instanceof FileWrapper that)) { return false; } - FileWrapper that = (FileWrapper) o; - return this.getPath().equals(that.getPath()); } diff --git a/src/main/java/de/taimos/pipeline/aws/InvokeLambdaStep.java b/src/main/java/de/taimos/pipeline/aws/InvokeLambdaStep.java index da8018b6..60358234 100644 --- a/src/main/java/de/taimos/pipeline/aws/InvokeLambdaStep.java +++ b/src/main/java/de/taimos/pipeline/aws/InvokeLambdaStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.nio.charset.StandardCharsets; import java.util.Set; @@ -117,6 +118,7 @@ public String getDisplayName() { public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient InvokeLambdaStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/LambdaVersionCleanupStep.java b/src/main/java/de/taimos/pipeline/aws/LambdaVersionCleanupStep.java index 4aaaaecc..867f56a8 100644 --- a/src/main/java/de/taimos/pipeline/aws/LambdaVersionCleanupStep.java +++ b/src/main/java/de/taimos/pipeline/aws/LambdaVersionCleanupStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -29,6 +30,7 @@ import com.amazonaws.services.cloudformation.model.ListStackResourcesRequest; import com.amazonaws.services.cloudformation.model.ListStackResourcesResult; import com.amazonaws.services.cloudformation.model.StackResourceSummary; +import com.amazonaws.services.lambda.model.AliasConfiguration; import org.jenkinsci.plugins.workflow.steps.Step; import org.jenkinsci.plugins.workflow.steps.StepContext; import org.jenkinsci.plugins.workflow.steps.StepDescriptor; @@ -103,7 +105,8 @@ public String getDisplayName() { public static class Execution extends SynchronousNonBlockingStepExecution { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; protected final transient LambdaVersionCleanupStep step; @@ -130,7 +133,7 @@ private void deleteAllVersions(AWSLambda client, String functionName) throws Exc listener.getLogger().format("Looking for old versions functionName=%s%n", functionName); List aliasedVersions = client.listAliases(new ListAliasesRequest() .withFunctionName(functionName)).getAliases().stream() - .map( (alias) -> alias.getFunctionVersion()) + .map(AliasConfiguration::getFunctionVersion) .collect(Collectors.toList()); listener.getLogger().format("Found alises functionName=%s alias=%s%n", functionName, aliasedVersions); List allVersions = findAllVersions(client, functionName); @@ -142,7 +145,7 @@ private void deleteAllVersions(AWSLambda client, String functionName) throws Exc }) .filter( (function) -> !"$LATEST".equals(function.getVersion())) .filter( (function) -> !aliasedVersions.contains(function.getVersion())) - .collect(Collectors.toList()); + .toList(); for (FunctionConfiguration functionConfiguration : filteredVersions) { listener.getLogger().format("Deleting old version functionName=%s version=%s lastModified=%s%n", functionName, functionConfiguration.getVersion(), functionConfiguration.getLastModified()); client.deleteFunction(new DeleteFunctionRequest() @@ -174,7 +177,7 @@ private void deleteAllStackFunctionVersions(AWSLambda client, String stackName) listener.getLogger().format("Found %d resources in stackName=%s%n", stackResources.size(), stackName); List lambdaFunctions = stackResources.stream() .filter(resource -> "AWS::Lambda::Function".equals(resource.getResourceType())) - .collect(Collectors.toList()); + .toList(); listener.getLogger().format("Found %d lambda resources in stackName=%s%n", lambdaFunctions.size(), stackName); for (StackResourceSummary stackResource : lambdaFunctions) { deleteAllVersions(client, stackResource.getPhysicalResourceId()); diff --git a/src/main/java/de/taimos/pipeline/aws/ListAWSAccountsStep.java b/src/main/java/de/taimos/pipeline/aws/ListAWSAccountsStep.java index a2e69da0..87ca3938 100644 --- a/src/main/java/de/taimos/pipeline/aws/ListAWSAccountsStep.java +++ b/src/main/java/de/taimos/pipeline/aws/ListAWSAccountsStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -130,6 +131,7 @@ private List getAccounts(AWSOrganizations client, String parent, String return accounts; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/PluginImpl.java b/src/main/java/de/taimos/pipeline/aws/PluginImpl.java index 3e0ceeaf..5fd3944d 100644 --- a/src/main/java/de/taimos/pipeline/aws/PluginImpl.java +++ b/src/main/java/de/taimos/pipeline/aws/PluginImpl.java @@ -22,18 +22,17 @@ import hudson.Extension; import hudson.ExtensionList; -import static hudson.model.Descriptor.FormException; import jenkins.model.GlobalConfiguration; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import net.sf.json.JSONObject; import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import org.kohsuke.stapler.StaplerRequest; import org.jenkinsci.Symbol; +import org.kohsuke.stapler.StaplerRequest2; /** * Global configuration @@ -53,7 +52,7 @@ public PluginImpl() { } @Override - public boolean configure(StaplerRequest req, JSONObject json) throws FormException { + public boolean configure(StaplerRequest2 req, JSONObject json) throws FormException { json = json.getJSONObject("enableCredentialsFromNode"); enableCredentialsFromNode = json.getBoolean("enableCredentialsFromNode"); save(); diff --git a/src/main/java/de/taimos/pipeline/aws/ProxyConfiguration.java b/src/main/java/de/taimos/pipeline/aws/ProxyConfiguration.java index e2222310..b41d10b1 100644 --- a/src/main/java/de/taimos/pipeline/aws/ProxyConfiguration.java +++ b/src/main/java/de/taimos/pipeline/aws/ProxyConfiguration.java @@ -61,13 +61,13 @@ static void configure(EnvVars vars, ClientConfiguration config) { } private static void useJenkinsProxy(ClientConfiguration config) { - if (Jenkins.getInstance() != null) { - hudson.ProxyConfiguration proxyConfiguration = Jenkins.getInstance().proxy; + if (Jenkins.getInstanceOrNull() != null) { + hudson.ProxyConfiguration proxyConfiguration = Jenkins.get().proxy; if (proxyConfiguration != null) { config.setProxyHost(proxyConfiguration.name); config.setProxyPort(proxyConfiguration.port); config.setProxyUsername(proxyConfiguration.getUserName()); - config.setProxyPassword(proxyConfiguration.getPassword()); + config.setProxyPassword(proxyConfiguration.getSecretPassword().getPlainText()); if (proxyConfiguration.getNoProxyHost() != null) { String[] noProxyParts = proxyConfiguration.getNoProxyHost().split("[ \t\n,|]+"); diff --git a/src/main/java/de/taimos/pipeline/aws/RoleSessionNameBuilder.java b/src/main/java/de/taimos/pipeline/aws/RoleSessionNameBuilder.java index 3b029919..8bd21808 100644 --- a/src/main/java/de/taimos/pipeline/aws/RoleSessionNameBuilder.java +++ b/src/main/java/de/taimos/pipeline/aws/RoleSessionNameBuilder.java @@ -20,7 +20,7 @@ * #L% */ -import java.io.UnsupportedEncodingException; +import java.nio.charset.StandardCharsets; import com.google.common.base.Joiner; @@ -60,11 +60,7 @@ RoleSessionNameBuilder withBuildNumber(final String buildNumber) { private String sanitizeString(String s) { String stringWithoutEncoding = ""; - try { - stringWithoutEncoding = java.net.URLDecoder.decode(s, "UTF-8"); - } catch (UnsupportedEncodingException e) { - // UTF-8 is always supported - } + stringWithoutEncoding = java.net.URLDecoder.decode(s, StandardCharsets.UTF_8); return stringWithoutEncoding .replaceAll("[/\\()]", "-") .replaceAll("^-|[ \"']|-$", ""); diff --git a/src/main/java/de/taimos/pipeline/aws/S3CopyStep.java b/src/main/java/de/taimos/pipeline/aws/S3CopyStep.java index cbf5ab47..4dd781ba 100644 --- a/src/main/java/de/taimos/pipeline/aws/S3CopyStep.java +++ b/src/main/java/de/taimos/pipeline/aws/S3CopyStep.java @@ -42,7 +42,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -184,7 +186,8 @@ public String getDisplayName() { public static class Execution extends SynchronousNonBlockingStepExecution { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; protected final transient S3CopyStep step; @@ -209,7 +212,7 @@ public String run() throws Exception { final S3ClientOptions s3ClientOptions = this.step.createS3ClientOptions(); final EnvVars envVars = this.getContext().get(EnvVars.class); - if (this.step.getMetadatas() != null && this.step.getMetadatas().length != 0) { + if (this.step.getMetadatas() != null) { for (String metadata : this.step.getMetadatas()) { if (metadata.split(":").length == 2) { metadatas.put(metadata.split(":")[0], metadata.split(":")[1]); @@ -228,9 +231,9 @@ public String run() throws Exception { CopyObjectRequest request = new CopyObjectRequest(fromBucket, fromPath, toBucket, toPath); // Add metadata - if (metadatas.size() > 0 || (cacheControl != null && !cacheControl.isEmpty()) || (contentType != null && !contentType.isEmpty()) || (contentDisposition != null && !contentDisposition.isEmpty())|| (sseAlgorithm != null && !sseAlgorithm.isEmpty())) { + if (!metadatas.isEmpty() || (cacheControl != null && !cacheControl.isEmpty()) || (contentType != null && !contentType.isEmpty()) || (contentDisposition != null && !contentDisposition.isEmpty())|| (sseAlgorithm != null && !sseAlgorithm.isEmpty())) { ObjectMetadata metas = new ObjectMetadata(); - if (metadatas.size() > 0) { + if (!metadatas.isEmpty()) { metas.setUserMetadata(metadatas); } if (cacheControl != null && !cacheControl.isEmpty()) { diff --git a/src/main/java/de/taimos/pipeline/aws/S3DeleteStep.java b/src/main/java/de/taimos/pipeline/aws/S3DeleteStep.java index 8ec82922..f4bb3181 100644 --- a/src/main/java/de/taimos/pipeline/aws/S3DeleteStep.java +++ b/src/main/java/de/taimos/pipeline/aws/S3DeleteStep.java @@ -22,11 +22,12 @@ package de.taimos.pipeline.aws; import java.io.IOException; +import java.io.Serial; import java.util.ArrayList; import java.util.List; import java.util.Set; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import org.jenkinsci.plugins.workflow.steps.StepContext; import org.jenkinsci.plugins.workflow.steps.StepDescriptor; @@ -99,7 +100,8 @@ public String getDisplayName() { public static class Execution extends StepExecution { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; protected transient S3DeleteStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/S3DoesObjectExistStep.java b/src/main/java/de/taimos/pipeline/aws/S3DoesObjectExistStep.java index deb573e2..24c132be 100644 --- a/src/main/java/de/taimos/pipeline/aws/S3DoesObjectExistStep.java +++ b/src/main/java/de/taimos/pipeline/aws/S3DoesObjectExistStep.java @@ -34,6 +34,7 @@ import org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution; import org.kohsuke.stapler.DataBoundConstructor; +import java.io.Serial; import java.util.Set; /** @@ -91,6 +92,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient S3DoesObjectExistStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/S3DownloadStep.java b/src/main/java/de/taimos/pipeline/aws/S3DownloadStep.java index dcf971b8..4fc6c01b 100644 --- a/src/main/java/de/taimos/pipeline/aws/S3DownloadStep.java +++ b/src/main/java/de/taimos/pipeline/aws/S3DownloadStep.java @@ -44,6 +44,7 @@ import java.io.File; import java.io.IOException; +import java.io.Serial; import java.util.Set; public class S3DownloadStep extends AbstractS3Step { @@ -112,7 +113,8 @@ public String getDisplayName() { public static class Execution extends SynchronousNonBlockingStepExecution { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; protected transient S3DownloadStep step; @@ -155,7 +157,8 @@ public Void run() throws Exception { private static class RemoteDownloader extends MasterToSlaveFileCallable { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private final S3ClientOptions amazonS3ClientOptions; private final EnvVars envVars; diff --git a/src/main/java/de/taimos/pipeline/aws/S3FindFilesStep.java b/src/main/java/de/taimos/pipeline/aws/S3FindFilesStep.java index aefa86f6..d145d36f 100644 --- a/src/main/java/de/taimos/pipeline/aws/S3FindFilesStep.java +++ b/src/main/java/de/taimos/pipeline/aws/S3FindFilesStep.java @@ -22,6 +22,7 @@ package de.taimos.pipeline.aws; import java.io.File; +import java.io.Serial; import java.nio.file.FileSystems; import java.nio.file.Path; import java.nio.file.PathMatcher; @@ -146,6 +147,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient S3FindFilesStep step; @@ -183,7 +185,7 @@ public FileWrapper[] run() throws Exception { // to strip out these parts from the matches later on. // // For exmple, if `path` is "path/to", then this will be "2". - final int pathComponentCount = path.length() == 0 ? 0 : Paths.get(path).getNameCount(); + final int pathComponentCount = path.isEmpty() ? 0 : Paths.get(path).getNameCount(); // This is the list of S3 file information for all of the matching objects. List matchingObjects = new ArrayList<>(); @@ -206,7 +208,7 @@ public FileWrapper[] run() throws Exception { request.setBucketName(bucket); request.setPrefix(folder); request.setDelimiter("/"); - if (folder.length() > 0 && !folder.endsWith("/")) { + if (!folder.isEmpty() && !folder.endsWith("/")) { request.setPrefix(folder + "/"); } @@ -272,7 +274,7 @@ public FileWrapper[] run() throws Exception { * @return A string that can be used to construct a PathMatcher. */ public static String computeMatcherString(String path, String glob) { - return "glob:" + (path.length() == 0 ? "" : path + (path.endsWith("/") ? "" : "/")) + (glob.length() == 0 ? "*" : glob); + return "glob:" + (path.isEmpty() ? "" : path + (path.endsWith("/") ? "" : "/")) + (glob.isEmpty() ? "*" : glob); } /** diff --git a/src/main/java/de/taimos/pipeline/aws/S3PresignUrlStep.java b/src/main/java/de/taimos/pipeline/aws/S3PresignUrlStep.java index ad35f266..f477260a 100644 --- a/src/main/java/de/taimos/pipeline/aws/S3PresignUrlStep.java +++ b/src/main/java/de/taimos/pipeline/aws/S3PresignUrlStep.java @@ -36,8 +36,10 @@ import org.joda.time.DateTime; import org.kohsuke.stapler.DataBoundConstructor; +import java.io.Serial; import java.net.URL; import java.util.Date; +import java.util.Objects; import java.util.Set; public class S3PresignUrlStep extends AbstractS3Step { @@ -52,11 +54,8 @@ public S3PresignUrlStep(String bucket, String key, String httpMethod, Integer du super(pathStyleAccessEnabled, payloadSigningEnabled); this.bucket = bucket; this.key = key; - if (durationInSeconds == null) { - this.durationInSeconds = 60; //60 seconds - } else { - this.durationInSeconds = durationInSeconds; - } + this.durationInSeconds = Objects.requireNonNullElse(durationInSeconds, 60); + if (httpMethod == null) { this.httpMethod = HttpMethod.GET; } else { @@ -106,7 +105,8 @@ public String getDisplayName() { public static class Execution extends SynchronousNonBlockingStepExecution { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; protected final transient S3PresignUrlStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/S3UploadStep.java b/src/main/java/de/taimos/pipeline/aws/S3UploadStep.java index 9b3b031b..4545b2e9 100644 --- a/src/main/java/de/taimos/pipeline/aws/S3UploadStep.java +++ b/src/main/java/de/taimos/pipeline/aws/S3UploadStep.java @@ -56,7 +56,8 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; -import java.nio.charset.Charset; +import java.io.Serial; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -292,7 +293,8 @@ public String getDisplayName() { public static class Execution extends SynchronousNonBlockingStepExecution { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; protected final transient S3UploadStep step; @@ -312,7 +314,7 @@ public String run() throws Exception { final String excludePathPattern = this.step.getExcludePathPattern(); final String workingDir = this.step.getWorkingDir(); final Map metadatas = new HashMap<>(); - final Map tags = new HashMap(); + final Map tags = new HashMap<>(); final CannedAccessControlList acl = this.step.getAcl(); final String cacheControl = this.step.getCacheControl(); final String contentEncoding = this.step.getContentEncoding(); @@ -324,7 +326,7 @@ public String run() throws Exception { boolean omitSourcePath = false; boolean sendingText = false; - if (this.step.getMetadatas() != null && this.step.getMetadatas().length != 0) { + if (this.step.getMetadatas() != null) { for (String metadata : this.step.getMetadatas()) { if (metadata.contains(":")) { metadatas.put(metadata.substring(0, metadata.indexOf(':')), metadata.substring(metadata.indexOf(':') + 1)); @@ -332,7 +334,7 @@ public String run() throws Exception { } } - if (this.step.getTags() != null && this.step.getTags().length() != 0) { + if (this.step.getTags() != null && !this.step.getTags().isEmpty()) { //[tag1:value1, tag2:value2] String tagsNoBraces = this.step.getTags().substring(1, this.step.getTags().length()-1); String[] pairs= tagsNoBraces.split(", "); @@ -350,7 +352,7 @@ public String run() throws Exception { final List children = new ArrayList<>(); final FilePath dir; - if (workingDir != null && !"".equals(workingDir.trim())) { + if (workingDir != null && !workingDir.trim().isEmpty()) { dir = this.getContext().get(FilePath.class).child(workingDir); } else { dir = this.getContext().get(FilePath.class); @@ -378,14 +380,14 @@ public String run() throws Exception { AmazonS3 s3Client = AWSClientFactory.create(amazonS3ClientOptions.createAmazonS3ClientBuilder(), Execution.this.getContext(), envVars); TransferManager mgr = AWSUtilFactory.newTransferManager(s3Client); - byte[] bytes = text.getBytes(Charset.forName("UTF-8")); + byte[] bytes = text.getBytes(StandardCharsets.UTF_8); PutObjectRequest request = null; ObjectMetadata metas = new ObjectMetadata(); metas.setContentLength(bytes.length); // Add metadata - if (metadatas != null && metadatas.size() > 0) { + if (metadatas != null && !metadatas.isEmpty()) { metas.setUserMetadata(metadatas); } if (cacheControl != null && !cacheControl.isEmpty()) { @@ -477,7 +479,8 @@ public String run() throws Exception { private static class RemoteUploader extends MasterToSlaveFileCallable { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private final S3ClientOptions amazonS3ClientOptions; private final EnvVars envVars; private final TaskListener taskListener; @@ -524,9 +527,9 @@ public Void invoke(File localFile, VirtualChannel channel) throws IOException, I PutObjectRequest request = new PutObjectRequest(this.bucket, path, localFile); // Add metadata - if ((this.metadatas != null && this.metadatas.size() > 0) || (this.cacheControl != null && !this.cacheControl.isEmpty()) || (this.contentEncoding != null && !this.contentEncoding.isEmpty()) || (this.contentType != null && !this.contentType.isEmpty()) || (this.contentDisposition != null && !this.contentDisposition.isEmpty()) || (this.sseAlgorithm != null && !this.sseAlgorithm.isEmpty())) { + if ((this.metadatas != null && !this.metadatas.isEmpty()) || (this.cacheControl != null && !this.cacheControl.isEmpty()) || (this.contentEncoding != null && !this.contentEncoding.isEmpty()) || (this.contentType != null && !this.contentType.isEmpty()) || (this.contentDisposition != null && !this.contentDisposition.isEmpty()) || (this.sseAlgorithm != null && !this.sseAlgorithm.isEmpty())) { ObjectMetadata metas = new ObjectMetadata(); - if (this.metadatas != null && this.metadatas.size() > 0) { + if (this.metadatas != null && !this.metadatas.isEmpty()) { metas.setUserMetadata(this.metadatas); } if (this.cacheControl != null && !this.cacheControl.isEmpty()) { @@ -587,7 +590,7 @@ public Void invoke(File localFile, VirtualChannel channel) throws IOException, I final MultipleFileUpload fileUpload; final ObjectMetadataProvider metadatasProvider = (file, meta) -> { if (meta != null) { - if (RemoteUploader.this.metadatas != null && RemoteUploader.this.metadatas.size() > 0) { + if (RemoteUploader.this.metadatas != null && !RemoteUploader.this.metadatas.isEmpty()) { meta.setUserMetadata(RemoteUploader.this.metadatas); } if (RemoteUploader.this.acl != null) { @@ -617,7 +620,7 @@ public Void invoke(File localFile, VirtualChannel channel) throws IOException, I }; ObjectTaggingProvider objectTaggingProvider =(uploadContext) -> { - List tagList = new ArrayList(); + List tagList = new ArrayList<>(); //add tags if(tags != null){ @@ -652,7 +655,8 @@ public Void invoke(File localFile, VirtualChannel channel) throws IOException, I private static class RemoteListUploader extends MasterToSlaveFileCallable { - protected static final long serialVersionUID = 1L; + @Serial + private static final long serialVersionUID = 1L; private final S3ClientOptions amazonS3ClientOptions; private final EnvVars envVars; private final TaskListener taskListener; @@ -694,7 +698,7 @@ public Void invoke(File localFile, VirtualChannel channel) throws IOException, I final MultipleFileUpload fileUpload; ObjectMetadataProvider metadatasProvider = (file, meta) -> { if (meta != null) { - if (RemoteListUploader.this.metadatas != null && RemoteListUploader.this.metadatas.size() > 0) { + if (RemoteListUploader.this.metadatas != null && !RemoteListUploader.this.metadatas.isEmpty()) { meta.setUserMetadata(RemoteListUploader.this.metadatas); } if (RemoteListUploader.this.acl != null) { @@ -728,7 +732,7 @@ public Void invoke(File localFile, VirtualChannel channel) throws IOException, I }; ObjectTaggingProvider objectTaggingProvider =(uploadContext) -> { - List tagList = new ArrayList(); + List tagList = new ArrayList<>(); //add tags if(tags != null){ @@ -758,7 +762,7 @@ public Void invoke(File localFile, VirtualChannel channel) throws IOException, I } } - private static MasterToSlaveFileCallable FIND_FILE_ON_SLAVE = new MasterToSlaveFileCallable() { + private static MasterToSlaveFileCallable FIND_FILE_ON_SLAVE = new MasterToSlaveFileCallable<>() { @Override public File invoke(File localFile, VirtualChannel channel) throws IOException, InterruptedException { return localFile; diff --git a/src/main/java/de/taimos/pipeline/aws/SNSPublishStep.java b/src/main/java/de/taimos/pipeline/aws/SNSPublishStep.java index 9918dc06..ba7858c5 100644 --- a/src/main/java/de/taimos/pipeline/aws/SNSPublishStep.java +++ b/src/main/java/de/taimos/pipeline/aws/SNSPublishStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -144,6 +145,7 @@ protected Void run() throws Exception { return null; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/SerializableAWSCredentialsProvider.java b/src/main/java/de/taimos/pipeline/aws/SerializableAWSCredentialsProvider.java index 76a64ccf..8a4eb53d 100644 --- a/src/main/java/de/taimos/pipeline/aws/SerializableAWSCredentialsProvider.java +++ b/src/main/java/de/taimos/pipeline/aws/SerializableAWSCredentialsProvider.java @@ -26,6 +26,7 @@ import com.amazonaws.auth.BasicSessionCredentials; import com.amazonaws.auth.STSSessionCredentials; +import java.io.Serial; import java.io.Serializable; /* @@ -61,5 +62,6 @@ public AWSCredentials getCredentials() { public void refresh() {} + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/SetAccountAliasStep.java b/src/main/java/de/taimos/pipeline/aws/SetAccountAliasStep.java index d67da309..c1fc3d11 100644 --- a/src/main/java/de/taimos/pipeline/aws/SetAccountAliasStep.java +++ b/src/main/java/de/taimos/pipeline/aws/SetAccountAliasStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.Set; import org.jenkinsci.plugins.workflow.steps.Step; @@ -107,6 +108,7 @@ protected Void run() throws Exception { return null; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/UpdateIdP.java b/src/main/java/de/taimos/pipeline/aws/UpdateIdP.java index f8c6e772..aeacee12 100644 --- a/src/main/java/de/taimos/pipeline/aws/UpdateIdP.java +++ b/src/main/java/de/taimos/pipeline/aws/UpdateIdP.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.Set; import org.jenkinsci.plugins.workflow.steps.Step; @@ -143,6 +144,7 @@ protected String run() throws Exception { return providerARN; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/UpdateTrustPolicy.java b/src/main/java/de/taimos/pipeline/aws/UpdateTrustPolicy.java index cc051ed1..307a2b78 100644 --- a/src/main/java/de/taimos/pipeline/aws/UpdateTrustPolicy.java +++ b/src/main/java/de/taimos/pipeline/aws/UpdateTrustPolicy.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws; +import java.io.Serial; import java.util.Set; import org.jenkinsci.plugins.workflow.steps.Step; @@ -113,6 +114,7 @@ protected Void run() throws Exception { return null; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/WithAWSStep.java b/src/main/java/de/taimos/pipeline/aws/WithAWSStep.java index 03317ca9..20f7c6c5 100644 --- a/src/main/java/de/taimos/pipeline/aws/WithAWSStep.java +++ b/src/main/java/de/taimos/pipeline/aws/WithAWSStep.java @@ -22,10 +22,11 @@ package de.taimos.pipeline.aws; import java.io.IOException; +import java.io.Serial; import java.util.Collections; import java.util.Set; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import org.jenkinsci.plugins.workflow.steps.BodyExecutionCallback; import org.jenkinsci.plugins.workflow.steps.EnvironmentExpander; @@ -37,7 +38,6 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import com.amazonaws.auth.AWSCredentials; import com.amazonaws.auth.BasicSessionCredentials; import com.amazonaws.services.securitytoken.AWSSecurityTokenService; import com.amazonaws.services.securitytoken.AWSSecurityTokenServiceClientBuilder; @@ -65,6 +65,7 @@ import hudson.model.queue.Tasks; import hudson.security.ACL; import hudson.util.ListBoxModel; +import software.amazon.awssdk.auth.credentials.AwsCredentials; public class WithAWSStep extends Step { @@ -261,16 +262,16 @@ public ListBoxModel doFillCredentialsItems(@AncestorInPath Item context) { return new StandardListBoxModel() .includeEmptyValue() .includeMatchingAs( - context instanceof Queue.Task - ? Tasks.getAuthenticationOf((Queue.Task) context) - : ACL.SYSTEM, + context instanceof Queue.Task task + ? Tasks.getAuthenticationOf2(task) + : ACL.SYSTEM2, context, StandardUsernamePasswordCredentials.class, Collections.emptyList(), CredentialsMatchers.instanceOf(StandardUsernamePasswordCredentials.class)) - .includeMatchingAs(context instanceof Queue.Task - ? Tasks.getAuthenticationOf((Queue.Task) context) - : ACL.SYSTEM, + .includeMatchingAs(context instanceof Queue.Task task + ? Tasks.getAuthenticationOf2(task) + : ACL.SYSTEM2, context, AmazonWebServicesCredentials.class, Collections.emptyList(), @@ -306,6 +307,7 @@ public boolean start() throws Exception { this.withFederatedUserId(awsEnv); EnvironmentExpander expander = new EnvironmentExpander() { + @Serial private static final long serialVersionUID = 1L; @Override public void expand(@Nonnull EnvVars envVars) { @@ -352,22 +354,22 @@ private void withCredentials(@Nonnull Run run, @Nonnull EnvVars localEnv) localEnv.override(AWSClientFactory.AWS_ACCESS_KEY_ID, usernamePasswordCredentials.getUsername()); localEnv.override(AWSClientFactory.AWS_SECRET_ACCESS_KEY, usernamePasswordCredentials.getPassword().getPlainText()); } else if (amazonWebServicesCredentials != null) { - AWSCredentials awsCredentials; + AwsCredentials awsCredentials; if (StringUtils.isNullOrEmpty(this.step.getIamMfaToken())) { this.getContext().get(TaskListener.class).getLogger().format("Constructing AWS Credentials"); - awsCredentials = amazonWebServicesCredentials.getCredentials(); + awsCredentials = amazonWebServicesCredentials.resolveCredentials(); } else { // Since the getCredentials does its own roleAssumption, this is all it takes to get credentials // with this token. this.getContext().get(TaskListener.class).getLogger().format("Constructing AWS Credentials utilizing MFA Token"); - awsCredentials = amazonWebServicesCredentials.getCredentials(this.step.getIamMfaToken()); + awsCredentials = amazonWebServicesCredentials.resolveCredentials(this.step.getIamMfaToken()); BasicSessionCredentials basicSessionCredentials = (BasicSessionCredentials) awsCredentials; localEnv.override(AWSClientFactory.AWS_SESSION_TOKEN, basicSessionCredentials.getSessionToken()); } - localEnv.override(AWSClientFactory.AWS_ACCESS_KEY_ID, awsCredentials.getAWSAccessKeyId()); - localEnv.override(AWSClientFactory.AWS_SECRET_ACCESS_KEY, awsCredentials.getAWSSecretKey()); + localEnv.override(AWSClientFactory.AWS_ACCESS_KEY_ID, awsCredentials.accessKeyId()); + localEnv.override(AWSClientFactory.AWS_SECRET_ACCESS_KEY, awsCredentials.secretAccessKey()); } else { throw new RuntimeException("Cannot find a Username with password credential with the ID " + this.step.getCredentials()); } @@ -392,7 +394,7 @@ private void withRole(@Nonnull EnvVars localEnv) throws IOException, Interrupted assumeRole.withSessionName(this.createRoleSessionName()); this.getContext().get(TaskListener.class).getLogger().format("Requesting assume role%n"); - this.getContext().get(TaskListener.class).getLogger().format("Assuming role ARN is %s", assumeRole.toString()); + this.getContext().get(TaskListener.class).getLogger().format("Assuming role ARN is %s", assumeRole); AssumedRole assumedRole = assumeRole.assumedRole(sts); this.getContext().get(TaskListener.class).getLogger().format("Assumed role %s with id %s %n ", assumedRole.getAssumedRoleUser().getArn(), assumedRole.getAssumedRoleUser().getAssumedRoleId()); @@ -448,6 +450,7 @@ private String createAccountId(final AWSSecurityTokenService sts) { } } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/AbstractCFNCreateStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/AbstractCFNCreateStep.java index 5f42349b..8f20d189 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/AbstractCFNCreateStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/AbstractCFNCreateStep.java @@ -39,7 +39,7 @@ import org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import java.io.IOException; import java.util.Collection; diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNCreateChangeSetStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNCreateChangeSetStep.java index a017c87e..b9d7f907 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNCreateChangeSetStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNCreateChangeSetStep.java @@ -39,6 +39,7 @@ import org.jenkinsci.plugins.workflow.steps.StepExecution; import org.kohsuke.stapler.DataBoundConstructor; +import java.io.Serial; import java.util.Collection; import java.util.List; import java.util.Set; @@ -122,6 +123,7 @@ private List validateChangeSet(String changeSet) { } } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDeleteStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDeleteStep.java index 2939d940..cf1d88ed 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDeleteStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDeleteStep.java @@ -37,6 +37,7 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; +import java.io.Serial; import java.time.Duration; import java.util.Set; @@ -151,6 +152,7 @@ public Void run() throws Exception { return null; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDescribeStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDescribeStep.java index 148c1c6f..d85a281c 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDescribeStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNDescribeStep.java @@ -36,6 +36,7 @@ import org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution; import org.kohsuke.stapler.DataBoundConstructor; +import java.io.Serial; import java.util.Map; import java.util.Set; @@ -98,6 +99,7 @@ protected Map run() throws Exception { return cfnStack.describeOutputs(); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExecuteChangeSetStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExecuteChangeSetStep.java index 368429b3..9b52c8da 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExecuteChangeSetStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExecuteChangeSetStep.java @@ -37,6 +37,7 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; +import java.io.Serial; import java.time.Duration; import java.util.Map; import java.util.Set; @@ -138,6 +139,7 @@ public Map run() throws Exception { return outputs; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExportsStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExportsStep.java index b752a831..393d9196 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExportsStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNExportsStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws.cloudformation; +import java.io.Serial; import java.util.HashMap; import java.util.Map; import java.util.Set; @@ -102,6 +103,7 @@ private Map getExports(AmazonCloudFormation client, String nextT return map; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNUpdateStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNUpdateStep.java index 3749a2d2..033f8acf 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNUpdateStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNUpdateStep.java @@ -21,11 +21,12 @@ package de.taimos.pipeline.aws.cloudformation; +import java.io.Serial; import java.util.Collection; import java.util.Map; import java.util.Set; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import org.jenkinsci.plugins.workflow.steps.StepContext; import org.jenkinsci.plugins.workflow.steps.StepDescriptor; @@ -110,6 +111,7 @@ public Map whenStackMissing(Collection parameters, Co return cfnStack.create(this.getStep().readTemplate(this), url, parameters, tags, notificationARNs, this.getStep().getPollConfiguration(), this.getStep().getRoleArn(), this.getStep().getOnFailure(), this.getStep().getEnableTerminationProtection()); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNValidateStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNValidateStep.java index 0aa055dc..24c8058c 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNValidateStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CFNValidateStep.java @@ -22,18 +22,13 @@ package de.taimos.pipeline.aws.cloudformation; import java.io.IOException; -import java.util.Map; +import java.io.Serial; import java.util.Set; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import com.amazonaws.services.cloudformation.model.ValidateTemplateResult; -import com.amazonaws.services.cloudformation.model.transform.ValidateTemplateRequestMarshaller; -import com.fasterxml.jackson.core.JsonProcessingException; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; import de.taimos.pipeline.aws.AwsSdkResponseToJson; -import groovy.json.JsonSlurper; import org.jenkinsci.plugins.workflow.steps.Step; import org.jenkinsci.plugins.workflow.steps.StepContext; import org.jenkinsci.plugins.workflow.steps.StepDescriptor; @@ -164,6 +159,7 @@ public void stop(@Nonnull Throwable cause) throws Exception { // } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/CloudFormationStack.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/CloudFormationStack.java index f2fda196..21a77245 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/CloudFormationStack.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/CloudFormationStack.java @@ -162,10 +162,10 @@ public Map update(String templateBody, String templateUrl, Colle req.withRollbackConfiguration(rollbackConfig); req.withParameters(params); - if(tags != null && tags.size() > 0){ + if(tags != null && !tags.isEmpty()){ req.withTags(tags); } - if (notificationARNs != null && notificationARNs.size() > 0) { + if (notificationARNs != null && !notificationARNs.isEmpty()) { req.withNotificationARNs(notificationARNs); } req.withRoleARN(roleArn); @@ -298,7 +298,7 @@ public DescribeChangeSetResult describeChangeSet(String changeSet) { private boolean isInReview() { if (this.exists()) { DescribeStacksResult result = this.client.describeStacks(new DescribeStacksRequest().withStackName(this.stack)); - return result.getStacks().size() > 0 && result.getStacks().get(0).getStackStatus().equals("REVIEW_IN_PROGRESS"); + return !result.getStacks().isEmpty() && result.getStacks().get(0).getStackStatus().equals("REVIEW_IN_PROGRESS"); } return false; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/EventPrinter.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/EventPrinter.java index ca2d813b..678eeac4 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/EventPrinter.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/EventPrinter.java @@ -21,18 +21,6 @@ package de.taimos.pipeline.aws.cloudformation; -import java.text.SimpleDateFormat; -import java.time.Duration; -import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Date; -import java.util.List; -import java.util.concurrent.ExecutionException; - -import org.apache.commons.lang.StringUtils; -import org.apache.http.concurrent.BasicFuture; - import com.amazonaws.AmazonWebServiceRequest; import com.amazonaws.services.cloudformation.AmazonCloudFormation; import com.amazonaws.services.cloudformation.model.AmazonCloudFormationException; diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/JSONParameterFileParser.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/JSONParameterFileParser.java index 316d2f6d..40163553 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/JSONParameterFileParser.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/JSONParameterFileParser.java @@ -38,8 +38,7 @@ public Collection parseParams(InputStream fileContent) throws IOExcep ObjectMapper mapper = new ObjectMapper(); JsonNode tree = mapper.readTree(fileContent); Collection parameters = new ArrayList<>(); - if (tree instanceof ArrayNode) { - ArrayNode jsonNodes = (ArrayNode) tree; + if (tree instanceof ArrayNode jsonNodes) { for (JsonNode node : jsonNodes) { Parameter param = new Parameter(); param.withParameterKey(node.get("ParameterKey").asText()); diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/TagsFileParser.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/TagsFileParser.java index cb161e41..a6604c4f 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/TagsFileParser.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/TagsFileParser.java @@ -18,11 +18,9 @@ public static Collection parseTags(InputStream is) throws IOException { JsonNode tree = mapper.readTree(is); ArrayNode jsonNodes = (ArrayNode) tree; return StreamSupport.stream(jsonNodes.spliterator(), false) - .map(node -> { - return new Tag() - .withKey(node.get("Key").asText()) - .withValue(node.get("Value").asText()); - }) + .map(node -> new Tag() + .withKey(node.get("Key").asText()) + .withValue(node.get("Value").asText())) .collect(Collectors.toList()); } } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/YAMLParameterFileParser.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/YAMLParameterFileParser.java index 78294ffa..a3b80f4d 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/YAMLParameterFileParser.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/parser/YAMLParameterFileParser.java @@ -24,6 +24,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; import java.util.Map; @@ -33,7 +34,6 @@ import org.yaml.snakeyaml.constructor.SafeConstructor; import com.amazonaws.services.cloudformation.model.Parameter; -import com.google.common.base.Charsets; import com.google.common.base.Joiner; public class YAMLParameterFileParser implements ParameterFileParser { @@ -41,14 +41,13 @@ public class YAMLParameterFileParser implements ParameterFileParser { @Override public Collection parseParams(InputStream fileContent) throws IOException { Yaml yaml = new Yaml(new SafeConstructor(new LoaderOptions())); - @SuppressWarnings("unchecked") - Map parse = yaml.load(new InputStreamReader(fileContent, Charsets.UTF_8)); + Map parse = yaml.load(new InputStreamReader(fileContent, StandardCharsets.UTF_8)); Collection parameters = new ArrayList<>(); for (Map.Entry entry : parse.entrySet()) { Object value = entry.getValue(); - if (value instanceof Collection) { - String val = Joiner.on(",").join((Collection) value); + if (value instanceof Collection collection) { + String val = Joiner.on(",").join(collection); parameters.add(new Parameter().withParameterKey(entry.getKey()).withParameterValue(val)); } else { parameters.add(new Parameter().withParameterKey(entry.getKey()).withParameterValue(value.toString())); diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/AbstractCFNCreateStackSetStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/AbstractCFNCreateStackSetStep.java index 35d4758c..987a22f4 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/AbstractCFNCreateStackSetStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/AbstractCFNCreateStackSetStep.java @@ -40,7 +40,7 @@ import org.jenkinsci.plugins.workflow.steps.SynchronousNonBlockingStepExecution; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; import java.io.IOException; import java.util.Collection; diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNDeleteStackSetStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNDeleteStackSetStep.java index 2d33efd9..da5ddd96 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNDeleteStackSetStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNDeleteStackSetStep.java @@ -37,7 +37,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Set; public class CFNDeleteStackSetStep extends Step { @@ -113,6 +115,7 @@ public Void run() throws Exception { return null; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStep.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStep.java index 15eba588..3cfe6480 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStep.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStep.java @@ -37,7 +37,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Collection; import java.util.List; import java.util.Map; @@ -148,6 +150,7 @@ public DescribeStackSetResult whenStackSetMissing(Collection paramete return cfnStack.waitForStackState(StackSetStatus.ACTIVE, getStep().getPollConfiguration().getPollInterval()); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CloudFormationStackSet.java b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CloudFormationStackSet.java index 7a6f6877..aac44506 100644 --- a/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CloudFormationStackSet.java +++ b/src/main/java/de/taimos/pipeline/aws/cloudformation/stacksets/CloudFormationStackSet.java @@ -117,19 +117,22 @@ DescribeStackSetOperationResult waitForOperationToComplete(String operationId, D this.listener.getLogger().println("Waiting on operationId=" + operationId); DescribeStackSetOperationResult result = describeStackOperation(operationId, 0); this.listener.getLogger().println("operationId=" + operationId + " status=" + result.getStackSetOperation().getStatus()); - switch (StackSetOperationStatus.fromValue(result.getStackSetOperation().getStatus())) { - case RUNNING: + return switch (StackSetOperationStatus.fromValue(result.getStackSetOperation().getStatus())) { + case RUNNING -> { Thread.sleep(pollInterval.toMillis()); - return waitForOperationToComplete(operationId, pollInterval); - case SUCCEEDED: + yield waitForOperationToComplete(operationId, pollInterval); + } + case SUCCEEDED -> { this.listener.getLogger().println("Stack set operation completed successfully"); - return result; - case FAILED: + yield result; + } + case FAILED -> { this.listener.getLogger().println("Stack set operation completed failed"); throw new StackSetOperationFailedException(operationId); - default: - throw new IllegalStateException("Invalid stack set state=" + result.getStackSetOperation().getStatus()); - } + } + default -> + throw new IllegalStateException("Invalid stack set state=" + result.getStackSetOperation().getStatus()); + }; } public UpdateStackSetResult update(String templateBody, String templateUrl, UpdateStackSetRequest request) throws InterruptedException { diff --git a/src/main/java/de/taimos/pipeline/aws/code/deploy/CreateDeployStep.java b/src/main/java/de/taimos/pipeline/aws/code/deploy/CreateDeployStep.java index f699881f..50e0ab99 100644 --- a/src/main/java/de/taimos/pipeline/aws/code/deploy/CreateDeployStep.java +++ b/src/main/java/de/taimos/pipeline/aws/code/deploy/CreateDeployStep.java @@ -11,7 +11,6 @@ import com.amazonaws.services.codedeploy.model.S3Location; import com.amazonaws.services.codedeploy.model.GetDeploymentGroupRequest; import com.amazonaws.services.codedeploy.model.GetDeploymentGroupResult; -import com.amazonaws.services.codedeploy.model.DeploymentGroupInfo; import de.taimos.pipeline.aws.AWSClientFactory; import de.taimos.pipeline.aws.utils.StepUtils; import hudson.Extension; @@ -26,6 +25,7 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; +import java.io.Serial; import java.util.Set; @@ -194,18 +194,18 @@ private FileExistsBehavior getFileExistsBehavior(String fileExistsBehavior) { private boolean isEcsOrLambdaDeployment() { AmazonCodeDeploy codeDeploy = AWSClientFactory.create(AmazonCodeDeployClientBuilder.standard(), this.getContext()); - + try { - GetDeploymentGroupRequest request = + GetDeploymentGroupRequest request = new GetDeploymentGroupRequest() .withApplicationName(step.getApplicationName()) .withDeploymentGroupName(step.getDeploymentGroupName()); - - GetDeploymentGroupResult response = + + GetDeploymentGroupResult response = codeDeploy.getDeploymentGroup(request); - + String computePlatform = response.getDeploymentGroupInfo().getComputePlatform(); - + return "ECS".equalsIgnoreCase(computePlatform) || "Lambda".equalsIgnoreCase(computePlatform); } catch (Exception e) { // Log the exception or handle it as appropriate for your use case @@ -229,6 +229,7 @@ private RevisionLocation getRevisionLocation() { .withRevisionType(RevisionLocationType.GitHub); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/code/deploy/WaitDeployStep.java b/src/main/java/de/taimos/pipeline/aws/code/deploy/WaitDeployStep.java index 6e057127..9fa34034 100644 --- a/src/main/java/de/taimos/pipeline/aws/code/deploy/WaitDeployStep.java +++ b/src/main/java/de/taimos/pipeline/aws/code/deploy/WaitDeployStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws.code.deploy; +import java.io.Serial; import java.util.Set; import de.taimos.pipeline.aws.AWSClientFactory; @@ -33,8 +34,6 @@ import com.amazonaws.services.codedeploy.AmazonCodeDeploy; import com.amazonaws.services.codedeploy.AmazonCodeDeployClientBuilder; -import com.amazonaws.services.codedeploy.model.GetDeploymentRequest; -import com.amazonaws.services.codedeploy.model.GetDeploymentResult; import de.taimos.pipeline.aws.utils.StepUtils; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; @@ -105,6 +104,7 @@ protected Void run() throws Exception { return new DeployUtils().waitDeployment(this.deploymentId, listener, client); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationStep.java b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationStep.java index 89d209f0..42b9c113 100644 --- a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationStep.java +++ b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationStep.java @@ -17,7 +17,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Set; public class EBCreateApplicationStep extends Step { @@ -60,6 +62,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient EBCreateApplicationStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationVersionStep.java b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationVersionStep.java index d3ad36b7..4248bb54 100644 --- a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationVersionStep.java +++ b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateApplicationVersionStep.java @@ -18,7 +18,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Set; public class EBCreateApplicationVersionStep extends Step { @@ -67,6 +69,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient EBCreateApplicationVersionStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateConfigurationTemplateStep.java b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateConfigurationTemplateStep.java index 090404aa..3efd747d 100644 --- a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateConfigurationTemplateStep.java +++ b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateConfigurationTemplateStep.java @@ -18,7 +18,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Set; public class EBCreateConfigurationTemplateStep extends Step { @@ -87,6 +89,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient EBCreateConfigurationTemplateStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateEnvironmentStep.java b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateEnvironmentStep.java index 764ef2af..3ee70d8e 100644 --- a/src/main/java/de/taimos/pipeline/aws/eb/EBCreateEnvironmentStep.java +++ b/src/main/java/de/taimos/pipeline/aws/eb/EBCreateEnvironmentStep.java @@ -22,7 +22,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Collections; import java.util.Optional; import java.util.Set; @@ -93,6 +95,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient EBCreateEnvironmentStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/eb/EBSwapEnvironmentCNAMEsStep.java b/src/main/java/de/taimos/pipeline/aws/eb/EBSwapEnvironmentCNAMEsStep.java index fe04341b..a57159e4 100644 --- a/src/main/java/de/taimos/pipeline/aws/eb/EBSwapEnvironmentCNAMEsStep.java +++ b/src/main/java/de/taimos/pipeline/aws/eb/EBSwapEnvironmentCNAMEsStep.java @@ -21,7 +21,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Set; public class EBSwapEnvironmentCNAMEsStep extends Step { @@ -92,6 +94,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient EBSwapEnvironmentCNAMEsStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentHealthStep.java b/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentHealthStep.java index 46670542..450655ae 100644 --- a/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentHealthStep.java +++ b/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentHealthStep.java @@ -19,7 +19,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Collections; import java.util.Set; @@ -71,6 +73,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient EBWaitOnEnvironmentHealthStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentStatusStep.java b/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentStatusStep.java index cd53ce25..145bda57 100644 --- a/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentStatusStep.java +++ b/src/main/java/de/taimos/pipeline/aws/eb/EBWaitOnEnvironmentStatusStep.java @@ -19,7 +19,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Collections; import java.util.Set; @@ -65,6 +67,7 @@ public String getDisplayName() { } public static class Execution extends SynchronousNonBlockingStepExecution { + @Serial private static final long serialVersionUID = 1L; private final transient EBWaitOnEnvironmentStatusStep step; diff --git a/src/main/java/de/taimos/pipeline/aws/ecr/ECRDeleteImagesStep.java b/src/main/java/de/taimos/pipeline/aws/ecr/ECRDeleteImagesStep.java index 1eadc400..29278f99 100644 --- a/src/main/java/de/taimos/pipeline/aws/ecr/ECRDeleteImagesStep.java +++ b/src/main/java/de/taimos/pipeline/aws/ecr/ECRDeleteImagesStep.java @@ -18,7 +18,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.ArrayList; import java.util.List; import java.util.Set; @@ -117,6 +119,7 @@ protected List run() throws Exception { return result.getImageIds(); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/ecr/ECRListImagesStep.java b/src/main/java/de/taimos/pipeline/aws/ecr/ECRListImagesStep.java index d7f948ca..96260530 100644 --- a/src/main/java/de/taimos/pipeline/aws/ecr/ECRListImagesStep.java +++ b/src/main/java/de/taimos/pipeline/aws/ecr/ECRListImagesStep.java @@ -16,7 +16,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -121,6 +123,7 @@ protected List> run() throws Exception { }).collect(Collectors.toList()); } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/ecr/ECRSetRepositoryPolicyStep.java b/src/main/java/de/taimos/pipeline/aws/ecr/ECRSetRepositoryPolicyStep.java index 961f2511..e33ff347 100644 --- a/src/main/java/de/taimos/pipeline/aws/ecr/ECRSetRepositoryPolicyStep.java +++ b/src/main/java/de/taimos/pipeline/aws/ecr/ECRSetRepositoryPolicyStep.java @@ -15,7 +15,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import javax.annotation.Nonnull; +import jakarta.annotation.Nonnull; + +import java.io.Serial; import java.util.Set; public class ECRSetRepositoryPolicyStep extends Step { @@ -104,6 +106,7 @@ protected SetRepositoryPolicyResult run() throws Exception { return result; } + @Serial private static final long serialVersionUID = 1L; } diff --git a/src/main/java/de/taimos/pipeline/aws/elb/ELBDeregisterInstanceStep.java b/src/main/java/de/taimos/pipeline/aws/elb/ELBDeregisterInstanceStep.java index f818960b..b16e8288 100644 --- a/src/main/java/de/taimos/pipeline/aws/elb/ELBDeregisterInstanceStep.java +++ b/src/main/java/de/taimos/pipeline/aws/elb/ELBDeregisterInstanceStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws.elb; import java.io.IOException; +import java.io.Serial; import java.util.ArrayList; import java.util.Set; @@ -32,14 +33,9 @@ import org.kohsuke.stapler.DataBoundConstructor; import org.kohsuke.stapler.DataBoundSetter; -import com.amazonaws.services.cloudformation.AmazonCloudFormationClientBuilder; import com.amazonaws.services.elasticloadbalancingv2.AmazonElasticLoadBalancing; -import com.amazonaws.services.elasticloadbalancingv2.AmazonElasticLoadBalancingClient; import com.amazonaws.services.elasticloadbalancingv2.AmazonElasticLoadBalancingClientBuilder; import com.amazonaws.services.elasticloadbalancingv2.model.DeregisterTargetsRequest; -import com.amazonaws.services.elasticloadbalancingv2.model.DeregisterTargetsResult; -import com.amazonaws.services.elasticloadbalancingv2.model.DescribeTargetGroupsRequest; -import com.amazonaws.services.elasticloadbalancingv2.model.DescribeTargetGroupsResult; import com.amazonaws.services.elasticloadbalancingv2.model.DescribeTargetHealthRequest; import com.amazonaws.services.elasticloadbalancingv2.model.DescribeTargetHealthResult; import com.amazonaws.services.elasticloadbalancingv2.model.TargetDescription; @@ -124,7 +120,7 @@ public Execution(ELBDeregisterInstanceStep step, StepContext context) { protected String run() throws Exception { TaskListener listener = this.getContext().get(TaskListener.class); listener.getLogger().println("elbDeregisterInstance instanceID: " + this.step.instanceID + " port: " + this.step.port + " from targetGroupARN: " + this.step.targetGroupARN); - ArrayList arr = new ArrayList(); + ArrayList arr = new ArrayList<>(); arr.add(new TargetDescription().withId(this.step.instanceID).withPort(this.step.port)); DeregisterTargetsRequest request = new DeregisterTargetsRequest().withTargetGroupArn(this.step.targetGroupARN).withTargets( arr ); AmazonElasticLoadBalancing client = AWSClientFactory.create(AmazonElasticLoadBalancingClientBuilder.standard(), this.getContext(), this.getEnvVars()); @@ -145,6 +141,7 @@ public EnvVars getEnvVars() { } } + @Serial private static final long serialVersionUID = 1L; } } diff --git a/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceDeregisteredStep.java b/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceDeregisteredStep.java index 45d6b80a..711f8f50 100644 --- a/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceDeregisteredStep.java +++ b/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceDeregisteredStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws.elb; import java.io.IOException; +import java.io.Serial; import java.util.List; import java.util.Set; @@ -119,7 +120,7 @@ protected Boolean run() throws Exception { TaskListener listener = this.getContext().get(TaskListener.class); listener.getLogger().println("elbIsInstanceDeregistered instanceID: " + this.step.instanceID + " port: " + this.step.port + " from targetGroupARN: " + this.step.targetGroupARN); - Boolean rval = true; + boolean rval = true; AmazonElasticLoadBalancing client = AWSClientFactory.create(AmazonElasticLoadBalancingClientBuilder.standard(), this.getContext(), this.getEnvVars()); DescribeTargetHealthRequest req = new DescribeTargetHealthRequest().withTargetGroupArn(this.step.targetGroupARN); DescribeTargetHealthResult res = client.describeTargetHealth(req); @@ -130,7 +131,7 @@ protected Boolean run() throws Exception { break; } } - listener.getLogger().println(res.toString()); + listener.getLogger().println(res); return rval; } @@ -143,6 +144,7 @@ public EnvVars getEnvVars() { } } + @Serial private static final long serialVersionUID = 1L; } } diff --git a/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceRegisteredStep.java b/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceRegisteredStep.java index 3bacefa2..bb1439af 100644 --- a/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceRegisteredStep.java +++ b/src/main/java/de/taimos/pipeline/aws/elb/ELBIsInstanceRegisteredStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws.elb; import java.io.IOException; +import java.io.Serial; import java.util.List; import java.util.Set; @@ -119,7 +120,7 @@ protected Boolean run() throws Exception { TaskListener listener = this.getContext().get(TaskListener.class); listener.getLogger().println("elbIsInstanceRegistered instanceID: " + this.step.instanceID + " port: " + this.step.port + " from targetGroupARN: " + this.step.targetGroupARN); - Boolean rval = false; + boolean rval = false; AmazonElasticLoadBalancing client = AWSClientFactory.create(AmazonElasticLoadBalancingClientBuilder.standard(), this.getContext(), this.getEnvVars()); DescribeTargetHealthRequest req = new DescribeTargetHealthRequest().withTargetGroupArn(this.step.targetGroupARN); DescribeTargetHealthResult res = client.describeTargetHealth(req); @@ -130,7 +131,7 @@ protected Boolean run() throws Exception { break; } } - listener.getLogger().println(res.toString()); + listener.getLogger().println(res); return rval; } @@ -143,6 +144,7 @@ public EnvVars getEnvVars() { } } + @Serial private static final long serialVersionUID = 1L; } } diff --git a/src/main/java/de/taimos/pipeline/aws/elb/ELBRegisterInstanceStep.java b/src/main/java/de/taimos/pipeline/aws/elb/ELBRegisterInstanceStep.java index 8b1c774c..439f5b2a 100644 --- a/src/main/java/de/taimos/pipeline/aws/elb/ELBRegisterInstanceStep.java +++ b/src/main/java/de/taimos/pipeline/aws/elb/ELBRegisterInstanceStep.java @@ -21,6 +21,7 @@ package de.taimos.pipeline.aws.elb; import java.io.IOException; +import java.io.Serial; import java.util.ArrayList; import java.util.Set; @@ -37,7 +38,6 @@ import com.amazonaws.services.elasticloadbalancingv2.model.DescribeTargetHealthRequest; import com.amazonaws.services.elasticloadbalancingv2.model.DescribeTargetHealthResult; import com.amazonaws.services.elasticloadbalancingv2.model.RegisterTargetsRequest; -import com.amazonaws.services.elasticloadbalancingv2.model.RegisterTargetsResult; import com.amazonaws.services.elasticloadbalancingv2.model.TargetDescription; import de.taimos.pipeline.aws.AWSClientFactory; @@ -120,7 +120,7 @@ public Execution(ELBRegisterInstanceStep step, StepContext context) { protected String run() throws Exception { TaskListener listener = this.getContext().get(TaskListener.class); listener.getLogger().println("elbRegisterInstance instanceID: " + this.step.instanceID + " port: " + this.step.port + " from targetGroupARN: " + this.step.targetGroupARN); - ArrayList arr = new ArrayList(); + ArrayList arr = new ArrayList<>(); arr.add(new TargetDescription().withId(this.step.instanceID).withPort(this.step.port)); RegisterTargetsRequest request = new RegisterTargetsRequest().withTargetGroupArn(this.step.targetGroupARN).withTargets( arr ); AmazonElasticLoadBalancing client = AWSClientFactory.create(AmazonElasticLoadBalancingClientBuilder.standard(), this.getContext(), this.getEnvVars()); @@ -141,6 +141,7 @@ public EnvVars getEnvVars() { } } + @Serial private static final long serialVersionUID = 1L; } } diff --git a/src/test/java/de/taimos/pipeline/aws/cloudformation/parser/ParameterParseTests.java b/src/test/java/de/taimos/pipeline/aws/cloudformation/parser/ParameterParseTests.java index cca91821..4a751098 100644 --- a/src/test/java/de/taimos/pipeline/aws/cloudformation/parser/ParameterParseTests.java +++ b/src/test/java/de/taimos/pipeline/aws/cloudformation/parser/ParameterParseTests.java @@ -4,13 +4,11 @@ import de.taimos.pipeline.aws.cloudformation.ParameterProvider; import hudson.FilePath; import org.assertj.core.api.Assertions; -import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; import org.mockito.Mockito; -import java.io.File; import java.io.IOException; import java.util.Arrays; import java.util.Collection; diff --git a/src/test/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStepTest.java b/src/test/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStepTest.java index f8ce69b5..aca674b1 100644 --- a/src/test/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStepTest.java +++ b/src/test/java/de/taimos/pipeline/aws/cloudformation/stacksets/CFNUpdateStackSetStepTest.java @@ -210,13 +210,13 @@ public void updateWithRegionBatches() throws Exception { .map(accountId -> RegionAccountIdTuple.builder().accountId(accountId).region(region).build()) )) .collect(Collectors.groupingBy(RegionAccountIdTuple::getRegion, Collectors.mapping(RegionAccountIdTuple::getAccountId, Collectors.toList()))); - Assertions.assertThat(capturedRegionAccounts).containsAllEntriesOf(new HashMap>() { - { - put("r1", asList("a1", "a2")); - put("r2", singletonList("a2")); - put("r3", singletonList("a3")); - } - }); + Assertions.assertThat(capturedRegionAccounts).containsAllEntriesOf(new HashMap<>() { + { + put("r1", asList("a1", "a2")); + put("r2", singletonList("a2")); + put("r3", singletonList("a3")); + } + }); Mockito.verify(stackSet, Mockito.times(3)).waitForOperationToComplete(Mockito.any(), Mockito.any()); }