Skip to content

Commit a1aba90

Browse files
authored
Chore(infra): Prepare atomicfu for including to the Kotlin Aggregate build //KTI-1016 (#265)
Parametrize kotlin api version, kotlin language version. Support passing an url for a kotlin compiler repository, drop space kotlin/dev repo from dependencies: Kotlin compiler artifacts should be downloaded from maven central by default. In case of compiling with not-published into the MC kotlin compiler artifacts, a kotlin_repo_url should be specified as a gradle parameter(E.g. space kotlin/dev repo).
1 parent 89a8859 commit a1aba90

File tree

7 files changed

+93
-25
lines changed

7 files changed

+93
-25
lines changed

atomicfu-gradle-plugin/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@ if (rootProject.ext.jvm_ir_enabled) {
1414
// Gradle plugin must be compiled targeting the same Kotlin version as used by Gradle
1515
kotlin.sourceSets.all {
1616
languageSettings {
17-
apiVersion = "1.4"
18-
languageVersion = "1.4"
17+
apiVersion = KotlinAggregateBuild.getOverriddenKotlinApiVersion(project) ?: "1.4"
18+
languageVersion = KotlinAggregateBuild.getOverriddenKotlinLanguageVersion(project) ?: "1.4"
1919
}
2020
}
2121

atomicfu-maven-plugin/build.gradle

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ def buildSnapshots = rootProject.properties['build_snapshot_train'] != null
2323

2424
evaluationDependsOn(':atomicfu-transformer')
2525

26+
def kotlinDevRepoUrl = KotlinAggregateBuild.getKotlinDevRepositoryUrl(project)
27+
2628
task generatePomFile(dependsOn: [compileKotlin, ':atomicfu-transformer:publishToMavenLocal']) {
2729
def buildDir = project.buildDir // because Maven model also has "project"
2830
outputs.file(pomFile)
@@ -43,11 +45,12 @@ task generatePomFile(dependsOn: [compileKotlin, ':atomicfu-transformer:publishTo
4345
appendNode('project.build.sourceEncoding', 'UTF-8')
4446
}
4547
appendNode('repositories').with {
46-
appendNode('repository').with {
47-
appendNode('id', 'dev')
48-
appendNode('url', 'https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev')
48+
if (kotlinDevRepoUrl != null && !kotlinDevRepoUrl.isEmpty()) {
49+
appendNode('repository').with {
50+
appendNode('id', 'dev')
51+
appendNode('url', kotlinDevRepoUrl)
52+
}
4953
}
50-
5154
if (buildSnapshots) {
5255
appendNode('repository').with {
5356
appendNode('id', 'kotlin-snapshots')
@@ -77,11 +80,11 @@ task generatePluginDescriptor(type: Exec, dependsOn: generatePomFile) {
7780
if (mavenUserHome != null) args.add("-Dmaven.user.home=${new File(mavenUserHome).getAbsolutePath()}")
7881
if (mavenRepoLocal != null) args.add("-Dmaven.repo.local=${new File(mavenRepoLocal).getAbsolutePath()}")
7982
args.addAll([
80-
'--settings', './settings.xml',
81-
'--errors',
82-
'--batch-mode',
83-
'--file', pomFile.toString(),
84-
'org.apache.maven.plugins:maven-plugin-plugin:3.5.1:descriptor'
83+
'--settings', './settings.xml',
84+
'--errors',
85+
'--batch-mode',
86+
'--file', pomFile.toString(),
87+
'org.apache.maven.plugins:maven-plugin-plugin:3.5.1:descriptor'
8588
])
8689
commandLine args
8790
doLast {

build.gradle

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import org.jetbrains.kotlin.konan.target.HostManager
66

77
buildscript {
8+
9+
810
/*
911
* These property group is used to build kotlinx.atomicfu against Kotlin compiler snapshot.
1012
* How does it work:
@@ -29,14 +31,13 @@ buildscript {
2931
ext.jvm_ir_enabled = rootProject.properties['enable_jvm_ir'] != null
3032
ext.native_targets_enabled = rootProject.properties['disable_native_targets'] == null
3133

34+
3235
repositories {
3336
mavenCentral()
3437
maven { url "https://plugins.gradle.org/m2/" }
35-
// Future replacement for kotlin-dev, with cache redirector
36-
maven { url "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" }
37-
maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" }
38+
KotlinAggregateBuild.addDevRepositoryIfEnabled(delegate, project)
3839
}
39-
40+
4041
dependencies {
4142
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
4243
classpath "com.moowork.gradle:gradle-node-plugin:$gradle_node_version"
@@ -54,12 +55,11 @@ allprojects {
5455
}
5556
}
5657

57-
println "Using Kotlin $kotlin_version for project $it"
58+
logger.info("Using Kotlin compiler $kotlin_version for $it")
59+
5860
repositories {
5961
mavenCentral()
60-
// Future replacement for kotlin-dev, with cache redirector
61-
maven { url "https://cache-redirector.jetbrains.com/maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" }
62-
maven { url "https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev" }
62+
KotlinAggregateBuild.addDevRepositoryIfEnabled(delegate, project)
6363
}
6464

6565
def deployVersion = properties['DeployVersion']
@@ -79,7 +79,7 @@ allprojects {
7979
}
8080
}
8181

82-
println("Using Kotlin compiler version: $org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION")
82+
logger.info("Using Kotlin compiler version: $org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION")
8383
if (build_snapshot_train) {
8484
afterEvaluate {
8585
println "Manifest of kotlin-compiler-embeddable.jar for atomicfu"
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
@file:JvmName("KotlinAggregateBuild")
2+
3+
import org.gradle.api.Project
4+
import org.gradle.api.artifacts.dsl.*
5+
import java.net.*
6+
import java.util.logging.Logger
7+
8+
/*
9+
* Functions in this file are responsible for configuring atomicfu build against a custom dev version
10+
* of Kotlin compiler.
11+
* Such configuration is used in aggregate builds of Kotlin in order to check whether not-yet-released changes
12+
* are compatible with our libraries (aka "integration testing that substitues lack of unit testing").
13+
*/
14+
15+
private val LOGGER: Logger = Logger.getLogger("Kotlin settings logger")
16+
17+
/**
18+
* Should be used for running against of non-released Kotlin compiler on a system test level.
19+
*
20+
* @return a Kotlin API version parametrized from command line nor gradle.properties, null otherwise
21+
*/
22+
fun getOverriddenKotlinApiVersion(project: Project): String? {
23+
val apiVersion = project.rootProject.properties["kotlin_api_version"] as? String
24+
if (apiVersion != null) {
25+
LOGGER.info("""Configured Kotlin API version: '$apiVersion' for project $${project.name}""")
26+
}
27+
return apiVersion
28+
}
29+
30+
/**
31+
* Should be used for running against of non-released Kotlin compiler on a system test level
32+
*
33+
* @return a Kotlin Language version parametrized from command line nor gradle.properties, null otherwise
34+
*/
35+
fun getOverriddenKotlinLanguageVersion(project: Project): String? {
36+
val languageVersion = project.rootProject.properties["kotlin_language_version"] as? String
37+
if (languageVersion != null) {
38+
LOGGER.info("""Configured Kotlin Language version: '$languageVersion' for project ${project.name}""")
39+
}
40+
return languageVersion
41+
}
42+
43+
/**
44+
* Should be used for running against of non-released Kotlin compiler on a system test level
45+
* Kotlin compiler artifacts are expected to be downloaded from maven central by default.
46+
* In case of compiling with not-published into the MC kotlin compiler artifacts, a kotlin_repo_url gradle parameter should be specified.
47+
* To reproduce a build locally, a kotlin/dev repo should be passed
48+
*
49+
* @return an url for a kotlin compiler repository parametrized from command line nor gradle.properties, empty string otherwise
50+
*/
51+
fun getKotlinDevRepositoryUrl(project: Project): String? {
52+
val url = project.rootProject.properties["kotlin_repo_url"] as? String
53+
if (url != null) {
54+
LOGGER.info("""Configured Kotlin Compiler repository url: '$url' for project ${project.name}""")
55+
}
56+
return url
57+
}
58+
59+
/**
60+
* Adds a kotlin-dev space repository with dev versions of Kotlin if Kotlin aggregate build is enabled
61+
*/
62+
fun addDevRepositoryIfEnabled(rh: RepositoryHandler, project: Project) {
63+
val devRepoUrl = getKotlinDevRepositoryUrl(project) ?: return
64+
rh.maven {
65+
url = URI.create(devRepoUrl)
66+
}
67+
}

buildSrc/src/main/kotlin/Publishing.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,10 @@ fun MavenPom.configureMavenCentralMetadata(project: Project) {
4545
}
4646

4747
fun mavenRepositoryUri(): URI {
48-
// TODO -SNAPSHOT detection can be made here as well
4948
val repositoryId: String? = System.getenv("libs.repository.id")
5049
return if (repositoryId == null) {
5150
// Using implicitly created staging, for MPP it's likely to be a mistake because
5251
// publication on TeamCity will create 3 independent staging repositories
53-
System.err.println("Warning: using an implicitly created staging for atomicfu")
5452
URI("https://oss.sonatype.org/service/local/staging/deploy/maven2/")
5553
} else {
5654
URI("https://oss.sonatype.org/service/local/staging/deployByRepositoryId/$repositoryId")

gradle.properties

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ version=0.18.5-SNAPSHOT
66
group=org.jetbrains.kotlinx
77

88
kotlin_version=1.7.20
9+
910
asm_version=9.3
1011
slf4j_version=1.8.0-alpha2
1112
junit_version=4.12

gradle/compile-options.gradle

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
/*
32
* Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
43
*/
@@ -19,8 +18,8 @@ ext.configureKotlin = { isMultiplatform ->
1918

2019
kotlin.sourceSets.all {
2120
languageSettings {
22-
apiVersion = "1.4"
23-
languageVersion = "1.4"
21+
apiVersion = KotlinAggregateBuild.getOverriddenKotlinApiVersion(project) ?: "1.4"
22+
languageVersion = KotlinAggregateBuild.getOverriddenKotlinLanguageVersion(project) ?: "1.4"
2423
}
2524
}
2625
}

0 commit comments

Comments
 (0)