@@ -4,6 +4,7 @@ import dev.adamko.gradle.dev_publish.data.PublicationData
44import dev.adamko.gradle.dev_publish.internal.DevPublishConfigurationAttributes
55import dev.adamko.gradle.dev_publish.internal.DevPublishConfigurationAttributes.Companion.DEV_PUB_USAGE
66import dev.adamko.gradle.dev_publish.tasks.GeneratePublicationHashTask
7+ import dev.adamko.gradle.dev_publish.tasks.UpdateDevRepoTask
78import dev.adamko.gradle.dev_publish.utils.asConsumer
89import dev.adamko.gradle.dev_publish.utils.asProvider
910import org.gradle.api.Plugin
@@ -18,7 +19,6 @@ import org.gradle.api.publish.PublishingExtension
1819import org.gradle.api.publish.maven.MavenPublication
1920import org.gradle.api.publish.maven.plugins.MavenPublishPlugin
2021import org.gradle.api.publish.maven.tasks.PublishToMavenRepository
21- import org.gradle.api.tasks.Sync
2222import org.gradle.api.tasks.TaskProvider
2323import org.gradle.kotlin.dsl.*
2424import org.gradle.language.base.plugins.LifecycleBasePlugin
@@ -100,38 +100,34 @@ class DevPublishPlugin @Inject constructor(
100100 generatePublicationHashTask,
101101 )
102102
103- val prepChecksumStoreTask = project.tasks.register(" prepareDevPubChecksumStore" ) {
104- // hacky workaround to make sure that the checksumsStore directory exists before
105- // PublishToMavenRepository tasks are configured
106- outputs.dir(devPubExtension.checksumsStore)
107- .withPropertyName(" checksumStore" )
108- }
109-
110103 project.tasks.withType<PublishToMavenRepository >().configureEach {
111104
112105 // need to determine the repo lazily because the repo isn't set immediately
113106 val repoIsDevPub = providers.provider { repository?.name == DEV_PUB__MAVEN_REPO_NAME }.orElse(false )
114107 inputs.property(" repoIsDevPub" , repoIsDevPub)
115108
109+
116110 inputs
117- .files(prepChecksumStoreTask.map { it.outputs.files })
118- .withPropertyName(" devPubChecksumsStore" )
111+ // must convert to FileTree, because the directory might not exist, and
112+ // Gradle won't accept directories that don't exist as inputs.
113+ .files(devPubExtension.checksumsStore.asFileTree)
114+ .withPropertyName(" devPubChecksumsStoreFiles" )
119115
120116 val publicationData = providers.provider {
121117 createPublicationData(publication)
122118 }
123- val currentChecksum: Provider <String > = publicationData.flatMap { data ->
124- providers.provider {
125- data.createChecksumContent()
126- }
119+ val currentChecksum: Provider <String > = publicationData.map { data ->
120+ data.createChecksumContent()
127121 }
128- val storedChecksum: Provider <String > = publicationData.flatMap { data ->
129- providers.provider {
130- devPubExtension.checksumsStore.asFile.get()
131- .resolve(data.checksumFilename)
132- .takeIf (File ::exists)
133- ?.readText()
134- }
122+
123+ val storedChecksum: Provider <String > = providers.zip(
124+ publicationData,
125+ devPubExtension.checksumsStore,
126+ ) { data, checksumStore ->
127+ checksumStore.asFile
128+ .resolve(data?.checksumFilename ? : " unknown" )
129+ .takeIf (File ::exists)
130+ ?.readText()
135131 }
136132
137133 onlyIf(" current checksums don't match stored checksum" ) {
@@ -142,22 +138,13 @@ class DevPublishPlugin @Inject constructor(
142138
143139 currentChecksum.orNull != storedChecksum.orNull
144140 }
145-
146- // clean up dir before publishing to prevent SNAPSHOT spam
147- doFirst {
148- if (repoIsDevPub.get()) {
149- files.delete {
150- delete(devPubExtension.stagingTestMavenRepo)
151- }
152- }
153- }
154141 }
155142 }
156143
157144 private fun createExtension (project : Project ): DevPublishPluginExtension {
158145 return project.extensions.create<DevPublishPluginExtension >(DEV_PUB__EXTENSION_NAME ).apply {
159146 devMavenRepo.convention(layout.buildDirectory.dir(DEV_PUB__MAVEN_REPO_DIR ))
160- stagingTestMavenRepo .convention(layout.buildDirectory.dir(" tmp/.$DEV_PUB__MAVEN_REPO_DIR /staging" ))
147+ stagingDevMavenRepo .convention(layout.buildDirectory.dir(" tmp/.$DEV_PUB__MAVEN_REPO_DIR /staging" ))
161148 checksumsStore.convention(layout.buildDirectory.dir(" tmp/.$DEV_PUB__MAVEN_REPO_DIR /checksum-store" ))
162149 }
163150 }
@@ -170,7 +157,7 @@ class DevPublishPlugin @Inject constructor(
170157 group = DEV_PUB__TASK_GROUP
171158 description = " Publishes all Maven publications to the dev Maven repository"
172159
173- outputs.dir(devPubExtension.stagingTestMavenRepo )
160+ outputs.dir(devPubExtension.stagingDevMavenRepo )
174161
175162 dependsOn(
176163 // I would like to check using repository.name == DEV_PUB__MAVEN_REPO_NAME, but the task's
@@ -192,11 +179,11 @@ class DevPublishPlugin @Inject constructor(
192179 private fun createUpdateDevRepoTask (
193180 project : Project ,
194181 devPubExtension : DevPublishPluginExtension ,
195- ): TaskProvider <Sync > =
196- project.tasks.register<Sync >(DEV_PUB__UPDATE_DEV_REPO_TASK_NAME ) {
182+ ): TaskProvider <UpdateDevRepoTask > =
183+ project.tasks.register<UpdateDevRepoTask >(DEV_PUB__UPDATE_DEV_REPO_TASK_NAME ) {
197184 group = DEV_PUB__TASK_GROUP
198- from (devPubExtension.stagingTestMavenRepo )
199- into (devPubExtension.devMavenRepo)
185+ stagingRepo.set (devPubExtension.stagingDevMavenRepo )
186+ devRepo.set (devPubExtension.devMavenRepo)
200187 }
201188
202189 private fun configureMavenPublishingPlugin (
@@ -206,7 +193,7 @@ class DevPublishPlugin @Inject constructor(
206193 ) {
207194 project.plugins.withType<MavenPublishPlugin >().configureEach {
208195 project.extensions.configure<PublishingExtension > {
209- repositories.maven(devPubExtension.stagingTestMavenRepo ) {
196+ repositories.maven(devPubExtension.stagingDevMavenRepo ) {
210197 name = DEV_PUB__MAVEN_REPO_NAME
211198 }
212199
0 commit comments