From e370cb5ef934172ac634f9a23726efe0dc042cca Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Sat, 22 Oct 2022 19:53:10 +0200 Subject: [PATCH] [geedeecee] add fileChecksum util --- .../dev/adamko/geedeecee/internal/files.kt | 12 ++++ .../dev/adamko/geedeecee/internal/gradle.kt | 14 +++++ .../tasks/DockerContextFilesPreparation.kt | 56 +++++++++++++++++++ 3 files changed, 82 insertions(+) create mode 100644 gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/files.kt create mode 100644 gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/gradle.kt create mode 100644 gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/tasks/DockerContextFilesPreparation.kt diff --git a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/files.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/files.kt new file mode 100644 index 0000000..e0ba466 --- /dev/null +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/files.kt @@ -0,0 +1,12 @@ +package dev.adamko.geedeecee.internal + +import org.gradle.api.file.Directory +import org.jetbrains.kotlin.incremental.md5 + +// should be moved to common plugins lib + +internal fun Directory.filesChecksum(): Long = asFileTree + .files + .map { it.readBytes() + it.absolutePath.toByteArray() } + .fold(byteArrayOf()) { acc, bytes -> acc + bytes } + .md5() diff --git a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/gradle.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/gradle.kt new file mode 100644 index 0000000..21385e6 --- /dev/null +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/internal/gradle.kt @@ -0,0 +1,14 @@ +package dev.adamko.geedeecee.internal + +import org.gradle.api.Task +import org.gradle.api.file.FileCopyDetails +import org.gradle.api.file.RelativePath + +// move to common-lib + +internal inline fun T.enabledIf(crossinline spec: (T) -> Boolean) { + onlyIf { + require(it is T) + spec(it) + } +} diff --git a/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/tasks/DockerContextFilesPreparation.kt b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/tasks/DockerContextFilesPreparation.kt new file mode 100644 index 0000000..a400711 --- /dev/null +++ b/gradle-plugins/docker-compose/src/main/kotlin/dev/adamko/geedeecee/tasks/DockerContextFilesPreparation.kt @@ -0,0 +1,56 @@ +package dev.adamko.geedeecee.tasks + +import dev.adamko.geedeecee.GDCPlugin +import javax.inject.Inject +import org.gradle.api.tasks.Sync + + +// 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 DockerContextFilesPreparation @Inject constructor( +// private val files: FileSystemOperations, +) : Sync() { + +// @get:InputFiles +//// @get:SkipWhenEmpty +// @get:PathSensitive(PathSensitivity.RELATIVE) +// @get:NormalizeLineEndings +// abstract val dockerContextFiles: ConfigurableFileCollection + +// @get:Input +// abstract val copySpec: Property +// +// @get:OutputDirectory +// abstract val dockerContextDir: DirectoryProperty + + init { + group = GDCPlugin.GCD_TASK_GROUP + } + +// @TaskAction +// fun exec() { +// files.sync { +// from(dockerContextFiles, copySpec) +// into(dockerContextDir) +//// with(copySpec) +// } +// } + +// /** @see [CopySpec.from] */ +// override fun from(vararg sourcePaths: Any?): CopySpec = +// copySpec.from(sourcePaths) +// +// /** @see [CopySpec.from] */ +// override fun from(sourcePath: Any, configureClosure: Closure<*>): CopySpec = +// copySpec.from(sourcePath, configureClosure) +// +// /** @see [CopySpec.from] */ +// override fun from(sourcePath: Any, configureAction: Action): CopySpec = +// copySpec.from(sourcePath, configureAction) +}