Skip to content

Commit

Permalink
chore: internal plugin dependencies optimization
Browse files Browse the repository at this point in the history
  • Loading branch information
phinner committed Mar 21, 2024
1 parent a14be64 commit d343f6b
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 27 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import fr.xpdustry.toxopid.dsl.mindustryDependencies
import fr.xpdustry.toxopid.spec.ModMetadata
import kotlin.reflect.cast

plugins {
id("net.kyori.indra")
Expand All @@ -18,27 +19,18 @@ dependencies {
mindustryDependencies()
}

afterEvaluate {
dependencies {
for (dependency in extension.dependencies.get()) {
compileOnly(dependency)
}
}
val pluginCompileOnlyApi: Configuration by configurations.creating

configurations.compileOnlyApi {
extendsFrom(pluginCompileOnlyApi)
}

tasks.runMindustryClient {
mods.setFrom()
}

tasks.runMindustryServer {
mods.from(tasks.shadowJar)
}

// Cursed way to collect dependent distributor modules
gradle.projectsEvaluated {
tasks.runMindustryServer {
mods.from(collectAllPluginDependencies())
}
mods.from(tasks.shadowJar, collectAllPluginDependencies())
}

tasks.shadowJar {
Expand All @@ -56,7 +48,7 @@ tasks.shadowJar {
java = true,
hidden = true,
dependencies =
extension.dependencies.get()
pluginCompileOnlyApi.dependencies.map(ProjectDependency::class::cast)
.map { it.dependencyProject.extensions.getByType<DistributorModuleExtension>().identifier.get() }
.toMutableList(),
)
Expand Down
20 changes: 10 additions & 10 deletions distributor-build-logic/src/main/kotlin/extensions.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,12 @@ import org.gradle.accessors.dm.LibrariesForLibs
import org.gradle.api.Project
import org.gradle.api.artifacts.ProjectDependency
import org.gradle.api.plugins.ExtensionContainer
import org.gradle.api.provider.Provider
import org.gradle.api.tasks.TaskProvider
import org.gradle.kotlin.dsl.named
import org.gradle.kotlin.dsl.property
import org.gradle.kotlin.dsl.setProperty
import org.gradle.kotlin.dsl.the
import kotlin.reflect.cast

internal val Project.libs: LibrariesForLibs get() = the()

Expand All @@ -19,19 +20,18 @@ open class DistributorModuleExtension(project: Project) {
val display = project.objects.property<String>()
val main = project.objects.property<String>()
val description = project.objects.property<String>()
val dependencies = project.objects.setProperty<ProjectDependency>()

companion object {
const val EXTENSION_NAME = "distributorModule"
}
}

fun Project.collectAllPluginDependencies(): Set<TaskProvider<out ShadowJar>> {
val dependencies = mutableSetOf<TaskProvider<out ShadowJar>>()
val extension = extensions.findOrCreateExtension<DistributorModuleExtension>(DistributorModuleExtension.EXTENSION_NAME)
for (dependency in extension.dependencies.get()) {
dependencies += dependency.dependencyProject.tasks.named<ShadowJar>("shadowJar")
dependencies += dependency.dependencyProject.collectAllPluginDependencies()
fun Project.collectAllPluginDependencies(): Provider<Set<TaskProvider<out ShadowJar>>> =
configurations.named("pluginCompileOnlyApi").flatMap { configuration ->
configuration.dependencies.map(ProjectDependency::class::cast)
.fold(project.providers.provider(::emptySet)) { provider, dependency ->
provider
.map { it + setOf(dependency.dependencyProject.tasks.named<ShadowJar>("shadowJar")) }
.zip(dependency.dependencyProject.collectAllPluginDependencies(), Set<TaskProvider<out ShadowJar>>::plus)
}
}
return dependencies
}
2 changes: 1 addition & 1 deletion distributor-core/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ distributorModule {
display = "DistributorCore"
main = "com.xpdustry.distributor.core.DistributorCorePlugin"
description = "Core classes of distributor."
dependencies = setOf(projects.distributorLoggingSimple)
}

dependencies {
pluginCompileOnlyApi(projects.distributorLoggingSimple)
compileOnlyApi(libs.immutables.annotations)
annotationProcessor(libs.immutables.processor)
compileOnlyApi(libs.slf4j.api)
Expand Down
2 changes: 1 addition & 1 deletion distributor-permission-rank/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ distributorModule {
display = "DistributorPermissionRank"
main = "com.xpdustry.distributor.permission.rank.DistributorPermissionRankPlugin"
description = "Simple permission system based on ranks."
dependencies = setOf(projects.distributorCore)
}

dependencies {
pluginCompileOnlyApi(projects.distributorCore)
implementation(libs.configurate.core)
implementation(libs.configurate.yaml)
}
Expand Down

0 comments on commit d343f6b

Please sign in to comment.