Skip to content

Commit 7fffe71

Browse files
committed
Performant enough for version 0.4.0
1 parent 8f2fe99 commit 7fffe71

6 files changed

Lines changed: 109 additions & 120 deletions

File tree

src/main/kotlin/org/jesperancinha/plugins/omni/reporter/OmniReporter.kt

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import org.jesperancinha.plugins.omni.reporter.parsers.readCamelCaseJsonValue
55
import org.jesperancinha.plugins.omni.reporter.processors.CodacyProcessor
66
import org.jesperancinha.plugins.omni.reporter.processors.CodecovProcessor
77
import org.jesperancinha.plugins.omni.reporter.processors.CoverallsProcessor
8+
import org.jesperancinha.plugins.omni.reporter.processors.ReportFilesContainer
89
import java.io.File
910

1011
class ProjectDirectoryNotFoundException : RuntimeException()
@@ -186,6 +187,15 @@ open class OmniReporterCommon(
186187
logger.info("reportRejectList: ${reportRejectList.joinToString(";")}")
187188
logLine()
188189

190+
val reportFilesContainer = ReportFilesContainer(
191+
allProjects = allOmniProjects,
192+
ignoreTestBuildDirectory = ignoreTestBuildDirectory,
193+
failOnXmlParsingError = failOnXmlParsingError,
194+
projectBaseDir = projectBaseDir,
195+
reportRejectList = reportRejectList,
196+
parallelization = parallelization
197+
)
198+
189199
CoverallsProcessor(
190200
coverallsToken = coverallsToken,
191201
disableCoveralls = disableCoveralls,
@@ -197,12 +207,9 @@ open class OmniReporterCommon(
197207
failOnXmlParseError = failOnXmlParsingError,
198208
fetchBranchNameFromEnv = fetchBranchNameFromEnv,
199209
branchCoverage = branchCoverage,
200-
ignoreTestBuildDirectory = ignoreTestBuildDirectory,
201210
useCoverallsCount = useCoverallsCount,
202-
allProjects = allOmniProjects,
203-
reportRejectList = reportRejectList,
204211
parallelization = parallelization
205-
).processReports()
212+
).processReports(reportFilesContainer)
206213

207214
CodacyProcessor(
208215
codacyToken = codacyToken,
@@ -213,16 +220,12 @@ open class OmniReporterCommon(
213220
disableCodacy = disableCodacy,
214221
codacyUrl = codacyUrl,
215222
projectBaseDir = projectBaseDir,
216-
failOnReportNotFound = failOnReportNotFound,
217223
failOnReportSending = failOnReportSendingError,
218-
failOnXmlParseError = failOnXmlParsingError,
219224
failOnUnknown = failOnUnknown,
225+
failOnXmlParseError = failOnXmlParsingError,
220226
fetchBranchNameFromEnv = fetchBranchNameFromEnv,
221-
ignoreTestBuildDirectory = ignoreTestBuildDirectory,
222-
allProjects = allOmniProjects,
223-
reportRejectList = reportRejectList,
224227
parallelization = parallelization
225-
).processReports()
228+
).processReports(reportFilesContainer)
226229

227230
CodecovProcessor(
228231
codecovToken = codecovToken,
@@ -237,7 +240,7 @@ open class OmniReporterCommon(
237240
allProjects = allOmniProjects,
238241
reportRejectList = reportRejectList,
239242
parallelization = parallelization
240-
).processReports()
243+
).processReports(reportFilesContainer)
241244

242245
}
243246

