import org.jetbrains.kotlin.gradle.tasks.KotlinCompile ext.manifestAttributes = { Manifest manifest, Project project, String component = null, boolean multiRelease = false -> project.configure(manifest) { attributes \ 'Implementation-Vendor': 'JetBrains', 'Implementation-Title': project.archivesBaseName, 'Implementation-Version': project.buildNumber if (component != null) { attributes \ 'Kotlin-Runtime-Component': component, 'Kotlin-Version': project.kotlinLanguageVersion } if (multiRelease) { attributes \ 'Multi-Release': 'true' } } } task preparePublication { def properties = project.properties assert project.version != 'unspecified' Map repositoryProviders = ['sonatype-nexus-staging' : 'sonatype', 'sonatype-nexus-snapshots' : 'sonatype'] project.ext.isRelease = !project.version.toString().contains('-SNAPSHOT') String repo = properties["deployRepo"] ?: properties['deploy-repo'] String repoProvider = repositoryProviders.get(repo, repo) project.ext.isSonatypePublish = repoProvider == 'sonatype' project.ext.isSonatypeRelease = isSonatypePublish && isRelease String deployRepoUrl = properties["deployRepoUrl"] ?: properties["deploy-url"] String deployFolder = properties["deployRepoFolder"] != null ? "file://${rootProject.buildDir}/${properties["deployRepoFolder"]}" : null String sonatypeSnapshotsUrl = (isSonatypePublish && !isRelease) ? "https://oss.sonatype.org/content/repositories/snapshots/" : null String deployUrlFromParameters = deployRepoUrl ?: deployFolder ?: sonatypeSnapshotsUrl project.ext.isDeployStagingRepoGenerationRequired = project.ext.isSonatypeRelease && deployUrlFromParameters == null ext.repoUrl = deployUrlFromParameters ?: "file://${rootProject.buildDir}/repo" logger.info("Deployment repository preliminary url: $repoUrl ($repoProvider)") ext.username = properties["deployRepoUsername"] ?: properties["kotlin.${repoProvider}.user"] ext.password = properties["deployRepoPassword"] ?: properties["kotlin.${repoProvider}.password"] doLast { println("Deployment repository url: $repoUrl") } } ext.configurePublishing = { Project project, configure = { } -> ArtifactsKt.publish(project, false) { publication -> configure.delegate = publication configure() } } ext.configureGradlePluginPublishing = { Project project -> ArtifactsKt.publishGradlePlugin(project) } ext.configurePluginMarkers = { Project project, withEmptyJars = true -> PluginMarkersKt.publishPluginMarkers(project, withEmptyJars) } ext.configureFrontendIr = { Project project -> project.tasks.withType(KotlinCompile.class) { task -> task.kotlinOptions { if (project.kotlinBuildProperties.useFirForLibraries) { freeCompilerArgs += "-Xuse-fir" } } } } allprojects { project -> project.ext.configureSourcesJar = { lambda = {} -> ArtifactsKt.sourcesJar(project) { task -> lambda.delegate = task lambda() } } project.ext.configureJavadocJar = { lambda = {} -> ArtifactsKt.javadocJar(project) { task -> lambda.delegate = task lambda() } } project.ext.configureModularJar = { lambda = {} -> ArtifactsKt.modularJar(project) { task -> lambda.delegate = task lambda() } } dependencies.ext.kotlinStdlib = { suffix -> DependenciesKt.kotlinStdlib(project, suffix, null) } }