Skip to content

Commit e142d82

Browse files
committed
update to use new Configuration utils, and minor tidying
1 parent b83e5da commit e142d82

File tree

8 files changed

+68
-49
lines changed

8 files changed

+68
-49
lines changed

api/dev-publish-plugin.api

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@ public final class dev/adamko/gradle/dev_publish/DevPublishPlugin : org/gradle/a
33
public static final field DEV_PUB__EXTENSION_NAME Ljava/lang/String;
44
public static final field DEV_PUB__MAVEN_REPO_DIR Ljava/lang/String;
55
public static final field DEV_PUB__MAVEN_REPO_NAME Ljava/lang/String;
6-
public static final field DEV_PUB__PUBLICATION_INCOMING_DEPENDENCIES Ljava/lang/String;
7-
public static final field DEV_PUB__PUBLICATION_PROVIDED_DEPENDENCIES Ljava/lang/String;
6+
public static final field DEV_PUB__PUBLICATION_DEPENDENCIES Ljava/lang/String;
7+
public static final field DEV_PUB__PUBLICATION_INCOMING Ljava/lang/String;
8+
public static final field DEV_PUB__PUBLICATION_OUTGOING Ljava/lang/String;
89
public fun <init> (Lorg/gradle/api/provider/ProviderFactory;Lorg/gradle/api/file/ProjectLayout;Lorg/gradle/api/file/FileSystemOperations;Lorg/gradle/api/model/ObjectFactory;)V
910
public synthetic fun apply (Ljava/lang/Object;)V
1011
public fun apply (Lorg/gradle/api/Project;)V

src/main/kotlin/DevPublishPlugin.kt

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ class DevPublishPlugin @Inject constructor(
209209
}
210210
}
211211

212-
/** React to [MavenPublishPlugin], and configure the appropriate tasks */
212+
/** React to [LifecycleBasePlugin], and configure the appropriate tasks */
213213
private fun configureBasePlugin(
214214
project: Project,
215215
devPubTasks: DevPublishTasksContainer,
@@ -234,7 +234,8 @@ class DevPublishPlugin @Inject constructor(
234234

235235
const val DEV_PUB__MAVEN_REPO_DIR = "maven-dev"
236236

237-
const val DEV_PUB__PUBLICATION_INCOMING_DEPENDENCIES = "devPublication"
238-
const val DEV_PUB__PUBLICATION_PROVIDED_DEPENDENCIES = "devPublicationElements"
237+
const val DEV_PUB__PUBLICATION_DEPENDENCIES = "devPublication"
238+
const val DEV_PUB__PUBLICATION_INCOMING = "devPublicationResolvableElements"
239+
const val DEV_PUB__PUBLICATION_OUTGOING = "devPublicationConsumableElements"
239240
}
240241
}

src/main/kotlin/data/DevPubConfigurationsContainer.kt

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package dev.adamko.gradle.dev_publish.data
22

