feat: Add endpoint to retrieve clone roots in McpHelperResource (OD-2567)

This commit is contained in:
Robin Shen 2025-09-28 10:17:12 +08:00
parent 7eee7de067
commit 0c85caedfa
2 changed files with 27 additions and 2 deletions

View File

@ -87,7 +87,7 @@ public class SystemSetting implements Serializable, Validatable {
} }
@Nullable @Nullable
private static String deriveSshRootUrl(@Nullable String serverUrl) { public static String deriveSshRootUrl(@Nullable String serverUrl) {
if (serverUrl != null) { if (serverUrl != null) {
try { try {
URL url = new URL(serverUrl); URL url = new URL(serverUrl);

View File

@ -47,6 +47,7 @@ import com.google.common.base.Splitter;
import com.google.common.base.Throwables; import com.google.common.base.Throwables;
import io.onedev.commons.utils.StringUtils; import io.onedev.commons.utils.StringUtils;
import io.onedev.server.ServerConfig;
import io.onedev.server.SubscriptionManager; import io.onedev.server.SubscriptionManager;
import io.onedev.server.buildspec.BuildSpec; import io.onedev.server.buildspec.BuildSpec;
import io.onedev.server.data.migration.VersionedYamlDoc; import io.onedev.server.data.migration.VersionedYamlDoc;
@ -94,6 +95,7 @@ import io.onedev.server.model.PullRequestComment;
import io.onedev.server.model.PullRequestReview; import io.onedev.server.model.PullRequestReview;
import io.onedev.server.model.PullRequestUpdate; import io.onedev.server.model.PullRequestUpdate;
import io.onedev.server.model.User; import io.onedev.server.model.User;
import io.onedev.server.model.support.administration.SystemSetting;
import io.onedev.server.model.support.issue.field.FieldUtils; import io.onedev.server.model.support.issue.field.FieldUtils;
import io.onedev.server.model.support.issue.field.spec.BooleanField; import io.onedev.server.model.support.issue.field.spec.BooleanField;
import io.onedev.server.model.support.issue.field.spec.DateField; import io.onedev.server.model.support.issue.field.spec.DateField;
@ -179,6 +181,8 @@ public class McpHelperResource {
private final Validator validator; private final Validator validator;
private final ServerConfig serverConfig;
@Inject @Inject
public McpHelperResource(ObjectMapper objectMapper, SettingManager settingManager, public McpHelperResource(ObjectMapper objectMapper, SettingManager settingManager,
UserManager userManager, IssueManager issueManager, ProjectManager projectManager, UserManager userManager, IssueManager issueManager, ProjectManager projectManager,
@ -191,7 +195,8 @@ public class McpHelperResource {
PullRequestAssignmentManager pullRequestAssignmentManager, PullRequestAssignmentManager pullRequestAssignmentManager,
PullRequestLabelManager pullRequestLabelManager, UrlManager urlManager, PullRequestLabelManager pullRequestLabelManager, UrlManager urlManager,
PullRequestCommentManager pullRequestCommentManager, BuildManager buildManager, PullRequestCommentManager pullRequestCommentManager, BuildManager buildManager,
BuildParamManager buildParamManager, JobManager jobManager, Validator validator) { BuildParamManager buildParamManager, JobManager jobManager, Validator validator,
ServerConfig serverConfig) {
this.objectMapper = objectMapper; this.objectMapper = objectMapper;
this.settingManager = settingManager; this.settingManager = settingManager;
this.issueManager = issueManager; this.issueManager = issueManager;
@ -217,6 +222,7 @@ public class McpHelperResource {
this.buildParamManager = buildParamManager; this.buildParamManager = buildParamManager;
this.jobManager = jobManager; this.jobManager = jobManager;
this.validator = validator; this.validator = validator;
this.serverConfig = serverConfig;
} }
private String getIssueQueryStringDescription() { private String getIssueQueryStringDescription() {
@ -2133,6 +2139,25 @@ public class McpHelperResource {
return buildMap; return buildMap;
} }
@Path("/get-clone-roots")
@GET
public Map<String, String> getCloneUrl() {
if (SecurityUtils.getAuthUser() == null)
throw new UnauthenticatedException();
var cloneRoots = new HashMap<String, String>();
var systemSetting = settingManager.getSystemSetting();
var serverUrl = systemSetting.getServerUrl();
cloneRoots.put("http", serverUrl);
if (serverConfig.getSshPort() != 0) {
var sshRootUrl = systemSetting.getSshRootUrl();
if (sshRootUrl == null)
sshRootUrl = SystemSetting.deriveSshRootUrl(serverUrl);
cloneRoots.put("ssh", sshRootUrl);
}
return cloneRoots;
}
@Path("/check-build-spec") @Path("/check-build-spec")
@POST @POST
@Consumes(MediaType.TEXT_PLAIN) @Consumes(MediaType.TEXT_PLAIN)