pottering about with making a docker-compose plugin
This commit is contained in:
parent
16dc72ae71
commit
805d4c8170
7 changed files with 177 additions and 6 deletions
|
|
@ -45,10 +45,8 @@ val dockerRemove by tasks.registering(Exec::class) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
afterEvaluate {
|
tasks.matching { it.name == "processRun" }.configureEach { dependsOn(dockerUp, dockerEnvUpdate) }
|
||||||
tasks.named("processRun") { dependsOn(dockerUp, dockerEnvUpdate) }
|
tasks.matching { it.name == "processKill" }.configureEach { dependsOn(dockerDown) }
|
||||||
tasks.named("processKill") { dependsOn(dockerDown) }
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
val dockerEnvUpdate by tasks.registering(DockerEnvUpdateTask::class) {
|
val dockerEnvUpdate by tasks.registering(DockerEnvUpdateTask::class) {
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ import org.gradle.work.NormalizeLineEndings
|
||||||
import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
|
import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
|
||||||
|
|
||||||
@CacheableTask
|
@CacheableTask
|
||||||
|
@Suppress("UnstableApiUsage")
|
||||||
abstract class DockerComposeExec @Inject constructor(
|
abstract class DockerComposeExec @Inject constructor(
|
||||||
private val executor: ExecOperations,
|
private val executor: ExecOperations,
|
||||||
private val objects: ObjectFactory,
|
private val objects: ObjectFactory,
|
||||||
|
|
@ -57,8 +58,9 @@ abstract class DockerComposeExec @Inject constructor(
|
||||||
group = DOCKER_COMPOSE_GROUP
|
group = DOCKER_COMPOSE_GROUP
|
||||||
logging.captureStandardOutput(LogLevel.LIFECYCLE)
|
logging.captureStandardOutput(LogLevel.LIFECYCLE)
|
||||||
|
|
||||||
super.onlyIf {
|
super.onlyIf { task ->
|
||||||
it is DockerComposeExec && it.dockerIsActive.getOrElse(false)
|
require(task is DockerComposeExec)
|
||||||
|
task.dockerIsActive.getOrElse(false)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
36
gradle-plugins/docker-compose/build.gradle.kts
Normal file
36
gradle-plugins/docker-compose/build.gradle.kts
Normal file
|
|
@ -0,0 +1,36 @@
|
||||||
|
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
kotlin("jvm") version embeddedKotlinVersion
|
||||||
|
`kotlin-dsl`
|
||||||
|
`java-gradle-plugin`
|
||||||
|
}
|
||||||
|
|
||||||
|
val gradleJvmTarget = "11"
|
||||||
|
|
||||||
|
dependencies {
|
||||||
|
implementation(platform(libs.kotlin.bom))
|
||||||
|
implementation("org.jetbrains.kotlin:kotlin-compiler-embeddable")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
jvmToolchain {
|
||||||
|
(this as JavaToolchainSpec).languageVersion.set(JavaLanguageVersion.of(gradleJvmTarget))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
tasks.withType<KotlinCompile>().configureEach {
|
||||||
|
kotlinOptions {
|
||||||
|
jvmTarget = gradleJvmTarget
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
gradlePlugin {
|
||||||
|
plugins {
|
||||||
|
create("geedeecee") {
|
||||||
|
id = "dev.adamko.geedeecee"
|
||||||
|
displayName = "geedeecee - Gradle Docker Compose"
|
||||||
|
implementationClass = "dev.adamko.geedeecee.GDCPlugin"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
18
gradle-plugins/docker-compose/settings.gradle.kts
Normal file
18
gradle-plugins/docker-compose/settings.gradle.kts
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
rootProject.name = "docker-compose"
|
||||||
|
|
||||||
|
pluginManagement {
|
||||||
|
@Suppress("UnstableApiUsage")
|
||||||
|
includeBuild("../settings-plugins/")
|
||||||
|
}
|
||||||
|
|
||||||
|
plugins {
|
||||||
|
id("kafkatorio.convention.settings.repositories")
|
||||||
|
}
|
||||||
|
|
||||||
|
dependencyResolutionManagement {
|
||||||
|
versionCatalogs {
|
||||||
|
create("libs") {
|
||||||
|
from(files("../../gradle/libs.versions.toml"))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,48 @@
|
||||||
|
package dev.adamko.geedeecee
|
||||||
|
|
||||||
|
import javax.inject.Inject
|
||||||
|
import org.gradle.api.Plugin
|
||||||
|
import org.gradle.api.Project
|
||||||
|
import org.gradle.api.file.ProjectLayout
|
||||||
|
import org.gradle.api.provider.ProviderFactory
|
||||||
|
import org.gradle.kotlin.dsl.create
|
||||||
|
import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
|
||||||
|
|
||||||
|
|
||||||
|
abstract class GDCPlugin @Inject constructor(
|
||||||
|
private val providers: ProviderFactory,
|
||||||
|
private val layout: ProjectLayout,
|
||||||
|
) : Plugin<Project> {
|
||||||
|
|
||||||
|
|
||||||
|
override fun apply(target: Project) {
|
||||||
|
target.createSettings()
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private fun Project.createSettings(): GDCSettings =
|
||||||
|
extensions.create<GDCSettings>(GDC_EXTENSION_NAME).apply {
|
||||||
|
composeProjectName.convention(providers.provider { project.name })
|
||||||
|
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"))
|
||||||
|
|
||||||
|
enabled.convention(
|
||||||
|
providers.exec {
|
||||||
|
commandLine = parseSpaceSeparatedArgs("docker info")
|
||||||
|
isIgnoreExitValue = true
|
||||||
|
}.result.map {
|
||||||
|
it.exitValue == 0
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
const val GDC_EXTENSION_NAME = "geedeecee"
|
||||||
|
const val GCD_TASK_GROUP = "docker-compose"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
package dev.adamko.geedeecee
|
||||||
|
|
||||||
|
import org.gradle.api.file.DirectoryProperty
|
||||||
|
import org.gradle.api.provider.MapProperty
|
||||||
|
import org.gradle.api.provider.Property
|
||||||
|
import org.gradle.api.tasks.Input
|
||||||
|
import org.gradle.api.tasks.Internal
|
||||||
|
|
||||||
|
interface GDCSettings {
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
val composeProjectName: Property<String>
|
||||||
|
|
||||||
|
@get:Internal
|
||||||
|
val srcDir: DirectoryProperty
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
val dotEnv: MapProperty<String, String>
|
||||||
|
|
||||||
|
@get:Input
|
||||||
|
val enabled: Property<Boolean>
|
||||||
|
|
||||||
|
// @Suppress("PropertyName", "FunctionName")
|
||||||
|
// abstract class DotEnv(
|
||||||
|
// private val dotEnv: MapProperty<String, String>,
|
||||||
|
// private val providers: ProviderFactory,
|
||||||
|
// ) {
|
||||||
|
// var COMPOSE_API_VERSION: Provider<String> by dotEnv
|
||||||
|
// fun COMPOSE_API_VERSION(value: () -> String) {
|
||||||
|
// COMPOSE_API_VERSION = providers.provider(value)
|
||||||
|
// }
|
||||||
|
// // var COMPOSE_CONVERT_WINDOWS_PATHS: String
|
||||||
|
//// var COMPOSE_FILE: String
|
||||||
|
//// var COMPOSE_HTTP_TIMEOUT: String
|
||||||
|
//// var COMPOSE_PROFILES: String
|
||||||
|
//// var COMPOSE_PROJECT_NAME: String
|
||||||
|
//// var COMPOSE_TLS_VERSION: String
|
||||||
|
//// var DOCKER_CERT_PATH: String
|
||||||
|
//// var DOCKER_HOST: String
|
||||||
|
//// var DOCKER_TLS_VERIFY: String
|
||||||
|
// fun setComposeApiVersion(composeApiVersion: String) {}
|
||||||
|
// fun setComposeConvertWindowsPaths(composeConvertWindowsPaths: String) {}
|
||||||
|
// fun setComposeFile(composeFile: String) {}
|
||||||
|
// fun setComposeHttpTimeout(composeHttpTimeout: String) {}
|
||||||
|
// fun setComposeProfiles(composeProfiles: String) {}
|
||||||
|
// fun setComposeProjectName(composeProjectName: String) {}
|
||||||
|
// fun setComposeTlsVersion(composeTlsVersion: String) {}
|
||||||
|
// fun setDockerCertPath(dockerCertPath: String) {}
|
||||||
|
// fun setDockerHost(dockerHost: String) {}
|
||||||
|
// fun setDockerTlsVerify(dockerTlsVerify: String) {}
|
||||||
|
// }
|
||||||
|
|
||||||
|
}
|
||||||
|
//
|
||||||
|
//private operator fun <PV : Provider<String>> MapProperty<String, String>.setValue(
|
||||||
|
// dotEnv: GDCSettings.DotEnv,
|
||||||
|
// property: KProperty<*>,
|
||||||
|
// v: PV
|
||||||
|
//) {
|
||||||
|
// put(property.name, v)
|
||||||
|
//}
|
||||||
|
//
|
||||||
|
//private operator fun MapProperty<String, String>.getValue(
|
||||||
|
// dotEnv: GDCSettings.DotEnv,
|
||||||
|
// property: KProperty<*>
|
||||||
|
//): Provider<String> {
|
||||||
|
// return getting(property.name)
|
||||||
|
//}
|
||||||
|
|
@ -8,6 +8,7 @@ pluginManagement {
|
||||||
|
|
||||||
|
|
||||||
includeBuild("./gradle-plugins/builder-plugins/")
|
includeBuild("./gradle-plugins/builder-plugins/")
|
||||||
|
includeBuild("./gradle-plugins/docker-compose/")
|
||||||
includeBuild("./gradle-plugins/factorio-mod-manager/")
|
includeBuild("./gradle-plugins/factorio-mod-manager/")
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue