diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 40b77f8..4142628 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,3 +1,2 @@ -examples/jvm-with-anvil/ Anvil examples/scopes/ @handstandsam -examples/app/ AppTeam \ No newline at end of file +examples/app/ @handstandsam diff --git a/gradle.properties b/gradle.properties index dd40e49..4e77a5b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -org.gradle.jvmargs=-Xmx8g +org.gradle.jvmargs=-Xmx16g kotlin.code.style=official android.useAndroidX=true diff --git a/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/InvertExtension.kt b/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/InvertExtension.kt index d3f54c8..0b2717b 100644 --- a/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/InvertExtension.kt +++ b/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/InvertExtension.kt @@ -6,6 +6,7 @@ import com.squareup.invert.internal.NoOpOwnershipCollector import com.squareup.invert.models.ConfigurationName import org.gradle.api.Project import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile /** * Extension for configuring the [InvertGradlePlugin] @@ -45,10 +46,18 @@ open class InvertExtension(project: Project) { internal val includeConfigurationProperty = objects.property(InvertIncludeConfigurationCalculator::class.java) + @get:InputFile + @get:Input + internal val historicalDataFileProperty = objects.property(String::class.java) + fun ownershipCollector(ownershipCollector: InvertOwnershipCollector) { ownershipCollectorProperty.set(ownershipCollector) } + fun historicalData(historicalDataFile: String) { + this.historicalDataFileProperty.set(historicalDataFile) + } + fun includeSubproject(invertShouldIncludeSubProject: (subproject: Project) -> Boolean) { includeSubProjectCalculatorProperty.set(object : InvertIncludeSubProjectCalculator { override fun invoke( @@ -79,6 +88,10 @@ open class InvertExtension(project: Project) { statCollectors.add(statCollector) } + internal fun getHistoricalDataFilePath(): String? { + return historicalDataFileProperty.orNull + } + internal fun getStatCollectors(): Collection { return statCollectors } diff --git a/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/report/InvertReportWriter.kt b/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/report/InvertReportWriter.kt index b05e503..001ed61 100644 --- a/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/report/InvertReportWriter.kt +++ b/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/report/InvertReportWriter.kt @@ -44,6 +44,12 @@ class InvertReportWriter( val globalStats = computeGlobalTotals(allProjectsStatsData, collectedOwnershipInfo) +// val historicalDataWithCurrent = historicalData +// + HistoricalData( +// reportMetadata = reportMetadata, +// statTotalsAndMetadata = CollectedStatTotalsJsReportModel(globalStats) +// ) + // JSON Report InvertJsonReportWriter(invertLogger, rootBuildReportsDir).createInvertJsonReport( reportMetadata = reportMetadata, diff --git a/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/tasks/InvertTask.kt b/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/tasks/InvertTask.kt index da1293c..41bd8d0 100644 --- a/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/tasks/InvertTask.kt +++ b/invert-gradle-plugin/src/main/kotlin/com/squareup/invert/internal/tasks/InvertTask.kt @@ -11,7 +11,10 @@ import com.squareup.invert.internal.report.GradleProjectAnalysisCombiner import com.squareup.invert.internal.report.InvertReportWriter import com.squareup.invert.logging.GradleInvertLogger import com.squareup.invert.logging.InvertLogger +import com.squareup.invert.models.InvertSerialization.InvertJson +import com.squareup.invert.models.js.HistoricalData import kotlinx.coroutines.runBlocking +import kotlinx.serialization.builtins.ListSerializer import org.gradle.api.DefaultTask import org.gradle.api.Project import org.gradle.api.artifacts.repositories.UrlArtifactRepository @@ -20,6 +23,7 @@ import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property import org.gradle.api.tasks.Input import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Optional import org.gradle.api.tasks.OutputDirectory import org.gradle.api.tasks.TaskAction import java.io.File @@ -41,6 +45,10 @@ abstract class InvertTask : DefaultTask() { @get:Internal abstract var statCollectors: List? + @get:Optional + @get:Input + abstract val historicalDataFileProperty: Property + @get:Input abstract val projectPath: Property @@ -86,6 +94,20 @@ abstract class InvertTask : DefaultTask() { ) ) + val historicalDataFile: File? = historicalDataFileProperty.orNull?.let { File(it) } + val historicalData: List = + if (historicalDataFile?.isFile == true && historicalDataFile.length() > 0) { + try { + val fileContents = historicalDataFile.readText() + InvertJson.decodeFromString(ListSerializer(HistoricalData.serializer()), fileContents) + } catch (e: Exception) { + invertLogger().warn("Failed to read historical data file: $e") + listOf() + } + } else { + listOf() + } + InvertReportWriter( invertLogger = invertLogger(), rootBuildReportsDir = invertReportDir, @@ -96,7 +118,7 @@ abstract class InvertTask : DefaultTask() { collectedDependencies = allCollectedData.collectedDependencies, collectedConfigurations = allCollectedData.collectedConfigurations, collectedPlugins = allCollectedData.collectedPlugins, - historicalData = emptyList(), + historicalData = historicalData, ) } } @@ -117,7 +139,7 @@ abstract class InvertTask : DefaultTask() { InvertFileUtils.REPORTS_SLASH_INVERT_PATH ) ) - + this.historicalDataFileProperty.set(extension.getHistoricalDataFilePath()) this.statCollectors = extension.getStatCollectors().toList() this.mavenRepoUrls.set(