11package dev.poolside.gradle.semanticversion
22
33import org.gradle.api.DefaultTask
4+ import org.gradle.api.internal.artifacts.repositories.ResolutionAwareRepository
45import org.gradle.api.publish.PublishingExtension
56import org.gradle.api.publish.maven.MavenPublication
67import org.gradle.api.tasks.TaskAction
7- import org.gradle.kotlin.dsl.create
88import org.w3c.dom.Element
9- import java.util.concurrent.TimeUnit
109
1110abstract class SemanticVersionTask : DefaultTask () {
1211
@@ -16,14 +15,20 @@ abstract class SemanticVersionTask : DefaultTask() {
1615 @TaskAction
1716 fun setVersion () {
1817 project.allprojects.forEach { p ->
19- p.extensions.getByType(PublishingExtension ::class .java).publications.forEach { publication ->
20- val pub = publication as MavenPublication
21- checkVersion(pub.version)
22- val (key, version) = findVersion(pub)
23- pub.version = version
24- versions[key] = version
18+ val extension = p.extensions.getByType(PublishingExtension ::class .java)
19+ extension.repositories.forEach {
20+ if (it is ResolutionAwareRepository ) {
21+ val resolver = it.createResolver()
22+ extension.publications.forEach { publication ->
23+ val pub = publication as MavenPublication
24+ checkVersion(pub.version)
25+ val (key, version) = VersionFinder .findVersion(logger, project, resolver, pub)
26+ pub.version = version
27+ versions[key] = version
28+ }
29+ }
2530 }
26- p.extensions.getByType( PublishingExtension :: class .java) .publications.forEach { publication ->
31+ extension .publications.forEach { publication ->
2732 val pub = publication as MavenPublication
2833 rewrite(pub)
2934 }
@@ -36,28 +41,6 @@ abstract class SemanticVersionTask : DefaultTask() {
3641 }
3742 }
3843
39- private fun findVersion (publication : MavenPublication ): Pair <String , String > {
40- val dep = project.dependencies.create(group = publication.groupId, name = publication.artifactId, version = " ${publication.version} +" )
41- val conf = project.rootProject.configurations.detachedConfiguration(dep)
42- conf.isTransitive = false
43- conf.resolutionStrategy.cacheDynamicVersionsFor(0 , TimeUnit .SECONDS )
44- conf.resolutionStrategy.cacheChangingModulesFor(0 , TimeUnit .SECONDS )
45- val lenientConfiguration = conf.resolvedConfiguration.lenientConfiguration
46- val version = if (lenientConfiguration.unresolvedModuleDependencies.isEmpty()) {
47- val resolved = conf.resolvedConfiguration.firstLevelModuleDependencies.first()
48- val version = resolved.moduleVersion.split(" ." )
49- val patch = version[2 ].toInt()+ 1
50- val newVersion = " ${version[0 ]} .${version[1 ]} .$patch "
51- logger.lifecycle(" Resolved published version of '${resolved.moduleGroup} :${resolved.moduleName} :${resolved.moduleVersion} ' to '$newVersion '" )
52- newVersion
53- } else {
54- val newVersion = " ${publication.version} .0"
55- logger.lifecycle(" No published version of '${publication.groupId} :${publication.artifactId} :${publication.version} ' resolved to '$newVersion '" )
56- newVersion
57- }
58- return " ${publication.groupId} :${publication.artifactId} " to version
59- }
60-
6144 private fun rewrite (pub : MavenPublication ) {
6245 pub.pom.withXml {
6346 val root = this .asElement()
0 commit comments