Skip to content

Commit 7d280be

Browse files
authored
Add nmcpPublishAggregationToMavenLocal (#192)
* Add nmcpPublishAggregationToMavenLocal fixes #171 * fix task name
1 parent cd9e387 commit 7d280be

4 files changed

Lines changed: 58 additions & 28 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro
2424
centralPortalConfigured = true
2525

2626
project.registerPublishToCentralPortalTasks(
27-
name = "aggregation",
27+
kind = Kind.aggregation,
2828
inputFiles = allFiles,
2929
action = action
3030
)

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ internal abstract class DefaultNmcpExtension(private val project: Project): Nmcp
7676
centralPortalConfigured = true
7777

7878
project.registerPublishToCentralPortalTasks(
79-
name = "allPublications",
79+
kind = Kind.allPublications,
8080
inputFiles = m2Files,
8181
action = action
8282
)
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package nmcp.internal.task
2+
3+
import gratatouille.tasks.GInputFiles
4+
import gratatouille.tasks.GInternal
5+
import gratatouille.tasks.GLogger
6+
import gratatouille.tasks.GTask
7+
import java.io.File
8+
import kotlin.io.path.Path
9+
import nmcp.transport.FilesystemTransport
10+
import nmcp.transport.publishFileByFile
11+
12+
@GTask(pure = false)
13+
internal fun nmcpPublishFileByFileToFileSystem(
14+
logger: GLogger,
15+
@GInternal
16+
m2AbsolutePath: String,
17+
inputFiles: GInputFiles,
18+
parallelism: Int,
19+
) {
20+
check(Path(m2AbsolutePath).isAbsolute) {
21+
"Nmcp: path '$m2AbsolutePath' is not an absolute path"
22+
}
23+
logger.lifecycle("Nmcp: copying files to $m2AbsolutePath")
24+
25+
File(m2AbsolutePath).mkdirs()
26+
publishFileByFile(FilesystemTransport(m2AbsolutePath), inputFiles, parallelism)
27+
}

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

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package nmcp.internal
22

33
import gratatouille.wiring.capitalizeFirstLetter
4+
import java.io.File
45
import nmcp.CentralPortalOptions
5-
import nmcp.internal.task.NmcpPublishWithPublisherApiTask
66
import nmcp.internal.task.registerNmcpFindDeploymentNameTask
7+
import nmcp.internal.task.registerNmcpPublishFileByFileToFileSystemTask
78
import nmcp.internal.task.registerNmcpPublishFileByFileToSnapshotsTask
89
import nmcp.internal.task.registerNmcpPublishWithPublisherApiTask
9-
import nmcp.nmcpAggregationExtensionName
10-
import nmcp.nmcpExtensionName
1110
import nmcp.transport.defaultParallelism
1211
import org.gradle.api.Action
1312
import org.gradle.api.Named
@@ -17,7 +16,6 @@ import org.gradle.api.attributes.HasConfigurableAttributes
1716
import org.gradle.api.attributes.Usage
1817
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
1918
import org.gradle.api.file.FileCollection
20-
import org.gradle.api.provider.Property
2119
import org.gradle.api.publish.plugins.PublishingPlugin.PUBLISH_TASK_GROUP
2220
import org.gradle.api.tasks.bundling.Zip
2321

@@ -52,31 +50,33 @@ internal fun HasConfigurableAttributes<*>.configureAttributes(project: Project)
5250
}
5351
}
5452

