Skip to content

Commit 08e967b

Browse files
committed
fix: bundle complete Kotlin plugin runtime
1 parent 9e61ed3 commit 08e967b

4 files changed

Lines changed: 31 additions & 8 deletions

File tree

.github/workflows/ci.yml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,12 @@ jobs:
2626
run: |
2727
repo="$PWD/build/dependency-bundle/m2/repository"
2828
test -n "$(find "$repo" -name 'kotlin-gradle-plugin-*.jar' -print -quit)"
29+
test -n "$(find "$repo/org/jetbrains/kotlin/jvm/org.jetbrains.kotlin.jvm.gradle.plugin" -name '*.pom' -print -quit)"
2930
test -n "$(find "$repo" -name 'gradle-kotlin-dsl-plugins-*.jar' -print -quit)"
3031
test -n "$(find "$repo" -name 'kotlinpoet-jvm-*.jar' -print -quit)"
3132
test -n "$(find "$repo" -name '*-sources.jar' -print -quit)"
3233
test -n "$(find "$repo" -name '*.module' -print -quit)"
33-
version=$(sed -n 's/^version=//p' gradle.properties)
34+
version=$(sed -n 's/^version[[:space:]]*=[[:space:]]*//p' gradle.properties)
3435
group="$repo/org/openprojectx/gradle/dependency/bundle"
3536
test -f "$group/org.openprojectx.gradle.dependency.bundle.gradle.plugin/$version/org.openprojectx.gradle.dependency.bundle.gradle.plugin-$version.pom"
3637
test -f "$group/plugin/$version/plugin-$version.pom"
@@ -41,7 +42,7 @@ jobs:
4142
run: |
4243
mkdir -p build/offline-gradle-home
4344
cp -R build/dependency-bundle-gradle-home/wrapper build/offline-gradle-home/
44-
version=$(sed -n 's/^version=//p' gradle.properties)
45+
version=$(sed -n 's/^version[[:space:]]*=[[:space:]]*//p' gradle.properties)
4546
./gradlew --no-daemon -g build/offline-gradle-home -p example \
4647
-PbundleRepository="$PWD/build/dependency-bundle/m2/repository" \
4748
-PbundlePluginVersion="$version" \

build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,10 @@ val prepareExampleGradleHome by tasks.registering(Sync::class) {
202202
group = "dependency bundle"
203203
description = "Creates a clean Gradle home containing only the cached wrapper distribution."
204204
dependsOn(captureRootDependencyBundle)
205-
from(bundleGradleHome.map { it.dir("wrapper") })
206-
into(exampleGradleHome.map { it.dir("wrapper") })
205+
from(bundleGradleHome.map { it.dir("wrapper") }) {
206+
into("wrapper")
207+
}
208+
into(exampleGradleHome)
207209
}
208210

209211
val buildExampleAgainstBundle by tasks.registering(Exec::class) {

gradle/dependency-bundle.init.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,10 @@ gradle.beforeProject { project ->
2727
// The independent example runs offline before its own graph is
2828
// captured, so seed its complete runtime graph in the root bundle.
2929
module("com.squareup:kotlinpoet:2.3.0")
30+
module("org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin:2.2.21")
31+
// KGP resolves this lazily when the first Kotlin compile task runs;
32+
// it is not present on the plugin classpath itself.
33+
module("org.jetbrains.kotlin:kotlin-build-tools-impl:2.2.21")
3034
module("org.gradle.kotlin:gradle-kotlin-dsl-plugins:6.5.2")
3135
gradleApiVariants(
3236
"org.jetbrains.kotlin:kotlin-gradle-plugin:2.2.21",

plugin/src/main/kotlin/org/openprojectx/gradle/dependency/bundle/ExportDependencyBundleTask.kt

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -309,16 +309,25 @@ abstract class ExportDependencyBundleTask : DefaultTask() {
309309
val module = directory.parent.fileName.toString()
310310
val baseVersion = version.removeSuffix("-SNAPSHOT")
311311
val uniquePattern = Regex(
312-
"^${Regex.escape("$module-$baseVersion-")}\\d{8}\\.\\d{6}-\\d+(.*)$"
312+
"^${Regex.escape("$module-$baseVersion-")}(\\d{8}\\.\\d{6})-(\\d+)(.*)$"
313313
)
314314
val latestBySuffix = Files.list(directory).use { files ->
315315
files.filter(Files::isRegularFile)
316316
.map { file -> file to uniquePattern.matchEntire(file.fileName.toString()) }
317317
.filter { (_, match) -> match != null }
318-
.map { (file, match) -> match!!.groupValues[1] to file }
318+
.map { (file, match) ->
319+
SnapshotFile(
320+
path = file,
321+
timestamp = match!!.groupValues[1],
322+
buildNumber = match.groupValues[2].toInt(),
323+
suffix = match.groupValues[3],
324+
)
325+
}
319326
.toList()
320-
.groupBy({ it.first }, { it.second })
321-
.mapValues { (_, candidates) -> candidates.maxBy { it.fileName.toString() } }
327+
.groupBy { it.suffix }
328+
.mapValues { (_, candidates) ->
329+
candidates.maxWith(compareBy<SnapshotFile>({ it.timestamp }, { it.buildNumber })).path
330+
}
322331
}
323332

324333
latestBySuffix.forEach { (suffix, source) ->
@@ -335,6 +344,13 @@ abstract class ExportDependencyBundleTask : DefaultTask() {
335344
}
336345
}
337346

347+
private data class SnapshotFile(
348+
val path: Path,
349+
val timestamp: String,
350+
val buildNumber: Int,
351+
val suffix: String,
352+
)
353+
338354
/**
339355
* Maven POM-only modules do not describe source artifacts. Try the conventional
340356
* classifier for every release module that has a primary JAR, while treating a

0 commit comments

Comments
 (0)