Skip to content

Commit

Permalink
QoL changes
Browse files Browse the repository at this point in the history
  • Loading branch information
Mr3zee committed Oct 2, 2024
1 parent 7029b68 commit d3ed384
Show file tree
Hide file tree
Showing 6 changed files with 124 additions and 86 deletions.
92 changes: 6 additions & 86 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,16 @@
*/

import org.jetbrains.kotlin.gradle.plugin.getKotlinPluginVersion
import util.getSpacePassword
import util.configureApiValidation
import util.configureNpm
import util.configureProjectReport
import util.libs

plugins {
alias(libs.plugins.serialization) apply false
alias(libs.plugins.kotlinx.rpc) apply false
alias(libs.plugins.conventions.kover)
alias(libs.plugins.conventions.gradle.doctor)
alias(libs.plugins.binary.compatibility.validator)

if (libs.versions.atomicfu.get() >= "0.24.0") {
alias(libs.plugins.atomicfu.new)
Expand All @@ -20,31 +21,9 @@ plugins {
}
}

// useful for dependencies introspection
// run ./gradlew htmlDependencyReport
// Report can normally be found in build/reports/project/dependencies/index.html
allprojects {
plugins.apply("project-report")
}

object Const {
const val INTERNAL_RPC_API_ANNOTATION = "kotlinx.rpc.internal.utils.InternalRPCApi"
}

apiValidation {
ignoredPackages.add("kotlinx.rpc.internal")
ignoredPackages.add("kotlinx.rpc.krpc.internal")

ignoredProjects.addAll(
listOf(
"compiler-plugin-tests",
"krpc-test",
"utils",
)
)

nonPublicMarkers.add(Const.INTERNAL_RPC_API_ANNOTATION)
}
configureProjectReport()
configureNpm()
configureApiValidation()

val kotlinVersionFull: String by extra

Expand All @@ -63,62 +42,3 @@ val kotlinGPVersion = getKotlinPluginVersion()
if (kotlinVersionFull != kotlinGPVersion) {
error("KGP version mismatch. Project version: $kotlinVersionFull, KGP version: $kotlinGPVersion")
}

val executeNpmLogin by tasks.registering {
val registryUrl = "https://packages.jetbrains.team/npm/p/krpc/build-deps/"

// To prevent leaking of credentials in VCS on dev machine use the build directory config file
val buildYarnConfigFile = File(project.rootDir, "build/js/.yarnrc")
val buildNpmConfigFile = File(project.rootDir, "build/js/.npmrc")

val spacePassword: String? = getSpacePassword()

doLast {
val outputYarnText = """
registry: "$registryUrl"
""".trimIndent()

var outputNpmText = """
registry: "$registryUrl"
""".trimIndent()

if (spacePassword != null) {
if (spacePassword.split(".").size != 3) {
throw GradleException("Unexpected Space Token format")
}

outputNpmText += System.lineSeparator() + """
always-auth: true
${registryUrl.removePrefix("https:")}:_authToken=$spacePassword
""".trimIndent()
}

buildYarnConfigFile.createNewFile()
buildYarnConfigFile.writeText(outputYarnText)
buildNpmConfigFile.createNewFile()
buildNpmConfigFile.writeText(outputNpmText)
}

outputs.file(buildYarnConfigFile).withPropertyName("buildOutputYarnFile")
outputs.file(buildNpmConfigFile).withPropertyName("buildOutputNpmFile")
}

plugins.withType(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin::class.java).configureEach {
rootProject.extensions.configure(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension::class.java) {
download = true
downloadBaseUrl = "https://packages.jetbrains.team/files/p/krpc/build-deps/"
}

tasks.named("kotlinNpmInstall").configure {
dependsOn(executeNpmLogin)
}
}

// necessary for CI js tests
rootProject.plugins.withType<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin> {
rootProject.extensions.configure<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension> {
ignoreScripts = false
download = true
downloadBaseUrl = "https://packages.jetbrains.team/files/p/krpc/build-deps/"
}
}
1 change: 1 addition & 0 deletions gradle-conventions-settings/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ val isLatestKotlinVersion: Boolean by extra
dependencies {
api(libs.kotlin.gradle.plugin)
api(libs.detekt.gradle.plugin)
api(libs.binary.compatibility.validator.gradle.plugin)

if (isLatestKotlinVersion) {
api(libs.kover.gradle.plugin)
Expand Down
28 changes: 28 additions & 0 deletions gradle-conventions-settings/src/main/kotlin/util/apiValidation.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/*
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/

package util

import kotlinx.validation.ApiValidationExtension
import org.gradle.api.Project
import org.gradle.kotlin.dsl.the

fun Project.configureApiValidation() {
plugins.apply(libs.plugins.binary.compatibility.validator.get().pluginId)

the<ApiValidationExtension>().apply {
ignoredPackages.add("kotlinx.rpc.internal")
ignoredPackages.add("kotlinx.rpc.krpc.internal")

ignoredProjects.addAll(
listOf(
"compiler-plugin-tests",
"krpc-test",
"utils",
)
)

nonPublicMarkers.add("kotlinx.rpc.internal.utils.InternalRPCApi")
}
}
71 changes: 71 additions & 0 deletions gradle-conventions-settings/src/main/kotlin/util/npm.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
/*
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/

package util

import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.kotlin.dsl.*
import java.io.File

fun Project.configureNpm() {
val executeNpmLogin by tasks.registering {
val registryUrl = "https://packages.jetbrains.team/npm/p/krpc/build-deps/"

// To prevent leaking of credentials in VCS on dev machine use the build directory config file
val buildYarnConfigFile = File(project.rootDir, "build/js/.yarnrc")
val buildNpmConfigFile = File(project.rootDir, "build/js/.npmrc")

val spacePassword: String? = getSpacePassword()

doLast {
val outputYarnText = """
registry: "$registryUrl"
""".trimIndent()

var outputNpmText = """
registry: "$registryUrl"
""".trimIndent()

if (spacePassword != null) {
if (spacePassword.split(".").size != 3) {
throw GradleException("Unexpected Space Token format")
}

outputNpmText += System.lineSeparator() + """
always-auth: true
${registryUrl.removePrefix("https:")}:_authToken=$spacePassword
""".trimIndent()
}

buildYarnConfigFile.createNewFile()
buildYarnConfigFile.writeText(outputYarnText)
buildNpmConfigFile.createNewFile()
buildNpmConfigFile.writeText(outputNpmText)
}

outputs.file(buildYarnConfigFile).withPropertyName("buildOutputYarnFile")
outputs.file(buildNpmConfigFile).withPropertyName("buildOutputNpmFile")
}

plugins.withType(org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootPlugin::class.java).configureEach {
rootProject.extensions.configure<org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension> {
download = true
downloadBaseUrl = "https://packages.jetbrains.team/files/p/krpc/build-deps/"
}

tasks.named("kotlinNpmInstall").configure {
dependsOn(executeNpmLogin)
}
}

// necessary for CI js tests
rootProject.plugins.withType<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin> {
rootProject.extensions.configure<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension> {
ignoreScripts = false
download = true
downloadBaseUrl = "https://packages.jetbrains.team/files/p/krpc/build-deps/"
}
}
}
16 changes: 16 additions & 0 deletions gradle-conventions-settings/src/main/kotlin/util/projectReport.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
/*
* Copyright 2023-2024 JetBrains s.r.o and contributors. Use of this source code is governed by the Apache 2.0 license.
*/

package util

import org.gradle.api.Project

// useful for dependencies introspection
// run ./gradlew htmlDependencyReport
// Report can normally be found in build/reports/project/dependencies/index.html
fun Project.configureProjectReport() {
allprojects {
plugins.apply("project-report")
}
}
2 changes: 2 additions & 0 deletions versions-root/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,7 @@ coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", ve
coroutines-debug = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-debug", version.ref = "coroutines" }
detekt-gradle-plugin = { module = "io.gitlab.arturbosch.detekt:detekt-gradle-plugin", version.ref = "detekt-gradle-plugin" }
kover-gradle-plugin = { module = "org.jetbrains.kotlinx:kover-gradle-plugin", version.ref = "kover" }
binary-compatibility-validator-gradle-plugin = { module = "org.jetbrains.kotlinx:binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
kotlin-js-wrappers = { module = "org.jetbrains.kotlin-wrappers:kotlin-js", version.ref = "kotlin-wrappers" }
gradle-kotlin-dsl-pluigns = { module = "org.gradle.kotlin:gradle-kotlin-dsl-plugins", version.ref = "gradle-kotlin-dsl" }
intellij-util = { module = "com.jetbrains.intellij.platform:util", version.ref = "intellij" }
Expand Down Expand Up @@ -124,6 +125,7 @@ conventions-kmp = { id = "conventions-kmp", version.ref = "kotlinx-rpc" }
conventions-gradle-publish = { id = "conventions-gradle-publish", version.ref = "kotlinx-rpc" }
conventions-kover = { id = "conventions-kover", version.ref = "kotlinx-rpc" }
conventions-gradle-doctor = { id = "conventions-gradle-doctor", version.ref = "kotlinx-rpc" }
conventions-npm = { id = "conventions-npm", version.ref = "kotlinx-rpc" }
compiler-specific-module = { id = "compiler-specific-module", version.ref = "kotlinx-rpc" }

# gradle-plugin project
Expand Down

0 comments on commit d3ed384

Please sign in to comment.