/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.jenkins.results.parser;
import java.io.File;
import org.apache.tools.ant.Project;
/**
* @author Leslie Wong
*/
public class SubrepositoryGitHubMessageUtil {
public static void getGitHubMessage(Project project) throws Exception {
StringBuilder sb = new StringBuilder();
sb.append("<h1>");
sb.append(project.getProperty("top.level.result.message"));
sb.append("</h1>");
sb.append("<p>Build Time: ");
sb.append(project.getProperty("top.level.build.time"));
sb.append("</p>");
String rebaseBranchGitCommit = project.getProperty(
"rebase.branch.git.commit");
if (!rebaseBranchGitCommit.equals("")) {
sb.append("<h4>Base Branch:</h4>");
sb.append("<p>Branch Name: ");
sb.append("<a href=\"https://github.com/liferay/");
sb.append(project.getProperty("repository"));
sb.append("/tree/");
sb.append(project.getProperty("branch.name"));
sb.append("\">");
sb.append(project.getProperty("branch.name"));
sb.append("</a><br />");
sb.append("Branch GIT ID: <a href=\"https://github.com/liferay/");
sb.append(project.getProperty("repository"));
sb.append("/commit/");
sb.append(rebaseBranchGitCommit);
sb.append("\">");
sb.append(rebaseBranchGitCommit);
sb.append("</a></p>");
}
String buildURL = project.getProperty("build.url");
String console = JenkinsResultsParserUtil.toString(
JenkinsResultsParserUtil.getLocalURL(
buildURL + "/logText/progressiveText"),
false);
String[] consoleSnippets = console.split(
"Executing subrepository task ");
if (consoleSnippets.length > 1) {
sb.append("<h4>Task Summary:</h4>");
sb.append("<ul>");
for (int i = 1; i < consoleSnippets.length; i++) {
sb.append("<li><strong><a href=\"");
sb.append(project.getProperty("top.level.user.content.url"));
sb.append("/");
String consoleSnippet = consoleSnippets[i];
String taskName = consoleSnippet.substring(
0, consoleSnippet.indexOf("\n"));
sb.append(taskName);
sb.append(".log");
sb.append("\">");
sb.append(taskName);
sb.append("</a></strong> ");
sb.append("- ");
SubrepositoryTask subrepositoryTask = _getSubrepositoryTask(
project, buildURL, consoleSnippet);
sb.append(_getResult(subrepositoryTask));
sb.append("</li>");
String taskFileName = taskName + ".log";
String topLevelMasterHostname = project.getProperty(
"env.TOP_LEVEL_MASTER_HOSTNAME");
File taskLogFile = new File(taskFileName);
JenkinsResultsParserUtil.write(taskLogFile, consoleSnippet);
String targetDirPath = JenkinsResultsParserUtil.combine(
"jobs/", project.getProperty("env.TOP_LEVEL_JOB_NAME"),
"/builds/",
project.getProperty("env.TOP_LEVEL_BUILD_NUMBER"));
String makeDirCommand = JenkinsResultsParserUtil.combine(
"ssh -o PasswordAuthentication=no ", topLevelMasterHostname,
" 'mkdir -p /opt/java/jenkins/userContent/", targetDirPath,
"'");
String rsyncCommand = JenkinsResultsParserUtil.combine(
"rsync -avz --chmod=go=rx ", taskLogFile.getCanonicalPath(),
" ", topLevelMasterHostname, "::usercontent/",
targetDirPath, "/", taskFileName);
JenkinsResultsParserUtil.executeBashCommands(
new String[] {
_escapeParentheses(makeDirCommand),
_escapeParentheses(rsyncCommand)
});
taskLogFile.delete();
}
sb.append("</ul>");
}
else {
sb.append(FailureMessageUtil.getFailureMessage(project, buildURL));
}
sb.append("<h5>For more details click <a href=\"");
sb.append(buildURL);
sb.append("\">here</a>.</h5>");
project.setProperty("report.html.content", sb.toString());
}
private static String _escapeParentheses(String command) {
command = command.replace(")", "\\)");
command = command.replace("(", "\\(");
return command;
}
private static String _getResult(SubrepositoryTask subrepositoryTask)
throws Exception {
String result = subrepositoryTask.getResult();
if (result.equals("SUCCESS")) {
return " :white_check_mark:";
}
if (result.equals("ABORTED")) {
return " :no_entry:" + subrepositoryTask.getGitHubMessage();
}
if (result.equals("FAILURE")) {
return " :x:" + subrepositoryTask.getGitHubMessage();
}
return "";
}
private static SubrepositoryTask _getSubrepositoryTask(
Project project, String buildURL, String console)
throws Exception {
if (console.contains(
"A report with all the test results can be found at " +
"test-results/html/index.html")) {
return new SubrepositoryTaskReport(project, buildURL);
}
else {
return new SubrepositoryTaskNoReport(console);
}
}
}