diff --git a/nmcp/api/nmcp.api b/nmcp/api/nmcp.api index d016591..e608830 100644 --- a/nmcp/api/nmcp.api +++ b/nmcp/api/nmcp.api @@ -10,9 +10,16 @@ public abstract class nmcp/CentralPortalOptions { public abstract fun getValidationTimeout ()Lorg/gradle/api/provider/Property; } +public abstract class nmcp/LocalRepositoryOptions { + public fun ()V + public abstract fun getName ()Lorg/gradle/api/provider/Property; + public abstract fun getPath ()Lorg/gradle/api/provider/Property; +} + public abstract interface class nmcp/NmcpAggregationExtension { public abstract fun centralPortal (Lorg/gradle/api/Action;)V public abstract fun getAllFiles ()Lorg/gradle/api/file/FileCollection; + public abstract fun localRepository (Lorg/gradle/api/Action;)V public abstract fun publishAllProjectsProbablyBreakingProjectIsolation ()V } diff --git a/nmcp/src/main/kotlin/nmcp/LocalRepositoryOptions.kt b/nmcp/src/main/kotlin/nmcp/LocalRepositoryOptions.kt new file mode 100644 index 0000000..2896597 --- /dev/null +++ b/nmcp/src/main/kotlin/nmcp/LocalRepositoryOptions.kt @@ -0,0 +1,15 @@ +package nmcp + +import org.gradle.api.provider.Property + +abstract class LocalRepositoryOptions { + /** + * The name of the repository + */ + abstract val name: Property + + /** + * The path. Relative paths are interpreted relative to the project directory. + */ + abstract val path: Property +} diff --git a/nmcp/src/main/kotlin/nmcp/NmcpAggregationExtension.kt b/nmcp/src/main/kotlin/nmcp/NmcpAggregationExtension.kt index 6b8262b..a7cef55 100644 --- a/nmcp/src/main/kotlin/nmcp/NmcpAggregationExtension.kt +++ b/nmcp/src/main/kotlin/nmcp/NmcpAggregationExtension.kt @@ -9,6 +9,11 @@ interface NmcpAggregationExtension { */ fun centralPortal(action: Action) + /** + * Registers an extra task to publish the aggregation to. + */ + fun localRepository(action: Action) + /** * Applies the `com.gradleup.nmcp` plugin to every project that also applies `maven-publish`. * diff --git a/nmcp/src/main/kotlin/nmcp/internal/DefaultNmcpAggregationExtension.kt b/nmcp/src/main/kotlin/nmcp/internal/DefaultNmcpAggregationExtension.kt index ff08f17..9f52adb 100644 --- a/nmcp/src/main/kotlin/nmcp/internal/DefaultNmcpAggregationExtension.kt +++ b/nmcp/src/main/kotlin/nmcp/internal/DefaultNmcpAggregationExtension.kt @@ -1,9 +1,12 @@ package nmcp.internal import gratatouille.GExtension -import gratatouille.GPlugin +import gratatouille.capitalizeFirstLetter +import java.io.File import nmcp.CentralPortalOptions import nmcp.NmcpAggregationExtension +import nmcp.LocalRepositoryOptions +import nmcp.internal.task.registerNmcpPublishFileByFileToFileSystemTask import nmcp.nmcpAggregationExtensionName import org.gradle.api.Action import org.gradle.api.Project @@ -11,8 +14,6 @@ import org.gradle.api.artifacts.result.ArtifactResult import org.gradle.api.artifacts.result.ResolvedArtifactResult import org.gradle.api.attributes.Usage import org.gradle.api.file.ConfigurableFileCollection -import org.gradle.api.file.FileCollection -import org.gradle.api.file.RegularFileProperty @GExtension( pluginId = "com.gradleup.nmcp.aggregation", @@ -53,6 +54,17 @@ internal abstract class DefaultNmcpAggregationExtension(private val project: Pro action.execute(spec) } + override fun localRepository(action: Action) { + val options = project.objects.newInstance(LocalRepositoryOptions::class.java) + action.execute(options) + project.registerNmcpPublishFileByFileToFileSystemTask( + taskName = "nmcpPublishAggregationTo${options.name.get().capitalizeFirstLetter()}Repository", + inputFiles = allFiles, + m2AbsolutePath = project.provider { File(options.path.get()).absolutePath }, + parallelism = project.provider { 1 }, + ) + } + @Deprecated("Use the settings plugin or a convention plugin instead") override fun publishAllProjectsProbablyBreakingProjectIsolation() { check(project === project.rootProject) {