Skip to content

Commit 1cce394

Browse files
authored
Move the empty files check to execution (#243)
1 parent dfc4851 commit 1cce394

File tree

8 files changed

+35
-30
lines changed

8 files changed

+35
-30
lines changed

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ ksp = "2.3.4"
44
gratatouille-runtime = "0.2.1"
55
gratatouille-plugin = "0.2.1"
66
gradle-api = "8.8"
7-
nmcp = "1.4.3-SNAPSHOT-90daa7892c17ddc91e613423be6948a7b4b5be65"
7+
nmcp = "1.4.4-SNAPSHOT-dfc48516d359dd9920a19344f1a56d8243d4ae0a"
88

99
[libraries]
1010
json = "org.jetbrains.kotlinx:kotlinx-serialization-json:1.9.0"

nmcp-tasks/api/nmcp-tasks.api

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ public final class nmcp/internal/task/CleanupDirectoryEntryPoint$Companion {
88
public final fun run (Ljava/lang/String;)V
99
}
1010

11-
public final class nmcp/internal/task/NmcpFindDeploymentNameEntryPoint {
12-
public static final field Companion Lnmcp/internal/task/NmcpFindDeploymentNameEntryPoint$Companion;
11+
public final class nmcp/internal/task/NmcpCheckFilesEntryPoint {
12+
public static final field Companion Lnmcp/internal/task/NmcpCheckFilesEntryPoint$Companion;
1313
public fun <init> ()V
14-
public static final fun run (Ljava/util/List;Ljava/io/File;)V
14+
public static final fun run (Ljava/util/List;Ljava/io/File;Z)V
1515
}
1616

17-
public final class nmcp/internal/task/NmcpFindDeploymentNameEntryPoint$Companion {
18-
public final fun run (Ljava/util/List;Ljava/io/File;)V
17+
public final class nmcp/internal/task/NmcpCheckFilesEntryPoint$Companion {
18+
public final fun run (Ljava/util/List;Ljava/io/File;Z)V
1919
}
2020

2121
public final class nmcp/internal/task/NmcpPublishFileByFileToFileSystemEntryPoint {

nmcp-tasks/src/main/kotlin/nmcp/internal/task/nmcpFindDeploymentName.kt renamed to nmcp-tasks/src/main/kotlin/nmcp/internal/task/nmcpCheckFiles.kt

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,15 @@ import kotlin.text.endsWith
1212
import kotlin.text.substringBeforeLast
1313

1414

15+
/**
16+
* Check the validity of the input files and outputs the name of the deployment
17+
*/
1518
@GTask
16-
internal fun nmcpFindDeploymentName(inputFiles: GInputFiles, outputFile: GOutputFile) {
17-
val gavs = inputFiles.mapNotNull {
19+
internal fun nmcpCheckFiles(inputFiles: GInputFiles, outputFile: GOutputFile, allowEmptyFiles: Boolean) {
20+
check(allowEmptyFiles || inputFiles.isNotEmpty()) {
21+
"Nmcp: there are no files to publish. Double check your configuration."
22+
}
23+
val gavs = inputFiles.mapNotNull {
1824
if (!it.normalizedPath.endsWith(".pom")) {
1925
return@mapNotNull null
2026
}

nmcp-tasks/src/test/kotlin/FindDeploymentNameTest.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import gratatouille.tasks.FileWithPath
22
import java.io.File
33
import kotlin.test.assertEquals
4-
import nmcp.internal.task.nmcpFindDeploymentName
4+
import nmcp.internal.task.nmcpCheckFiles
55
import org.junit.Rule
66
import org.junit.Test
77
import org.junit.rules.TemporaryFolder
@@ -13,9 +13,10 @@ class FindDeploymentNameTest {
1313

1414
private fun assertDeploymentName(inputFiles: List<String>, expected: String) {
1515
val output = tmp.newFile("output.txt")
16-
nmcpFindDeploymentName(
16+
nmcpCheckFiles(
1717
inputFiles = inputFiles.map { FileWithPath(File(it), normalizedPath = it) },
1818
outputFile = output,
19+
allowEmptyFiles = false
1920
)
2021
assertEquals(expected, output.readText())
2122
}

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

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

33
import gratatouille.GExtension
44
import gratatouille.capitalizeFirstLetter
5-
import java.io.File
65
import nmcp.CentralPortalOptions
76
import nmcp.NmcpAggregationExtension
87
import nmcp.LocalRepositoryOptions
@@ -48,6 +47,7 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro
4847
kind = Kind.aggregation,
4948
inputFiles = allFiles,
5049
spec = spec,
50+
allowEmptyFiles = allowEmptyAggregation
5151
)
5252

5353
project.afterEvaluate {
@@ -65,12 +65,6 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro
6565
allNames.add(it.name.lowercase())
6666
}
6767
}
68-
69-
if (!allowEmptyAggregation.orElse(false).get()) {
70-
check(consumerConfiguration.dependencies.isNotEmpty()) {
71-
"Nmcp: the aggregation is empty. This is usually a misconfiguration. If this is intentional, set `allowEmptyAggregation` to true."
72-
}
73-
}
7468
}
7569
}
7670

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

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

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

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,18 +3,16 @@ package nmcp.internal
33
import gratatouille.capitalizeFirstLetter
44
import java.io.File
55
import nmcp.CentralPortalOptions
6-
import nmcp.internal.task.registerNmcpFindDeploymentNameTask
6+
import nmcp.internal.task.registerNmcpCheckFilesTask
77
import nmcp.internal.task.registerNmcpPublishFileByFileToFileSystemTask
88
import nmcp.internal.task.registerNmcpPublishFileByFileToSnapshotsTask
99
import nmcp.internal.task.registerNmcpPublishWithPublisherApiTask
10-
import org.gradle.api.Action
11-
import org.gradle.api.Named
1210
import org.gradle.api.Project
13-
import org.gradle.api.attributes.Attribute
1411
import org.gradle.api.attributes.HasConfigurableAttributes
1512
import org.gradle.api.attributes.Usage
1613
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
1714
import org.gradle.api.file.FileCollection
15+
import org.gradle.api.provider.Provider
1816
import org.gradle.api.publish.plugins.PublishingPlugin.PUBLISH_TASK_GROUP
1917
import org.gradle.api.tasks.bundling.Zip
2018

@@ -54,14 +52,15 @@ internal fun Project.registerPublishToCentralPortalTasks(
5452
kind: Kind,
5553
inputFiles: FileCollection,
5654
spec: CentralPortalOptions,
55+
allowEmptyFiles: Provider<Boolean>
5756
) {
5857
val name = kind.name
5958

6059
val releaseTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToCentralPortal"
6160
val snapshotTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToCentralPortalSnapshots"
6261
val localTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToMavenLocal"
6362
val zipTaskName = "nmcpZip${name.capitalizeFirstLetter()}"
64-
val findDeploymentNameTaskName = "nmcpFind${name.capitalizeFirstLetter()}DeploymentName"
63+
val checkFilesTaskName = "nmcpCheck${name.capitalizeFirstLetter()}Files"
6564

6665
val description = when(name) {
6766
"aggregation" -> "Publishes the aggregation"
@@ -72,6 +71,12 @@ internal fun Project.registerPublishToCentralPortalTasks(
7271
val deprecatedLifecycleTaskName = "publish${name.capitalizeFirstLetter()}ToCentralPortalSnapshots"
7372
val snapshotsLifecycleTaskName = "publish${name.capitalizeFirstLetter()}ToCentralSnapshots"
7473

74+
val checkFilesTaskProvider = registerNmcpCheckFilesTask(
75+
allowEmptyFiles = allowEmptyFiles.orElse(false),
76+
taskName = checkFilesTaskName,
77+
inputFiles = inputFiles,
78+
)
79+
7580
val zipName = "${name}.zip"
7681
val zipTaskProvider = tasks.register(zipTaskName, Zip::class.java) {
7782
it.from(inputFiles)
@@ -84,18 +89,16 @@ internal fun Project.registerPublishToCentralPortalTasks(
8489
it.exclude()
8590
}
8691
}
92+
it.dependsOn(checkFilesTaskProvider)
8793
}
8894

89-
val findDeploymentNameTaskProvider = registerNmcpFindDeploymentNameTask(
90-
taskName = findDeploymentNameTaskName,
91-
inputFiles = inputFiles,
92-
)
95+
9396
val task = registerNmcpPublishWithPublisherApiTask(
9497
taskName = releaseTaskName,
9598
inputFile = zipTaskProvider.flatMap { it.archiveFile },
9699
username = spec.username,
97100
password = spec.password,
98-
publicationName = spec.publicationName.orElse(findDeploymentNameTaskProvider.flatMap { it.outputFile }.map { it.asFile.readText() }),
101+
publicationName = spec.publicationName.orElse(checkFilesTaskProvider.flatMap { it.outputFile }.map { it.asFile.readText() }),
99102
publishingType = spec.publishingType,
100103
baseUrl = spec.baseUrl,
101104
validationTimeoutSeconds = spec.validationTimeout.map { it.seconds },

nmcp/src/test/kotlin/MainTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@ class MainTest {
3333

3434
val result = GradleRunner.create()
3535
.withProjectDir(dst)
36-
.withArguments("help")
36+
.withArguments("nmcpZipAggregation")
3737
.buildAndFail()
3838

39-
assert(result.output.contains("Nmcp: the aggregation is empty"))
39+
assert(result.output.contains("Nmcp: there are no files to publish"))
4040
}
4141
}

0 commit comments

Comments
 (0)