Skip to content

Commit 8a7d359

Browse files
Require Jenkins 2.479.3 or newer and Jakarta EE 9 (#345)
1 parent a689304 commit 8a7d359

24 files changed

+79
-84
lines changed

Diff for: pom.xml

+7-7
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<parent>
55
<groupId>org.jenkins-ci.plugins</groupId>
66
<artifactId>plugin</artifactId>
7-
<version>4.88</version>
7+
<version>5.9</version>
88
<relativePath />
99
</parent>
1010
<groupId>com.datapipe.jenkins.plugins</groupId>
@@ -14,8 +14,8 @@
1414
<properties>
1515
<changelist>9999-SNAPSHOT</changelist>
1616
<!-- https://www.jenkins.io/doc/developer/plugin-development/choosing-jenkins-baseline/ -->
17-
<jenkins.baseline>2.452</jenkins.baseline>
18-
<jenkins.version>${jenkins.baseline}.4</jenkins.version>
17+
<jenkins.baseline>2.479</jenkins.baseline>
18+
<jenkins.version>${jenkins.baseline}.3</jenkins.version>
1919
<hpi.compatibleSinceVersion>2.0.0</hpi.compatibleSinceVersion>
2020
<gitHubRepo>jenkinsci/${project.artifactId}</gitHubRepo>
2121
</properties>
@@ -29,7 +29,7 @@
2929
<licenses>
3030
<license>
3131
<name>MIT License</name>
32-
<url>http://opensource.org/licenses/MIT</url>
32+
<url>https://opensource.org/licenses/MIT</url>
3333
</license>
3434
</licenses>
3535
<developers>
@@ -78,12 +78,12 @@
7878
<plugin>
7979
<groupId>org.apache.maven.plugins</groupId>
8080
<artifactId>maven-checkstyle-plugin</artifactId>
81-
<version>3.5.0</version>
81+
<version>3.6.0</version>
8282
<dependencies>
8383
<dependency>
8484
<groupId>com.puppycrawl.tools</groupId>
8585
<artifactId>checkstyle</artifactId>
86-
<version>10.18.1</version>
86+
<version>10.23.0</version>
8787
</dependency>
8888
</dependencies>
8989
</plugin>
@@ -221,7 +221,7 @@
221221
<dependency>
222222
<groupId>io.jenkins.tools.bom</groupId>
223223
<artifactId>bom-${jenkins.baseline}.x</artifactId>
224-
<version>3387.v0f2773fa_3200</version>
224+
<version>4545.v56392b_7ca_7b_a_</version>
225225
<scope>import</scope>
226226
<type>pom</type>
227227
</dependency>

Diff for: src/main/java/com/datapipe/jenkins/vault/VaultAccessor.java

+2
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.github.jopenlibs.vault.response.VaultResponse;
2626
import io.github.jopenlibs.vault.rest.RestResponse;
2727
import java.io.PrintStream;
28+
import java.io.Serial;
2829
import java.io.Serializable;
2930
import java.nio.charset.StandardCharsets;
3031
import java.util.Arrays;
@@ -40,6 +41,7 @@
4041

4142
public class VaultAccessor implements Serializable {
4243

44+
@Serial
4345
private static final long serialVersionUID = 1L;
4446

4547
private VaultConfig config;

Diff for: src/main/java/com/datapipe/jenkins/vault/VaultBindingStep.java

+6-8
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,10 @@
3636
import hudson.model.TaskListener;
3737
import hudson.util.Secret;
3838
import java.io.IOException;
39+
import java.io.Serial;
3940
import java.util.ArrayList;
40-
import java.util.Arrays;
4141
import java.util.Collections;
4242
import java.util.HashMap;
43-
import java.util.HashSet;
4443
import java.util.List;
4544
import java.util.Map;
4645
import java.util.Set;
@@ -85,6 +84,7 @@ public StepExecution start(StepContext context) throws Exception {
8584

8685
protected static class Execution extends GeneralNonBlockingStepExecution {
8786

87+
@Serial
8888
private static final long serialVersionUID = 1;
8989

9090
private transient VaultBindingStep step;
@@ -115,8 +115,7 @@ private void doStart() throws Exception {
115115
.retrieveVaultSecrets(run, listener.getLogger(), envVars, vaultAccessor,
116116
step.getConfiguration(), step.getVaultSecrets());
117117

118-
List<String> secretValues = new ArrayList<>();
119-
secretValues.addAll(overrides.values());
118+
List<String> secretValues = new ArrayList<>(overrides.values());
120119

121120
getContext().newBodyInvoker()
122121
.withContext(EnvironmentExpander.merge(getContext().get(EnvironmentExpander.class),
@@ -131,9 +130,10 @@ private void doStart() throws Exception {
131130

132131
private static final class Overrider extends EnvironmentExpander {
133132

133+
@Serial
134134
private static final long serialVersionUID = 1;
135135

136-
private final Map<String, Secret> overrides = new HashMap<String, Secret>();
136+
private final Map<String, Secret> overrides = new HashMap<>();
137137

138138
Overrider(Map<String, String> overrides) {
139139
for (Map.Entry<String, String> override : overrides.entrySet()) {
@@ -167,9 +167,7 @@ public static final class DescriptorImpl extends StepDescriptor {
167167

168168
@Override
169169
public Set<? extends Class<?>> getRequiredContext() {
170-
return Collections
171-
.unmodifiableSet(
172-
new HashSet<>(Arrays.asList(TaskListener.class, Run.class, EnvVars.class)));
170+
return Set.of(TaskListener.class, Run.class, EnvVars.class);
173171
}
174172

175173
@Override

Diff for: src/main/java/com/datapipe/jenkins/vault/configuration/GlobalVaultConfiguration.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import net.sf.json.JSONObject;
1111
import org.jenkinsci.Symbol;
1212
import org.kohsuke.stapler.DataBoundSetter;
13-
import org.kohsuke.stapler.StaplerRequest;
13+
import org.kohsuke.stapler.StaplerRequest2;
1414

1515
@Extension
1616
@Symbol("hashicorpVault")
@@ -31,7 +31,7 @@ public VaultConfiguration getConfiguration() {
3131
}
3232

3333
@Override
34-
public boolean configure(StaplerRequest req, JSONObject json) throws FormException {
34+
public boolean configure(StaplerRequest2 req, JSONObject json) throws FormException {
3535
req.bindJSON(this, json);
3636
return true;
3737
}

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/VaultAppRoleCredential.java

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import hudson.util.Secret;
1010
import io.github.jopenlibs.vault.VaultException;
1111
import io.github.jopenlibs.vault.api.Auth;
12+
import java.io.Serial;
1213
import org.apache.commons.lang.StringUtils;
1314
import org.kohsuke.stapler.DataBoundConstructor;
1415

@@ -68,6 +69,7 @@ public String getDisplayName() {
6869

6970
}
7071

72+
@Serial
7173
protected Object readResolve() {
7274
if (StringUtils.isBlank(path)) {
7375
path = "approle";

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/VaultCredentialsProvider.java

+23-30
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,9 @@
1616
import hudson.model.ItemGroup;
1717
import hudson.security.ACL;
1818
import java.util.ArrayList;
19-
import java.util.Collections;
2019
import java.util.List;
2120
import jenkins.model.Jenkins;
22-
import org.acegisecurity.Authentication;
21+
import org.springframework.security.core.Authentication;
2322

2423
/**
2524
* This class provides the credentials that we need to authenticate against Vault
@@ -32,58 +31,52 @@
3231
public class VaultCredentialsProvider extends CredentialsProvider {
3332

3433
@Override
35-
public <C extends Credentials> List<C> getCredentials(Class<C> type, ItemGroup itemGroup, Authentication authentication) {
36-
return getCredentials(type, itemGroup, authentication, Collections.emptyList());
37-
}
38-
3934
@NonNull
40-
@Override
41-
public <C extends Credentials> List<C> getCredentials(@NonNull Class<C> type,
42-
@Nullable ItemGroup itemGroup,
43-
@Nullable Authentication authentication,
44-
@NonNull List<DomainRequirement> domainRequirements) {
35+
public <C extends Credentials> List<C> getCredentialsInItemGroup(@NonNull Class<C> type,
36+
@Nullable ItemGroup itemGroup,
37+
@Nullable Authentication authentication,
38+
@NonNull List<DomainRequirement> domainRequirements) {
4539
CredentialsMatcher matcher = (type != VaultCredential.class ?
46-
CredentialsMatchers.instanceOf(AbstractVaultBaseStandardCredentials.class) :
47-
CredentialsMatchers.always());
48-
List<C> creds = new ArrayList<C>();
49-
if (ACL.SYSTEM.equals(authentication)) {
50-
for (ItemGroup g = itemGroup; g instanceof AbstractFolder; g = (AbstractFolder.class.cast(g)).getParent()) {
40+
CredentialsMatchers.instanceOf(AbstractVaultBaseStandardCredentials.class) :
41+
CredentialsMatchers.always());
42+
List<C> creds = new ArrayList<>();
43+
if (ACL.SYSTEM2.equals(authentication)) {
44+
for (ItemGroup<?> g = itemGroup; g instanceof AbstractFolder; g = ((AbstractFolder<?>) g).getParent()) {
5145
FolderCredentialsProperty property = ((AbstractFolder<?>) g).getProperties()
52-
.get(FolderCredentialsProperty.class);
46+
.get(FolderCredentialsProperty.class);
5347
if (property == null) {
5448
continue;
5549
}
5650

5751
List<C> folderCreds = DomainCredentials.getCredentials(
58-
property.getDomainCredentialsMap(),
59-
type,
60-
domainRequirements,
61-
matcher
62-
);
52+
property.getDomainCredentialsMap(),
53+
type,
54+
domainRequirements,
55+
matcher
56+
);
6357

6458
if (type != VaultCredential.class) {
6559
for (C c : folderCreds) {
66-
((AbstractVaultBaseStandardCredentials)c).setContext(g);
60+
((AbstractVaultBaseStandardCredentials) c).setContext(g);
6761
}
6862
}
6963

7064
creds.addAll(folderCreds);
7165
}
7266

7367
List<C> globalCreds = DomainCredentials.getCredentials(
74-
SystemCredentialsProvider.getInstance().getDomainCredentialsMap(),
75-
type,
76-
domainRequirements,
77-
matcher
78-
);
68+
SystemCredentialsProvider.getInstance().getDomainCredentialsMap(),
69+
type,
70+
domainRequirements,
71+
matcher
72+
);
7973
if (type != VaultCredential.class) {
8074
for (C c : globalCreds) {
81-
((AbstractVaultBaseStandardCredentials)c).setContext(Jenkins.get());
75+
((AbstractVaultBaseStandardCredentials) c).setContext(Jenkins.get());
8276
}
8377
}
8478
creds.addAll(globalCreds);
8579
}
86-
8780
return creds;
8881
}
8982
}

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/common/VaultCertificateCredentialsBinding.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ public MultiEnvironment bind(@NonNull Run<?, ?> build, FilePath workspace, Launc
5555
FilePath keyStoreFile = keyStoreDir.getDirPath().child(String.format("keystore-%s", this.keyStoreVariable));
5656
credentials.write(keyStoreFile);
5757

58-
Map<String, String> map = new HashMap<String, String>();
58+
Map<String, String> map = new HashMap<>();
5959
map.put(this.keyStoreVariable, keyStoreFile.getRemote());
6060
map.put(this.passwordVariable, credentials.getPassword().getPlainText());
6161
return new MultiEnvironment(map);
@@ -71,7 +71,7 @@ public String getPasswordVariable() {
7171

7272
@Override
7373
public Set<String> variables() {
74-
Set<String> variables = new HashSet<String>();
74+
Set<String> variables = new HashSet<>();
7575
variables.add(this.keyStoreVariable);
7676
variables.add(this.passwordVariable);
7777
return variables;

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/common/VaultFileCredentialBinding.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import hudson.Extension;
44
import hudson.FilePath;
5-
import java.io.IOException;;
5+
import java.io.IOException;
66
import org.jenkinsci.Symbol;
77
import org.jenkinsci.plugins.credentialsbinding.BindingDescriptor;
88
import org.jenkinsci.plugins.credentialsbinding.impl.AbstractOnDiskBinding;

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/common/VaultFileCredentialImpl.java

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import hudson.util.ListBoxModel;
1010
import java.io.ByteArrayInputStream;
1111
import java.io.InputStream;
12+
import java.io.Serial;
1213
import java.nio.charset.StandardCharsets;
1314
import java.util.Map;
1415
import java.util.UUID;
@@ -28,6 +29,7 @@
2829

2930
public class VaultFileCredentialImpl extends AbstractVaultBaseStandardCredentials implements VaultFileCredential {
3031

32+
@Serial
3133
private static final long serialVersionUID = 1L;
3234

3335
private String fileName;

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/common/VaultHelper.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.cloudbees.plugins.credentials.CredentialsMatchers;
44
import com.cloudbees.plugins.credentials.CredentialsProvider;
55
import com.cloudbees.plugins.credentials.CredentialsUnavailableException;
6-
import com.cloudbees.plugins.credentials.domains.DomainRequirement;
76
import com.cloudbees.plugins.credentials.matchers.IdMatcher;
87
import com.datapipe.jenkins.vault.VaultAccessor;
98
import com.datapipe.jenkins.vault.configuration.VaultConfigResolver;
@@ -121,7 +120,7 @@ private static VaultCredential retrieveVaultCredentials(String id, ItemGroup<Ite
121120
.lookupCredentials(VaultCredential.class,
122121
itemGroup,
123122
ACL.SYSTEM,
124-
Collections.<DomainRequirement>emptyList());
123+
Collections.emptyList());
125124
VaultCredential credential = CredentialsMatchers
126125
.firstOrNull(credentials, new IdMatcher(id));
127126

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/common/VaultStringCredentialImpl.java

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import hudson.util.FormValidation;
1010
import hudson.util.ListBoxModel;
1111
import hudson.util.Secret;
12+
import java.io.Serial;
1213
import jenkins.model.Jenkins;
1314
import org.kohsuke.stapler.AncestorInPath;
1415
import org.kohsuke.stapler.DataBoundConstructor;
@@ -23,6 +24,7 @@ public class VaultStringCredentialImpl extends AbstractVaultBaseStandardCredenti
2324

2425
public static final String DEFAULT_VAULT_KEY = "secret";
2526

27+
@Serial
2628
private static final long serialVersionUID = 1L;
2729

2830
private String vaultKey;

Diff for: src/main/java/com/datapipe/jenkins/vault/credentials/common/VaultUsernamePasswordCredentialBinding.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public MultiEnvironment bind(@NonNull Run<?, ?> build, FilePath workspace, Launc
4949
TaskListener listener)
5050
throws IOException, InterruptedException {
5151
VaultUsernamePasswordCredential credentials = this.getCredentials(build);
52-
Map<String, String> map = new HashMap<String, String>();
52+
Map<String, String> map = new HashMap<>();
5353
map.put(this.usernameVariable, credentials.getUsername());
5454
map.put(this.passwordVariable, credentials.getPassword().getPlainText());
5555
return new MultiEnvironment(map);
@@ -65,7 +65,7 @@ public String getPasswordVariable() {
6565

6666
@Override
6767
public Set<String> variables() {
68-
Set<String> variables = new HashSet<String>();
68+
Set<String> variables = new HashSet<>();
6969
variables.add(this.usernameVariable);
7070
variables.add(this.passwordVariable);
7171
return variables;

Diff for: src/main/java/com/datapipe/jenkins/vault/jcasc/secrets/VaultSecretSource.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,8 @@ private void configureVault() {
6565

6666
// Parse variables
6767
Optional<String> vaultEngineVersionOpt = getVariable(CASC_VAULT_ENGINE_VERSION);
68-
Optional<String> vaultUrl = getVariable(CASC_VAULT_AGENT_ADDR)
69-
.map(Optional::of)
70-
.orElseGet(() -> getVariable(CASC_VAULT_URL));
68+
Optional<String> vaultUrl = getVariable(CASC_VAULT_AGENT_ADDR).or(
69+
() -> getVariable(CASC_VAULT_URL));
7170
Optional<String> vaultNamespace = getVariable(CASC_VAULT_NAMESPACE);
7271
Optional<String> vaultPrefixPath = getVariable(CASC_VAULT_PREFIX_PATH);
7372
Optional<String[]> vaultPaths = getCommaSeparatedVariables(CASC_VAULT_PATHS);
@@ -76,7 +75,7 @@ private void configureVault() {
7675
new Object[]{CASC_VAULT_PATH, CASC_VAULT_PATHS}));
7776

7877
// Check mandatory variables are set
79-
if (!vaultUrl.isPresent() || !vaultPaths.isPresent()) return;
78+
if (vaultUrl.isEmpty() || vaultPaths.isEmpty()) return;
8079

8180
if (getVariable(CASC_VAULT_AGENT_ADDR).isPresent()) usingVaultAgent = true;
8281

@@ -186,7 +185,7 @@ private void readSecretsFromVault() {
186185
// Parse secrets
187186
for (String vaultPath : vaultPathsOpt.get()) {
188187
Map<String, String> nextSecrets = vault.logical().read(vaultPath).getData();
189-
Map<String, String> nextSecretsFullPath = new HashMap<String, String>();
188+
Map<String, String> nextSecretsFullPath = new HashMap<>();
190189
// create item where key is full path to secret
191190
for (Map.Entry<String, String> secretEntry : nextSecrets.entrySet()) {
192191
nextSecretsFullPath.put(vaultPath + "/" + secretEntry.getKey(), secretEntry.getValue());

Diff for: src/main/java/com/datapipe/jenkins/vault/log/MaskingConsoleLogFilter.java

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import hudson.model.Run;
55
import java.io.IOException;
66
import java.io.OutputStream;
7+
import java.io.Serial;
78
import java.io.Serializable;
89
import java.util.ArrayList;
910
import java.util.List;
@@ -16,6 +17,7 @@
1617
public class MaskingConsoleLogFilter extends ConsoleLogFilter
1718
implements Serializable {
1819

20+
@Serial
1921
private static final long serialVersionUID = 1L;
2022

2123
private final String charsetName;

0 commit comments

Comments
 (0)