All Downloads are FREE. Search and download functionalities are using the official Maven repository.

name.remal.gradle_plugins.plugins.publish.gradle_plugin_portal.MavenPublishGradlePluginPortalPlugin.kt Maven / Gradle / Ivy

package name.remal.gradle_plugins.plugins.publish.gradle_plugin_portal

import name.remal.gradle_plugins.dsl.*
import name.remal.gradle_plugins.dsl.extensions.addPlugin
import name.remal.gradle_plugins.dsl.extensions.all
import name.remal.gradle_plugins.dsl.extensions.convention
import name.remal.gradle_plugins.dsl.extensions.invoke
import name.remal.gradle_plugins.plugins.environment_variables.EnvironmentVariablesPlugin
import name.remal.gradle_plugins.plugins.publish.MavenPublishPluginId
import name.remal.gradle_plugins.plugins.publish.MavenPublishSettingsPlugin
import org.gradle.api.Project
import org.gradle.api.plugins.ExtensionContainer
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.api.publish.plugins.PublishingPlugin
import org.gradle.api.tasks.TaskContainer

@Plugin(
    id = "name.remal.maven-publish-gradle-plugin-portal",
    description = "Plugin that allows 'maven-publish' plugin publicate to Gradle Plugin Portal.",
    tags = ["gradle", "plugin", "publish", "publication", "maven", "maven-publish"]
)
@WithPlugins(MavenPublishPluginId::class)
@ApplyPluginClasses(MavenPublishSettingsPlugin::class, EnvironmentVariablesPlugin::class)
class MavenPublishGradlePluginPortalPlugin : BaseReflectiveProjectPlugin() {

    @PluginAction("Allow to publish to gradlePluginPortalPublish repository", order = 1001)
    fun ExtensionContainer.gradlePluginPortalPublish(tasks: TaskContainer, project: Project) {
        invoke(PublishingExtension::class.java) { publishing ->

            publishing.repositories.also {
                it.convention.addPlugin("name.remal.maven-publish-settings.gradlePluginPortalPublish", RepositoryHandlerGradlePluginPortalPublishExtension(it, project))
            }

            publishing.repositories.all(GradlePluginPortalRepository::class.java) { repository ->
                publishing.publications.all(MavenPublication::class.java) { publication ->
                    val publishTaskName = "publish${publication.name.capitalize()}PublicationTo${repository.name.capitalize()}Repository"
                    tasks.create(publishTaskName, PublishToGradlePluginPortalRepository::class.java) { task ->
                        task.repository = repository
                        task.publication = publication
                        tasks.findByName(PublishingPlugin.PUBLISH_LIFECYCLE_TASK_NAME)?.dependsOn(task)
                    }
                }
            }

        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy