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,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