diff --git a/src/main/java/se/kth/explaining/CompilationErrorTemplate.java b/src/main/java/se/kth/explaining/CompilationErrorTemplate.java index a86baa9..ba11f00 100644 --- a/src/main/java/se/kth/explaining/CompilationErrorTemplate.java +++ b/src/main/java/se/kth/explaining/CompilationErrorTemplate.java @@ -29,7 +29,7 @@ public String clientError() { public String logLine() { return ("2. The failure is identified from the logs generated in the build process\n " + "\n" + - ">%s.").formatted(breakingChange.getErrorInfo().getErrorInfo().getErrorMessage()); + ">[%s](%s)").formatted(breakingChange.getErrorInfo().getErrorInfo().getErrorMessage(), breakingChange.getErrorInfo().getErrorInfo().getErrorLogGithubLink()); } @Override diff --git a/src/main/java/se/kth/log_Analyzer/MavenErrorLog.java b/src/main/java/se/kth/log_Analyzer/MavenErrorLog.java index 7befb30..b503528 100644 --- a/src/main/java/se/kth/log_Analyzer/MavenErrorLog.java +++ b/src/main/java/se/kth/log_Analyzer/MavenErrorLog.java @@ -38,12 +38,16 @@ public static class ErrorInfo { String errorMessage; String clientLineContent; String clientGithubLink; + int errorLinePositionInFile; + String errorLogGithubLink; - public ErrorInfo(String clientLinePosition, String clientFilePath, String errorMessage) { + public ErrorInfo(String clientLinePosition, String clientFilePath, String errorMessage, int errorLinePositionInFile) { this.clientLinePosition = clientLinePosition; this.clientFilePath = clientFilePath; this.errorMessage = errorMessage; this.clientLineContent = ""; + this.errorLinePositionInFile = errorLinePositionInFile; + } public ErrorInfo(String clientLinePosition, String clientFilePath, String errorMessage, String clientLineContent) { @@ -53,12 +57,13 @@ public ErrorInfo(String clientLinePosition, String clientFilePath, String errorM this.clientLineContent = clientLineContent; } - public ErrorInfo(String clientLinePosition, String clientFilePath, String errorMessage, String clientLineContent, String clientGithubLink) { + public ErrorInfo(String clientLinePosition, String clientFilePath, String errorMessage, String clientLineContent, String clientGithubLink, int errorLinePositionInFile) { this.clientLinePosition = clientLinePosition; this.clientFilePath = clientFilePath; this.errorMessage = errorMessage; this.clientLineContent = clientLineContent; this.clientGithubLink = clientGithubLink; + this.errorLinePositionInFile = errorLinePositionInFile; } @Override diff --git a/src/main/java/se/kth/log_Analyzer/MavenLogAnalyzer.java b/src/main/java/se/kth/log_Analyzer/MavenLogAnalyzer.java index d3e5515..7c7ac96 100644 --- a/src/main/java/se/kth/log_Analyzer/MavenLogAnalyzer.java +++ b/src/main/java/se/kth/log_Analyzer/MavenLogAnalyzer.java @@ -42,7 +42,9 @@ private MavenErrorLog extractLineNumbersWithPaths(String logFilePath) throws IOE Pattern errorPattern = Pattern.compile("\\[ERROR\\] .*:\\[(\\d+),\\d+\\]"); Pattern pathPattern = Pattern.compile("/[^:/]+(/[^\\[\\]:]+)"); + int lineNumberInFile = 0; while ((line = reader.readLine()) != null) { + lineNumberInFile++; Map lines = new HashMap<>(); Matcher matcher = errorPattern.matcher(line); if (matcher.find()) { @@ -51,10 +53,12 @@ private MavenErrorLog extractLineNumbersWithPaths(String logFilePath) throws IOE lines.put(lineNumber, line); if (pathMatcher.find()) { currentPath = pathMatcher.group(); - } if (currentPath != null) { - mavenErrorLogs.addErrorInfo(currentPath, new MavenErrorLog.ErrorInfo(String.valueOf(lineNumber), currentPath, line)); + + MavenErrorLog.ErrorInfo errorInfo = new MavenErrorLog.ErrorInfo(String.valueOf(lineNumber), currentPath, line, lineNumberInFile); + errorInfo.setErrorLogGithubLink(generateLogsLink(projectURL, 4, lineNumberInFile)); + mavenErrorLogs.addErrorInfo(currentPath, errorInfo); } } } @@ -64,4 +68,8 @@ private MavenErrorLog extractLineNumbersWithPaths(String logFilePath) throws IOE } return mavenErrorLogs; } + + private String generateLogsLink(String projectURL, int step, int lineNumber) { + return "https://github.com/chains-project/breaking-good/actions/runs/8110103454/job/22166641300#step:%d:%d".formatted(step, lineNumber); + } } \ No newline at end of file