package ru.mipt.npm.gradle import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPublication import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.provideDelegate import org.gradle.kotlin.dsl.withType open class KSciencePublishPlugin : Plugin<Project> { override fun apply(project: Project): Unit = project.run { plugins.apply("maven-publish") // plugins.withId("org.jetbrains.kotlin.jvm"){ // extensions.findByType<JavaPluginExtension>()?.apply { // withSourcesJar() // //withJavadocJar() // } // } afterEvaluate { val githubOrg: String = project.findProperty("githubOrg") as? String ?: "mipt-npm" val githubProject: String? by project val vcs = findProperty("vcs") as? String ?: githubProject?.let { "https://github.com/$githubOrg/$it" } if (vcs == null) { project.logger.warn("[${project.name}] Missing deployment configuration. Skipping publish.") return@afterEvaluate } project.configure<PublishingExtension> { // Process each publication we have in this project publications.withType<MavenPublication>().forEach { publication -> publication.pom { name.set(project.name) description.set(project.description) url.set(vcs) licenses { license { name.set("The Apache Software License, Version 2.0") url.set("http://www.apache.org/licenses/LICENSE-2.0.txt") distribution.set("repo") } } developers { developer { id.set("MIPT-NPM") name.set("MIPT nuclear physics methods laboratory") organization.set("MIPT") organizationUrl.set("http://npm.mipt.ru") } } scm { url.set(vcs) tag.set(project.version.toString()) } } } val githubUser: String? by project val githubToken: String? by project if (githubProject != null && githubUser != null && githubToken != null) { project.logger.info("Adding github publishing to project [${project.name}]") repositories { maven { name = "github" url = uri("https://maven.pkg.github.com/mipt-npm/$githubProject/") credentials { username = githubUser password = githubToken } } } } val spaceRepo: String? by project val spaceUser: String? by project val spaceToken: String? by project if (spaceRepo != null && spaceUser != null && spaceToken != null) { project.logger.info("Adding mipt-npm Space publishing to project [${project.name}]") repositories { maven { name = "space" url = uri(spaceRepo!!) credentials { username = spaceUser password = spaceToken } } } } val bintrayOrg = project.findProperty("bintrayOrg") as? String ?: "mipt-npm" val bintrayUser: String? by project val bintrayApiKey: String? by project val bintrayRepo = if (project.version.toString().contains("dev")) { "dev" } else { findProperty("bintrayRepo") as? String } val projectName = project.name if (bintrayRepo != null && bintrayUser != null && bintrayApiKey != null) { project.logger.info("Adding bintray publishing to project [$projectName]") repositories { maven { name = "bintray" url = uri( "https://api.bintray.com/maven/$bintrayOrg/$bintrayRepo/$projectName/;publish=1;override=1" ) credentials { username = bintrayUser password = bintrayApiKey } } } } } } } }