migrate docker-compose convention plugin out of buildSrc
This commit is contained in:
parent
105555bf6c
commit
f804c39a3b
32 changed files with 564 additions and 239 deletions
|
|
@ -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<KotlinCompile>().configureEach {
|
||||
kotlinOptions {
|
||||
jvmTarget = gradleJvmTarget
|
||||
}
|
||||
}
|
||||
//val gradleJvmTarget = "11"
|
||||
//
|
||||
//kotlin {
|
||||
// jvmToolchain {
|
||||
// (this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget))
|
||||
// }
|
||||
//}
|
||||
//
|
||||
//kotlinDslPluginOptions {
|
||||
// jvmTarget.set(gradleJvmTarget)
|
||||
//}
|
||||
//
|
||||
//tasks.withType<KotlinCompile>().configureEach {
|
||||
// kotlinOptions {
|
||||
// jvmTarget = gradleJvmTarget
|
||||
// }
|
||||
//}
|
||||
|
|
|
|||
|
|
@ -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<KotlinCompile>().configureEach {
|
||||
kotlinOptions {
|
||||
jvmTarget = gradleJvmTarget
|
||||
}
|
||||
}
|
||||
|
|
@ -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
|
||||
}
|
||||
|
|
@ -16,3 +16,16 @@ dependencyResolutionManagement {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
include(
|
||||
":modules:common-lib",
|
||||
|
||||
":modules:build-conventions",
|
||||
|
||||
":modules:docker-compose",
|
||||
":modules:factorio-mod",
|
||||
":modules:typescript",
|
||||
)
|
||||
|
||||
|
||||
enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||
|
|
|
|||
|
|
@ -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) }
|
||||
|
|
|
|||
|
|
@ -1,81 +0,0 @@
|
|||
package kafkatorio.tasks
|
||||
|
||||
import kafkatorio.extensions.filesChecksum
|
||||
import javax.inject.Inject
|
||||
import org.gradle.api.DefaultTask
|
||||
import org.gradle.api.file.DirectoryProperty
|
||||
import org.gradle.api.file.RegularFileProperty
|
||||
import org.gradle.api.logging.LogLevel
|
||||
import org.gradle.api.model.ObjectFactory
|
||||
import org.gradle.api.provider.Property
|
||||
import org.gradle.api.provider.ProviderFactory
|
||||
import org.gradle.api.tasks.CacheableTask
|
||||
import org.gradle.api.tasks.Input
|
||||
import org.gradle.api.tasks.InputDirectory
|
||||
import org.gradle.api.tasks.OutputFile
|
||||
import org.gradle.api.tasks.PathSensitive
|
||||
import org.gradle.api.tasks.PathSensitivity
|
||||
import org.gradle.api.tasks.SkipWhenEmpty
|
||||
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.util.parseSpaceSeparatedArgs
|
||||
|
||||
@CacheableTask
|
||||
@Suppress("UnstableApiUsage")
|
||||
abstract class DockerComposeExec @Inject constructor(
|
||||
private val executor: ExecOperations,
|
||||
private val objects: ObjectFactory,
|
||||
private val providers: ProviderFactory,
|
||||
) : DefaultTask() {
|
||||
|
||||
@get:InputDirectory
|
||||
@get:SkipWhenEmpty
|
||||
@get:PathSensitive(PathSensitivity.RELATIVE)
|
||||
@get:NormalizeLineEndings
|
||||
abstract val dockerComposeDir: DirectoryProperty
|
||||
|
||||
@get:Input
|
||||
abstract val command: Property<String>
|
||||
|
||||
@get:Input
|
||||
val dockerIsActive: Property<Boolean> = objects.property<Boolean>().convention(
|
||||
providers.exec {
|
||||
commandLine = parseSpaceSeparatedArgs("docker info")
|
||||
isIgnoreExitValue = true
|
||||
}.result.map {
|
||||
it.exitValue == 0
|
||||
}
|
||||
)
|
||||
|
||||
@get:OutputFile
|
||||
val stateFile: RegularFileProperty = objects.fileProperty().convention {
|
||||
temporaryDir.resolve("docker-files.md5")
|
||||
}
|
||||
|
||||
init {
|
||||
group = DOCKER_COMPOSE_GROUP
|
||||
logging.captureStandardOutput(LogLevel.LIFECYCLE)
|
||||
|
||||
super.onlyIf { task ->
|
||||
require(task is DockerComposeExec)
|
||||
task.dockerIsActive.getOrElse(false)
|
||||
}
|
||||
}
|
||||
|
||||
@TaskAction
|
||||
fun exec() {
|
||||
executor.exec {
|
||||
workingDir = dockerComposeDir.asFile.get()
|
||||
commandLine = parseSpaceSeparatedArgs(command.get())
|
||||
}
|
||||
|
||||
val inputChecksum = dockerComposeDir.get().filesChecksum()
|
||||
stateFile.get().asFile.writeText("$inputChecksum")
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val DOCKER_COMPOSE_GROUP: String = "docker-compose"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,27 +0,0 @@
|
|||
package kafkatorio.tasks
|
||||
|
||||
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
|
||||
import org.gradle.api.tasks.CacheableTask
|
||||
import org.gradle.api.tasks.Internal
|
||||
import org.gradle.api.tasks.WriteProperties
|
||||
|
||||
|
||||
@CacheableTask
|
||||
open class DockerEnvUpdateTask @Inject constructor(
|
||||
private val objects: ObjectFactory
|
||||
) : WriteProperties() {
|
||||
|
||||
@Internal
|
||||
val dotEnvFile: RegularFileProperty = objects.fileProperty()
|
||||
|
||||
init {
|
||||
group = DOCKER_COMPOSE_TASK_GROUP
|
||||
super.setOutputFile(dotEnvFile)
|
||||
super.getLogging().captureStandardOutput(LogLevel.LIFECYCLE)
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue