Skip to content

Commit

Permalink
add git data
Browse files Browse the repository at this point in the history
  • Loading branch information
dicko2 committed Sep 19, 2024
1 parent d5a4294 commit 19a1aaa
Showing 1 changed file with 95 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.ObjectNode;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
Expand All @@ -18,6 +20,7 @@
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;

public abstract class LocalCollectionTestRunListener extends RunListener {
private final String apiEndpoint;
Expand Down Expand Up @@ -92,7 +95,14 @@ public void testRunFinished(Result result) throws Exception {
rootNode.put("os", System.getProperty("os.name"));
rootNode.put("projectName", System.getProperty("user.dir").substring(System.getProperty("user.dir").lastIndexOf('/') + 1));
rootNode.put("isDebuggerAttached", java.lang.management.ManagementFactory.getRuntimeMXBean().getInputArguments().toString().indexOf("-agentlib:jdwp") > 0);


// Add Git-related information
GitContext gitContext = getGitContext();
rootNode.put("branch", gitContext.getBranchName());
rootNode.put("projectName", gitContext.getRepositoryName());
rootNode.put("repository", gitContext.getRepositoryUrl());
rootNode.put("repositoryName", gitContext.getRepositoryName());

ArrayNode testCasesArray = rootNode.putArray("jUnitTestCases");
for (TestCaseInfo testCase : testCases.values()) {
ObjectNode testCaseNode = testCasesArray.addObject();
Expand Down Expand Up @@ -124,6 +134,64 @@ public void testRunFinished(Result result) throws Exception {
}
}

private GitContext getGitContext() throws GitContextException {
String url = runGitCommand("config --get remote.origin.url");
String branch = System.getenv("CI_COMMIT_REF_NAME");
if (branch == null || branch.isEmpty()) {
branch = runGitCommand("rev-parse --abbrev-ref HEAD");
}

if (url == null || url.isEmpty()) {
throw new GitContextException("Unable to get git remote url.");
}
if (branch == null || branch.isEmpty()) {
throw new GitContextException("Unable to get git branch.");
}

String cleanUrl = cleanGitlabCIToken(url);
return new GitContext(cleanUrl, getRepositoryNameFromUrl(cleanUrl), branch);
}

private String runGitCommand(String args) {
try {
String[] cmdArray = new String[]{"git"};
String[] argsArray = args.split("\\s+");
String[] fullCommand = new String[cmdArray.length + argsArray.length];
System.arraycopy(cmdArray, 0, fullCommand, 0, cmdArray.length);
System.arraycopy(argsArray, 0, fullCommand, cmdArray.length, argsArray.length);

ProcessBuilder processBuilder = new ProcessBuilder(fullCommand);
processBuilder.redirectErrorStream(true);
Process process = processBuilder.start();

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String result = reader.readLine();

if (!process.waitFor(10, TimeUnit.SECONDS)) {
process.destroyForcibly();
throw new GitContextException("Git command timed out");
}

return result;
} catch (Exception e) {
throw new GitContextException("Failed to run git command: " + args, e);
}
}

private String getRepositoryNameFromUrl(String url) {
String repositoryName = url.substring(url.lastIndexOf('/') + 1);
return repositoryName.endsWith(".git")
? repositoryName.substring(0, repositoryName.lastIndexOf('.'))
: repositoryName;
}

private String cleanGitlabCIToken(String url) {
if (url.contains("@") && url.startsWith("https")) {
return "https://" + url.split("@")[1];
}
return url;
}

protected HttpClient createHttpClient(){
return HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build();
};
Expand Down Expand Up @@ -155,4 +223,30 @@ private static class TestCaseInfo {
this.duration = 0;
}
}

private static class GitContext {
private final String repositoryUrl;
private final String repositoryName;
private final String branchName;

public GitContext(String repositoryUrl, String repositoryName, String branchName) {
this.repositoryUrl = repositoryUrl;
this.repositoryName = repositoryName;
this.branchName = branchName;
}

public String getRepositoryUrl() { return repositoryUrl; }
public String getRepositoryName() { return repositoryName; }
public String getBranchName() { return branchName; }
}

private static class GitContextException extends RuntimeException {
public GitContextException(String message) {
super(message);
}

public GitContextException(String message, Throwable cause) {
super(message, cause);
}
}
}

0 comments on commit 19a1aaa

Please sign in to comment.