com.liferay.jenkins.results.parser.GitHubRemoteGitCommit Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of com.liferay.jenkins.results.parser
Show all versions of com.liferay.jenkins.results.parser
Liferay Jenkins Results Parser
/**
* SPDX-FileCopyrightText: (c) 2000 Liferay, Inc. https://liferay.com
* SPDX-License-Identifier: LGPL-2.1-or-later OR LicenseRef-Liferay-DXP-EULA-2.0.0-2023-06
*/
package com.liferay.jenkins.results.parser;
import com.atlassian.jira.rest.client.api.domain.Issue;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
import org.json.JSONObject;
/**
* @author Michael Hashimoto
*/
public class GitHubRemoteGitCommit extends BaseGitCommit {
public String getGitHubCommitURL() {
return JenkinsResultsParserUtil.combine(
"https://github.com/", _gitHubUsername, "/", getGitRepositoryName(),
"/commit/", getSHA());
}
public Issue getJIRAIssue() {
Matcher matcher = _messagePattern.matcher(getMessage());
if (matcher.find()) {
String issueKey = matcher.group("jiraIssueKey");
return JIRAUtil.getIssue(issueKey);
}
return null;
}
public List getModifiedFilenames() {
if (modifiedFilenames == null) {
init();
}
return modifiedFilenames;
}
public List getStatusDescriptions() {
try {
JSONObject jsonObject = JenkinsResultsParserUtil.toJSONObject(
getGitHubStatusURL());
JSONArray statusesJSONArray = jsonObject.getJSONArray("statuses");
List statusDescriptions = new ArrayList<>(
statusesJSONArray.length());
for (int i = 0; i < statusesJSONArray.length(); i++) {
JSONObject statusJSONObject = statusesJSONArray.getJSONObject(
i);
statusDescriptions.add(
statusJSONObject.optString("description"));
}
return statusDescriptions;
}
catch (IOException ioException) {
throw new RuntimeException(
"Unable to get status data", ioException);
}
}
public void setStatus(
Status status, String context, String description, String targetURL) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("state", StringUtils.lowerCase(status.toString()));
if (context != null) {
jsonObject.put("context", context);
}
if (description != null) {
jsonObject.put("description", description);
}
if ((targetURL != null) && targetURL.matches("https?\\:\\/\\/.*")) {
jsonObject.put("target_url", targetURL);
}
try {
JenkinsResultsParserUtil.toJSONObject(
getGitHubStatusURL(), jsonObject.toString());
}
catch (IOException ioException) {
throw new RuntimeException(ioException);
}
}
public enum Status {
ERROR, FAILURE, PENDING, SUCCESS
}
protected GitHubRemoteGitCommit(
String emailAddress, String gitHubUsername, String gitRepositoryName,
String message, List modifiedFilenames, String sha, Type type,
long commitTime) {
super(emailAddress, gitRepositoryName, message, sha, type, commitTime);
_gitHubUsername = gitHubUsername;
this.modifiedFilenames = modifiedFilenames;
}
protected GitHubRemoteGitCommit(
String gitHubUsername, String gitRepositoryName, String sha,
Type type) {
super(gitRepositoryName, sha, type);
_gitHubUsername = gitHubUsername;
}
protected String getGitHubStatusURL() {
return JenkinsResultsParserUtil.getGitHubApiUrl(
getGitRepositoryName(), _gitHubUsername, "statuses/" + getSHA());
}
protected void init() {
try {
JSONObject jsonObject = JenkinsResultsParserUtil.toJSONObject(
getGitHubCommitURL(), false);
JSONObject commitJSONObject = jsonObject.getJSONObject("commit");
message = commitJSONObject.getString("message");
JSONObject committerJSONObject = commitJSONObject.getJSONObject(
"committer");
modifiedFilenames = Collections.emptyList();
JSONArray filesJSONArray = jsonObject.getJSONArray("files");
if (filesJSONArray != null) {
modifiedFilenames = new ArrayList<>(filesJSONArray.length());
for (int i = 0; i < filesJSONArray.length(); i++) {
JSONObject fileJSONObject = filesJSONArray.getJSONObject(i);
modifiedFilenames.add(fileJSONObject.getString("filename"));
}
}
try {
DateFormat gitHubDateFormat =
JenkinsResultsParserUtil.getGitHubDateFormat();
Date commitDate = gitHubDateFormat.parse(
committerJSONObject.getString("date"));
commitTime = commitDate.getTime();
}
catch (ParseException parseException) {
throw new RuntimeException(
"Unable to parse committer date " +
committerJSONObject.getString("date"),
parseException);
}
}
catch (IOException ioException) {
throw new RuntimeException(
"Unable to get GitHub API JSON for commit " + getSHA(),
ioException);
}
}
@Override
protected void initCommitTime() {
init();
}
@Override
protected void initEmailAddress() {
init();
}
@Override
protected void initMessage() {
init();
}
protected List modifiedFilenames;
private static final Pattern _messagePattern = Pattern.compile(
"^(?[A-Z]+[-][\\d]+)\\s*(?.*)");
private final String _gitHubUsername;
}