Skip to content

Commit

Permalink
[JENKINS-73344] Adapt GitLab for Jetty 12 (EE 9) (#1665)
Browse files Browse the repository at this point in the history
Co-authored-by: Kris Stern <krisstern@outlook.com>
  • Loading branch information
basil and krisstern authored Sep 4, 2024
1 parent afcb708 commit 0113160
Show file tree
Hide file tree
Showing 21 changed files with 93 additions and 85 deletions.
13 changes: 10 additions & 3 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -54,15 +54,16 @@
<changelist>-SNAPSHOT</changelist>
<jenkins.baseline>2.462</jenkins.baseline>
<!-- <jenkins.version>${jenkins.baseline}.3</jenkins.version> -->
<!-- TODO: Remove when 2.472 is available in LTS -->
<jenkins.version>2.472</jenkins.version>
<!-- TODO: Remove when 2.475 is available in LTS -->
<jenkins.version>2.475</jenkins.version>
<spotbugs.effort>Max</spotbugs.effort>
<spotbugs.threshold>Low</spotbugs.threshold>
<gitHubRepo>jenkinsci/${project.artifactId}</gitHubRepo>
<hpi.compatibleSinceVersion>1.4.0</hpi.compatibleSinceVersion>
<mockserver.version>5.15.0</mockserver.version>
<spotless.check.skip>false</spotless.check.skip>
<jenkins-test-harness.version>2250.v03a_1295b_0a_30</jenkins-test-harness.version>
<!-- TODO JENKINS-73339 until in parent POM -->
<jenkins-test-harness.version>2265.v3da_49c8134d6</jenkins-test-harness.version>
<maven.compiler.release>17</maven.compiler.release>
</properties>

Expand All @@ -76,6 +77,12 @@
<type>pom</type>
<scope>import</scope>
</dependency>
<!-- TODO JENKINS-73339 until in parent POM, work around https://github.com/jenkinsci/plugin-pom/issues/936 -->
<dependency>
<groupId>jakarta.servlet</groupId>
<artifactId>jakarta.servlet-api</artifactId>
<version>5.0.0</version>
</dependency>
</dependencies>
</dependencyManagement>

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,8 @@
import org.kohsuke.stapler.DataBoundSetter;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.Stapler;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerRequest2;
import org.kohsuke.stapler.StaplerResponse2;

/**
* Triggers a build when we receive a GitLab WebHook.
Expand Down Expand Up @@ -681,7 +681,7 @@ private StringBuilder retrieveParentUrl(Item item) {
}

private Job<?, ?> retrieveCurrentJob() {
StaplerRequest request = Stapler.getCurrentRequest();
StaplerRequest2 request = Stapler.getCurrentRequest2();
if (request != null) {
Ancestor ancestor = request.findAncestor(Job.class);
return ancestor == null ? null : (Job<?, ?>) ancestor.getObject();
Expand All @@ -690,7 +690,7 @@ private StringBuilder retrieveParentUrl(Item item) {
}

@Override
public boolean configure(StaplerRequest req, JSONObject formData) throws FormException {
public boolean configure(StaplerRequest2 req, JSONObject formData) throws FormException {
save();
return super.configure(req, formData);
}
Expand Down Expand Up @@ -746,14 +746,14 @@ public FormValidation doCheckExcludeMergeRequestLabels(
return ProjectLabelsProvider.instance().doCheckLabels(project, value);
}

public void doGenerateSecretToken(@AncestorInPath final Job<?, ?> project, StaplerResponse response) {
public void doGenerateSecretToken(@AncestorInPath final Job<?, ?> project, StaplerResponse2 response) {
byte[] random = new byte[16]; // 16x8=128bit worth of randomness, since we use md5 digest as the API token
RANDOM.nextBytes(random);
String secretToken = Util.toHexString(random);
response.setHeader("script", "document.getElementById('secretToken').value='" + secretToken + "'");
}

public void doClearSecretToken(@AncestorInPath final Job<?, ?> project, StaplerResponse response) {
public void doClearSecretToken(@AncestorInPath final Job<?, ?> project, StaplerResponse2 response) {
;
response.setHeader("script", "document.getElementById('secretToken').value=''");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
import org.kohsuke.stapler.DataBoundConstructor;
import org.kohsuke.stapler.DataBoundSetter;
import org.kohsuke.stapler.QueryParameter;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerRequest2;
import org.kohsuke.stapler.interceptor.RequirePOST;

/**
Expand Down Expand Up @@ -109,11 +109,11 @@ public boolean isApplicable(Class<? extends Job> jobType) {
}

@Override
public JobProperty<?> newInstance(StaplerRequest req, JSONObject formData) throws FormException {
public JobProperty<?> newInstance(StaplerRequest2 req, JSONObject formData) throws FormException {
if (req != null) {
return req.bindJSON(GitLabConnectionProperty.class, formData);
} else {
throw new IllegalArgumentException("StaplerRequest 'req' cannot be null.");
throw new IllegalArgumentException("StaplerRequest2 'req' cannot be null.");

Check warning on line 116 in src/main/java/com/dabsquared/gitlabjenkins/connection/GitLabConnectionProperty.java

View check run for this annotation

ci.jenkins.io / Code Coverage

Not covered line

Line 116 is not covered by tests
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@
import jenkins.model.Jenkins;
import jenkins.scm.api.SCMSourceOwner;
import org.apache.commons.io.IOUtils;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerRequest2;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Robin Müller
Expand All @@ -44,7 +44,7 @@ public class ActionResolver {
private static final Pattern COMMIT_STATUS_PATTERN =
Pattern.compile("^(refs/[^/]+/)?(commits|builds)/(?<sha1>[0-9a-fA-F]+)(?<statusJson>/status.json)?$");

public WebHookAction resolve(final String projectName, StaplerRequest request) {
public WebHookAction resolve(final String projectName, StaplerRequest2 request) {
Iterator<String> restOfPathParts = Arrays.stream(request.getRestOfPath().split("/"))
.filter(s -> !s.isEmpty())
.iterator();
Expand All @@ -59,7 +59,7 @@ public WebHookAction resolve(final String projectName, StaplerRequest request) {
return resolveAction(project, restOfPath.toString(), request);
}

private WebHookAction resolveAction(Item project, String restOfPath, StaplerRequest request) {
private WebHookAction resolveAction(Item project, String restOfPath, StaplerRequest2 request) {
String method = request.getMethod();
if (method.equals("POST")) {
return onPost(project, request);
Expand All @@ -75,7 +75,7 @@ private WebHookAction resolveAction(Item project, String restOfPath, StaplerRequ
return new NoopAction();
}

private WebHookAction onGet(Job<?, ?> project, String restOfPath, StaplerRequest request) {
private WebHookAction onGet(Job<?, ?> project, String restOfPath, StaplerRequest2 request) {
Matcher commitMatcher = COMMIT_STATUS_PATTERN.matcher(restOfPath);
if (restOfPath.isEmpty() && request.hasParameter("ref")) {
return new BranchBuildPageRedirectAction(project, request.getParameter("ref"));
Expand All @@ -96,15 +96,15 @@ private WebHookAction onGetCommitStatus(Job<?, ?> project, String sha1, String s
}
}

private WebHookAction onGetStatusPng(Job<?, ?> project, StaplerRequest request) {
private WebHookAction onGetStatusPng(Job<?, ?> project, StaplerRequest2 request) {
if (request.hasParameter("ref")) {
return new BranchStatusPngAction(project, request.getParameter("ref"));
} else {
return new CommitStatusPngAction(project, request.getParameter("sha1"));
}
}

private WebHookAction onPost(Item project, StaplerRequest request) {
private WebHookAction onPost(Item project, StaplerRequest2 request) {
String eventHeader = request.getHeader("X-Gitlab-Event");
if (eventHeader == null) {
LOGGER.log(Level.FINE, "Missing X-Gitlab-Event header");
Expand Down Expand Up @@ -156,7 +156,7 @@ private WebHookAction onSystemHook(Item project, String requestBody, String toke
}
}

private String getRequestBody(StaplerRequest request) {
private String getRequestBody(StaplerRequest2 request) {
String requestBody;
try {
Charset charset =
Expand Down Expand Up @@ -190,6 +190,6 @@ public Item invoke() {
}

static class NoopAction implements WebHookAction {
public void execute(StaplerResponse response) {}
public void execute(StaplerResponse2 response) {}

Check warning on line 193 in src/main/java/com/dabsquared/gitlabjenkins/webhook/ActionResolver.java

View check run for this annotation

ci.jenkins.io / Code Coverage

Not covered line

Line 193 is not covered by tests
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@
import hudson.Extension;
import hudson.model.UnprotectedRootAction;
import hudson.security.csrf.CrumbExclusion;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerRequest2;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Daniel Brooks
Expand All @@ -37,7 +37,7 @@ public String getUrlName() {
return WEBHOOK_URL;
}

public void getDynamic(final String projectName, final StaplerRequest request, StaplerResponse response) {
public void getDynamic(final String projectName, final StaplerRequest2 request, StaplerResponse2 response) {
LOGGER.log(Level.INFO, "WebHook called with url: {0}", request.getRequestURIWithQueryString());
actionResolver.resolve(projectName, request).execute(response);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
package com.dabsquared.gitlabjenkins.webhook;

import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Robin Müller
*/
public interface WebHookAction {
void execute(StaplerResponse response);
void execute(StaplerResponse2 response);
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
import jenkins.model.Jenkins;
import org.acegisecurity.Authentication;
import org.apache.commons.lang.StringUtils;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Xinran Xiao
Expand All @@ -29,7 +29,7 @@ abstract class BuildWebHookAction implements WebHookAction {

abstract void execute();

public final void execute(StaplerResponse response) {
public final void execute(StaplerResponse2 response) {
processForCompatibility();
execute();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
import java.util.logging.Level;
import java.util.logging.Logger;
import jenkins.model.Jenkins;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Nikolay Ustinov
Expand Down Expand Up @@ -46,7 +46,7 @@ public NoteBuildAction(Item project, JsonNode json, String secretToken) {
this.secretToken = secretToken;
}

public void execute(StaplerResponse response) {
public void execute(StaplerResponse2 response) {
if (!(project instanceof Job<?, ?>)) {
throw HttpResponses.errorWithoutStack(409, "Note Hook is not supported for this project");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
import java.io.IOException;
import java.util.Objects;
import jenkins.model.Jenkins;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Robin Müller
Expand All @@ -19,7 +19,7 @@ protected BuildPageRedirectAction(Run<?, ?> build) {
this.build = build;
}

public void execute(StaplerResponse response) {
public void execute(StaplerResponse2 response) {
if (build != null) {
try {
response.sendRedirect2(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
import hudson.scm.SCM;
import hudson.util.HttpResponses;
import jenkins.triggers.SCMTriggerItem;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Robin Müller
Expand All @@ -23,15 +23,15 @@ protected BuildStatusAction(Job<?, ?> project, Run<?, ?> build) {
this.build = build;
}

public void execute(StaplerResponse response) {
public void execute(StaplerResponse2 response) {
SCMTriggerItem item = SCMTriggerItem.SCMTriggerItems.asSCMTriggerItem(project);
if (!hasGitSCM(item)) {
throw HttpResponses.error(409, "The project has no GitSCM configured");
}
writeStatusBody(response, build, getStatus(build));
}

protected abstract void writeStatusBody(StaplerResponse response, Run<?, ?> build, BuildStatus status);
protected abstract void writeStatusBody(StaplerResponse2 response, Run<?, ?> build, BuildStatus status);

private boolean hasGitSCM(SCMTriggerItem item) {
if (item != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
import java.io.IOException;
import java.io.PrintWriter;
import net.sf.json.JSONObject;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Robin Müller
Expand All @@ -22,7 +22,7 @@ public StatusJsonAction(Job<?, ?> project, String sha1) {
}

@Override
protected void writeStatusBody(StaplerResponse response, Run<?, ?> build, BuildStatus status) {
protected void writeStatusBody(StaplerResponse2 response, Run<?, ?> build, BuildStatus status) {
try {
JSONObject object = new JSONObject();
object.put("sha", sha1);
Expand All @@ -36,7 +36,7 @@ protected void writeStatusBody(StaplerResponse response, Run<?, ?> build, BuildS
}
}

private void writeBody(StaplerResponse response, JSONObject body) throws IOException {
private void writeBody(StaplerResponse2 response, JSONObject body) throws IOException {
response.setContentType("application/json");
PrintWriter writer = response.getWriter();
writer.write(body.toString());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
import hudson.util.HttpResponses;
import java.io.InputStream;
import org.apache.commons.io.IOUtils;
import org.kohsuke.stapler.StaplerResponse;
import org.kohsuke.stapler.StaplerResponse2;

/**
* @author Robin Müller
Expand All @@ -16,7 +16,7 @@ protected StatusPngAction(Job<?, ?> project, Run<?, ?> build) {
}

@Override
protected void writeStatusBody(StaplerResponse response, Run<?, ?> build, BuildStatus status) {
protected void writeStatusBody(StaplerResponse2 response, Run<?, ?> build, BuildStatus status) {
try {
response.setHeader("Expires", "Fri, 01 Jan 1984 00:00:00 GMT");
response.setHeader("Cache-Control", "no-cache, private");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,15 +13,15 @@
import com.dabsquared.gitlabjenkins.webhook.status.CommitBuildPageRedirectAction;
import com.dabsquared.gitlabjenkins.webhook.status.CommitStatusPngAction;
import com.dabsquared.gitlabjenkins.webhook.status.StatusJsonAction;
import jakarta.servlet.ReadListener;
import jakarta.servlet.ServletInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.jvnet.hudson.test.JenkinsRule;
import org.kohsuke.stapler.StaplerRequest;
import org.kohsuke.stapler.StaplerRequest2;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;

Expand All @@ -35,7 +35,7 @@ public class ActionResolverTest {
public static JenkinsRule jenkins = new JenkinsRule();

@Mock
private StaplerRequest request;
private StaplerRequest2 request;

@Test
public void getBranchBuildPageRedirect() throws IOException {
Expand Down
Loading

0 comments on commit 0113160

Please sign in to comment.