diff --git a/atomicfu-gradle-plugin/build.gradle b/atomicfu-gradle-plugin/build.gradle index 53125517..000b1ed8 100644 --- a/atomicfu-gradle-plugin/build.gradle +++ b/atomicfu-gradle-plugin/build.gradle @@ -14,8 +14,8 @@ if (rootProject.ext.jvm_ir_enabled) { // Gradle plugin must be compiled targeting the same Kotlin version as used by Gradle kotlin.sourceSets.all { languageSettings { - apiVersion = "1.4" - languageVersion = "1.4" + apiVersion = KotlinAggregateBuild.getOverriddenKotlinApiVersion(project) ?: "1.4" + languageVersion = KotlinAggregateBuild.getOverriddenKotlinLanguageVersion(project) ?: "1.4" } } diff --git a/atomicfu-maven-plugin/build.gradle b/atomicfu-maven-plugin/build.gradle index a1657696..d11cd6fb 100644 --- a/atomicfu-maven-plugin/build.gradle +++ b/atomicfu-maven-plugin/build.gradle @@ -23,6 +23,8 @@ def buildSnapshots = rootProject.properties['build_snapshot_train'] != null evaluationDependsOn(':atomicfu-transformer') +def kotlinDevRepoUrl = KotlinAggregateBuild.getKotlinDevRepositoryUrl(project) + task generatePomFile(dependsOn: [compileKotlin, ':atomicfu-transformer:publishToMavenLocal']) { def buildDir = project.buildDir // because Maven model also has "project" outputs.file(pomFile) @@ -43,11 +45,12 @@ task generatePomFile(dependsOn: [compileKotlin, ':atomicfu-transformer:publishTo appendNode('project.build.sourceEncoding', 'UTF-8') } appendNode('repositories').with { - appendNode('repository').with { - appendNode('id', 'dev') - appendNode('url', 'https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev') + if (kotlinDevRepoUrl != null && !kotlinDevRepoUrl.isEmpty()) { + appendNode('repository').with { + appendNode('id', 'dev') + appendNode('url', kotlinDevRepoUrl) + } } - if (buildSnapshots) { appendNode('repository').with { appendNode('id', 'kotlin-snapshots') @@ -77,11 +80,11 @@ task generatePluginDescriptor(type: Exec, dependsOn: generatePomFile) { if (mavenUserHome != null) args.add("-Dmaven.user.home=${new File(mavenUserHome).getAbsolutePath()}") if (mavenRepoLocal != null) args.add("-Dmaven.repo.local=${new File(mavenRepoLocal).getAbsolutePath()}") args.addAll([ - '--settings', './settings.xml', - '--errors', - '--batch-mode', - '--file', pomFile.toString(), - 'org.apache.maven.plugins:maven-plugin-plugin:3.5.1:descriptor' + '--settings', './settings.xml', + '--errors', + '--batch-mode', + '--file', pomFile.toString(), + 'org.apache.maven.plugins:maven-plugin-plugin:3.5.1:descriptor' ]) commandLine args doLast { diff --git a/build.gradle b/build.gradle index 2c26cad9..f9090c2d 100644 --- a/build.gradle +++ b/build.gradle @@ -5,6 +5,8 @@ import org.jetbrains.kotlin.konan.target.HostManager buildscript { + + /* * These property group is used to build kotlinx.atomicfu against Kotlin compiler snapshot. * How does it work: @@ -29,14 +31,13 @@ buildscript { ext.jvm_ir_enabled = rootProject.properties['enable_jvm_ir'] != null ext.native_targets_enabled = rootProject.properties['disable_native_targets'] == null + repositories { mavenCentral() maven { url "https://plugins.gradle.org/m2/" } - // Future replacement for kotlin-dev, with cache redirector - maven { url "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" } - maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" } + KotlinAggregateBuild.addDevRepositoryIfEnabled(delegate, project) } - + dependencies { classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "com.moowork.gradle:gradle-node-plugin:$gradle_node_version" @@ -54,12 +55,11 @@ allprojects { } } - println "Using Kotlin $kotlin_version for project $it" + logger.info("Using Kotlin compiler $kotlin_version for $it") + repositories { mavenCentral() - // Future replacement for kotlin-dev, with cache redirector - maven { url "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" } - maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" } + KotlinAggregateBuild.addDevRepositoryIfEnabled(delegate, project) } def deployVersion = properties['DeployVersion'] @@ -79,7 +79,7 @@ allprojects { } } -println("Using Kotlin compiler version: $org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION") +logger.info("Using Kotlin compiler version: $org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION") if (build_snapshot_train) { afterEvaluate { println "Manifest of kotlin-compiler-embeddable.jar for atomicfu" diff --git a/buildSrc/src/main/kotlin/KotlinAggregateBuild.kt b/buildSrc/src/main/kotlin/KotlinAggregateBuild.kt new file mode 100644 index 00000000..042c0957 --- /dev/null +++ b/buildSrc/src/main/kotlin/KotlinAggregateBuild.kt @@ -0,0 +1,67 @@ +@file:JvmName("KotlinAggregateBuild") + +import org.gradle.api.Project +import org.gradle.api.artifacts.dsl.* +import java.net.* +import java.util.logging.Logger + +/* + * Functions in this file are responsible for configuring atomicfu build against a custom dev version + * of Kotlin compiler. + * Such configuration is used in aggregate builds of Kotlin in order to check whether not-yet-released changes + * are compatible with our libraries (aka "integration testing that substitues lack of unit testing"). + */ + +private val LOGGER: Logger = Logger.getLogger("Kotlin settings logger") + +/** + * Should be used for running against of non-released Kotlin compiler on a system test level. + * + * @return a Kotlin API version parametrized from command line nor gradle.properties, null otherwise + */ +fun getOverriddenKotlinApiVersion(project: Project): String? { + val apiVersion = project.rootProject.properties["kotlin_api_version"] as? String + if (apiVersion != null) { + LOGGER.info("""Configured Kotlin API version: '$apiVersion' for project $${project.name}""") + } + return apiVersion +} + +/** + * Should be used for running against of non-released Kotlin compiler on a system test level + * + * @return a Kotlin Language version parametrized from command line nor gradle.properties, null otherwise + */ +fun getOverriddenKotlinLanguageVersion(project: Project): String? { + val languageVersion = project.rootProject.properties["kotlin_language_version"] as? String + if (languageVersion != null) { + LOGGER.info("""Configured Kotlin Language version: '$languageVersion' for project ${project.name}""") + } + return languageVersion +} + +/** + * Should be used for running against of non-released Kotlin compiler on a system test level + * Kotlin compiler artifacts are expected to be downloaded from maven central by default. + * In case of compiling with not-published into the MC kotlin compiler artifacts, a kotlin_repo_url gradle parameter should be specified. + * To reproduce a build locally, a kotlin/dev repo should be passed + * + * @return an url for a kotlin compiler repository parametrized from command line nor gradle.properties, empty string otherwise + */ +fun getKotlinDevRepositoryUrl(project: Project): String? { + val url = project.rootProject.properties["kotlin_repo_url"] as? String + if (url != null) { + LOGGER.info("""Configured Kotlin Compiler repository url: '$url' for project ${project.name}""") + } + return url +} + +/** + * Adds a kotlin-dev space repository with dev versions of Kotlin if Kotlin aggregate build is enabled + */ +fun addDevRepositoryIfEnabled(rh: RepositoryHandler, project: Project) { + val devRepoUrl = getKotlinDevRepositoryUrl(project) ?: return + rh.maven { + url = URI.create(devRepoUrl) + } +} diff --git a/buildSrc/src/main/kotlin/Publishing.kt b/buildSrc/src/main/kotlin/Publishing.kt index 3db911f9..2af49509 100644 --- a/buildSrc/src/main/kotlin/Publishing.kt +++ b/buildSrc/src/main/kotlin/Publishing.kt @@ -45,12 +45,10 @@ fun MavenPom.configureMavenCentralMetadata(project: Project) { } fun mavenRepositoryUri(): URI { - // TODO -SNAPSHOT detection can be made here as well val repositoryId: String? = System.getenv("libs.repository.id") return if (repositoryId == null) { // Using implicitly created staging, for MPP it's likely to be a mistake because // publication on TeamCity will create 3 independent staging repositories - System.err.println("Warning: using an implicitly created staging for atomicfu") URI("https://oss.sonatype.org/service/local/staging/deploy/maven2/") } else { URI("https://oss.sonatype.org/service/local/staging/deployByRepositoryId/$repositoryId") diff --git a/gradle.properties b/gradle.properties index 903d60df..ebcb2767 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,6 +6,7 @@ version=0.18.5-SNAPSHOT group=org.jetbrains.kotlinx kotlin_version=1.7.20 + asm_version=9.3 slf4j_version=1.8.0-alpha2 junit_version=4.12 diff --git a/gradle/compile-options.gradle b/gradle/compile-options.gradle index b6ce5325..6531496e 100644 --- a/gradle/compile-options.gradle +++ b/gradle/compile-options.gradle @@ -1,4 +1,3 @@ - /* * Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ @@ -19,8 +18,8 @@ ext.configureKotlin = { isMultiplatform -> kotlin.sourceSets.all { languageSettings { - apiVersion = "1.4" - languageVersion = "1.4" + apiVersion = KotlinAggregateBuild.getOverriddenKotlinApiVersion(project) ?: "1.4" + languageVersion = KotlinAggregateBuild.getOverriddenKotlinLanguageVersion(project) ?: "1.4" } } }