From 774596bbf65053836a33debc0ab1522a5d1a156c Mon Sep 17 00:00:00 2001 From: Alexander Nozik Date: Wed, 30 Sep 2020 20:43:02 +0300 Subject: [PATCH] Remove node to a separate plugin --- CHANGELOG.md | 21 +++++----- build.gradle.kts | 7 ++++ .../ru/mipt/npm/gradle/KScienceExtension.kt | 7 +++- .../ru/mipt/npm/gradle/KScienceJSPlugin.kt | 3 +- .../ru/mipt/npm/gradle/KScienceMPPlugin.kt | 1 - .../ru/mipt/npm/gradle/KScienceNodePlugin.kt | 42 +++++++++++++++++++ .../mipt/npm/gradle/KScienceProjectPlugin.kt | 3 ++ .../ru/mipt/npm/gradle/KScienceVersions.kt | 1 + 8 files changed, 71 insertions(+), 14 deletions(-) create mode 100644 src/main/kotlin/ru/mipt/npm/gradle/KScienceNodePlugin.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index a55859c..3735e34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,19 +7,20 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] ### Added -- Changelog plugin automatically applied to `project` -- Feature matrix and Readme generation task for a `project` plugin +- Changelog plugin automatically applied to `project`. +- Feature matrix and Readme generation task for a `project` plugin. +- Add `binary-compatibility-validator` to the `project` plugin. ### Changed -- Remove node plugin and make node binaries available by default -- Use default webpack distribution path -- `ru.mipt.npm.base` -> `ru.mipt.npm.project` +- Remove node plugin. Node binaries should be turned on manually. +- Use default webpack distribution path. +- `ru.mipt.npm.base` -> `ru.mipt.npm.project`. - Move publishing out of general extension and apply it to project plugin instead. ### Deprecated ### Removed -- Node plugin +- Node plugin. ### Fixed @@ -28,14 +29,14 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - Migrate to kotlin 1.4.0 -- Separate Native (current platform) and nodeJs plugins +- Separate Native (current platform) and nodeJs plugins. - Add `application()` toggle in plugin configuration to produce binaries on JS and applicaion plugin on jvm. -- Add `publish` to expose publishing configuration +- Add `publish` to expose publishing configuration. ### Changed --Publishing in bintray now is automatic +-Publishing in bintray now is automatic. ## [0.5.2] ### Added -- Copy resources for jvm modules and jvm source sets in mpp \ No newline at end of file +- Copy resources for jvm modules and jvm source sets in mpp. \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index d7b576c..c43ecf9 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -30,6 +30,7 @@ dependencies { implementation("org.jetbrains.dokka:dokka-gradle-plugin:1.4.10") implementation("org.jetbrains.dokka:dokka-base:1.4.10") implementation("org.jetbrains.intellij.plugins:gradle-changelog-plugin:0.5.0") + implementation("org.jetbrains.kotlinx:binary-compatibility-validator:0.2.3") } gradlePlugin { @@ -68,6 +69,12 @@ gradlePlugin { description = "Additional native targets to be use alongside mpp" implementationClass = "ru.mipt.npm.gradle.KScienceNativePlugin" } + + create("kscience.node") { + id = "ru.mipt.npm.node" + description = "Additional nodejs target to be use alongside mpp" + implementationClass = "ru.mipt.npm.gradle.KScienceNodePlugin" + } } } diff --git a/src/main/kotlin/ru/mipt/npm/gradle/KScienceExtension.kt b/src/main/kotlin/ru/mipt/npm/gradle/KScienceExtension.kt index 150c2ca..305c2f3 100644 --- a/src/main/kotlin/ru/mipt/npm/gradle/KScienceExtension.kt +++ b/src/main/kotlin/ru/mipt/npm/gradle/KScienceExtension.kt @@ -1,6 +1,7 @@ package ru.mipt.npm.gradle import org.gradle.api.Project +import org.gradle.api.plugins.ApplicationPlugin import org.gradle.kotlin.dsl.findByType import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension @@ -70,14 +71,17 @@ class KScienceExtension(val project: Project) { project.extensions.findByType()?.apply { explicitApi = null } + project.pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { - project.plugins.apply("org.gradle.application") + project.plugins.apply(ApplicationPlugin::class.java) } + project.extensions.findByType()?.apply { js { binaries.executable() } } + project.extensions.findByType()?.apply { js { binaries.executable() @@ -86,7 +90,6 @@ class KScienceExtension(val project: Project) { binaries.executable() } } - } } diff --git a/src/main/kotlin/ru/mipt/npm/gradle/KScienceJSPlugin.kt b/src/main/kotlin/ru/mipt/npm/gradle/KScienceJSPlugin.kt index 6f150ac..bacfbcd 100644 --- a/src/main/kotlin/ru/mipt/npm/gradle/KScienceJSPlugin.kt +++ b/src/main/kotlin/ru/mipt/npm/gradle/KScienceJSPlugin.kt @@ -18,10 +18,11 @@ open class KScienceJSPlugin : Plugin { configure { explicitApiWarning() + js(IR) { browser() - nodejs() } + sourceSets["main"].apply { languageSettings.applySettings() diff --git a/src/main/kotlin/ru/mipt/npm/gradle/KScienceMPPlugin.kt b/src/main/kotlin/ru/mipt/npm/gradle/KScienceMPPlugin.kt index 7675142..eda2baf 100644 --- a/src/main/kotlin/ru/mipt/npm/gradle/KScienceMPPlugin.kt +++ b/src/main/kotlin/ru/mipt/npm/gradle/KScienceMPPlugin.kt @@ -27,7 +27,6 @@ open class KScienceMPPlugin : Plugin { js(IR) { browser() - nodejs() } sourceSets.invoke { diff --git a/src/main/kotlin/ru/mipt/npm/gradle/KScienceNodePlugin.kt b/src/main/kotlin/ru/mipt/npm/gradle/KScienceNodePlugin.kt new file mode 100644 index 0000000..66ea1c9 --- /dev/null +++ b/src/main/kotlin/ru/mipt/npm/gradle/KScienceNodePlugin.kt @@ -0,0 +1,42 @@ +package ru.mipt.npm.gradle + +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.* +import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension + +/** + * Create a separate target for node + */ +class KScienceNodePlugin : Plugin { + override fun apply(target: Project) = target.run { + //Apply multiplatform plugin is not applied, apply it + if (plugins.findPlugin(KScienceMPPlugin::class) == null) { + logger.info("Multiplatform KScience plugin is not resolved. Adding it automatically") + pluginManager.apply(KScienceMPPlugin::class) + } + + configure { + js(name = "node", compiler = IR) { + nodejs() + } + sourceSets { + val commonMain by getting + val nodeMain by creating { + dependsOn(commonMain) + dependencies{ + api("org.jetbrains.kotlinx:kotlinx-nodejs:${KScienceVersions.kotlinxNodeVersion}") + } + } + + val commonTest by getting + + val nodeTest by creating { + dependsOn(nodeMain) + dependsOn(commonTest) + } + } + } + + } +} \ No newline at end of file diff --git a/src/main/kotlin/ru/mipt/npm/gradle/KScienceProjectPlugin.kt b/src/main/kotlin/ru/mipt/npm/gradle/KScienceProjectPlugin.kt index 29baf02..942334a 100644 --- a/src/main/kotlin/ru/mipt/npm/gradle/KScienceProjectPlugin.kt +++ b/src/main/kotlin/ru/mipt/npm/gradle/KScienceProjectPlugin.kt @@ -1,6 +1,7 @@ package ru.mipt.npm.gradle import groovy.text.SimpleTemplateEngine +import kotlinx.validation.BinaryCompatibilityValidatorPlugin import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.* @@ -101,6 +102,8 @@ open class KScienceProjectPlugin : Plugin { override fun apply(target: Project): Unit = target.run { apply() apply() + apply() + val rootReadmeExtension = KScienceReadmeExtension(this) extensions.add("ksciencePublish", KSciencePublishingExtension(this)) extensions.add("readme", rootReadmeExtension) diff --git a/src/main/kotlin/ru/mipt/npm/gradle/KScienceVersions.kt b/src/main/kotlin/ru/mipt/npm/gradle/KScienceVersions.kt index 8889c66..08018bc 100644 --- a/src/main/kotlin/ru/mipt/npm/gradle/KScienceVersions.kt +++ b/src/main/kotlin/ru/mipt/npm/gradle/KScienceVersions.kt @@ -7,6 +7,7 @@ import org.gradle.api.JavaVersion */ object KScienceVersions { const val kotlinVersion = "1.4.20-M1" + const val kotlinxNodeVersion = "0.0.7" const val coroutinesVersion = "1.3.9" const val serializationVersion = "1.0.0-RC2" const val atomicVersion = "0.14.4"