From 3b47ec75bbd201e5f3f0ee6485a060fe3efee5f4 Mon Sep 17 00:00:00 2001 From: Logan Gorence Date: Wed, 22 Dec 2021 06:55:47 +0000 Subject: [PATCH] Initial update manifest generation. --- .gitlab-ci.yml | 3 ++- build.gradle.kts | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index a46dae5..6b6f795 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -5,7 +5,7 @@ variables: build: stage: build - script: gradle --build-cache shadowJar + script: gradle --build-cache assemble cache: key: "$CI_COMMIT_REF_NAME" policy: push @@ -14,4 +14,5 @@ build: - .gradle artifacts: paths: + - "build/manifests/update.json" - "**/build/libs/*-plugin.jar" diff --git a/build.gradle.kts b/build.gradle.kts index 2b18632..ba359e5 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,6 @@ import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.jetbrains.kotlin.com.google.gson.Gson +import java.io.FileWriter plugins { java @@ -24,6 +26,40 @@ allprojects { } } +val manifestsDir = buildDir.resolve("manifests") +manifestsDir.mkdirs() +val gson = Gson() + +tasks.create("updateManifests") { + // TODO: not using task dependencies, outputs, blah blah blah. + doLast { + val updateFile = manifestsDir.resolve("update.json") + val writer = FileWriter(updateFile) + writer.use { + val rootPath = rootProject.rootDir.toPath() + val updateManifest = subprojects.mapNotNull { project -> + val files = project.tasks.getByName("shadowJar").outputs + val paths = files.files.map { rootPath.relativize(it.toPath()).toString() } + + if (paths.isNotEmpty()) project.name to mapOf( + "version" to project.version, + "artifacts" to paths, + ) + else null + }.toMap() + + gson.toJson( + updateManifest, + writer + ) + } + } +} + +tasks.assemble { + dependsOn("updateManifests") +} + subprojects { plugins.apply("org.jetbrains.kotlin.jvm") plugins.apply("org.jetbrains.kotlin.plugin.serialization") @@ -70,4 +106,8 @@ subprojects { tasks.withType { archiveClassifier.set("plugin") } + + tasks.assemble { + dependsOn("shadowJar") + } }