Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,9 @@ invert {
configurationNames
}
ownershipCollector(<<ownership collector instance>>)
// Optional: disable only the aggregate `sarif/stats.sarif` artifact for very large repos.
// Per-stat `sarif/code_references_*.sarif` artifacts are still generated.
aggregateStatsSarifReport(false)
}
```

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,10 @@ open class InvertExtension(project: Project) {
@get:Input
internal val historicalDataFileProperty = objects.property<String?>(String::class.java)

@get:Input
internal val aggregateStatsSarifReportEnabledProperty =
objects.property(Boolean::class.java).convention(true)

fun ownershipCollector(ownershipCollector: InvertOwnershipCollector) {
ownershipCollectorProperty.set(ownershipCollector)
}
Expand All @@ -65,6 +69,10 @@ open class InvertExtension(project: Project) {
this.historicalDataFileProperty.set(historicalDataFile)
}

fun aggregateStatsSarifReport(enabled: Boolean) {
aggregateStatsSarifReportEnabledProperty.set(enabled)
}

fun includeSubproject(invertShouldIncludeSubProject: (subproject: Project) -> Boolean) {
includeSubProjectCalculatorProperty.set(object : InvertIncludeSubProjectCalculator {
override fun invoke(
Expand Down Expand Up @@ -103,6 +111,10 @@ open class InvertExtension(project: Project) {
return historicalDataFileProperty.orNull
}

internal fun isAggregateStatsSarifReportEnabled(): Boolean {
return aggregateStatsSarifReportEnabledProperty.getOrElse(true)
}

internal fun getStatCollectors(): Collection<StatCollector> {
return statCollectors
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,8 @@ class InvertReportWriter(
reportMetadata: MetadataJsReportModel,
collectedData: InvertCombinedCollectedData,
historicalData: Set<HistoricalData>,
techDebtInitiatives: List<TechDebtInitiative>
techDebtInitiatives: List<TechDebtInitiative>,
aggregateStatsSarifReportEnabled: Boolean = true,
) {
val collectedOwners: Set<CollectedOwnershipForProject> = collectedData.collectedOwners
val collectedStats: Set<CollectedStatsForProject> = collectedData.collectedStats
Expand Down Expand Up @@ -78,10 +79,14 @@ class InvertReportWriter(
historicalData = historicalDataWithCurrent,
)

// Include all stats into one SARIF report.
InvertSarifReportWriter(invertLogger, rootBuildReportsDir).createInvertSarifReport(
allProjectsStatsData = allProjectsStatsData
)
if (aggregateStatsSarifReportEnabled) {
// Include all stats into one SARIF report.
InvertSarifReportWriter(invertLogger, rootBuildReportsDir).createInvertSarifReport(
allProjectsStatsData = allProjectsStatsData
)
} else {
invertLogger.info("Skipping aggregate stats.sarif generation.")
}

// HTML/JS Report
InvertJsReportWriter(invertLogger, rootBuildReportsDir).createInvertHtmlReport(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@ abstract class InvertTask : DefaultTask() {
@get:Input
abstract val mavenRepoUrls: ListProperty<String>

@get:Input
abstract val aggregateStatsSarifReportEnabled: Property<Boolean>

@get:OutputDirectory
abstract val rootBuildReportsDir: DirectoryProperty

Expand Down Expand Up @@ -151,6 +154,7 @@ abstract class InvertTask : DefaultTask() {
collectedData = allCollectedData,
historicalData = historicalData,
techDebtInitiatives = techDebtInitiatives ?: emptyList(),
aggregateStatsSarifReportEnabled = aggregateStatsSarifReportEnabled.get(),
)
}
}
Expand Down Expand Up @@ -179,6 +183,7 @@ abstract class InvertTask : DefaultTask() {
this.statCollectors = extension.getStatCollectors().toList()
this.techDebtInitiatives = extension.getTechDebtInitiatives().toList()
this.ownershipCollector = extension.getOwnershipCollector()
this.aggregateStatsSarifReportEnabled.set(extension.isAggregateStatsSarifReportEnabled())

this.mavenRepoUrls.set(
project.rootProject.buildscript.repositories
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,31 @@ class InvertReportWriterTest {
assertTrue(content.contains("\"text\":\"test code\""), "Should contain code snippet")
}

@Test
fun `test writeProjectData can skip aggregate stats sarif while preserving code reference sarif`() {
// Given
val writer = InvertReportWriter(logger, testDir)
val testMetadata = createTestMetadata()
val testCollectedData = createCollectedDataWithCodeReferences()

// When
writer.writeProjectData(
reportMetadata = testMetadata,
collectedData = testCollectedData,
historicalData = emptySet(),
techDebtInitiatives = emptyList(),
aggregateStatsSarifReportEnabled = false,
)

// Then
val sarifDir = File(testDir, "sarif")
assertFalse(File(sarifDir, "stats.sarif").exists(), "Aggregate stats SARIF file should not be created")
assertTrue(
File(sarifDir, "code_references_test_code_ref_stat.sarif").exists(),
"Code references SARIF file should still be created"
)
}

@Test
fun `test writeProjectData includes module and owner in code reference extras`() {
// Given
Expand Down Expand Up @@ -626,4 +651,4 @@ class InvertReportWriterTest {
)
)
}
}
}
Loading