From f804c39a3b4540a7338cbf94b8f2ee64ee2e2b15 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Sun, 2 Oct 2022 12:11:06 +0200 Subject: [PATCH] migrate docker-compose convention plugin out of buildSrc --- buildSrc/build.gradle.kts | 69 +++++----- .../adamko/kafkatorio/factoriomod/tasks.kt | 12 -- buildSrc/src/main/kotlin/extensions.kt | 25 ++++ .../builder-plugins/build.gradle.kts | 39 +++--- .../modules/common-lib/build.gradle.kts | 24 ++++ .../kotlin/kafkatorio/common/distributions.kt | 17 +++ .../builder-plugins/settings.gradle.kts | 13 ++ .../infra/docker-compose.gradle.kts | 122 +++++++++--------- .../docker-compose/build.gradle.kts | 27 ++-- .../adamko/geedeecee}/DockerComposeExec.kt | 19 ++- .../adamko/geedeecee}/DockerEnvUpdateTask.kt | 8 +- .../dev/adamko/geedeecee/GDCCommandTask.kt | 47 +++++++ .../kotlin/dev/adamko/geedeecee/GDCPlugin.kt | 84 +++++++++--- .../dev/adamko/geedeecee/GDCSettings.kt | 6 + .../factorio-gradle/build.gradle.kts | 52 ++++++-- .../gradle/factorio/FactorioModInstallTask.kt | 43 ++++++ .../factorio}/FactorioModSettings.kt | 2 +- .../FactorioModPortalPublishClient.kt | 2 +- .../mod_portal}/FactorioModPublishTask.kt | 6 +- .../gradle/factorio/mod_portal}/model.kt | 2 +- .../settings-plugins/build.gradle.kts | 5 + .../conventions/kotlin-dsl.gradle.kts | 30 +++++ .../conventions/kotlinDslExtensions.kt | 21 +++ modules/events-library/build.gradle.kts | 9 +- modules/events-mod/build.gradle.kts | 9 +- modules/events-server-syslog/build.gradle.kts | 3 +- modules/events-server-web/build.gradle.kts | 1 + .../infra-factorio-client/build.gradle.kts | 24 ++-- .../infra-factorio-server/build.gradle.kts | 48 +++---- modules/infra-kafka-cluster/build.gradle.kts | 10 +- modules/infra-kafka-pipe/build.gradle.kts | 11 +- modules/web-map/build.gradle.kts | 13 +- 32 files changed, 564 insertions(+), 239 deletions(-) delete mode 100644 buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/tasks.kt create mode 100644 buildSrc/src/main/kotlin/extensions.kt create mode 100644 gradle-plugins/builder-plugins/modules/common-lib/build.gradle.kts create mode 100644 gradle-plugins/builder-plugins/modules/common-lib/src/main/kotlin/kafkatorio/common/distributions.kt rename gradle-plugins/{builder-plugins/src/main/kotlin/kafkatorio/tasks => docker-compose/src/main/kotlin/dev/adamko/geedeecee}/DockerComposeExec.kt (79%) rename gradle-plugins/{builder-plugins/src/main/kotlin/kafkatorio/tasks => docker-compose/src/main/kotlin/dev/adamko/geedeecee}/DockerEnvUpdateTask.kt (75%) create mode 100644 gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCCommandTask.kt create mode 100644 gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/FactorioModInstallTask.kt rename gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/{factorio_gradle => gradle/factorio}/FactorioModSettings.kt (91%) rename {buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal => gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal}/FactorioModPortalPublishClient.kt (98%) rename {buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal => gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal}/FactorioModPublishTask.kt (95%) rename {buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal => gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal}/model.kt (98%) create mode 100644 gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlin-dsl.gradle.kts create mode 100644 gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlinDslExtensions.kt diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index b98a725..dad2820 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -1,18 +1,20 @@ +import kafkatorio.conventions.overrideKotlinLanguageVersion import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - idea - `kotlin-dsl` - kotlin("jvm") version embeddedKotlinVersion - kotlin("plugin.serialization") version embeddedKotlinVersion + id("kafkatorio.conventions.kotlin-dsl") +// idea +// `kotlin-dsl` +// kotlin("jvm") //version "1.7.20" // embeddedKotlinVersion + kotlin("plugin.serialization") version embeddedKotlinVersion +// kotlin("plugin.serialization") version "1.7.20" } -val gradleJvmTarget = "11" -val gradleKotlinTarget = "1.6" +//val gradleJvmTarget = "11" +//val gradleKotlinTarget = "1.6" dependencies { - implementation(platform(libs.kotlin.bom)) implementation("org.jetbrains.kotlin:kotlin-serialization") implementation("org.jetbrains.kotlin:kotlin-reflect") @@ -72,9 +74,9 @@ dependencies { tasks.withType().configureEach { kotlinOptions { - jvmTarget = gradleJvmTarget - apiVersion = gradleKotlinTarget - languageVersion = gradleKotlinTarget +// jvmTarget = gradleJvmTarget +// apiVersion = gradleKotlinTarget +// languageVersion = gradleKotlinTarget } kotlinOptions.freeCompilerArgs += listOf( @@ -88,28 +90,29 @@ tasks.withType().configureEach { } -afterEvaluate { - tasks.withType().configureEach { - kotlinOptions { - apiVersion = gradleKotlinTarget - languageVersion = gradleKotlinTarget - } - } -} +overrideKotlinLanguageVersion("1.6") +//afterEvaluate { +// tasks.withType().configureEach { +// kotlinOptions { +// apiVersion = gradleKotlinTarget +// languageVersion = gradleKotlinTarget +// } +// } +//} -kotlin { - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) - } -} +//kotlin { +// jvmToolchain { +// (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) +// } +//} +// +//kotlinDslPluginOptions { +// jvmTarget.set(gradleJvmTarget) +//} -kotlinDslPluginOptions { - jvmTarget.set(gradleJvmTarget) -} - -idea { - module { - isDownloadSources = true - isDownloadJavadoc = true - } -} +//idea { +// module { +// isDownloadSources = true +// isDownloadJavadoc = true +// } +//} diff --git a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/tasks.kt b/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/tasks.kt deleted file mode 100644 index b657ace..0000000 --- a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/tasks.kt +++ /dev/null @@ -1,12 +0,0 @@ -package dev.adamko.kafkatorio.factoriomod - -object FactorioMod { - - const val TASK_GROUP = "factorioMod" - - /** Lifecycle task for publishing the mod locally */ - const val PUBLISH_MOD_LOCAL_TASK_NAME = "publishModLocal" - - const val PUBLISH_MOD_TASK_NAME = "publishMod" - -} diff --git a/buildSrc/src/main/kotlin/extensions.kt b/buildSrc/src/main/kotlin/extensions.kt new file mode 100644 index 0000000..52b96c9 --- /dev/null +++ b/buildSrc/src/main/kotlin/extensions.kt @@ -0,0 +1,25 @@ +import org.gradle.api.artifacts.Configuration +import org.gradle.api.attributes.Usage +import org.gradle.api.model.ObjectFactory +import org.gradle.kotlin.dsl.named + +// to be moved into gradle-plugins/builder-plugins... + + +fun Configuration.asProvider() { + isVisible = false + isCanBeResolved = false + isCanBeConsumed = true +} + + +fun Configuration.asConsumer() { + isVisible = false + isCanBeResolved = true + isCanBeConsumed = false +} + +fun Configuration.typescriptAttributes(objects: ObjectFactory): Configuration = + attributes { + attribute(Usage.USAGE_ATTRIBUTE, objects.named("dev.adamko.gradle.factorio.typescriptFiles")) + } diff --git a/gradle-plugins/builder-plugins/build.gradle.kts b/gradle-plugins/builder-plugins/build.gradle.kts index 0f6d586..bd5b119 100644 --- a/gradle-plugins/builder-plugins/build.gradle.kts +++ b/gradle-plugins/builder-plugins/build.gradle.kts @@ -1,8 +1,9 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - `kotlin-dsl` - kotlin("jvm") version embeddedKotlinVersion + id("kafkatorio.conventions.kotlin-dsl") +// `kotlin-dsl` +// kotlin("jvm") version embeddedKotlinVersion } dependencies { @@ -34,20 +35,20 @@ dependencies { implementation(libs.kotlinx.cli) } -val gradleJvmTarget = "11" - -kotlin { - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) - } -} - -kotlinDslPluginOptions { - jvmTarget.set(gradleJvmTarget) -} - -tasks.withType().configureEach { - kotlinOptions { - jvmTarget = gradleJvmTarget - } -} +//val gradleJvmTarget = "11" +// +//kotlin { +// jvmToolchain { +// (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) +// } +//} +// +//kotlinDslPluginOptions { +// jvmTarget.set(gradleJvmTarget) +//} +// +//tasks.withType().configureEach { +// kotlinOptions { +// jvmTarget = gradleJvmTarget +// } +//} diff --git a/gradle-plugins/builder-plugins/modules/common-lib/build.gradle.kts b/gradle-plugins/builder-plugins/modules/common-lib/build.gradle.kts new file mode 100644 index 0000000..6d950b3 --- /dev/null +++ b/gradle-plugins/builder-plugins/modules/common-lib/build.gradle.kts @@ -0,0 +1,24 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + kotlin("jvm") +} + +val gradleJvmTarget = "11" + +dependencies { + implementation(platform(kotlin("bom"))) + implementation(gradleApi()) +} + +kotlin { + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) + } +} + +tasks.withType().configureEach { + kotlinOptions { + jvmTarget = gradleJvmTarget + } +} diff --git a/gradle-plugins/builder-plugins/modules/common-lib/src/main/kotlin/kafkatorio/common/distributions.kt b/gradle-plugins/builder-plugins/modules/common-lib/src/main/kotlin/kafkatorio/common/distributions.kt new file mode 100644 index 0000000..d1ab91f --- /dev/null +++ b/gradle-plugins/builder-plugins/modules/common-lib/src/main/kotlin/kafkatorio/common/distributions.kt @@ -0,0 +1,17 @@ +package kafkatorio.common + +import org.gradle.api.artifacts.Configuration + + +fun Configuration.asProvider() { + isVisible = false + isCanBeResolved = false + isCanBeConsumed = true +} + + +fun Configuration.asConsumer() { + isVisible = false + isCanBeResolved = true + isCanBeConsumed = false +} diff --git a/gradle-plugins/builder-plugins/settings.gradle.kts b/gradle-plugins/builder-plugins/settings.gradle.kts index 039eed3..62dd147 100644 --- a/gradle-plugins/builder-plugins/settings.gradle.kts +++ b/gradle-plugins/builder-plugins/settings.gradle.kts @@ -16,3 +16,16 @@ dependencyResolutionManagement { } } } + +include( + ":modules:common-lib", + + ":modules:build-conventions", + + ":modules:docker-compose", + ":modules:factorio-mod", + ":modules:typescript", +) + + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") diff --git a/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/conventions/infra/docker-compose.gradle.kts b/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/conventions/infra/docker-compose.gradle.kts index 0de989b..3088121 100644 --- a/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/conventions/infra/docker-compose.gradle.kts +++ b/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/conventions/infra/docker-compose.gradle.kts @@ -1,63 +1,63 @@ package kafkatorio.conventions.infra -import kafkatorio.tasks.DockerEnvUpdateTask -import kafkatorio.extensions.DOCKER_COMPOSE_TASK_GROUP -import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs - -plugins { - base - id("kafkatorio.conventions.infra.process-runner") -} - - -val dockerComposeProjectName: String by extra(rootProject.name) -val dockerSrcDir: Directory by extra(layout.projectDirectory.dir("src")) - - -val dockerUp by tasks.registering(Exec::class) { - group = DOCKER_COMPOSE_TASK_GROUP - - dependsOn(tasks.assemble) - logging.captureStandardOutput(LogLevel.LIFECYCLE) - - workingDir = dockerSrcDir.asFile - commandLine = parseSpaceSeparatedArgs(""" docker-compose up -d """) -} - - -val dockerDown by tasks.registering(Exec::class) { - group = DOCKER_COMPOSE_TASK_GROUP - - logging.captureStandardOutput(LogLevel.LIFECYCLE) - - workingDir = dockerSrcDir.asFile - commandLine = parseSpaceSeparatedArgs(""" docker-compose down """) -} - - -val dockerRemove by tasks.registering(Exec::class) { - group = DOCKER_COMPOSE_TASK_GROUP - - logging.captureStandardOutput(LogLevel.LIFECYCLE) - - workingDir = dockerSrcDir.asFile - commandLine = parseSpaceSeparatedArgs(""" docker-compose rm --stop -v -f """) -} - - -tasks.matching { it.name == "processRun" }.configureEach { dependsOn(dockerUp, dockerEnvUpdate) } -tasks.matching { it.name == "processKill" }.configureEach { dependsOn(dockerDown) } - - -val dockerEnvUpdate by tasks.registering(DockerEnvUpdateTask::class) { - dotEnvFile.set(dockerSrcDir.file(".env")) - - properties( - "COMPOSE_PROJECT_NAME" to dockerComposeProjectName, - "KAFKATORIO_VERSION" to project.version, - "REGISTRY_HOST" to providers.gradleProperty("dockerContainerRegistryHost"), - ) -} - - -tasks.assemble { dependsOn(dockerEnvUpdate) } +//import kafkatorio.tasks.DockerEnvUpdateTask +//import kafkatorio.extensions.DOCKER_COMPOSE_TASK_GROUP +//import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs +// +//plugins { +// base +// id("kafkatorio.conventions.infra.process-runner") +//} +// +// +//val dockerComposeProjectName: String by extra(rootProject.name) +//val dockerSrcDir: Directory by extra(layout.projectDirectory.dir("src")) +// +// +//val dockerUp by tasks.registering(Exec::class) { +// group = DOCKER_COMPOSE_TASK_GROUP +// +// dependsOn(tasks.assemble) +// logging.captureStandardOutput(LogLevel.LIFECYCLE) +// +// workingDir = dockerSrcDir.asFile +// commandLine = parseSpaceSeparatedArgs(""" docker-compose up -d """) +//} +// +// +//val dockerDown by tasks.registering(Exec::class) { +// group = DOCKER_COMPOSE_TASK_GROUP +// +// logging.captureStandardOutput(LogLevel.LIFECYCLE) +// +// workingDir = dockerSrcDir.asFile +// commandLine = parseSpaceSeparatedArgs(""" docker-compose down """) +//} +// +// +//val dockerRemove by tasks.registering(Exec::class) { +// group = DOCKER_COMPOSE_TASK_GROUP +// +// logging.captureStandardOutput(LogLevel.LIFECYCLE) +// +// workingDir = dockerSrcDir.asFile +// commandLine = parseSpaceSeparatedArgs(""" docker-compose rm --stop -v -f """) +//} +// +// +//tasks.matching { it.name == "processRun" }.configureEach { dependsOn(dockerUp, dockerEnvUpdate) } +//tasks.matching { it.name == "processKill" }.configureEach { dependsOn(dockerDown) } +// +// +//val dockerEnvUpdate by tasks.registering(DockerEnvUpdateTask::class) { +// dotEnvFile.set(dockerSrcDir.file(".env")) +// +// properties( +// "COMPOSE_PROJECT_NAME" to dockerComposeProjectName, +// "KAFKATORIO_VERSION" to project.version, +// "REGISTRY_HOST" to providers.gradleProperty("dockerContainerRegistryHost"), +// ) +//} +// +// +//tasks.assemble { dependsOn(dockerEnvUpdate) } diff --git a/gradle-plugins/docker-compose/build.gradle.kts b/gradle-plugins/docker-compose/build.gradle.kts index 954b7f0..4108bb7 100644 --- a/gradle-plugins/docker-compose/build.gradle.kts +++ b/gradle-plugins/docker-compose/build.gradle.kts @@ -1,8 +1,9 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - kotlin("jvm") version embeddedKotlinVersion - `kotlin-dsl` + id("kafkatorio.conventions.kotlin-dsl") +// kotlin("jvm") version embeddedKotlinVersion +// `kotlin-dsl` `java-gradle-plugin` } @@ -13,17 +14,17 @@ dependencies { implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable") } -kotlin { - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) - } -} - -tasks.withType().configureEach { - kotlinOptions { - jvmTarget = gradleJvmTarget - } -} +//kotlin { +// jvmToolchain { +// (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) +// } +//} +// +//tasks.withType().configureEach { +// kotlinOptions { +// jvmTarget = gradleJvmTarget +// } +//} gradlePlugin { plugins { diff --git a/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/tasks/DockerComposeExec.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/DockerComposeExec.kt similarity index 79% rename from gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/tasks/DockerComposeExec.kt rename to gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/DockerComposeExec.kt index 8bc28eb..8a11714 100644 --- a/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/tasks/DockerComposeExec.kt +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/DockerComposeExec.kt @@ -1,8 +1,8 @@ -package kafkatorio.tasks +package dev.adamko.geedeecee -import kafkatorio.extensions.filesChecksum import javax.inject.Inject import org.gradle.api.DefaultTask +import org.gradle.api.file.Directory import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty import org.gradle.api.logging.LogLevel @@ -20,8 +20,16 @@ import org.gradle.api.tasks.TaskAction import org.gradle.kotlin.dsl.property import org.gradle.process.ExecOperations import org.gradle.work.NormalizeLineEndings +import org.jetbrains.kotlin.incremental.md5 import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs + +// look into using 'build context' for up-to-date check +// https://stackoverflow.com/questions/38946683/how-to-test-dockerignore-file +// https://github.com/pwaller/docker-show-context +// https://snippets.khromov.se/see-which-files-are-included-in-your-docker-build-context/ + + @CacheableTask @Suppress("UnstableApiUsage") abstract class DockerComposeExec @Inject constructor( @@ -77,5 +85,12 @@ abstract class DockerComposeExec @Inject constructor( companion object { const val DOCKER_COMPOSE_GROUP: String = "docker-compose" + + + private fun Directory.filesChecksum(): Long = asFileTree + .files + .map { it.readBytes() + it.absolutePath.toByteArray() } + .fold(byteArrayOf()) { acc, bytes -> acc + bytes } + .md5() } } diff --git a/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/tasks/DockerEnvUpdateTask.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/DockerEnvUpdateTask.kt similarity index 75% rename from gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/tasks/DockerEnvUpdateTask.kt rename to gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/DockerEnvUpdateTask.kt index a5a335f..eb730e0 100644 --- a/gradle-plugins/builder-plugins/src/main/kotlin/kafkatorio/tasks/DockerEnvUpdateTask.kt +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/DockerEnvUpdateTask.kt @@ -1,7 +1,6 @@ -package kafkatorio.tasks +package dev.adamko.geedeecee import javax.inject.Inject -import kafkatorio.extensions.DOCKER_COMPOSE_TASK_GROUP import org.gradle.api.file.RegularFileProperty import org.gradle.api.logging.LogLevel import org.gradle.api.model.ObjectFactory @@ -12,14 +11,15 @@ import org.gradle.api.tasks.WriteProperties @CacheableTask open class DockerEnvUpdateTask @Inject constructor( - private val objects: ObjectFactory + objects: ObjectFactory ) : WriteProperties() { @Internal + // internal and not abstract so that it can delegate to `super.outputFile` in `init {}` val dotEnvFile: RegularFileProperty = objects.fileProperty() init { - group = DOCKER_COMPOSE_TASK_GROUP + group = GDCPlugin.GCD_TASK_GROUP super.setOutputFile(dotEnvFile) super.getLogging().captureStandardOutput(LogLevel.LIFECYCLE) } diff --git a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCCommandTask.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCCommandTask.kt new file mode 100644 index 0000000..68df53f --- /dev/null +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCCommandTask.kt @@ -0,0 +1,47 @@ +package dev.adamko.geedeecee + +import javax.inject.Inject +import org.gradle.api.DefaultTask +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.logging.LogLevel +import org.gradle.api.provider.ListProperty +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputDirectory +import org.gradle.api.tasks.TaskAction +import org.gradle.process.ExecOperations +import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs + +abstract class GDCCommandTask @Inject constructor( + private val executor: ExecOperations +) : DefaultTask() { + + init { + super.setGroup(GDCPlugin.GCD_TASK_GROUP) + description = "Run a docker-compose command." + + logging.captureStandardOutput(LogLevel.LIFECYCLE) + } + + @get:InputDirectory + abstract val workingDir: DirectoryProperty + + @get:Input + abstract val separatedArgs: ListProperty + + @TaskAction + fun dockerCompose() { + val separatedArgs: List = separatedArgs.get() + + executor.exec { + workingDir(this@GDCCommandTask.workingDir) + commandLine(separatedArgs) + } + } + + @Suppress("FunctionName") + fun `docker-compose`(args: String) { + separatedArgs.addAll( + parseSpaceSeparatedArgs("docker-compose $args") + ) + } +} diff --git a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCPlugin.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCPlugin.kt index d6b0429..ac6d684 100644 --- a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCPlugin.kt +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCPlugin.kt @@ -1,14 +1,17 @@ package dev.adamko.geedeecee import javax.inject.Inject -import org.gradle.api.Plugin -import org.gradle.api.Project +import org.gradle.api.* import org.gradle.api.file.ProjectLayout -import org.gradle.api.provider.ProviderFactory -import org.gradle.kotlin.dsl.create +import org.gradle.api.logging.* +import org.gradle.api.provider.* +import org.gradle.api.tasks.* +import org.gradle.kotlin.dsl.* +import org.gradle.language.base.plugins.LifecycleBasePlugin import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs +@Suppress("UnstableApiUsage") abstract class GDCPlugin @Inject constructor( private val providers: ProviderFactory, private val layout: ProjectLayout, @@ -16,27 +19,78 @@ abstract class GDCPlugin @Inject constructor( override fun apply(target: Project) { - target.createSettings() + target.plugins.apply(LifecycleBasePlugin::class) + + val gdcSettings = target.createSettings() + + val dockerComposeEnvUpdate by target.tasks.registering(DockerEnvUpdateTask::class) { + dotEnvFile.set(gdcSettings.srcDir.file(".env")) + +// properties( +// "COMPOSE_PROJECT_NAME" to gdcSettings.composeProjectName, +// "KAFKATORIO_VERSION" to gdcSettings.composeProjectVersion, +// "REGISTRY_HOST" to providers.gradleProperty("dockerContainerRegistryHost"), +// ) + } + + val dockerComposeUp by target.tasks.registering(GDCCommandTask::class) { + `docker-compose`("up -d") + } + val dockerComposeDown by target.tasks.registering(GDCCommandTask::class) { + `docker-compose`("down") + } + val dockerComposeStop by target.tasks.registering(GDCCommandTask::class) { + `docker-compose`("stop") + } + val dockerComposeBuild by target.tasks.registering(GDCCommandTask::class) { + `docker-compose`("build") + } + val dockerComposeRemove by target.tasks.registering(GDCCommandTask::class) { + `docker-compose`("rm --stop -v -f") + } + + dockerComposeUp.configure { dependsOn(dockerComposeBuild) } + dockerComposeRemove.configure { dependsOn(dockerComposeDown) } + + target.tasks.withType().configureEach { + workingDir.convention(gdcSettings.srcDir) + dependsOn(dockerComposeEnvUpdate) + } + + val assembleTasks = target.tasks.matching { LifecycleBasePlugin.ASSEMBLE_TASK_NAME == it.name } + + assembleTasks.configureEach { + dependsOn(dockerComposeEnvUpdate) + } + + dockerComposeUp.configure { + dependsOn(assembleTasks) + } + } private fun Project.createSettings(): GDCSettings = extensions.create(GDC_EXTENSION_NAME).apply { composeProjectName.convention(providers.provider { project.name }) + composeProjectVersion.convention(providers.provider { project.name }) + containerRegistryHost.convention(providers.gradleProperty("dockerContainerRegistryHost")) srcDir.convention(layout.projectDirectory.dir("docker")) dotEnv.put("COMPOSE_PROJECT_NAME", composeProjectName) - dotEnv.put("PROJECT_VERSION", providers.provider { project.version.toString() }) - dotEnv.put("REGISTRY_HOST", providers.gradleProperty("dockerContainerRegistryHost")) + dotEnv.put("PROJECT_VERSION", composeProjectVersion) + dotEnv.put("REGISTRY_HOST", containerRegistryHost) - enabled.convention( - providers.exec { - commandLine = parseSpaceSeparatedArgs("docker info") - isIgnoreExitValue = true - }.result.map { - it.exitValue == 0 - } - ) + enabled.convention(isDockerActive()) + } + + + private fun isDockerActive(): Provider = + providers.exec { + commandLine = parseSpaceSeparatedArgs("docker info") + isIgnoreExitValue = true + }.result.map { + it.exitValue == 0 } diff --git a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCSettings.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCSettings.kt index 64300f5..238c106 100644 --- a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCSettings.kt +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/GDCSettings.kt @@ -11,6 +11,12 @@ interface GDCSettings { @get:Input val composeProjectName: Property + @get:Input + val composeProjectVersion: Property + + @get:Input + val containerRegistryHost: Property + @get:Internal val srcDir: DirectoryProperty diff --git a/gradle-plugins/factorio-gradle/build.gradle.kts b/gradle-plugins/factorio-gradle/build.gradle.kts index ae27420..9c5d55e 100644 --- a/gradle-plugins/factorio-gradle/build.gradle.kts +++ b/gradle-plugins/factorio-gradle/build.gradle.kts @@ -1,10 +1,12 @@ +import kafkatorio.conventions.overrideKotlinLanguageVersion import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - `kotlin-dsl` - kotlin("jvm") version embeddedKotlinVersion + id("kafkatorio.conventions.kotlin-dsl") + kotlin("plugin.serialization") version embeddedKotlinVersion } + dependencies { implementation(platform(libs.kotlin.bom)) @@ -32,20 +34,42 @@ dependencies { } -val gradleJvmTarget = "11" +//val gradleJvmTarget = 11 +// +//kotlin { +// jvmToolchain(gradleJvmTarget) +//} +// +//kotlinDslPluginOptions { +// jvmTarget.set("$gradleJvmTarget") +//} +// +//tasks.withType().configureEach { +// kotlinOptions { +// jvmTarget = "$gradleJvmTarget" +// } +//} -kotlin { - jvmToolchain { - (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) +gradlePlugin { + plugins { + create("factorioMod") { + displayName = "Factorio Mod" + id = "dev.adamko.factorio-mod" + implementationClass = "dev.adamko.gradle.factorio.FactorioModPlugin" + } } } -kotlinDslPluginOptions { - jvmTarget.set(gradleJvmTarget) -} -tasks.withType().configureEach { - kotlinOptions { - jvmTarget = gradleJvmTarget - } -} +overrideKotlinLanguageVersion("1.6") + +//val gradleKotlinTarget = "1.7" +// +//afterEvaluate { +// tasks.withType().configureEach { +// kotlinOptions { +// apiVersion = gradleKotlinTarget +// languageVersion = gradleKotlinTarget +// } +// } +//} diff --git a/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/FactorioModInstallTask.kt b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/FactorioModInstallTask.kt new file mode 100644 index 0000000..f49ecb9 --- /dev/null +++ b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/FactorioModInstallTask.kt @@ -0,0 +1,43 @@ +package dev.adamko.gradle.factorio + +import javax.inject.Inject +import org.gradle.api.DefaultTask +import org.gradle.api.file.ConfigurableFileCollection +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.FileSystemOperations +import org.gradle.api.internal.file.FileOperations +import org.gradle.api.tasks.InputFiles +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.TaskAction + +abstract class FactorioModInstallTask @Inject constructor( + private val files: FileSystemOperations, +) : DefaultTask() { + + @get:Internal + abstract val clientModDirectory: DirectoryProperty + + @get:InputFiles + abstract val modFiles: ConfigurableFileCollection + + init { + description = "Copy the mod to the Factorio client" + group = FactorioModPlugin.TASK_GROUP + + super.onlyIf { + require(it is FactorioModInstallTask) + it.clientModDirectory.asFile.get().exists() + } + } + + @TaskAction + fun install() { + logger.lifecycle("Copying mod from $modFiles to $clientModDirectory") + + files.copy { + from(modFiles) + into(clientModDirectory) + } + } + +} diff --git a/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/factorio_gradle/FactorioModSettings.kt b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/FactorioModSettings.kt similarity index 91% rename from gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/factorio_gradle/FactorioModSettings.kt rename to gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/FactorioModSettings.kt index c43f697..bc427d2 100644 --- a/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/factorio_gradle/FactorioModSettings.kt +++ b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/FactorioModSettings.kt @@ -1,4 +1,4 @@ -package dev.adamko.factorio_gradle +package dev.adamko.gradle.factorio import org.gradle.api.file.DirectoryProperty import org.gradle.api.file.RegularFileProperty diff --git a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/FactorioModPortalPublishClient.kt b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/FactorioModPortalPublishClient.kt similarity index 98% rename from buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/FactorioModPortalPublishClient.kt rename to gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/FactorioModPortalPublishClient.kt index 5d27eda..f8d8667 100644 --- a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/FactorioModPortalPublishClient.kt +++ b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/FactorioModPortalPublishClient.kt @@ -1,4 +1,4 @@ -package dev.adamko.kafkatorio.factoriomod.portal +package dev.adamko.gradle.factorio.mod_portal import io.ktor.client.HttpClient import io.ktor.client.engine.cio.CIO diff --git a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/FactorioModPublishTask.kt b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/FactorioModPublishTask.kt similarity index 95% rename from buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/FactorioModPublishTask.kt rename to gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/FactorioModPublishTask.kt index 0161949..32e1002 100644 --- a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/FactorioModPublishTask.kt +++ b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/FactorioModPublishTask.kt @@ -1,6 +1,6 @@ -package dev.adamko.kafkatorio.factoriomod.portal +package dev.adamko.gradle.factorio.mod_portal -import dev.adamko.kafkatorio.factoriomod.FactorioMod +import dev.adamko.gradle.factorio.FactorioModPlugin import io.ktor.http.URLBuilder import io.ktor.http.takeFrom import javax.inject.Inject @@ -60,7 +60,7 @@ abstract class FactorioModPublishTask @Inject constructor( init { - group = FactorioMod.TASK_GROUP + group = FactorioModPlugin.TASK_GROUP } diff --git a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/model.kt b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/model.kt similarity index 98% rename from buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/model.kt rename to gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/model.kt index 61f0e61..788c5df 100644 --- a/buildSrc/src/main/kotlin/dev/adamko/kafkatorio/factoriomod/portal/model.kt +++ b/gradle-plugins/factorio-gradle/src/main/kotlin/dev/adamko/gradle/factorio/mod_portal/model.kt @@ -1,4 +1,4 @@ -package dev.adamko.kafkatorio.factoriomod.portal +package dev.adamko.gradle.factorio.mod_portal import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable diff --git a/gradle-plugins/settings-plugins/build.gradle.kts b/gradle-plugins/settings-plugins/build.gradle.kts index 9e00fd7..a6e6a32 100644 --- a/gradle-plugins/settings-plugins/build.gradle.kts +++ b/gradle-plugins/settings-plugins/build.gradle.kts @@ -1,3 +1,4 @@ +import org.gradle.kotlin.dsl.support.expectedKotlinDslPluginsVersion import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -11,6 +12,10 @@ dependencies { // This project should only be providing simple plugins for configuring Gradle without // dependencies. Try to avoid setting dependencies here, else the Gradle script classpath might // get polluted and messy. + + implementation("org.gradle.kotlin:gradle-kotlin-dsl-plugins:$expectedKotlinDslPluginsVersion") +// implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${embeddedKotlinVersion}") + implementation("org.jetbrains.kotlin:kotlin-gradle-plugin:${libs.versions.kotlin.get()}") } kotlin { diff --git a/gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlin-dsl.gradle.kts b/gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlin-dsl.gradle.kts new file mode 100644 index 0000000..2dadd26 --- /dev/null +++ b/gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlin-dsl.gradle.kts @@ -0,0 +1,30 @@ +package kafkatorio.conventions + +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + id("org.gradle.kotlin.kotlin-dsl") + kotlin("jvm") +} + +val gradleJvmTarget = 11 + +//kotlin { +// jvmToolchain(gradleJvmTarget) +//} + +kotlin { + jvmToolchain { + (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget)) + } +} + +kotlinDslPluginOptions { + jvmTarget.set("$gradleJvmTarget") +} + +tasks.withType().configureEach { + kotlinOptions { + jvmTarget = "$gradleJvmTarget" + } +} diff --git a/gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlinDslExtensions.kt b/gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlinDslExtensions.kt new file mode 100644 index 0000000..72d1709 --- /dev/null +++ b/gradle-plugins/settings-plugins/src/main/kotlin/kafkatorio/conventions/kotlinDslExtensions.kt @@ -0,0 +1,21 @@ +package kafkatorio.conventions + +import org.gradle.api.Project +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.gradle.jvm.toolchain.JavaLanguageVersion +import org.gradle.jvm.toolchain.JavaToolchainSpec +import org.gradle.kotlin.dsl.plugins.dsl.* +import org.gradle.kotlin.dsl.withType + +fun Project.overrideKotlinLanguageVersion( + gradleKotlinTarget: String = "1.6" +) { + afterEvaluate { + tasks.withType().configureEach { + kotlinOptions { + apiVersion = gradleKotlinTarget + languageVersion = gradleKotlinTarget + } + } + } +} diff --git a/modules/events-library/build.gradle.kts b/modules/events-library/build.gradle.kts index ac2a956..31ae1c0 100644 --- a/modules/events-library/build.gradle.kts +++ b/modules/events-library/build.gradle.kts @@ -1,5 +1,3 @@ -import kafkatorio.distributions.asProvider -import kafkatorio.distributions.typescriptAttributes import kafkatorio.tasks.GenerateTypeScriptTask import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinJvmCompilation @@ -8,6 +6,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("kafkatorio.conventions.lang.kotlin-multiplatform") + id("dev.adamko.factorio-mod") // only needed for 'attributes' - need to split up the mod? kotlin("plugin.serialization") distribution } @@ -28,8 +27,10 @@ kotlin { jvmTarget = "11" } } - testRuns["test"].executionTask.configure { - useJUnitPlatform() + testRuns.configureEach { + executionTask.configure { + useJUnitPlatform() + } } } diff --git a/modules/events-mod/build.gradle.kts b/modules/events-mod/build.gradle.kts index faa546e..89e2bf6 100644 --- a/modules/events-mod/build.gradle.kts +++ b/modules/events-mod/build.gradle.kts @@ -1,8 +1,6 @@ -import dev.adamko.kafkatorio.factoriomod.portal.FactorioModPublishTask -import kafkatorio.distributions.asConsumer -import kafkatorio.distributions.asProvider -import kafkatorio.distributions.factorioModAttributes -import kafkatorio.distributions.typescriptAttributes +import dev.adamko.gradle.factorio.mod_portal.FactorioModPublishTask +import dev.adamko.gradle.factorio.typescriptAttributes +import dev.adamko.gradle.factorio.factorioModAttributes import kafkatorio.tasks.TypescriptToLuaTask import kotlinx.serialization.json.put import kotlinx.serialization.json.putJsonObject @@ -13,6 +11,7 @@ import org.gradle.plugins.ide.idea.model.Path as IdeaImlPath plugins { id("kafkatorio.conventions.lang.node") + id("dev.adamko.factorio-mod") distribution } diff --git a/modules/events-server-syslog/build.gradle.kts b/modules/events-server-syslog/build.gradle.kts index e46fa72..8d1bad2 100644 --- a/modules/events-server-syslog/build.gradle.kts +++ b/modules/events-server-syslog/build.gradle.kts @@ -3,12 +3,13 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("kafkatorio.conventions.lang.kotlin-jvm") + id("dev.adamko.geedeecee") kotlin("plugin.serialization") application } -description = "Consumes Syslog Kafkatorio packets and sends them to Kafka" +description = "Provides a Syslog server that receives Kafkatorio packets and forwards them to Kafka" val projectId: String by project.extra diff --git a/modules/events-server-web/build.gradle.kts b/modules/events-server-web/build.gradle.kts index d0ebc85..a9f506a 100644 --- a/modules/events-server-web/build.gradle.kts +++ b/modules/events-server-web/build.gradle.kts @@ -3,6 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("kafkatorio.conventions.lang.kotlin-jvm") + id("dev.adamko.geedeecee") kotlin("plugin.serialization") application } diff --git a/modules/infra-factorio-client/build.gradle.kts b/modules/infra-factorio-client/build.gradle.kts index 622ba2b..0f2f124 100644 --- a/modules/infra-factorio-client/build.gradle.kts +++ b/modules/infra-factorio-client/build.gradle.kts @@ -1,6 +1,5 @@ -import dev.adamko.kafkatorio.factoriomod.FactorioMod -import kafkatorio.distributions.asConsumer -import kafkatorio.distributions.factorioModAttributes +import dev.adamko.gradle.factorio.FactorioModPlugin +import dev.adamko.gradle.factorio.factorioModAttributes import kafkatorio.extensions.not import kafkatorio.tasks.ProcessRunningSpec import org.gradle.kotlin.dsl.support.serviceOf @@ -8,6 +7,7 @@ import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs plugins { id("kafkatorio.conventions.infra.process-runner") + id("dev.adamko.factorio-mod") } description = "Start the Factorio game client" @@ -26,10 +26,10 @@ val steamExe: RegularFileProperty = objects.fileProperty().apply { } } -val factorioMod: Configuration by configurations.creating { - asConsumer() - factorioModAttributes(objects) -} +//val factorioMod: Configuration by configurations.creating { +// asConsumer() +// factorioModAttributes(objects) +//} dependencies { factorioMod(projects.modules.eventsMod) @@ -39,7 +39,7 @@ dependencies { // val deployModToLocalClient by tasks.registering(Copy::class) { description = "Copy the mod to the Factorio client" - group = FactorioMod.TASK_GROUP + group = FactorioModPlugin.TASK_GROUP val clientModsDirectory123 = clientModsDirectory @@ -61,7 +61,7 @@ fun ExecOperations.isFactorioRunning(): Spec = ProcessRunningSpec(this, "f val clientLaunch by tasks.registering(Exec::class) { description = "Run local Factorio Steam game client" - group = FactorioMod.TASK_GROUP + group = FactorioModPlugin.TASK_GROUP val steamExe123 = steamExe val clientModsDirectory444 = clientModsDirectory @@ -83,7 +83,7 @@ val clientLaunch by tasks.registering(Exec::class) { val clientKill by tasks.registering(Exec::class) { description = "Stop the local Factorio Steam game client" - group = FactorioMod.TASK_GROUP + group = FactorioModPlugin.TASK_GROUP onlyIf(serviceOf().isFactorioRunning()) @@ -93,8 +93,8 @@ val clientKill by tasks.registering(Exec::class) { // -tasks.register(FactorioMod.PUBLISH_MOD_LOCAL_TASK_NAME) { - group = FactorioMod.TASK_GROUP +tasks.register(FactorioModPlugin.PUBLISH_MOD_LOCAL_TASK_NAME) { + group = FactorioModPlugin.TASK_GROUP dependsOn(deployModToLocalClient) } diff --git a/modules/infra-factorio-server/build.gradle.kts b/modules/infra-factorio-server/build.gradle.kts index d97aeab..835bcaf 100644 --- a/modules/infra-factorio-server/build.gradle.kts +++ b/modules/infra-factorio-server/build.gradle.kts @@ -1,21 +1,22 @@ -import dev.adamko.kafkatorio.factoriomod.FactorioMod -import kafkatorio.distributions.asConsumer -import kafkatorio.distributions.factorioModAttributes -import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs +import dev.adamko.gradle.factorio.FactorioModPlugin plugins { - id("kafkatorio.conventions.infra.docker-compose") + id("dev.adamko.geedeecee") + id("dev.adamko.factorio-mod") + idea } -val dockerSrcDir: Directory by extra -val factorioServerDataDir: Directory = dockerSrcDir.dir("factorio-server") +//val dockerSrcDir: Directory by extra +//val factorioServerDataDir: Directory = dockerSrcDir.dir("factorio-server") +val factorioServerDataDir: DirectoryProperty = objects.directoryProperty() + .convention(geedeecee.srcDir.dir("factorio-server")) -val factorioMod: Configuration by configurations.creating { - asConsumer() - factorioModAttributes(objects) -} +//val factorioMod: Configuration by configurations.creating { +// asConsumer() +// factorioModAttributes(objects) +//} dependencies { @@ -25,13 +26,14 @@ dependencies { val deployModToLocalServer by tasks.registering(Copy::class) { description = "Copy the mod to the Factorio Docker server" - group = FactorioMod.TASK_GROUP + group = FactorioModPlugin.TASK_GROUP dependsOn(factorioMod) - from( - provider { factorioMod.incoming.artifacts.artifactFiles.files } - ) +// from( +// provider { factorioMod.incoming.artifacts.artifactFiles.files } +// ) + from(configurations.factorioMod.map { it.incoming.artifacts.artifactFiles.files }) into(factorioServerDataDir.dir("mods")) doLast { @@ -40,12 +42,12 @@ val deployModToLocalServer by tasks.registering(Copy::class) { } -tasks.dockerDown { - commandLine = parseSpaceSeparatedArgs(""" docker-compose stop """) -} +//tasks.dockerComposeDown { +// commandLine = parseSpaceSeparatedArgs(""" docker-compose stop """) +//} -tasks.dockerUp { +tasks.dockerComposeUp { dependsOn( deployModToLocalServer, ":modules:infra-kafka-cluster:processRun", @@ -56,7 +58,7 @@ tasks.dockerUp { val kafkatorioServerToken: String by project -tasks.dockerEnvUpdate { +tasks.dockerComposeEnvUpdate { properties( "FACTORIO_VERSION" to libs.versions.factorio.get(), "KAFKATORIO_TOKEN" to kafkatorioServerToken, @@ -64,8 +66,8 @@ tasks.dockerEnvUpdate { } -tasks.register(FactorioMod.PUBLISH_MOD_LOCAL_TASK_NAME) { - group = FactorioMod.TASK_GROUP +tasks.register(FactorioModPlugin.PUBLISH_MOD_LOCAL_TASK_NAME) { + group = FactorioModPlugin.TASK_GROUP dependsOn(deployModToLocalServer) } @@ -79,5 +81,5 @@ idea { val runFactorioServer by tasks.registering { group = rootProject.name - dependsOn(tasks.processRun) + dependsOn(tasks.dockerComposeUp) } diff --git a/modules/infra-kafka-cluster/build.gradle.kts b/modules/infra-kafka-cluster/build.gradle.kts index f56f49f..7f61e81 100644 --- a/modules/infra-kafka-cluster/build.gradle.kts +++ b/modules/infra-kafka-cluster/build.gradle.kts @@ -1,10 +1,14 @@ plugins { - id("kafkatorio.conventions.infra.docker-compose") + id("dev.adamko.geedeecee") } description = "Kafka cluster" -tasks.dockerEnvUpdate { +geedeecee { + srcDir.set(layout.projectDirectory.dir("src")) +} + +tasks.dockerComposeEnvUpdate { properties( "GRAFANA_VERSION" to libs.versions.grafana, "PROMETHEUS_VERSION" to libs.versions.prometheus, @@ -31,5 +35,5 @@ tasks.dockerEnvUpdate { val runKafkaCluster by tasks.registering { group = rootProject.name - dependsOn(tasks.processRun) + dependsOn(tasks.dockerComposeUp) } diff --git a/modules/infra-kafka-pipe/build.gradle.kts b/modules/infra-kafka-pipe/build.gradle.kts index 4bfb356..132a027 100644 --- a/modules/infra-kafka-pipe/build.gradle.kts +++ b/modules/infra-kafka-pipe/build.gradle.kts @@ -1,23 +1,22 @@ -import kafkatorio.tasks.DockerComposeExec +import dev.adamko.geedeecee.DockerComposeExec plugins { - id("kafkatorio.conventions.infra.docker-compose") + id("dev.adamko.geedeecee") } description = "Send events from a Factorio server to a Kafka topic " -val dockerSrcDir: Directory by extra +//val dockerSrcDir: Directory by extra -tasks.dockerUp { +tasks.dockerComposeUp { dependsOn(":modules:infra-kafka-cluster:dockerUp") } val dockerBuildKafkaPipe by tasks.registering(DockerComposeExec::class) { - dependsOn(tasks.dockerEnvUpdate) - dockerComposeDir.set(dockerSrcDir) + dockerComposeDir.set(geedeecee.srcDir) command.set("docker-compose build kafka-pipe") diff --git a/modules/web-map/build.gradle.kts b/modules/web-map/build.gradle.kts index c83c02f..8526f8b 100644 --- a/modules/web-map/build.gradle.kts +++ b/modules/web-map/build.gradle.kts @@ -1,4 +1,3 @@ -import kafkatorio.tasks.DockerEnvUpdateTask import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler import org.jetbrains.kotlin.gradle.targets.js.webpack.KotlinWebpackConfig @@ -7,6 +6,7 @@ plugins { id("kafkatorio.conventions.lang.kotlin-js") id("io.kvision") kotlin("plugin.serialization") + id("dev.adamko.geedeecee") } @@ -115,17 +115,18 @@ fun KotlinDependencyHandler.kvision( implementation("io.kvision:$module:${version.get()}", configure) } +geedeecee { + srcDir.set(layout.projectDirectory.dir("docker")) +} -val dockerEnvUpdate by tasks.registering(DockerEnvUpdateTask::class) { - dotEnvFile.set(layout.projectDirectory.file("docker/.env")) - +tasks.dockerComposeEnvUpdate { properties( - "COMPOSE_PROJECT_NAME" to rootProject.name, "KAFKATORIO_VERSION" to project.version, "REGISTRY_HOST" to "dcr.adamko.dev:5000", ) } -tasks.assemble { dependsOn(dockerEnvUpdate) } + +tasks.assemble { dependsOn(tasks.dockerComposeEnvUpdate) } val installThemeCss by tasks.registering(Copy::class) {