53+
internal enum class Kind {
54+
aggregation,
55+
allPublications
56+
}
57+
5558
internal fun Project.registerPublishToCentralPortalTasks(
56-
name: String,
59+
kind: Kind,
5760
inputFiles: FileCollection,
5861
action: Action<CentralPortalOptions>,
5962
) {
63+
val name = kind.name
6064
val spec = objects.newInstance(CentralPortalOptions::class.java)
6165
action.execute(spec)
6266

6367
val releaseTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToCentralPortal"
6468
val snapshotTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToCentralPortalSnapshots"
69+
val localTaskName = "nmcpPublish${name.capitalizeFirstLetter()}ToMavenLocal"
6570
val zipTaskName = "nmcpZip${name.capitalizeFirstLetter()}"
6671
val findDeploymentNameTaskName = "nmcpFind${name.capitalizeFirstLetter()}DeploymentName"
6772

68-
val shortcut = when(name) {
69-
"aggregation",
70-
"allPublications" -> name
71-
else -> null
72-
}
7373
val description = when(name) {
7474
"aggregation" -> "Publishes the aggregation"
7575
"allPublications" -> "Publishes all the maven publications"
7676
else -> null
7777
}
78-
val lifecycleTaskName = shortcut?.let { "publish${it.capitalizeFirstLetter()}ToCentralPortal" }
79-
val snapshotsLifecycleTaskName = shortcut?.let { "publish${it.capitalizeFirstLetter()}ToCentralPortalSnapshots" }
78+
val centralPortalLifecycleTaskName = "publish${name.capitalizeFirstLetter()}ToCentralPortal"
79+
val snapshotsLifecycleTaskName = "publish${name.capitalizeFirstLetter()}ToCentralPortalSnapshots"
8080

8181
val zipName = "${name}.zip"
8282
val zipTaskProvider = tasks.register(zipTaskName, Zip::class.java) {
@@ -107,31 +107,34 @@ internal fun Project.registerPublishToCentralPortalTasks(
107107
validationTimeoutSeconds = spec.validationTimeout.map { it.seconds },
108108
publishingTimeoutSeconds = spec.publishingTimeout.map { it.seconds },
109109
)
110-
111-
if (lifecycleTaskName != null) {
112-
project.tasks.register(lifecycleTaskName) {
113-
it.group = PUBLISH_TASK_GROUP
114-
it.description = "$description to the Central Releases repository."
115-
it.dependsOn(task)
116-
}
110+
project.tasks.register(centralPortalLifecycleTaskName) {
111+
it.group = PUBLISH_TASK_GROUP
112+
it.description = "$description to the Central Releases repository."
113+
it.dependsOn(task)
117114
}
118115

119-
val snapshots = registerNmcpPublishFileByFileToSnapshotsTask(
116+
val centralSnapshots = registerNmcpPublishFileByFileToSnapshotsTask(
120117
taskName = snapshotTaskName,
121118
username = spec.username,
122119
password = spec.password,
123120
snapshotsUrl = project.provider { "https://central.sonatype.com/repository/maven-snapshots/" },
124121
inputFiles = inputFiles,
125122
parallelism = spec.uploadSnapshotsParallelism.orElse(defaultParallelism),
126123
)
127-
if (snapshotsLifecycleTaskName != null) {
128-
project.tasks.register(snapshotsLifecycleTaskName) {
129-
it.group = PUBLISH_TASK_GROUP
130-
it.description = "$description to the Central Snapshots repository."
131-
it.dependsOn(snapshots)
132-
}
124+
project.tasks.register(snapshotsLifecycleTaskName) {
125+
it.group = PUBLISH_TASK_GROUP
126+
it.description = "$description to the Central Snapshots repository."
127+
it.dependsOn(centralSnapshots)
133128
}
134129

130+
val m2File = File(System.getProperty("user.home")).resolve(".m2/repository")
131+
registerNmcpPublishFileByFileToFileSystemTask(
132+
taskName = localTaskName,
133+
m2AbsolutePath = project.provider { m2File.absolutePath },
134+
inputFiles = inputFiles,
135+
parallelism = spec.uploadSnapshotsParallelism.orElse(defaultParallelism),
136+
)
137+
135138
/**
136139
* Detect early if the username and/or password are missing.
137140
* This gives feedback to the user before compiling all projects.

0 commit comments

Comments
 (0)