3-
import dev.adamko.gradle.dev_publish.DevPublishPlugin
4-
import dev.adamko.gradle.dev_publish.DevPublishPlugin.Companion.DEV_PUB__PUBLICATION_PROVIDED_DEPENDENCIES
3+
import dev.adamko.gradle.dev_publish.DevPublishPlugin.Companion.DEV_PUB__PUBLICATION_DEPENDENCIES
4+
import dev.adamko.gradle.dev_publish.DevPublishPlugin.Companion.DEV_PUB__PUBLICATION_INCOMING
5+
import dev.adamko.gradle.dev_publish.DevPublishPlugin.Companion.DEV_PUB__PUBLICATION_OUTGOING
6+
import dev.adamko.gradle.dev_publish.data.DevPubConfigurationsContainer.Attributes.Companion.DEV_PUB_USAGE
57
import dev.adamko.gradle.dev_publish.internal.DevPublishInternalApi
68
import dev.adamko.gradle.dev_publish.utils.asConsumer
79
import dev.adamko.gradle.dev_publish.utils.asProvider
10+
import dev.adamko.gradle.dev_publish.utils.forDependencies
811
import org.gradle.api.NamedDomainObjectProvider
912
import org.gradle.api.artifacts.Configuration
1013
import org.gradle.api.artifacts.ConfigurationContainer
@@ -28,31 +31,38 @@ abstract class DevPubConfigurationsContainer @Inject constructor(
2831

2932
private val devPubAttributes: Attributes = objects.createConfigurationAttributes()
3033

34+
private val testMavenPublicationDependencies = configurations.registerPublicationsDependencies()
3135
val testMavenPublicationConsumer = configurations.registerPublicationsConsumer()
3236
val testMavenPublicationProvider = configurations.registerPublicationsProvider()
3337

3438
private fun ObjectFactory.createConfigurationAttributes(): Attributes {
3539
// register the attribute for consuming/providing
36-
dependencies.attributesSchema.attribute(Attributes.DEV_PUB_USAGE)
37-
40+
dependencies.attributesSchema.attribute(DEV_PUB_USAGE)
3841
return newInstance<Attributes>()
3942
}
4043

41-
private fun ConfigurationContainer.registerPublicationsConsumer(): NamedDomainObjectProvider<Configuration> {
42-
return register(DevPublishPlugin.DEV_PUB__PUBLICATION_INCOMING_DEPENDENCIES) {
44+
private fun ConfigurationContainer.registerPublicationsDependencies(): NamedDomainObjectProvider<Configuration> =
45+
register(DEV_PUB__PUBLICATION_DEPENDENCIES) {
46+
description = "Declare dependencies on test Maven Publications"
47+
forDependencies()
48+
attributes { attribute(DEV_PUB_USAGE, devPubAttributes.mavenRepoUsage) }
49+
}
50+
51+
private fun ConfigurationContainer.registerPublicationsConsumer(): NamedDomainObjectProvider<Configuration> =
52+
register(DEV_PUB__PUBLICATION_INCOMING) {
53+
description = "Resolve test Maven Publications"
4354
asConsumer()
44-
attributes { attribute(Attributes.DEV_PUB_USAGE, devPubAttributes.mavenRepoUsage) }
55+
attributes { attribute(DEV_PUB_USAGE, devPubAttributes.mavenRepoUsage) }
56+
extendsFrom(testMavenPublicationDependencies.get())
4557
}
46-
}
4758

48-
private fun ConfigurationContainer.registerPublicationsProvider(): NamedDomainObjectProvider<Configuration> {
49-
return register(DEV_PUB__PUBLICATION_PROVIDED_DEPENDENCIES) {
50-
description = "Provide test Maven Publications to other subprojects"
59+
private fun ConfigurationContainer.registerPublicationsProvider(): NamedDomainObjectProvider<Configuration> =
60+
register(DEV_PUB__PUBLICATION_OUTGOING) {
61+
description = "Provide test Maven Publications"
5162
asProvider()
52-
extendsFrom(testMavenPublicationConsumer.get())
53-
attributes { attribute(Attributes.DEV_PUB_USAGE, devPubAttributes.mavenRepoUsage) }
63+
attributes { attribute(DEV_PUB_USAGE, devPubAttributes.mavenRepoUsage) }
64+
extendsFrom(testMavenPublicationDependencies.get())
5465
}
55-
}
5666

5767
/**
5868
* Gradle [Configuration] Attributes for sharing files across subprojects.
@@ -61,11 +71,9 @@ abstract class DevPubConfigurationsContainer @Inject constructor(
6171
*/
6272
@DevPublishInternalApi
6373
abstract class Attributes
64-
@Inject
65-
constructor(
74+
@Inject constructor(
6675
objects: ObjectFactory,
6776
) {
68-
6977
/** Indicates a [Configuration] contains a Maven Repository */
7078
val mavenRepoUsage: MavenPublishTestUsage = objects.named("maven-repository")
7179

@@ -76,8 +84,8 @@ abstract class DevPubConfigurationsContainer @Inject constructor(
7684
companion object {
7785
val DEV_PUB_USAGE = Attribute<MavenPublishTestUsage>("dev.adamko.gradle.dev_publish.usage")
7886

79-
private inline fun <reified T> Attribute(name: String): Attribute<T> =
80-
Attribute.of(name, T::class.java)
87+
/** Instantiate a new [Attribute] of type [T] */
88+
private inline fun <reified T> Attribute(name: String): Attribute<T> = Attribute.of(name, T::class.java)
8189
}
8290
}
8391

src/main/kotlin/services/DevPublishService.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import javax.inject.Inject
1515
* Utility service for managing [dev.adamko.gradle.dev_publish.DevPublishPlugin] operations.
1616
*
1717
* This service is primarily used to ensure that [org.gradle.api.publish.maven.tasks.PublishToMavenRepository] tasks
18-
* do not run concurrently (via [org.gradle.api.services.BuildServiceSpec.getMaxParallelUsages], allowing for published
18+
* do not run concurrently (via [org.gradle.api.services.BuildServiceSpec.getMaxParallelUsages]), allowing for published
1919
* files to be accurately captured and synced to the maven-dev repository.
2020
*/
2121
@DevPublishInternalApi

src/main/kotlin/tasks/DevPublishTasksContainer.kt

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,19 @@ abstract class DevPublishTasksContainer @Inject constructor(
1717
private val objects: ObjectFactory,
1818
) {
1919

20-
val publishAllToDevRepo = tasks.registerPublishAllToDevRepoTask(devPubExtension)
21-
val generatePublicationChecksum = tasks.registerGeneratePublicationChecksumTask(devPubExtension)
22-
val updateDevRepo = tasks.registerUpdateDevRepoTask(devPubExtension)
20+
val publishAllToDevRepo: TaskProvider<BaseDevPublishTask> =
21+
tasks.registerPublishAllToDevRepoTask(devPubExtension)
22+
val generatePublicationChecksum: TaskProvider<GeneratePublicationDataChecksumTask> =
23+
tasks.registerGeneratePublicationChecksumTask(devPubExtension)
24+
val updateDevRepo: TaskProvider<UpdateDevRepoTask> =
25+
tasks.registerUpdateDevRepoTask(devPubExtension)
2326

2427
private fun TaskContainer.registerPublishAllToDevRepoTask(
2528
devPubExtension: DevPublishPluginExtension,
2629
): TaskProvider<BaseDevPublishTask> =
2730
register<BaseDevPublishTask>(PUBLISH_ALL_TO_DEV_REPO_TASK_NAME) {
2831
description = "Publishes all Maven publications to the dev Maven repository. " +
29-
"This is an internal task that should not typically be referenced or called."
32+
"This is an internal task that should not typically be manually referenced or called."
3033

3134
outputs.dir(devPubExtension.stagingDevMavenRepo)
3235

@@ -43,7 +46,7 @@ abstract class DevPublishTasksContainer @Inject constructor(
4346
): TaskProvider<GeneratePublicationDataChecksumTask> =
4447
register<GeneratePublicationDataChecksumTask>(GENERATE_PUBLICATION_CHECKSUM_TASK) {
4548
description = "Generates a checksum from a publication, used for up-to-date checks. " +
46-
"This is an internal task that should not typically be referenced or called."
49+
"This is an internal task that should not typically be manually referenced or called."
4750
outputDirectory.convention(devPubExtension.checksumsStore)
4851
tempDir.convention(objects.directoryProperty().fileValue(temporaryDir))
4952
}

src/main/kotlin/tasks/GeneratePublicationDataChecksumTask.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ constructor(
5252
writeText(publicationsHash)
5353
}
5454

55-
logger.debug(
55+
logger.info(
5656
"created publication data checksum {}: {}",
5757
file.relativeTo(rootDir),
5858
file.readText().lines().joinToString(" // ")

src/main/kotlin/utils/gradleUtils.kt

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,53 @@ import org.gradle.api.file.RelativePath
1010
* ```
1111
* isCanBeResolved = false
1212
* isCanBeConsumed = true
13+
* isCanBeDeclared = false
1314
* ```
1415
*/
1516
internal fun Configuration.asProvider(
1617
visible: Boolean = true
1718
) {
1819
isCanBeResolved = false
1920
isCanBeConsumed = true
21+
isCanBeDeclared = false
2022
isVisible = visible
2123
}
2224

2325

2426
/**
25-
* Mark this [Configuration] as one that will consume artifacts from other subprojects (also known as 'resolving')
27+
* Mark this [Configuration] as one that will fetch artifacts (also known as 'resolving').
2628
*
2729
* ```
2830
* isCanBeResolved = true
2931
* isCanBeConsumed = false
32+
* isCanBeDeclared = false
3033
* ```
3134
* */
3235
internal fun Configuration.asConsumer(
3336
visible: Boolean = false
3437
) {
3538
isCanBeResolved = true
3639
isCanBeConsumed = false
40+
isCanBeDeclared = false
41+
isVisible = visible
42+
}
43+
44+
45+
/**
46+
* Mark this [Configuration] for declaring dependencies in the `dependencies {}` block.
47+
*
48+
* ```
49+
* isCanBeResolved = false
50+
* isCanBeConsumed = false
51+
* isCanBeDeclared = true
52+
* ```
53+
* */
54+
internal fun Configuration.forDependencies(
55+
visible: Boolean = false
56+
) {
57+
isCanBeResolved = false
58+
isCanBeConsumed = false
59+
isCanBeDeclared = true
3760
isVisible = visible
3861
}
3962

src/main/kotlin/utils/md5.kt

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,7 @@ import java.math.BigInteger
99
import java.security.DigestOutputStream
1010
import java.security.MessageDigest
1111

12-
//import java.io.SequenceInputStream
13-
//import java.util.*
14-
15-
1612
internal fun File.md5(): String = if (exists()) inputStream().md5() else "missing"
17-
//internal fun ByteArray.md5(): String = inputStream().md5()
18-
//internal fun Iterable<File>.md5(): String =
19-
// SequenceInputStream(toEnumeration { it.inputStream() }).md5()
2013

2114
private fun InputStream.md5(): String {
2215
val md5 = messageDigestMd5()
@@ -37,13 +30,3 @@ private fun InputStream.md5(): String {
3730
}
3831

3932
private fun messageDigestMd5(): MessageDigest = MessageDigest.getInstance("MD5")
40-
41-
//private fun <T, R> Iterable<T>.toEnumeration(
42-
// convert: (T) -> R,
43-
//): Enumeration<R> {
44-
// val iterator = iterator()
45-
// return object : Enumeration<R> {
46-
// override fun hasMoreElements(): Boolean = iterator.hasNext()
47-
// override fun nextElement(): R = convert(iterator.next())
48-
// }
49-
//}

0 commit comments

Comments
 (0)