Skip to content

Commit cf04ce0

Browse files
authored
Filter out checksums (#256)
* Add publishAllChecksums * Update tests * Add integration test * Fix integration test * update apiDump * fix tests
1 parent 7ef98bf commit cf04ce0

22 files changed

Lines changed: 173 additions & 96 deletions

docs/src/content/docs/index.mdx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,9 @@ nmcpSettings {
5454

5555
// optional: send publications serially instead of in parallel (might be slower)
5656
uploadSnapshotsParallelism.set(1)
57+
58+
// optional: publish all checksums (md5, sha1, sha256, sha512, including for signature files)
59+
publishAllChecksums.set(true)
5760
}
5861
}
5962
```

librarian.root.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ kdoc.olderVersions=
66
kdoc.artifactId=kdoc
77

88
pom.groupId=com.gradleup.nmcp
9-
pom.version=1.5.1-SNAPSHOT
9+
pom.version=1.6.0-SNAPSHOT
1010
pom.description=New Maven Central Publishing
1111
pom.vcsUrl=https://github.com/gradleup/nmcp
1212
pom.developer=nmcp authors

nmcp/api/nmcp.api

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ public abstract interface class nmcp/NmcpAggregationExtension {
2121
public abstract fun getAllFiles ()Lorg/gradle/api/file/FileCollection;
2222
public abstract fun getAllowDuplicateProjectNames ()Lorg/gradle/api/provider/Property;
2323
public abstract fun getAllowEmptyAggregation ()Lorg/gradle/api/provider/Property;
24+
public abstract fun getPublishAllChecksums ()Lorg/gradle/api/provider/Property;
2425
public abstract fun localRepository (Lorg/gradle/api/Action;)V
2526
public abstract fun publishAllProjectsProbablyBreakingProjectIsolation ()V
2627
}

nmcp/src/main/kotlin/nmcp/NmcpAggregationExtension.kt

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,4 +58,14 @@ interface NmcpAggregationExtension {
5858
* See https://github.com/gradle/gradle/issues/36167 for more details.
5959
*/
6060
val allowDuplicateProjectNames: Property<Boolean>
61+
62+
/**
63+
* By default, Nmcp tries to avoid publishing the checksums.
64+
* Especially, it filters out the `.sha256` and `.sha512` files, as well as all the signature checksums
65+
* (`.asc.md5`, `.asc.sha1`, `.asc.sha256`, `.asc.sha512`).
66+
* This is to play nicer with [Maven Central publishing limits](https://central.sonatype.org/publish/maven-central-publishing-limits/).
67+
*
68+
* Default: false
69+
*/
70+
val publishAllChecksums: Property<Boolean>
6171
}

nmcp/src/main/kotlin/nmcp/NmcpExtension.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package nmcp
22

33
import org.gradle.api.Action
44
import org.gradle.api.file.FileCollection
5+
import org.gradle.api.provider.Property
56

67
interface NmcpExtension {
78
/**

nmcp/src/main/kotlin/nmcp/internal/DefaultNmcpAggregationExtension.kt

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,10 @@ import org.gradle.api.artifacts.result.ArtifactResult
1313
import org.gradle.api.artifacts.result.ResolvedArtifactResult
1414
import org.gradle.api.attributes.Usage
1515
import org.gradle.api.file.ConfigurableFileCollection
16+
import org.gradle.api.file.FileCollection
17+
import org.gradle.api.file.RegularFile
1618
import org.gradle.api.provider.Property
19+
import org.gradle.api.provider.Provider
1720

1821
@GExtension(
1922
pluginId = "com.gradleup.nmcp.aggregation",
@@ -32,6 +35,8 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro
3235

3336
override val allFiles: ConfigurableFileCollection = project.files()
3437

38+
private val zipProvider: Provider<RegularFile>
39+
3540
init {
3641
allFiles.from(
3742
consumerConfiguration
@@ -43,11 +48,12 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro
4348
it.filter(::isCompatible).map { it.file }
4449
},
4550
)
46-
project.registerPublishToCentralPortalTasks(
51+
zipProvider = project.registerPublishToCentralPortalTasks(
4752
kind = Kind.aggregation,
4853
inputFiles = allFiles,
4954
spec = spec,
50-
allowEmptyFiles = allowEmptyAggregation
55+
allowEmptyFiles = allowEmptyAggregation,
56+
publishAllChecksums = publishAllChecksums
5157
)
5258

5359
project.afterEvaluate {
@@ -77,7 +83,7 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro
7783
action.execute(options)
7884
project.registerNmcpPublishFileByFileToFileSystemTask(
7985
taskName = "nmcpPublishAggregationTo${options.name.get().capitalizeFirstLetter()}Repository",
80-
inputFiles = allFiles,
86+
inputFiles = project.zipTree(zipProvider),
8187
m2AbsolutePath = project.provider { project.file(options.path.get()).absolutePath },
8288
parallelism = project.provider { 1 },
8389
)
@@ -100,6 +106,8 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro
100106

101107
abstract override val allowEmptyAggregation: Property<Boolean>
102108

109+
abstract override val publishAllChecksums: Property<Boolean>
110+
103111
abstract override val allowDuplicateProjectNames: Property<Boolean>
104112
}
105113

nmcp/src/main/kotlin/nmcp/internal/DefaultNmcpExtension.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,8 @@ internal abstract class DefaultNmcpExtension(private val project: Project): Nmcp
7777
kind = Kind.allPublications,
7878
inputFiles = m2Files,
7979
spec = spec,
80-
allowEmptyFiles = project.provider { false }
80+
allowEmptyFiles = project.provider { false },
81+
publishAllChecksums = project.provider { false }
8182
)
8283
}
8384
}

nmcp/src/main/kotlin/nmcp/internal/utils.kt

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import org.gradle.api.attributes.HasConfigurableAttributes
1313
import org.gradle.api.attributes.Usage
1414
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
1515
import org.gradle.api.file.FileCollection
16+
import org.gradle.api.file.RegularFile
1617
import org.gradle.api.provider.Provider
1718
import org.gradle.api.publish.plugins.PublishingPlugin.PUBLISH_TASK_GROUP
1819
import org.gradle.api.tasks.bundling.Zip
@@ -53,8 +54,9 @@ internal fun Project.registerPublishToCentralPortalTasks(
5354
kind: Kind,
5455
inputFiles: FileCollection,
5556
spec: CentralPortalOptions,
56-
allowEmptyFiles: Provider<Boolean>
57-
) {
57+
allowEmptyFiles: Provider<Boolean>,
58+
publishAllChecksums: Provider<Boolean>
59+
): Provider<RegularFile> {
5860
val name = kind.name
5961

6062
val releaseTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToCentralPortal"
@@ -84,19 +86,31 @@ internal fun Project.registerPublishToCentralPortalTasks(
8486
it.destinationDirectory.set(project.layout.buildDirectory.dir("nmcp/zip"))
8587
it.archiveFileName.set(zipName)
8688
it.eachFile {
87-
// Exclude maven-metadata files, or the bundle is not recognized
88-
// See https://slack-chats.kotlinlang.org/t/16407246/anyone-tried-the-https-central-sonatype-org-publish-publish-#c8738fe5-8051-4f64-809f-ca67a645216e
89-
if (it.name.startsWith("maven-metadata")) {
90-
it.exclude()
89+
val publishAllChecksums = publishAllChecksums.getOrElse(false)
90+
when {
91+
it.name.startsWith("maven-metadata") -> {
92+
// Exclude maven-metadata files, or the bundle is not recognized
93+
// See https://slack-chats.kotlinlang.org/t/16407246/anyone-tried-the-https-central-sonatype-org-publish-publish-#c8738fe5-8051-4f64-809f-ca67a645216e
94+
it.exclude()
95+
}
96+
!publishAllChecksums && (it.name.endsWith(".sha256") || it.name.endsWith(".sha512")) -> {
97+
// It's not clear if those are used, and it reduces the number of files in the deployment
98+
it.exclude()
99+
}
100+
!publishAllChecksums && (it.name.endsWith(".asc.md5") || it.name.endsWith(".asc.sha1")) -> {
101+
// It's not clear if those are used, and it reduces the number of files in the deployment
102+
it.exclude()
103+
}
91104
}
92105
}
93106
it.dependsOn(checkFilesTaskProvider)
94107
}
95108

109+
val zipProvider = zipTaskProvider.flatMap { it.archiveFile }
96110

97111
val releaseTask = registerNmcpPublishWithPublisherApiTask(
98112
taskName = releaseTaskName,
99-
inputFile = zipTaskProvider.flatMap { it.archiveFile },
113+
inputFile = zipProvider,
100114
username = spec.username,
101115
password = spec.password,
102116
publicationName = spec.publicationName.orElse(checkFilesTaskProvider.flatMap { it.outputFile }.map { it.asFile.readText() }),
@@ -148,7 +162,7 @@ internal fun Project.registerPublishToCentralPortalTasks(
148162
registerNmcpPublishFileByFileToFileSystemTask(
149163
taskName = localTaskName,
150164
m2AbsolutePath = project.provider { m2File.absolutePath },
151-
inputFiles = inputFiles,
165+
inputFiles = zipTree(zipProvider),
152166
parallelism = spec.uploadSnapshotsParallelism.orElse(defaultParallelism),
153167
)
154168

@@ -171,6 +185,8 @@ internal fun Project.registerPublishToCentralPortalTasks(
171185
}
172186
}
173187
}
188+
189+
return zipProvider
174190
}
175191

176192
private fun taskPath(project: Project, taskName: String): String {

nmcp/testProjects/duplicate-name/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
plugins {
22
id("org.jetbrains.kotlin.jvm").version("2.3.0").apply(false)
3-
id("com.gradleup.nmcp.aggregation").version("1.5.1-SNAPSHOT")
3+
id("com.gradleup.nmcp.aggregation").version("1.6.0-SNAPSHOT")
44
}
55

66
group = "com.example"
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
plugins {
2-
id("com.gradleup.nmcp.aggregation").version("1.5.1-SNAPSHOT")
2+
id("com.gradleup.nmcp.aggregation").version("1.6.0-SNAPSHOT")
33
}

0 commit comments

Comments
 (0)