src/main/kotlin/org/jesperancinha/plugins/omni/reporter/processors/CodacyProcessor.kt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -28,20 +28,16 @@ class CodacyProcessor(
2828
val codacyProjectName: String?,
2929
val disableCodacy: Boolean,
3030
private val codacyUrl: String?,
31-
private val allProjects: List<OmniProject?>,
3231
private val projectBaseDir: File?,
33-
private val failOnReportNotFound: Boolean,
3432
private val failOnReportSending: Boolean,
3533
private val failOnUnknown: Boolean,
3634
private val failOnXmlParseError: Boolean,
3735
private val fetchBranchNameFromEnv: Boolean,
38-
private val ignoreTestBuildDirectory: Boolean,
39-
private val reportRejectList: List<String>,
4036
private val currentPipeline: Pipeline = PipelineImpl.currentPipeline(fetchBranchNameFromEnv),
4137
private val parallelization: Int
42-
) : Processor(ignoreTestBuildDirectory, allProjects, failOnXmlParseError, projectBaseDir, reportRejectList, parallelization) {
38+
) : Processor() {
4339

44-
override fun processReports() {
40+
override fun processReports(reportFilesContainer: ReportFilesContainer) {
4541
logger.info("Codacy API fully configured: ${this.isCodacyAPIConfigured}")
4642
if ((this.isCodacyAPIConfigured || codacyToken != null) && !disableCodacy) {
4743
val apiToken = codacyApiToken?.let {
@@ -58,7 +54,7 @@ class CodacyProcessor(
5854
val repo = RepositoryBuilder().findGitDir(projectBaseDir).build()
5955

6056
Language.values().forEach { language ->
61-
val reportsPerLanguage = allReportFiles
57+
val reportsPerLanguage = reportFilesContainer.allReportFiles
6258
.filter { (project, _) -> project.compileSourceRoots != null }
6359
.flatMap { (project, reports) ->
6460
runBlocking {
@@ -186,14 +182,10 @@ class CodacyProcessor(
186182
disableCodacy = disableCodacy,
187183
codacyUrl = codacyUrl,
188184
projectBaseDir = projectBaseDir?.let { File(it) } ?: throw ProjectDirectoryNotFoundException(),
189-
failOnReportNotFound = failOnReportNotFound,
190185
failOnReportSending = failOnReportSendingError,
191-
failOnXmlParseError = failOnXmlParsingError,
192186
failOnUnknown = failOnUnknown,
187+
failOnXmlParseError = failOnXmlParsingError,
193188
fetchBranchNameFromEnv = fetchBranchNameFromEnv,
194-
ignoreTestBuildDirectory = ignoreTestBuildDirectory,
195-
allProjects = allOmniProjects,
196-
reportRejectList = reportRejectsCSV.split(","),
197189
parallelization = parallelization
198190
)
199191
}

src/main/kotlin/org/jesperancinha/plugins/omni/reporter/processors/CodecovProcessor.kt

Lines changed: 3 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import org.eclipse.jgit.lib.RepositoryBuilder
77
import org.jesperancinha.plugins.omni.reporter.*
88
import org.jesperancinha.plugins.omni.reporter.domain.api.CodecovClient
99
import org.jesperancinha.plugins.omni.reporter.domain.api.redact
10-
import org.jesperancinha.plugins.omni.reporter.domain.reports.OmniFileAdapter
1110
import org.jesperancinha.plugins.omni.reporter.logger.OmniLoggerConfig
1211
import org.jesperancinha.plugins.omni.reporter.pipelines.Pipeline
1312
import org.jesperancinha.plugins.omni.reporter.pipelines.PipelineImpl
@@ -33,29 +32,15 @@ class CodecovProcessor(
3332
private val allProjects: List<OmniProject?>,
3433
private val reportRejectList: List<String>,
3534
private val parallelization: Int
36-
) : Processor(
37-
ignoreTestBuildDirectory,
38-
allProjects,
39-
projectBaseDir= projectBaseDir,
40-
reportRejectList= reportRejectList,
41-
parallelization= parallelization
42-
) {
43-
private val allCodecovSupportedFiles: List<Pair<OmniProject, List<OmniFileAdapter>>> by lazy {
44-
allProjects.toAllCodecovSupportedFiles(
45-
supportedPredicate,
46-
projectBaseDir,
47-
reportRejectList,
48-
parallelization
49-
)
50-
}
51-
override fun processReports() {
35+
) : Processor() {
36+
override fun processReports(reportFilesContainer: ReportFilesContainer) {
5237
codecovToken?.let { token ->
5338
if (!disableCodecov)
5439
logger.info("* Omni Reporting to Codecov started!")
5540

5641
val repo = RepositoryBuilder().findGitDir(projectBaseDir).build()
5742
val codacyReportsAggregate =
58-
allCodecovSupportedFiles
43+
reportFilesContainer.allCodecovSupportedFiles
5944
.filter { (project, _) -> project.compileSourceRoots != null }
6045
.flatMap { (project, reports) ->
6146
runBlocking {
@@ -121,45 +106,6 @@ class CodecovProcessor(
121106
return "Failed sending Codacy report!"
122107
}
123108

124-
125-
internal fun List<OmniProject?>.toAllCodecovSupportedFiles(
126-
supportedPredicate: (String, File) -> Boolean,
127-
root: File,
128-
reportRejectList: List<String>,
129-
parallelization: Int
130-
): List<Pair<OmniProject, List<OmniFileAdapter>>> =
131-
this.filterNotNull()
132-
.map { project ->
133-
project to File(project.build?.directory ?: throw ProjectDirectoryNotFoundException())
134-
.walkTopDown()
135-
.let { walk ->
136-
runBlocking {
137-
walk.chunked(parallelization)
138-
.map { fileList ->
139-
async {
140-
fileList.filter { reportFile ->
141-
notRejectable(reportFile) && !reportRejectList.contains(reportFile.name) && reportFile.isFile
142-
&& project.build?.let { build ->
143-
supportedPredicate(
144-
build.testOutputDirectory,
145-
reportFile
146-
)
147-
} ?: false
148-
}
149-
}
150-
}.toList().awaitAll()
151-
}
152-
}
153-
.asSequence()
154-
.flatten()
155-
.toList()
156-
.mapNotNull { report ->
157-
mapReportFile(report, project, supportedPredicate, false, root)
158-
}
159-
.distinct()
160-
.toList()
161-
}.distinct()
162-
163109
companion object {
164110
val logger = OmniLoggerConfig.getLogger(CodecovProcessor::class.java)
165111

src/main/kotlin/org/jesperancinha/plugins/omni/reporter/processors/CoverallsProcessor.kt

Lines changed: 4 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,10 @@ import java.io.File
1414
/**
1515
* Created by jofisaes on 06/01/2022
1616
*/
17-
class CoverallsProcessor (
17+
class CoverallsProcessor(
1818
private val coverallsToken: String?,
1919
private val disableCoveralls: Boolean,
2020
private val coverallsUrl: String?,
21-
private val allProjects: List<OmniProject>,
2221
private val projectBaseDir: File?,
2322
private val failOnUnknown: Boolean,
2423
private val failOnReportNotFound: Boolean,
@@ -27,20 +26,11 @@ class CoverallsProcessor (
2726
private val fetchBranchNameFromEnv: Boolean,
2827
private val branchCoverage: Boolean,
2928
private val useCoverallsCount: Boolean,
30-
private val ignoreTestBuildDirectory: Boolean,
31-
private val reportRejectList: List<String>,
3229
private val currentPipeline: Pipeline = PipelineImpl.currentPipeline(fetchBranchNameFromEnv),
3330
private val parallelization: Int
34-
) : Processor(
35-
ignoreTestBuildDirectory,
36-
allProjects,
37-
failOnXmlParseError,
38-
projectBaseDir,
39-
reportRejectList,
40-
parallelization
41-
) {
31+
) : Processor() {
4232

43-
override fun processReports() {
33+
override fun processReports(reportFilesContainer: ReportFilesContainer) {
4434
coverallsToken?.let { token ->
4535
if (!disableCoveralls) {
4636
logger.info("* Omni Reporting to Coveralls started!")
@@ -57,7 +47,7 @@ class CoverallsProcessor (
5747
failOnXmlParseError = failOnXmlParseError,
5848
)
5949

60-
allReportFiles
50+
reportFilesContainer.allReportFiles
6151
.filter { (project, _) -> project.compileSourceRoots != null }
6252
.forEach { (project, reports) ->
6353
runBlocking {
@@ -152,9 +142,6 @@ class CoverallsProcessor (
152142
fetchBranchNameFromEnv = fetchBranchNameFromEnv,
153143
branchCoverage = branchCoverage,
154144
useCoverallsCount = useCoverallsCount,
155-
ignoreTestBuildDirectory = ignoreTestBuildDirectory,
156-
allProjects = allOmniProjects,
157-
reportRejectList = reportRejectsCSV.split(","),
158145
parallelization = parallelization
159146
)
160147
}

src/main/kotlin/org/jesperancinha/plugins/omni/reporter/processors/Processor.kt

Lines changed: 47 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -27,35 +27,21 @@ private val KNOWN_TEST_DIRECTORIES = arrayOf(
2727
"test-classes"
2828
)
2929

30-
private val STATIC_REJECT_FOLDERS = arrayOf("node_modules")
30+
private val STATIC_REJECT_FOLDERS =
31+
arrayOf("node_modules")
3132

33+
internal val NON_REPORT_FOLDERS =
34+
arrayOf("maven-status", "maven-archiver", "generated-sources", "generated-test-sources", "surefire-reports", "src", ".github")
3235
/**
3336
* Created by jofisaes on 05/01/2022
3437
*/
35-
abstract class Processor(
36-
ignoreTestBuildDirectory: Boolean,
37-
allProjects: List<OmniProject?>,
38-
failOnXmlParseError: Boolean = false,
39-
projectBaseDir: File?,
40-
reportRejectList: List<String>,
41-
parallelization: Int,
42-
) {
43-
abstract fun processReports()
38+
abstract class Processor {
39+
abstract fun processReports(reportFilesContainer: ReportFilesContainer)
4440

4541
open fun reportNotFoundErrorMessage(): String? = null
4642

4743
open fun reportNotSentErrorMessage(): String? = null
4844

49-
internal val supportedPredicate = supportedPredicate(ignoreTestBuildDirectory)
50-
51-
val allReportFiles by lazy { allProjects.toReportFiles(
52-
supportedPredicate,
53-
failOnXmlParseError,
54-
projectBaseDir ?: throw ProjectDirectoryNotFoundException(),
55-
reportRejectList,
56-
parallelization
57-
) }
58-
5945
companion object {
6046

6147
val nonGenericTestDirectoryPredicate =
@@ -178,17 +164,17 @@ enum class ReportType(
178164
internal fun notRejectable(file: File) =
179165
STATIC_REJECT_FOLDERS.none { rejectFolder -> file.absolutePath.contains(rejectFolder) }
180166

181-
internal fun List<OmniProject?>.toReportFiles(
167+
internal fun List<OmniProject>.toReportFiles(
182168
supportedPredicate: (String, File) -> Boolean,
183169
failOnXmlParseError: Boolean,
184170
root: File,
185171
reportRejectList: List<String>,
186172
parallelization: Int
187173
): Map<OmniProject, List<OmniFileAdapter>> =
188-
this.filterNotNull()
189-
.map { project ->
174+
this.map { project ->
190175
project to File(project.build?.directory ?: throw ProjectDirectoryNotFoundException())
191176
.walkTopDown()
177+
.onEnter { !(it.isDirectory && NON_REPORT_FOLDERS.contains(it.name)) }
192178
.let { walk ->
193179
runBlocking {
194180
walk
@@ -209,6 +195,44 @@ internal fun List<OmniProject?>.toReportFiles(
209195
}.distinct()
210196
.toMap()
211197

198+
fun List<OmniProject>.toAllCodecovSupportedFiles(
199+
supportedPredicate: (String, File) -> Boolean,
200+
root: File,
201+
reportRejectList: List<String>,
202+
parallelization: Int
203+
): Map<OmniProject, List<OmniFileAdapter>> =
204+
this.map { project ->
205+
project to File(project.build?.directory ?: throw ProjectDirectoryNotFoundException())
206+
.walkTopDown()
207+
.onEnter { !(it.isDirectory && NON_REPORT_FOLDERS.contains(it.name)) }
208+
.let { walk ->
209+
runBlocking {
210+
walk.chunked(parallelization)
211+
.map { fileList ->
212+
async {
213+
fileList.filter { reportFile ->
214+
notRejectable(reportFile) && !reportRejectList.contains(reportFile.name) && reportFile.isFile
215+
&& project.build?.let { build ->
216+
supportedPredicate(
217+
build.testOutputDirectory,
218+
reportFile
219+
)
220+
} ?: false
221+
}
222+
}
223+
}.toList().awaitAll()
224+
}
225+
}
226+
.asSequence()
227+
.flatten()
228+
.toList()
229+
.mapNotNull { report ->
230+
mapReportFile(report, project, supportedPredicate, false, root)
231+
}
232+
.distinct()
233+
.toList()
234+
}.distinct()
235+
.toMap()
212236
internal fun mapReportFile(
213237
report: File,
214238
project: OmniProject,

0 commit comments

Comments
 (0)