Compare commits

...

46 Commits

Author SHA1 Message Date
d6276e0ca0 update versions 2024-07-25 10:08:06 +03:00
2bd93104d6 Return optins 2024-07-25 09:56:40 +03:00
91a82153fd Kotlin 2.0.20-Beta2.
Add KSP
2024-07-25 09:48:40 +03:00
53517859d4 fix pom organization 2024-06-24 16:58:16 +03:00
d93b0a578f 0.15.4-2.0.0 2024-06-04 12:52:49 +03:00
43dcf509fb 0.15.4-2.0.0 2024-06-04 12:49:18 +03:00
ec3e3e3376 2.0.0 2024-05-25 21:50:51 +03:00
46be46461b Merge branch 'refs/heads/beta/2.0.0' into dev
# Conflicts:
#	gradle/libs.versions.toml
2024-05-22 21:25:12 +03:00
fbdb3e0da9 Update to 2.0.0 2024-05-22 21:24:37 +03:00
e55e296ab0 2.0.0-RC2 2024-04-30 19:41:05 +03:00
329d023438 2.0.0-RC1 2024-04-20 12:08:18 +03:00
cb1c6d79a7 2.0.0-RC1 2024-04-20 09:19:11 +03:00
93d881c9a4 2.0.0-beta-4 2024-03-18 09:20:09 +03:00
2da966b1cd Kotlin 1.9.22 2024-02-10 12:30:36 +03:00
d79453371e Kotlin 1.9.22 2024-02-04 18:59:17 +03:00
6cd7b572d6 Kotlin 2.0.0-Beta2 2023-12-17 11:07:27 +03:00
3a150eff69 Merge branch 'dev' into beta/2.0.0
# Conflicts:
#	gradle/libs.versions.toml
2023-12-17 10:32:10 +03:00
920385e135 Add wasm essentials 2023-12-05 15:11:22 +03:00
71f7698633 kotlin 1.9.21 2023-11-26 09:32:31 +03:00
ed5faa0335 kotlin 2.0.0-Beta1 2023-11-21 11:22:40 +03:00
7636f37cfc add foojay resolver 2023-11-01 20:15:18 +03:00
b5772a2e9b Replace Chrom canary with chrome for wasm tests 2023-11-01 09:03:49 +03:00
dba45860f7 Finalization for 1.9.20 2023-10-31 13:59:09 +03:00
90762f493e Update to 1.9.20-RC2 2023-10-25 08:44:47 +03:00
54952c3da6 Update to 1.9.20-RC. Fix warnings 2023-10-18 11:27:37 +03:00
89af2dd644 bump version 2023-09-22 08:43:01 +03:00
b27624bf1c remove Js plugin and deprecated JVM 2023-09-13 12:12:46 +03:00
4f41d90308 Update changelog and version 2023-09-13 08:52:23 +03:00
33b6de9f0e Change plugin deploy logic 2023-09-12 21:19:05 +03:00
2f5e053aea Change publishing logic. Adjust to adhere to gradle 8.3 changes. 2023-09-12 21:04:29 +03:00
c3bdd8edca update versions 2023-09-12 08:48:25 +03:00
c249dc5ae4 1.9.0 2023-08-21 18:26:17 +03:00
8a864f97a3 1.9.0 2023-07-07 21:44:38 +03:00
72f2678f3d Merge branch 'beta/1.9.0' into dev 2023-07-07 11:29:11 +03:00
8272c4ae4d 1.9.0-RC 2023-06-22 20:28:21 +03:00
a62503ac41 add debelopment mode for fullstack 2023-06-09 17:22:36 +03:00
5463c9326b Add gc to wasm 2023-06-07 15:14:13 +03:00
4238dc5a43 kotlin 1.9.0-Beta 2023-06-02 13:40:59 +03:00
021f78c510 0.14.9 - fix duplicating JS source code publication 2023-05-29 12:58:19 +03:00
b05617ce9a 0.14.8 2023-05-26 09:18:59 +03:00
70c190d7fa Fix wasm target configuration 2023-04-16 13:51:38 +03:00
d3432643e8 Update dependencies. Make optional configuraion for sonatype repo 2023-04-05 15:28:46 +03:00
512954b510 Update dependencies. Make optional configuraion for sonatype repo 2023-04-05 13:55:32 +03:00
9fc8d96e88 Fixed macosArm64 target 2023-03-22 18:15:35 +03:00
2e3b74eb63 update dokka version 2023-03-22 11:14:05 +03:00
2886b7b200 Relax publishing rules. Add a way to regulate publishing targets from parameters 2023-03-22 10:45:09 +03:00
16 changed files with 447 additions and 497 deletions

View File

@ -1,6 +1,6 @@
# Changelog # Changelog
All notable changes to this project will be documented in this file.
All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
@ -18,22 +18,59 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Security ### Security
## 0.15.4-kotlin-2.0.0 - 2024-06-04
### Added
- Pass `compose` extension to the kscience extension so compose dependencies could be called directly from kscience block
### Changed
- Use ES6 modules by default in JS
- Kotlin 2.0
## 0.15.2-kotlin-1.9.22 - 2024-02-09
### Added
- Add development mode for fullstack.
### Changed
- Kotlin 1.9.20
- Remove publishing defaults for Space and GitHub. Now publishing repositories is configured quasi-manually. Property keys for username and tokens are generated automatically.
- All publishing targets are enabled by default. Introduce `publishing.targets` variable to regulate what is added to the module.
### Deprecated
- JVM plugin in favor of Mpp.
### Removed
- JS plugin. It is deprecated in favor of MPP.
- Unnecessary `dependsOn` for native dependencies.
- Groovy gradle dependency notation.
## 0.14.4-kotlin-1.8.20-RC - 2023-03-12 ## 0.14.4-kotlin-1.8.20-RC - 2023-03-12
### Added ### Added
- Easier dependency handling in `kscience` block - Easier dependency handling in `kscience` block
- Customizable base jdk version - Customizable base jdk version
### Changed ### Changed
- MPP does not use JVM and JS(IR) targets anymore. They could be turned manually via `js()`, `jvm()` or `fullStack()` - MPP does not use JVM and JS(IR) targets anymore. They could be turned manually via `js()`, `jvm()` or `fullStack()`
- Signing is not applied if signingId is not provided - Signing is not applied if signingId is not provided
### Removed ### Removed
- FX plugins - FX plugins
- Unnecessary library shortcuts (html and datetime) - Unnecessary library shortcuts (html and datetime)
- deploy/release tasks - deploy/release tasks
### Fixed ### Fixed
- Gradle 8 compatibility - Gradle 8 compatibility
- Dokka publication - Dokka publication
- issues with test sourcesets - issues with test sourcesets
@ -41,9 +78,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## 0.13.4-kotlin-1.8.0 - 2022-12-31 ## 0.13.4-kotlin-1.8.0 - 2022-12-31
### Added ### Added
- Public `isInDevelopment` project flag - Public `isInDevelopment` project flag
### Changed ### Changed
- Require manual pom config for publications - Require manual pom config for publications
- Kotlin 1.8.0 - Kotlin 1.8.0
- Versions update - Versions update
@ -51,139 +90,172 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Moved `yarn.lock` to `gradle` directory - Moved `yarn.lock` to `gradle` directory
### Deprecated ### Deprecated
- FX configuration - FX configuration
### Removed ### Removed
- Xjdk-release flag because it is broken until https://youtrack.jetbrains.com/issue/KT-52823 - Xjdk-release flag because it is broken until https://youtrack.jetbrains.com/issue/KT-52823
- Use CSS loader in JS by default - Use CSS loader in JS by default
## 0.11.6-kotlin-1.7.0 ## 0.11.6-kotlin-1.7.0
### Changed ### Changed
- Coroutines tests are applied only when explicit `useCoroutines` is used. - Coroutines tests are applied only when explicit `useCoroutines` is used.
### Removed ### Removed
- Atomicfu support inside the plugin - Atomicfu support inside the plugin
### Fixed ### Fixed
- Rollback coroutines to 1.6.1 - Rollback coroutines to 1.6.1
## 0.11.5-kotlin-1.7.0 ## 0.11.5-kotlin-1.7.0
### Added ### Added
- Coroutine tests as default dependency for tests - Coroutine tests as default dependency for tests
- Context receiver flag - Context receiver flag
### Changed ### Changed
- Separate release tasks for each target - Separate release tasks for each target
- Kotlin 1.7.0 - Kotlin 1.7.0
- Ktor 2.0.1 - Ktor 2.0.1
- ExplicitAPI does not override existing value - ExplicitAPI does not override existing value
### Removed ### Removed
- Ktor specific artifacts from version catalog - Ktor specific artifacts from version catalog
### Fixed ### Fixed
- Moved signing out of sonatype block - Moved signing out of sonatype block
## 0.11.1-kotlin-1.6.10 ## 0.11.1-kotlin-1.6.10
### Added ### Added
- Default templates for README and ARTIFACT - Default templates for README and ARTIFACT
### Changed ### Changed
- Replaced Groovy templates by FreeMarker - Replaced Groovy templates by FreeMarker
### Fixed ### Fixed
- JS publication sources jar - JS publication sources jar
## 0.10.9-kotlin-1.6.10 ## 0.10.9-kotlin-1.6.10
### Added ### Added
- html builders for readme - html builders for readme
### Changed ### Changed
- Kotlin 1.6.0 - Kotlin 1.6.0
- Use indy lambdas by default #32 - Use indy lambdas by default #32
- Change version scheme to `<version>-kotlin-<kotlin version>` - Change version scheme to `<version>-kotlin-<kotlin version>`
### Fixed ### Fixed
- remove `nativeMain` dependency from `nativeTest` - remove `nativeMain` dependency from `nativeTest`
## 0.10.4 ## 0.10.4
### Changed ### Changed
- Kotlin 1.6 - Kotlin 1.6
### Fixed ### Fixed
- Some issues with opt-ins - Some issues with opt-ins
## 0.10.2 ## 0.10.2
### Added ### Added
- Experimental automatic JS project bundling in MPP - Experimental automatic JS project bundling in MPP
### Changed ### Changed
- Remove vcs requirement for Space publication - Remove vcs requirement for Space publication
## 0.10.0 ## 0.10.0
### Added ### Added
- Lazy readme properties - Lazy readme properties
- BOM for kotlin-wrappers on JS - BOM for kotlin-wrappers on JS
- Jupyter loader - Jupyter loader
### Changed ### Changed
- API validation disabled for dev versions - API validation disabled for dev versions
- Kotlin plugins are propagated downstream - Kotlin plugins are propagated downstream
### Removed ### Removed
- bson support - bson support
## 0.9.5 ## 0.9.5
### Added ### Added
- Disable API validation for snapshots - Disable API validation for snapshots
- `-Xjvm-default=all` on JVM - `-Xjvm-default=all` on JVM
### Changed ### Changed
- `publication.platform` changed to `publishing.platform` - `publication.platform` changed to `publishing.platform`
- Dokka version to `1.4.30` - Dokka version to `1.4.30`
- `useDateTime` in extension - `useDateTime` in extension
- Kotlin 1.5 - Kotlin 1.5
### Removed ### Removed
- Publish plugin. Use MavenPublish instead - Publish plugin. Use MavenPublish instead
### Fixed ### Fixed
- Removed unnecessary `afterEvaluate` for compatibility with gradle 7.0 - Removed unnecessary `afterEvaluate` for compatibility with gradle 7.0
## 0.9.0 ## 0.9.0
### Added ### Added
- Skip sonatype publishing for dev versions - Skip sonatype publishing for dev versions
### Changed ### Changed
- Publishing repositories are explicit and defined in the top level project - Publishing repositories are explicit and defined in the top level project
- Paths to publishing properties now use dot notation like `publishing.github.user` - Paths to publishing properties now use dot notation like `publishing.github.user`
### Deprecated ### Deprecated
- Publishing plugin - Publishing plugin
### Removed ### Removed
- Bintray publishing - Bintray publishing
## 0.8.4 ## 0.8.4
### Added ### Added
- Adaptive support for host OS in native - Adaptive support for host OS in native
- CSS support for JS targets - CSS support for JS targets
### Changed ### Changed
- Kotlin 1.4.31 - Kotlin 1.4.31
- Coroutines 1.4.3 - Coroutines 1.4.3
### Fixed ### Fixed
- Plugin loading order for publishing - Plugin loading order for publishing
- Release task - Release task
- Readme generation for multi-module project - Readme generation for multi-module project
@ -191,11 +263,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## 0.8.1 ## 0.8.1
### Added ### Added
- Ktor version to versions - Ktor version to versions
- Add sonatype publishing - Add sonatype publishing
- Per-platform release publishing - Per-platform release publishing
### Changed ### Changed
- Kotlin to 1.4.30 stable. - Kotlin to 1.4.30 stable.
- Added intermediate jsCommon main/test sourcesSet for node plugin. - Added intermediate jsCommon main/test sourcesSet for node plugin.
- Plugin names changed to `ru.mipt.npm` package. - Plugin names changed to `ru.mipt.npm` package.
@ -203,15 +277,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Plugins group changed to `ru.mipt.npm` with `gradle` prefix - Plugins group changed to `ru.mipt.npm` with `gradle` prefix
### Removed ### Removed
- kaml - kaml
### Fixed ### Fixed
- Fix publishing load order for sonatype - Fix publishing load order for sonatype
- Fix root project readme - Fix root project readme
## 0.7.4 ## 0.7.4
### Added ### Added
- Changelog plugin automatically applied to `project`. - Changelog plugin automatically applied to `project`.
- Feature matrix and Readme generation task for a `project` plugin. - Feature matrix and Readme generation task for a `project` plugin.
- Add `binary-compatibility-validator` to the `project` plugin. - Add `binary-compatibility-validator` to the `project` plugin.
@ -220,6 +297,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Suppress API validation for modules with maturity below DEVELOPMENT - Suppress API validation for modules with maturity below DEVELOPMENT
### Changed ### Changed
- Remove node plugin. Node binaries should be turned on manually. - Remove node plugin. Node binaries should be turned on manually.
- Use default webpack distribution path. - Use default webpack distribution path.
- `ru.mipt.npm.base` -> `ru.mipt.npm.project`. - `ru.mipt.npm.base` -> `ru.mipt.npm.project`.
@ -230,15 +308,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Kotlin 1.4.30-RC - Kotlin 1.4.30-RC
### Deprecated ### Deprecated
- Support of `kaml` and `snake-yaml` in favor of `yamlKt` - Support of `kaml` and `snake-yaml` in favor of `yamlKt`
- Publish plugin - Publish plugin
### Removed ### Removed
- `useDokka` method. Documentation jar should be added manually if needed. - `useDokka` method. Documentation jar should be added manually if needed.
## 0.6.0 ## 0.6.0
### Added ### Added
- Migrate to kotlin 1.4.0 - 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 `application()` toggle in plugin configuration to produce binaries on JS and applicaion plugin on jvm.
@ -247,4 +328,5 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## 0.5.2 ## 0.5.2
### Added ### Added
- Copy resources for jvm modules and jvm source sets in mpp. - Copy resources for jvm modules and jvm source sets in mpp.

View File

@ -4,8 +4,10 @@ plugins {
`maven-publish` `maven-publish`
signing signing
`version-catalog` `version-catalog`
alias(libs.plugins.changelog) alias(libs.plugins.jetbrains.changelog)
alias(libs.plugins.dokka) alias(libs.plugins.jetbrains.dokka)
alias(libs.plugins.versions)
alias(libs.plugins.versions.update)
} }
group = "space.kscience" group = "space.kscience"
@ -25,17 +27,18 @@ kotlin.explicitApiWarning()
dependencies { dependencies {
api(libs.kotlin.gradle) api(libs.kotlin.gradle)
api(libs.foojay.resolver)
implementation(libs.binary.compatibility.validator) implementation(libs.binary.compatibility.validator)
implementation(libs.changelog.gradle) implementation(libs.changelog.gradle)
implementation(libs.dokka.gradle) implementation(libs.dokka.gradle)
implementation(libs.kotlin.jupyter.gradle) implementation(libs.kotlin.jupyter.gradle)
implementation(libs.kotlin.serialization) implementation(libs.kotlin.serialization)
implementation(libs.kotlinx.html) implementation(libs.kotlinx.html)
implementation("org.tomlj:tomlj:1.1.0") implementation(libs.tomlj)
// // nexus publishing plugin // // nexus publishing plugin
// implementation("io.github.gradle-nexus:publish-plugin:1.1.0") // implementation("io.github.gradle-nexus:publish-plugin:_")
implementation("org.freemarker:freemarker:2.3.31") implementation(libs.freemarker)
testImplementation(kotlin("test")) testImplementation(kotlin("test"))
} }
@ -65,23 +68,17 @@ gradlePlugin {
description = "Pre-configured JVM project" description = "Pre-configured JVM project"
implementationClass = "space.kscience.gradle.KScienceJVMPlugin" implementationClass = "space.kscience.gradle.KScienceJVMPlugin"
} }
create("js") {
id = "space.kscience.gradle.js"
description = "Pre-configured JS project"
implementationClass = "space.kscience.gradle.KScienceJSPlugin"
}
} }
} }
tasks.create("version") { tasks.create("version") {
group = "publishing" group = "publishing"
val versionFile = project.buildDir.resolve("project-version.txt") val versionFileProvider = project.layout.buildDirectory.file("project-version.txt")
outputs.file(versionFile) outputs.file(versionFileProvider)
doLast { doLast {
val versionFile = versionFileProvider.get().asFile
versionFile.createNewFile() versionFile.createNewFile()
versionFile.writeText(project.version.toString()) versionFile.writeText(project.version.toString())
println(project.version)
} }
} }
@ -117,7 +114,7 @@ val emptySourcesJar by tasks.creating(Jar::class) {
} }
publishing { publishing {
val vcs = "https://github.com/mipt-npm/gradle-tools" val vcs = "https://github.com/SciProgCentre/gradle-tools"
// Process each publication we have in this project // Process each publication we have in this project
publications { publications {
@ -151,10 +148,10 @@ publishing {
developers { developers {
developer { developer {
id.set("MIPT-NPM") id.set("SPC")
name.set("MIPT nuclear physics methods laboratory") name.set("Scientific Programming Centre")
organization.set("MIPT") organization.set("SPC")
organizationUrl.set("https://npm.mipt.ru") organizationUrl.set("https://sciprog.center/")
} }
} }
@ -166,20 +163,18 @@ publishing {
} }
} }
val spaceRepo = "https://maven.pkg.jetbrains.space/spc/p/sci/maven" val spaceRepo = "https://maven.sciprog.center/kscience"
val spaceUser: String? = findProperty("publishing.space.user") as? String val spcUser: String? = findProperty("publishing.spc.user") as? String
val spaceToken: String? = findProperty("publishing.space.token") as? String val spcToken: String? = findProperty("publishing.spc.token") as? String
if (spaceUser != null && spaceToken != null) {
project.logger.info("Adding mipt-npm Space publishing to project [${project.name}]")
if (spcUser != null && spcToken != null) {
repositories.maven { repositories.maven {
name = "space" name = "spc"
url = uri(spaceRepo) url = uri(spaceRepo)
credentials { credentials {
username = spaceUser username = spcUser
password = spaceToken password = spcToken
} }
} }
} }
@ -211,7 +206,6 @@ publishing {
} }
} }
kotlin { kotlin {
jvmToolchain { jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(11)) languageVersion.set(JavaLanguageVersion.of(11))
@ -226,4 +220,14 @@ tasks.processResources.configure {
// Workaround for https://github.com/gradle/gradle/issues/15568 // Workaround for https://github.com/gradle/gradle/issues/15568
tasks.withType<AbstractPublishToMaven>().configureEach { tasks.withType<AbstractPublishToMaven>().configureEach {
mustRunAfter(tasks.withType<Sign>()) mustRunAfter(tasks.withType<Sign>())
} }
versionCatalogUpdate {
sortByKey.set(false)
keep {
keepUnusedVersions = true
keepUnusedPlugins = true
keepUnusedLibraries = true
}
}

View File

@ -1 +1,3 @@
kotlin.code.style=official kotlin.code.style=official
nl.littlerobots.vcu.resolver=true

View File

@ -1,103 +1,42 @@
[versions] [versions]
tools = "0.14.4-kotlin-1.8.20-RC" # @pin
kotlin = "1.8.20-RC" kotlin = "2.0.20-Beta2"
atomicfu = "0.19.0" # @pin
binary-compatibility-validator = "0.12.1" tools = "0.15.5-kotlin-2.0.20-Beta2"
changelog = "2.0.0"
dokka = "1.7.20" atomicfu = "0.24.0"
kotlin-jupyter = "0.11.0-317" changelog = "2.2.0"
kotlinx-benchmark = "0.4.7" compose = "1.6.11"
kotlinx-cli = "0.3.5" dokka = "1.9.20"
kotlinx-coroutines = "1.6.4" jsBom = "1.0.0-pre.754"
kotlinx-datetime = "0.4.0" junit = "5.10.2"
kotlinx-html = "0.8.0" kotlin-jupyter = "0.12.0-230"
kotlinx-knit = "0.4.0" kotlinx-benchmark = "0.4.10"
kotlinx-cli = "0.3.6"
kotlinx-coroutines = "1.8.1"
kotlinx-datetime = "0.6.0"
kotlinx-html = "0.11.0"
kotlinx-knit = "0.5.0"
kotlinx-nodejs = "0.0.7" kotlinx-nodejs = "0.0.7"
kotlinx-serialization = "1.4.1" kotlinx-serialization = "1.6.3"
ktor = "2.2.3" kover = "0.8.0"
xmlutil = "0.84.3" ktor = "2.3.11"
yamlkt = "0.12.0" ksp = "2.0.0-1.0.23"
jsBom = "1.0.0-pre.509" logback = "1.5.6"
junit = "5.9.2" slf4j = "2.0.13"
compose = "1.3.0" xmlutil = "0.86.3"
logback = "1.4.5" yamlkt = "0.13.0"
[libraries]
atomicfu-gradle = { module = "org.jetbrains.kotlinx:atomicfu-gradle-plugin", version.ref = "atomicfu" }
atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" }
binary-compatibility-validator = { module = "org.jetbrains.kotlinx:binary-compatibility-validator", version.ref = "binary-compatibility-validator" }
changelog-gradle = { module = "org.jetbrains.intellij.plugins:gradle-changelog-plugin", version.ref = "changelog" }
dokka-gradle = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
kotlin-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" }
kotlin-jupyter-gradle = { module = "org.jetbrains.kotlin:kotlin-jupyter-api-gradle-plugin", version.ref = "kotlin-jupyter" }
kotlinx-benchmark-runtime = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-runtime", version.ref = "kotlinx-benchmark" }
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-debug = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-debug", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-reactive = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactive", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-reactor = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactor", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-rx2 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-rx2", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-rx3 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-rx3", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-javafx = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-javafx", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-jdk8 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-guava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-slf4j = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-slf4j", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-play-services = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-play-services", version.ref = "kotlinx-coroutines" }
kotlinx-cli = { module = "org.jetbrains.kotlinx:kotlinx-cli", version.ref = "kotlinx-cli" }
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
kotlinx-html = { module = "org.jetbrains.kotlinx:kotlinx-html", version.ref = "kotlinx-html" }
kotlinx-knit = { module = "org.jetbrains.kotlinx:kotlinx-knit", version.ref = "kotlinx-knit" }
kotlinx-nodejs = { module = "org.jetbrains.kotlinx:kotlinx-nodejs", version.ref = "kotlinx-nodejs" }
kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlinx-serialization" }
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" }
kotlinx-serialization-hocon = { module = "org.jetbrains.kotlinx:kotlinx-serialization-hocon", version.ref = "kotlinx-serialization" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
kotlinx-serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "kotlinx-serialization" }
kotlinx-serialization-properties = { module = "org.jetbrains.kotlinx:kotlinx-serialization-properties", version.ref = "kotlinx-serialization" }
ktor-bom = { module = "io.ktor:ktor-bom", version.ref = "ktor" }
xmlutil-core = { module = "io.github.pdvrieze.xmlutil:core", version.ref = "xmlutil" }
xmlutil-ktor = { module = "io.github.pdvrieze.xmlutil:ktor", version.ref = "xmlutil" }
xmlutil-serialization = { module = "io.github.pdvrieze.xmlutil:serialization", version.ref = "xmlutil" }
yamlkt = { module = "net.mamoe.yamlkt:yamlkt", version.ref = "yamlkt" }
logback-classic = {module = "ch.qos.logback:logback-classic", version.ref = "logback"}
[plugins] [plugins]
changelog = { id = "org.jetbrains.changelog", version.ref = "changelog" } compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = "kotlin" }
compose-jb = { id = "org.jetbrains.compose", version.ref = "compose" }
dokka = { id = "org.jetbrains.dokka", version.ref = "dokka" } jetbrains-changelog = "org.jetbrains.changelog:2.2.0"
compose = {id = "org.jetbrains.compose", version.ref = "compose"} jetbrains-dokka = "org.jetbrains.dokka:1.9.20"
gradle-common = { id = "space.kscience.gradle.common", version.ref = "tools" }
gradle-project = { id = "space.kscience.gradle.project", version.ref = "tools" }
gradle-mpp = { id = "space.kscience.gradle.mpp", version.ref = "tools" }
gradle-jvm = { id = "space.kscience.gradle.jvm", version.ref = "tools" }
gradle-js = { id = "space.kscience.gradle.js", version.ref = "tools" }
gradle-native = { id = "space.kscience.gradle.native", version.ref = "tools" }
gradle-node = { id = "space.kscience.gradle.node", version.ref = "tools" }
kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" }
kotlin-android-extensions = { id = "org.jetbrains.kotlin.android.extensions", version.ref = "kotlin" } kotlin-android-extensions = { id = "org.jetbrains.kotlin.android.extensions", version.ref = "kotlin" }
kotlin-dsl = "org.gradle.kotlin.kotlin-dsl:4.4.0"
kotlin-js = { id = "org.jetbrains.kotlin.js", version.ref = "kotlin" } kotlin-js = { id = "org.jetbrains.kotlin.js", version.ref = "kotlin" }
kotlin-jupyter-api = { id = "org.jetbrains.kotlin.jupyter.api", version.ref = "kotlin-jupyter" }
kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" }
kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" }
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" }
@ -110,7 +49,71 @@ kotlin-plugin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", versio
kotlin-plugin-scripting = { id = "org.jetbrains.kotlin.plugin.scripting", version.ref = "kotlin" } kotlin-plugin-scripting = { id = "org.jetbrains.kotlin.plugin.scripting", version.ref = "kotlin" }
kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" }
kotlin-plugin-spring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlin" } kotlin-plugin-spring = { id = "org.jetbrains.kotlin.plugin.spring", version.ref = "kotlin" }
kotlin-jupyter-api = { id = "org.jetbrains.kotlin.jupyter.api", version.ref = "kotlin-jupyter" }
kotlinx-benchmark = { id = "org.jetbrains.kotlinx.benchmark", version.ref = "kotlinx-benchmark" } kotlinx-benchmark = { id = "org.jetbrains.kotlinx.benchmark", version.ref = "kotlinx-benchmark" }
kotlinx-kover = { id = "org.jetbrains.kotlinx.kover", version.ref = "kover" }
kscience-mpp = { id = "space.kscience.gradle.mpp", version.ref = "tools" }
kscience-project = { id = "space.kscience.gradle.project", version.ref = "tools" }
ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" }
ktor = { id = "io.ktor.plugin", version.ref = "ktor" }
versions = "com.github.ben-manes.versions:0.51.0"
versions-update = "nl.littlerobots.version-catalog-update:0.8.4"
[libraries]
atomicfu = { module = "org.jetbrains.kotlinx:atomicfu", version.ref = "atomicfu" }
atomicfu-gradle = { module = "org.jetbrains.kotlinx:atomicfu-gradle-plugin", version.ref = "atomicfu" }
binary-compatibility-validator = "org.jetbrains.kotlinx:binary-compatibility-validator:0.15.0-Beta.2"
changelog-gradle = { module = "org.jetbrains.intellij.plugins:gradle-changelog-plugin", version.ref = "changelog" }
dokka-base = { module = "org.jetbrains.dokka:dokka-base", version.ref = "dokka" }
dokka-gradle = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
dokka-gradle-plugin = { module = "org.jetbrains.dokka:dokka-gradle-plugin", version.ref = "dokka" }
foojay-resolver = "org.gradle.toolchains:foojay-resolver:0.8.0"
freemarker = "org.freemarker:freemarker:2.3.33"
gradle-changelog-plugin = { module = "org.jetbrains.intellij.plugins:gradle-changelog-plugin", version.ref = "changelog" }
kotlin-assignment-compiler-plugin-embeddable = { module = "org.jetbrains.kotlin:kotlin-assignment-compiler-plugin-embeddable", version.ref = "kotlin" }
kotlin-gradle = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
kotlin-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-gradle-plugin", version.ref = "kotlin" }
kotlin-js-wrappers = { module = "org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom", version.ref = "jsBom" }
kotlin-jupyter-api-gradle-plugin = { module = "org.jetbrains.kotlin:kotlin-jupyter-api-gradle-plugin", version.ref = "kotlin" }
kotlin-jupyter-gradle = { module = "org.jetbrains.kotlin:kotlin-jupyter-api-gradle-plugin", version.ref = "kotlin-jupyter" }
kotlin-reflect = { module = "org.jetbrains.kotlin:kotlin-reflect", version.ref = "kotlin" }
kotlin-sam-with-receiver-compiler-plugin-embeddable = { module = "org.jetbrains.kotlin:kotlin-sam-with-receiver-compiler-plugin-embeddable", version.ref = "kotlin" }
kotlin-scripting-compiler-embeddable = { module = "org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable", version.ref = "kotlin" }
kotlin-serialization = { module = "org.jetbrains.kotlin:kotlin-serialization", version.ref = "kotlin" }
kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin" }
kotlin-test = { module = "org.jetbrains.kotlin:kotlin-test" }
kotlinx-benchmark-runtime = { module = "org.jetbrains.kotlinx:kotlinx-benchmark-runtime", version.ref = "kotlinx-benchmark" }
kotlinx-cli = { module = "org.jetbrains.kotlinx:kotlinx-cli", version.ref = "kotlinx-cli" }
kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-debug = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-debug", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-guava = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-guava", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-javafx = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-javafx", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-jdk8 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-jdk8", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-play-services = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-play-services", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-reactive = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactive", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-reactor = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-reactor", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-rx2 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-rx2", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-rx3 = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-rx3", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-slf4j = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-slf4j", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinx-coroutines" }
kotlinx-coroutines-test = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-test", version.ref = "kotlinx-coroutines" }
kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinx-datetime" }
kotlinx-html = { module = "org.jetbrains.kotlinx:kotlinx-html", version.ref = "kotlinx-html" }
kotlinx-knit = { module = "org.jetbrains.kotlinx:kotlinx-knit", version.ref = "kotlinx-knit" }
kotlinx-nodejs = { module = "org.jetbrains.kotlinx:kotlinx-nodejs", version.ref = "kotlinx-nodejs" }
kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlinx-serialization" }
kotlinx-serialization-core = { module = "org.jetbrains.kotlinx:kotlinx-serialization-core", version.ref = "kotlinx-serialization" }
kotlinx-serialization-hocon = { module = "org.jetbrains.kotlinx:kotlinx-serialization-hocon", version.ref = "kotlinx-serialization" }
kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinx-serialization" }
kotlinx-serialization-properties = { module = "org.jetbrains.kotlinx:kotlinx-serialization-properties", version.ref = "kotlinx-serialization" }
kotlinx-serialization-protobuf = { module = "org.jetbrains.kotlinx:kotlinx-serialization-protobuf", version.ref = "kotlinx-serialization" }
ksp-api = { module = "com.google.devtools.ksp:symbol-processing-api", version.ref = "ksp" }
ktor-bom = { module = "io.ktor:ktor-bom", version.ref = "ktor" }
logback-classic = { module = "ch.qos.logback:logback-classic", version.ref = "logback" }
slf4j = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" }
tomlj = "org.tomlj:tomlj:1.1.1"
xmlutil-core = { module = "io.github.pdvrieze.xmlutil:core", version.ref = "xmlutil" }
xmlutil-ktor = { module = "io.github.pdvrieze.xmlutil:ktor", version.ref = "xmlutil" }
xmlutil-serialization = { module = "io.github.pdvrieze.xmlutil:serialization", version.ref = "xmlutil" }
yamlkt = { module = "net.mamoe.yamlkt:yamlkt", version.ref = "yamlkt" }

View File

@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.2-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

View File

@ -1 +1,5 @@
rootProject.name = "gradle-tools" rootProject.name = "gradle-tools"
plugins {
id("org.gradle.toolchains.foojay-resolver-convention") version("0.8.0")
}

View File

@ -3,28 +3,33 @@ package space.kscience.gradle
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.api.file.DuplicatesStrategy import org.gradle.api.file.DuplicatesStrategy
import org.gradle.api.plugins.ApplicationPlugin import org.gradle.api.plugins.ApplicationPlugin
import org.gradle.api.plugins.ExtensionAware
import org.gradle.api.provider.Property import org.gradle.api.provider.Property
import org.gradle.api.tasks.Copy import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.testing.Test import org.gradle.api.tasks.testing.Test
import org.gradle.jvm.toolchain.JavaLanguageVersion import org.gradle.jvm.toolchain.JavaLanguageVersion
import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.*
import org.gradle.language.jvm.tasks.ProcessResources import org.gradle.language.jvm.tasks.ProcessResources
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinProjectExtension
import org.jetbrains.kotlin.gradle.plugin.KotlinCompilation
import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler import org.jetbrains.kotlin.gradle.plugin.KotlinDependencyHandler
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget
import org.jetbrains.kotlin.gradle.targets.js.dsl.ExperimentalWasmDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsBrowserDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmTargetDsl import org.jetbrains.kotlin.gradle.targets.js.dsl.KotlinWasmJsTargetDsl
import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget import org.jetbrains.kotlin.gradle.targets.jvm.KotlinJvmTarget
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.jetbrains.kotlinx.jupyter.api.plugin.tasks.JupyterApiResourcesTask import org.jetbrains.kotlinx.jupyter.api.plugin.tasks.JupyterApiResourcesTask
import space.kscience.gradle.internal.defaultKotlinJvmArgs import space.kscience.gradle.internal.defaultKotlinJvmArgs
import space.kscience.gradle.internal.fromJsDependencies import space.kscience.gradle.internal.fromJsDependencies
import space.kscience.gradle.internal.requestPropertyOrNull
import space.kscience.gradle.internal.useCommonDependency import space.kscience.gradle.internal.useCommonDependency
import javax.inject.Inject
public enum class DependencyConfiguration { public enum class DependencyConfiguration {
API, API,
@ -49,7 +54,7 @@ public val Project.isInDevelopment: Boolean
private const val defaultJdkVersion = 11 private const val defaultJdkVersion = 11
public open class KScienceExtension(public val project: Project) { public abstract class KScienceExtension @Inject constructor(public val project: Project): ExtensionAware {
public val jdkVersionProperty: Property<Int> = project.objects.property<Int>().apply { public val jdkVersionProperty: Property<Int> = project.objects.property<Int>().apply {
set(defaultJdkVersion) set(defaultJdkVersion)
@ -105,7 +110,7 @@ public open class KScienceExtension(public val project: Project) {
configure<KotlinMultiplatformExtension> { configure<KotlinMultiplatformExtension> {
sourceSets.findByName("commonMain")?.apply { sourceSets.findByName("commonMain")?.apply {
dependencies { dependencies {
api(platform("io.ktor:ktor-bom:$version")) api(project.dependencies.platform("io.ktor:ktor-bom:$version"))
} }
} }
} }
@ -114,7 +119,7 @@ public open class KScienceExtension(public val project: Project) {
configure<KotlinJvmProjectExtension> { configure<KotlinJvmProjectExtension> {
sourceSets.findByName("main")?.apply { sourceSets.findByName("main")?.apply {
dependencies { dependencies {
api(platform("io.ktor:ktor-bom:$version")) api(project.dependencies.platform("io.ktor:ktor-bom:$version"))
} }
} }
} }
@ -123,7 +128,7 @@ public open class KScienceExtension(public val project: Project) {
configure<KotlinJsProjectExtension> { configure<KotlinJsProjectExtension> {
sourceSets.findByName("main")?.apply { sourceSets.findByName("main")?.apply {
dependencies { dependencies {
api(platform("io.ktor:ktor-bom:$version")) api(project.dependencies.platform("io.ktor:ktor-bom:$version"))
} }
} }
} }
@ -153,14 +158,6 @@ public open class KScienceExtension(public val project: Project) {
} }
} }
project.pluginManager.withPlugin("org.jetbrains.kotlin.js") {
project.configure<KotlinJsProjectExtension> {
sourceSets.getByName(sourceSet ?: "main") {
dependencies(dependencyBlock)
}
}
}
project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
project.configure<KotlinMultiplatformExtension> { project.configure<KotlinMultiplatformExtension> {
sourceSets.getByName(sourceSet ?: "commonMain") { sourceSets.getByName(sourceSet ?: "commonMain") {
@ -179,13 +176,6 @@ public open class KScienceExtension(public val project: Project) {
} }
} }
project.pluginManager.withPlugin("org.jetbrains.kotlin.js") {
project.configure<KotlinJsProjectExtension> {
sourceSets.getByName(sourceSet ?: "test") {
dependencies(dependencyBlock)
}
}
}
project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
project.configure<KotlinMultiplatformExtension> { project.configure<KotlinMultiplatformExtension> {
@ -207,6 +197,7 @@ public open class KScienceExtension(public val project: Project) {
/** /**
* Mark this module as an application module. JVM application should be enabled separately * Mark this module as an application module. JVM application should be enabled separately
*/ */
@Deprecated("Use platform-specific applications")
public fun application() { public fun application() {
project.extensions.findByType<KotlinProjectExtension>()?.apply { project.extensions.findByType<KotlinProjectExtension>()?.apply {
explicitApi = null explicitApi = null
@ -231,7 +222,7 @@ public open class KScienceExtension(public val project: Project) {
binaries.executable() binaries.executable()
} }
targets.withType<KotlinWasmTargetDsl> { targets.withType<KotlinWasmJsTargetDsl> {
binaries.executable() binaries.executable()
} }
} }
@ -242,8 +233,8 @@ public open class KScienceExtension(public val project: Project) {
*/ */
public fun useContextReceivers() { public fun useContextReceivers() {
project.tasks.withType<KotlinCompile> { project.tasks.withType<KotlinCompile> {
kotlinOptions { compilerOptions{
freeCompilerArgs = freeCompilerArgs + "-Xcontext-receivers" freeCompilerArgs.add("-Xcontext-receivers")
} }
} }
} }
@ -261,8 +252,8 @@ public open class KScienceExtension(public val project: Project) {
public val jsTest: DefaultSourceSet get() = DefaultSourceSet("jsTest") public val jsTest: DefaultSourceSet get() = DefaultSourceSet("jsTest")
public val nativeMain: DefaultSourceSet get() = DefaultSourceSet("nativeMain") public val nativeMain: DefaultSourceSet get() = DefaultSourceSet("nativeMain")
public val nativeTest: DefaultSourceSet get() = DefaultSourceSet("nativeTest") public val nativeTest: DefaultSourceSet get() = DefaultSourceSet("nativeTest")
public val wasmMain: DefaultSourceSet get() = DefaultSourceSet("wasmMain") public val wasmJsMain: DefaultSourceSet get() = DefaultSourceSet("wasmJsMain")
public val wasmTest: DefaultSourceSet get() = DefaultSourceSet("wasmTest") public val wasmJsTest: DefaultSourceSet get() = DefaultSourceSet("wasmJsTest")
} }
@ -285,21 +276,37 @@ public data class KScienceNativeTarget(
public val linuxX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.linuxX64) public val linuxX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.linuxX64)
public val mingwX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.mingwX64) public val mingwX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.mingwX64)
public val macosX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.macosX64) public val macosX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.macosX64)
public val macosArm64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.macosX64) public val macosArm64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.macosArm64)
public val iosX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.iosX64) public val iosX64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.iosX64)
public val iosArm64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.iosArm64) public val iosArm64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.iosArm64)
public val iosSimulatorArm64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.iosSimulatorArm64) public val iosSimulatorArm64: KScienceNativeTarget = KScienceNativeTarget(KotlinNativePreset.iosSimulatorArm64)
} }
} }
public class KScienceNativeConfiguration { public class KScienceNativeConfiguration(private val project: Project) {
internal companion object { internal companion object {
private fun defaultNativeTargets(): Map<KotlinNativePreset, KScienceNativeTarget> { private fun defaultNativeTargets(project: Project): Map<KotlinNativePreset, KScienceNativeTarget> {
val hostOs = System.getProperty("os.name") val hostOs = System.getProperty("os.name")
val targets = project.requestPropertyOrNull("publishing.targets")
return when { return when {
targets == "all" -> listOf(
KScienceNativeTarget.linuxX64,
KScienceNativeTarget.mingwX64,
KScienceNativeTarget.macosX64,
KScienceNativeTarget.macosArm64,
KScienceNativeTarget.iosX64,
KScienceNativeTarget.iosArm64,
KScienceNativeTarget.iosSimulatorArm64,
)
targets != null -> {
targets.split(",").map { KScienceNativeTarget(KotlinNativePreset.valueOf(it)) }
}
hostOs.startsWith("Windows") -> listOf( hostOs.startsWith("Windows") -> listOf(
KScienceNativeTarget.linuxX64, KScienceNativeTarget.linuxX64,
KScienceNativeTarget.mingwX64 KScienceNativeTarget.mingwX64
@ -314,6 +321,7 @@ public class KScienceNativeConfiguration {
) )
hostOs == "Linux" -> listOf(KScienceNativeTarget.linuxX64) hostOs == "Linux" -> listOf(KScienceNativeTarget.linuxX64)
else -> { else -> {
emptyList() emptyList()
} }
@ -322,7 +330,7 @@ public class KScienceNativeConfiguration {
} }
internal var targets: Map<KotlinNativePreset, KScienceNativeTarget> = defaultNativeTargets() internal var targets: Map<KotlinNativePreset, KScienceNativeTarget> = defaultNativeTargets(project)
/** /**
@ -346,7 +354,8 @@ public class KScienceNativeConfiguration {
): Unit = target(KScienceNativeTarget(preset, targetName, targetConfiguration)) ): Unit = target(KScienceNativeTarget(preset, targetName, targetConfiguration))
} }
public open class KScienceMppExtension(project: Project) : KScienceExtension(project) { public abstract class KScienceMppExtension @Inject constructor(project: Project) : KScienceExtension(project) {
/** /**
* Enable jvm target * Enable jvm target
*/ */
@ -354,10 +363,9 @@ public open class KScienceMppExtension(project: Project) : KScienceExtension(pro
project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
project.configure<KotlinMultiplatformExtension> { project.configure<KotlinMultiplatformExtension> {
jvm { jvm {
compilations.all { @OptIn(ExperimentalKotlinGradlePluginApi::class)
kotlinOptions { compilerOptions{
freeCompilerArgs = freeCompilerArgs + defaultKotlinJvmArgs freeCompilerArgs.addAll(defaultKotlinJvmArgs)
}
} }
block() block()
} }
@ -387,6 +395,7 @@ public open class KScienceMppExtension(project: Project) : KScienceExtension(pro
project.configure<KotlinMultiplatformExtension> { project.configure<KotlinMultiplatformExtension> {
js(IR) { js(IR) {
browser() browser()
useEsModules()
block() block()
} }
sourceSets { sourceSets {
@ -403,14 +412,31 @@ public open class KScienceMppExtension(project: Project) : KScienceExtension(pro
} }
} }
/**
* Add Wasm/Js target
*/
@OptIn(ExperimentalWasmDsl::class) @OptIn(ExperimentalWasmDsl::class)
public fun wasm(block: KotlinWasmTargetDsl.() -> Unit = {}) { public fun wasm(block: KotlinWasmJsTargetDsl.() -> Unit = {}) {
project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { project.pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
project.configure<KotlinMultiplatformExtension> { project.configure<KotlinMultiplatformExtension> {
wasm { wasmJs {
browser() browser {
testTask {
useKarma {
useChromeHeadless()
}
}
}
block() block()
} }
sourceSets {
getByName("wasmJsTest") {
dependencies {
implementation(kotlin("test-wasm-js"))
}
}
}
} }
} }
} }
@ -425,26 +451,30 @@ public open class KScienceMppExtension(project: Project) : KScienceExtension(pro
*/ */
public fun fullStack( public fun fullStack(
bundleName: String = "js/bundle.js", bundleName: String = "js/bundle.js",
development: Boolean = false,
jvmConfig: KotlinJvmTarget.() -> Unit = {}, jvmConfig: KotlinJvmTarget.() -> Unit = {},
jsConfig: KotlinJsTargetDsl.() -> Unit = {}, jsConfig: KotlinJsTargetDsl.() -> Unit = {},
browserConfig: KotlinJsBrowserDsl.() -> Unit = {}, browserConfig: KotlinJsBrowserDsl.() -> Unit = {},
) { ) {
js { js {
binaries.executable()
browser { browser {
webpackTask { commonWebpackConfig{
outputFileName = bundleName outputFileName = bundleName
} }
browserConfig() browserConfig()
} }
useEsModules()
jsConfig() jsConfig()
binaries.executable()
} }
jvm { jvm {
val processResourcesTaskName = val processResourcesTaskName =
compilations[org.jetbrains.kotlin.gradle.plugin.KotlinCompilation.MAIN_COMPILATION_NAME] compilations[KotlinCompilation.MAIN_COMPILATION_NAME].processResourcesTaskName
.processResourcesTaskName
val jsBrowserDistribution = project.tasks.getByName("jsBrowserDistribution")
val jsBrowserDistribution = project.tasks.getByName(
if (development) "jsBrowserDevelopmentExecutableDistribution" else "jsBrowserDistribution"
)
project.tasks.getByName<ProcessResources>(processResourcesTaskName) { project.tasks.getByName<ProcessResources>(processResourcesTaskName) {
duplicatesStrategy = DuplicatesStrategy.WARN duplicatesStrategy = DuplicatesStrategy.WARN
@ -459,90 +489,59 @@ public open class KScienceMppExtension(project: Project) : KScienceExtension(pro
* Enable all supported native targets * Enable all supported native targets
*/ */
public fun native(block: KScienceNativeConfiguration.() -> Unit = {}): Unit = with(project) { public fun native(block: KScienceNativeConfiguration.() -> Unit = {}): Unit = with(project) {
val nativeConfiguration = KScienceNativeConfiguration().apply(block) val nativeConfiguration = KScienceNativeConfiguration(this).apply(block)
pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") { pluginManager.withPlugin("org.jetbrains.kotlin.multiplatform") {
configure<KotlinMultiplatformExtension> { configure<KotlinMultiplatformExtension> {
val nativeTargets: List<KotlinNativeTarget> = nativeConfiguration.targets.values.forEach { nativeTarget ->
nativeConfiguration.targets.values.map { nativeTarget -> when (nativeTarget.preset) {
when (nativeTarget.preset) { KotlinNativePreset.linuxX64 -> linuxX64(
KotlinNativePreset.linuxX64 -> linuxX64( nativeTarget.targetName,
nativeTarget.targetName, nativeTarget.targetConfiguration
nativeTarget.targetConfiguration )
)
KotlinNativePreset.mingwX64 -> mingwX64( KotlinNativePreset.mingwX64 -> mingwX64(
nativeTarget.targetName, nativeTarget.targetName,
nativeTarget.targetConfiguration nativeTarget.targetConfiguration
) )
KotlinNativePreset.macosX64 -> macosX64( KotlinNativePreset.macosX64 -> macosX64(
nativeTarget.targetName, nativeTarget.targetName,
nativeTarget.targetConfiguration nativeTarget.targetConfiguration
) )
KotlinNativePreset.macosArm64 -> macosArm64( KotlinNativePreset.macosArm64 -> macosArm64(
nativeTarget.targetName, nativeTarget.targetName,
nativeTarget.targetConfiguration nativeTarget.targetConfiguration
) )
KotlinNativePreset.iosX64 -> iosX64( KotlinNativePreset.iosX64 -> iosX64(
nativeTarget.targetName, nativeTarget.targetName,
nativeTarget.targetConfiguration nativeTarget.targetConfiguration
) )
KotlinNativePreset.iosArm64 -> iosArm64( KotlinNativePreset.iosArm64 -> iosArm64(
nativeTarget.targetName, nativeTarget.targetName,
nativeTarget.targetConfiguration nativeTarget.targetConfiguration
) )
KotlinNativePreset.iosSimulatorArm64 -> iosSimulatorArm64( KotlinNativePreset.iosSimulatorArm64 -> iosSimulatorArm64(
nativeTarget.targetName, nativeTarget.targetName,
nativeTarget.targetConfiguration nativeTarget.targetConfiguration
) )
// else -> {
// logger.error("Native preset ${nativeTarget.preset} not recognised.")
// null
// }
}
}
sourceSets {
val commonMain by getting
val commonTest by getting
val nativeMain by creating {
dependsOn(commonMain)
}
val nativeTest by creating {
//should NOT depend on nativeMain because automatic dependency by plugin
dependsOn(commonTest)
}
configure(nativeTargets) {
compilations["main"]?.apply {
configure(kotlinSourceSets) {
dependsOn(nativeMain)
}
}
compilations["test"]?.apply {
configure(kotlinSourceSets) {
dependsOn(nativeTest)
}
}
} }
} }
applyDefaultHierarchyTemplate()
} }
} }
} }
} }
internal inline fun <reified T : KScienceExtension> Project.registerKScienceExtension(constructor: (Project) -> T): T { internal inline fun <reified T : KScienceExtension> Project.registerKScienceExtension():T {
extensions.findByType<T>()?.let { return it } // extensions.findByType<T>()?.let { return it }
return constructor(this).also { // return constructor(this).also {
extensions.add("kscience", it) // extensions.add("kscience", it)
} // }
return extensions.create("kscience", T::class.java)
} }

View File

@ -1,56 +0,0 @@
package space.kscience.gradle
import org.gradle.api.Plugin
import org.gradle.api.Project
import org.gradle.api.tasks.Copy
import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.get
import org.jetbrains.dokka.gradle.DokkaPlugin
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
import space.kscience.gradle.internal.applySettings
import space.kscience.gradle.internal.fromJsDependencies
public open class KScienceJSPlugin : Plugin<Project> {
override fun apply(project: Project): Unit = project.run {
if (!plugins.hasPlugin("org.jetbrains.kotlin.js")) {
plugins.apply("org.jetbrains.kotlin.js")
} else {
logger.info("Kotlin JS plugin is already present")
}
registerKScienceExtension(::KScienceExtension)
//logger.info("Applying KScience configuration for JS project")
configure<KotlinJsProjectExtension> {
js(IR) { browser { } }
sourceSets.all {
languageSettings.applySettings()
}
sourceSets["main"].apply {
dependencies {
api(project.dependencies.platform("org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:${KScienceVersions.jsBom}"))
}
}
sourceSets["test"].apply {
dependencies {
implementation(kotlin("test-js"))
}
}
if (explicitApi == null) explicitApiWarning()
}
(tasks.findByName("processResources") as? Copy)?.apply {
fromJsDependencies("runtimeClasspath")
}
// apply dokka for all projects
if (!plugins.hasPlugin("org.jetbrains.dokka")) {
apply<DokkaPlugin>()
}
}
}

View File

@ -10,23 +10,27 @@ import org.gradle.kotlin.dsl.get
import org.gradle.kotlin.dsl.withType import org.gradle.kotlin.dsl.withType
import org.jetbrains.dokka.gradle.DokkaPlugin import org.jetbrains.dokka.gradle.DokkaPlugin
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import space.kscience.gradle.internal.applySettings import space.kscience.gradle.internal.applySettings
import space.kscience.gradle.internal.defaultKotlinJvmArgs import space.kscience.gradle.internal.defaultKotlinJvmArgs
public open class KScienceJVMPlugin : Plugin<Project> { public open class KScienceJVMPlugin : Plugin<Project> {
override fun apply(project: Project): Unit = project.run { override fun apply(project: Project): Unit = project.run {
logger.warn("KSCience JVM plugin is deprecated. Use MPP.")
if (!plugins.hasPlugin("org.jetbrains.kotlin.jvm")) { if (!plugins.hasPlugin("org.jetbrains.kotlin.jvm")) {
plugins.apply("org.jetbrains.kotlin.jvm") plugins.apply("org.jetbrains.kotlin.jvm")
} else { } else {
logger.info("Kotlin JVM plugin is already present") logger.info("Kotlin JVM plugin is already present")
} }
val extension = registerKScienceExtension(::KScienceExtension) val extension = registerKScienceExtension<KScienceExtension>()
//logger.info("Applying KScience configuration for JVM project") //logger.info("Applying KScience configuration for JVM project")
configure<KotlinJvmProjectExtension> { configure<KotlinJvmProjectExtension> {
sourceSets.all { sourceSets.all {
languageSettings.applySettings() languageSettings.applySettings()
compilerOptions{
freeCompilerArgs.addAll(defaultKotlinJvmArgs)
}
} }
sourceSets["test"].apply { sourceSets["test"].apply {
@ -42,12 +46,6 @@ public open class KScienceJVMPlugin : Plugin<Project> {
} }
} }
tasks.withType<KotlinCompile> {
kotlinOptions {
freeCompilerArgs = freeCompilerArgs + defaultKotlinJvmArgs
}
}
tasks.withType<Test> { tasks.withType<Test> {
useJUnitPlatform() useJUnitPlatform()
} }

View File

@ -4,45 +4,54 @@ import org.gradle.api.Plugin
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.apply
import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.hasPlugin
import org.gradle.kotlin.dsl.invoke import org.gradle.kotlin.dsl.invoke
import org.jetbrains.dokka.gradle.DokkaPlugin import org.jetbrains.dokka.gradle.DokkaPlugin
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import space.kscience.gradle.internal.applySettings import space.kscience.gradle.internal.applySettings
import space.kscience.gradle.internal.defaultKotlinCommonArgs
public open class KScienceMPPlugin : Plugin<Project> { public open class KScienceMPPlugin : Plugin<Project> {
override fun apply(project: Project): Unit = project.run { override fun apply(project: Project): Unit = project.run {
if (!plugins.hasPlugin(KotlinMultiplatformPlugin::class)) { if (!plugins.hasPlugin("org.jetbrains.kotlin.multiplatform")) {
//apply<KotlinMultiplatformPlugin>() for some reason it does not work //apply<KotlinMultiplatformPlugin>() for some reason it does not work
plugins.apply("org.jetbrains.kotlin.multiplatform") plugins.apply("org.jetbrains.kotlin.multiplatform")
} else { } else {
logger.info("Kotlin MPP plugin is already present") logger.info("Kotlin MPP plugin is already present")
} }
registerKScienceExtension(::KScienceMppExtension) val kscience = registerKScienceExtension<KScienceMppExtension>()
configure<KotlinMultiplatformExtension> { configure<KotlinMultiplatformExtension> {
sourceSets { sourceSets {
getByName("commonMain"){ getByName("commonMain") {
dependencies { dependencies {
api(project.dependencies.platform("org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:${KScienceVersions.jsBom}")) api(project.dependencies.platform("org.jetbrains.kotlin-wrappers:kotlin-wrappers-bom:${KScienceVersions.jsBom}"))
} }
} }
getByName("commonTest"){ getByName("commonTest") {
dependencies { dependencies {
implementation(kotlin("test-common")) implementation(kotlin("test"))
implementation(kotlin("test-annotations-common")) implementation(kotlin("test-annotations-common"))
} }
} }
all {
languageSettings.applySettings()
}
} }
@OptIn(ExperimentalKotlinGradlePluginApi::class)
sourceSets.all { compilerOptions{
languageSettings.applySettings() freeCompilerArgs.addAll(defaultKotlinCommonArgs)
} }
if (explicitApi == null) explicitApiWarning() if (explicitApi == null) explicitApiWarning()
//pass compose extension inside kscience extensions to make it available inside kscience block
plugins.withId("org.jetbrains.compose"){
kscience.extensions.add("compose", (this@configure as org.gradle.api.plugins.ExtensionAware).extensions.getByName("compose"))
}
} }

View File

@ -12,7 +12,12 @@ import org.jetbrains.changelog.ChangelogPlugin
import org.jetbrains.changelog.ChangelogPluginExtension import org.jetbrains.changelog.ChangelogPluginExtension
import org.jetbrains.dokka.gradle.AbstractDokkaTask import org.jetbrains.dokka.gradle.AbstractDokkaTask
import org.jetbrains.dokka.gradle.DokkaPlugin import org.jetbrains.dokka.gradle.DokkaPlugin
import space.kscience.gradle.internal.* import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnLockMismatchReport
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin
import org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension
import space.kscience.gradle.internal.addPublishing
import space.kscience.gradle.internal.addSonatypePublishing
import space.kscience.gradle.internal.setupPublication
/** /**
* Simplifies adding repositories for Maven publishing, responds for releasing tasks for projects. * Simplifies adding repositories for Maven publishing, responds for releasing tasks for projects.
@ -51,46 +56,24 @@ public class KSciencePublishingExtension(public val project: Project) {
} }
/** /**
* Adds GitHub as VCS and adds GitHub Packages Maven repository to publishing. * Add a repository with [repositoryName]. Uses "publishing.$repositoryName.user" and "publishing.$repositoryName.token"
* * properties pattern to store user and token
* @param githubProject the GitHub project.
* @param githubOrg the GitHub user or organization.
* @param deploy publish packages in the `deploy` task to the GitHub repository.
*/ */
public fun github( public fun repository(
githubOrg: String, repositoryName: String,
githubProject: String, url: String,
deploy: Boolean = project.requestPropertyOrNull("publishing.github") == "true",
) { ) {
if (deploy) { require(isVcsInitialized) { "The project vcs is not set up use 'pom' method to do so" }
try { project.addPublishing(repositoryName, url)
project.addGithubPublishing(githubOrg, githubProject)
} catch (t: Throwable) {
project.logger.error("Failed to set up github publication", t)
}
}
}
/**
* Adds Space Packages Maven repository to publishing.
*
* @param spaceRepo the repository URL.
* @param deploy publish packages in the `deploy` task to the Space repository.
*/
public fun space(
spaceRepo: String,
) {
project.addSpacePublishing(spaceRepo)
} }
/** /**
* Adds Sonatype Maven repository to publishing. * Adds Sonatype Maven repository to publishing.
*
* @param addToRelease publish packages in the `release` task to the Sonatype repository.
*/ */
public fun sonatype() { public fun sonatype(sonatypeRoot: String = "https://s01.oss.sonatype.org") {
require(isVcsInitialized) { "The project vcs is not set up use 'pom' method to do so" } require(isVcsInitialized) { "The project vcs is not set up use 'pom' method to do so" }
project.addSonatypePublishing() project.addSonatypePublishing(sonatypeRoot)
} }
} }
@ -104,11 +87,11 @@ public open class KScienceProjectPlugin : Plugin<Project> {
apply<DokkaPlugin>() apply<DokkaPlugin>()
apply<BinaryCompatibilityValidatorPlugin>() apply<BinaryCompatibilityValidatorPlugin>()
allprojects{ allprojects {
repositories{ repositories {
mavenCentral() mavenCentral()
maven("https://repo.kotlin.link") maven("https://repo.kotlin.link")
maven("https://maven.pkg.jetbrains.space/spc/p/sci/dev") google()
} }
// Workaround for https://github.com/gradle/gradle/issues/15568 // Workaround for https://github.com/gradle/gradle/issues/15568
@ -139,8 +122,7 @@ public open class KScienceProjectPlugin : Plugin<Project> {
val readmeExtension = KScienceReadmeExtension(this) val readmeExtension = KScienceReadmeExtension(this)
extensions.add("readme", readmeExtension) extensions.add("readme", readmeExtension)
@Suppress("UNUSED_VARIABLE") tasks.create("generateReadme") {
val generateReadme by tasks.creating {
group = "documentation" group = "documentation"
description = "Generate a README file if stub is present" description = "Generate a README file if stub is present"
@ -203,17 +185,18 @@ public open class KScienceProjectPlugin : Plugin<Project> {
val modulesString = buildString { val modulesString = buildString {
subprojects.forEach { subproject -> subprojects.forEach { subproject ->
// val name = subproject.name // val name = subproject.name
subproject.extensions.findByType<KScienceReadmeExtension>()?.let { ext -> subproject.extensions.findByType<KScienceReadmeExtension>()
val path = subproject.path.replaceFirst(":", "").replace(":", "/") ?.let { ext: KScienceReadmeExtension ->
appendLine("\n### [$path]($path)") val path = subproject.path.replaceFirst(":", "").replace(":", "/")
appendLine("> ${ext.description}") appendLine("\n### [$path]($path)")
appendLine(">\n> **Maturity**: ${ext.maturity}") ext.description?.let { appendLine("> ${ext.description}") }
val featureString = ext.featuresString(itemPrefix = "> - ", pathPrefix = "$path/") appendLine(">\n> **Maturity**: ${ext.maturity}")
if (featureString.isNotBlank()) { val featureString = ext.featuresString(itemPrefix = "> - ", pathPrefix = "$path/")
appendLine(">\n> **Features:**") if (featureString.isNotBlank()) {
appendLine(featureString) appendLine(">\n> **Features:**")
appendLine(featureString)
}
} }
}
} }
} }
@ -233,12 +216,12 @@ public open class KScienceProjectPlugin : Plugin<Project> {
tasks.create("version") { tasks.create("version") {
group = "publishing" group = "publishing"
val versionFile = project.buildDir.resolve("project-version.txt") val versionFileProvider = project.layout.buildDirectory.file("project-version.txt")
outputs.file(versionFile) outputs.file(versionFileProvider)
doLast { doLast {
val versionFile = versionFileProvider.get().asFile
versionFile.createNewFile() versionFile.createNewFile()
versionFile.writeText(project.version.toString()) versionFile.writeText(project.version.toString())
println(project.version)
} }
} }
@ -250,9 +233,11 @@ public open class KScienceProjectPlugin : Plugin<Project> {
} }
} }
plugins.withType(org.jetbrains.kotlin.gradle.targets.js.yarn.YarnPlugin::class.java) { plugins.withType<YarnPlugin>() {
rootProject.the<org.jetbrains.kotlin.gradle.targets.js.yarn.YarnRootExtension>().lockFileDirectory = rootProject.configure<YarnRootExtension> {
rootDir.resolve("gradle") lockFileDirectory = rootDir.resolve("gradle")
yarnLockMismatchReport = YarnLockMismatchReport.WARNING
}
} }
} }

View File

@ -10,6 +10,7 @@ import kotlinx.html.stream.createHTML
import kotlinx.validation.ApiValidationExtension import kotlinx.validation.ApiValidationExtension
import org.gradle.api.Project import org.gradle.api.Project
import org.gradle.kotlin.dsl.findByType import org.gradle.kotlin.dsl.findByType
import org.intellij.lang.annotations.Language
import java.io.File import java.io.File
import java.io.StringWriter import java.io.StringWriter
import kotlin.collections.component1 import kotlin.collections.component1
@ -32,7 +33,8 @@ private fun Template.processToString(args: Map<String, Any?>): String {
public class KScienceReadmeExtension(public val project: Project) { public class KScienceReadmeExtension(public val project: Project) {
public var description: String = project.description ?: "" public var description: String? = null
get() = field ?: project.description
public var maturity: Maturity = Maturity.EXPERIMENTAL public var maturity: Maturity = Maturity.EXPERIMENTAL
set(value) { set(value) {
@ -88,12 +90,23 @@ public class KScienceReadmeExtension(public val project: Project) {
public data class Feature(val id: String, val description: String, val ref: String?, val name: String = id) public data class Feature(val id: String, val description: String, val ref: String?, val name: String = id)
public val features: MutableList<Feature> = ArrayList() public val features: MutableList<Feature> = mutableListOf()
public fun feature(id: String, ref: String? = null, name: String = id, description: () -> String) { /**
* A plain readme feature with description
*/
public fun feature(
id: String,
@Language("File") ref: String? = null,
name: String = id,
description: () -> String,
) {
features += Feature(id, description(), ref, name) features += Feature(id, description(), ref, name)
} }
/**
* A readme feature with HTML description
*/
public fun featureWithHtml( public fun featureWithHtml(
id: String, id: String,
ref: String? = null, ref: String? = null,

View File

@ -7,8 +7,13 @@ import org.jetbrains.kotlin.gradle.plugin.LanguageSettingsBuilder
import space.kscience.gradle.KScienceVersions import space.kscience.gradle.KScienceVersions
internal val defaultKotlinJvmArgs: List<String> = internal val defaultKotlinJvmArgs: List<String> = listOf(
listOf("-Xjvm-default=all", "-Xlambdas=indy"/* "-Xjdk-release=${KScienceVersions.JVM_TARGET}"*/) "-Xjvm-default=all"
)
internal val defaultKotlinCommonArgs: List<String> = listOf(
"-Xexpect-actual-classes"
)
internal fun resolveKotlinVersion(): KotlinVersion { internal fun resolveKotlinVersion(): KotlinVersion {
val (major, minor, patch) = KScienceVersions.kotlinVersion.split(".", "-") val (major, minor, patch) = KScienceVersions.kotlinVersion.split(".", "-")
@ -23,6 +28,7 @@ internal fun LanguageSettingsBuilder.applySettings(
apiVersion = versionString apiVersion = versionString
progressiveMode = true progressiveMode = true
optIn("kotlin.RequiresOptIn") optIn("kotlin.RequiresOptIn")
optIn("kotlin.ExperimentalUnsignedTypes") optIn("kotlin.ExperimentalUnsignedTypes")
optIn("kotlin.ExperimentalStdlibApi") optIn("kotlin.ExperimentalStdlibApi")

View File

@ -8,9 +8,7 @@ import org.gradle.api.tasks.bundling.Jar
import org.gradle.kotlin.dsl.* import org.gradle.kotlin.dsl.*
import org.gradle.plugins.signing.SigningExtension import org.gradle.plugins.signing.SigningExtension
import org.gradle.plugins.signing.SigningPlugin import org.gradle.plugins.signing.SigningPlugin
import org.jetbrains.kotlin.gradle.dsl.KotlinJsProjectExtension
import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.plugin.mpp.pm20.util.targets
import space.kscience.gradle.isInDevelopment import space.kscience.gradle.isInDevelopment
internal fun Project.requestPropertyOrNull(propertyName: String): String? = findProperty(propertyName) as? String internal fun Project.requestPropertyOrNull(propertyName: String): String? = findProperty(propertyName) as? String
@ -24,26 +22,6 @@ internal fun Project.setupPublication(mavenPomConfiguration: MavenPom.() -> Unit
plugins.withId("maven-publish") { plugins.withId("maven-publish") {
configure<PublishingExtension> { configure<PublishingExtension> {
plugins.withId("org.jetbrains.kotlin.js") {
val kotlin: KotlinJsProjectExtension = extensions.findByType()!!
val sourcesJar by tasks.creating(Jar::class) {
archiveClassifier.set("sources")
kotlin.sourceSets.forEach {
from(it.kotlin)
}
}
publications.create<MavenPublication>("js") {
kotlin.targets.flatMap { it.components }.forEach {
from(it)
}
artifact(sourcesJar)
}
}
plugins.withId("org.jetbrains.kotlin.jvm") { plugins.withId("org.jetbrains.kotlin.jvm") {
val kotlin = extensions.findByType<KotlinJvmProjectExtension>()!! val kotlin = extensions.findByType<KotlinJvmProjectExtension>()!!
@ -55,9 +33,7 @@ internal fun Project.setupPublication(mavenPomConfiguration: MavenPom.() -> Unit
} }
publications.create<MavenPublication>("jvm") { publications.create<MavenPublication>("jvm") {
kotlin.target.components.forEach { from(project.components["java"])
from(it)
}
artifact(sourcesJar) artifact(sourcesJar)
} }
@ -100,7 +76,7 @@ internal fun Project.setupPublication(mavenPomConfiguration: MavenPom.() -> Unit
val signingKey: String = requestProperty("publishing.signing.key") val signingKey: String = requestProperty("publishing.signing.key")
val signingPassphrase: String = requestProperty("publishing.signing.passPhrase") val signingPassphrase: String = requestProperty("publishing.signing.passPhrase")
// if key is provided, use it // if a key is provided, use it
useInMemoryPgpKeys(signingId, signingKey, signingPassphrase) useInMemoryPgpKeys(signingId, signingKey, signingPassphrase)
} // else use agent signing } // else use agent signing
sign(publications) sign(publications)
@ -112,34 +88,31 @@ internal fun Project.setupPublication(mavenPomConfiguration: MavenPom.() -> Unit
} }
} }
internal fun Project.addGithubPublishing( internal fun Project.addPublishing(
githubOrg: String, repositoryName: String,
githubProject: String, urlString:String
) { ){
if (requestPropertyOrNull("publishing.enabled") != "true") { require(repositoryName.matches("\\w*".toRegex())){"Repository name must contain only letters or numbers"}
logger.info("Skipping github publishing because publishing is disabled") val user: String? = requestPropertyOrNull("publishing.$repositoryName.user")
return val token: String? = requestPropertyOrNull("publishing.$repositoryName.token")
}
if (requestPropertyOrNull("publishing.github") != "false") {
logger.info("Skipping github publishing because `publishing.github != true`")
return
}
val githubUser: String = requestProperty("publishing.github.user") if (user == null || token == null) {
val githubToken: String = requestProperty("publishing.github.token") logger.info("Skipping $repositoryName publishing because $repositoryName credentials are not defined")
return
}
allprojects { allprojects {
plugins.withId("maven-publish") { plugins.withId("maven-publish") {
configure<PublishingExtension> { configure<PublishingExtension> {
logger.info("Adding github publishing to project [${project.name}]") logger.info("Adding $repositoryName publishing to project [${project.name}]")
repositories.maven { repositories.maven {
name = "github" name = repositoryName
url = uri("https://maven.pkg.github.com/$githubOrg/$githubProject/") url = uri(urlString)
credentials { credentials {
username = githubUser username = user
password = githubToken password = token
} }
} }
} }
@ -147,72 +120,11 @@ internal fun Project.addGithubPublishing(
} }
} }
internal fun Project.addSpacePublishing(spaceRepo: String) {
if (requestPropertyOrNull("publishing.enabled") != "true") {
logger.info("Skipping space publishing because publishing is disabled")
return
}
if (requestPropertyOrNull("publishing.space") == "false") {
logger.info("Skipping space publishing because `publishing.space == false`")
return
}
val spaceUser: String = requestProperty("publishing.space.user")
val spaceToken: String = requestProperty("publishing.space.token")
allprojects {
plugins.withId("maven-publish") {
configure<PublishingExtension> {
project.logger.info("Adding mipt-npm Space publishing to project [${project.name}]")
repositories.maven {
name = "space"
url = uri(spaceRepo)
credentials {
username = spaceUser
password = spaceToken
}
}
}
}
}
}
internal fun Project.addSonatypePublishing() {
if (requestPropertyOrNull("publishing.enabled") != "true") {
logger.info("Skipping sonatype publishing because publishing is disabled")
return
}
internal fun Project.addSonatypePublishing(sonatypeRoot: String) {
if (isInDevelopment) { if (isInDevelopment) {
logger.info("Sonatype publishing skipped for development version") logger.info("Sonatype publishing skipped for development version")
return } else {
} addPublishing("sonatype", "$sonatypeRoot/service/local/staging/deploy/maven2")
if (requestPropertyOrNull("publishing.sonatype") == "false") {
logger.info("Skipping sonatype publishing because `publishing.sonatype == false`")
return
}
val sonatypeUser: String = requestProperty("publishing.sonatype.user")
val sonatypePassword: String = requestProperty("publishing.sonatype.password")
allprojects {
plugins.withId("maven-publish") {
configure<PublishingExtension> {
repositories.maven {
val sonatypeRepo = "https://s01.oss.sonatype.org/service/local/staging/deploy/maven2"
name = "sonatype"
url = uri(sonatypeRepo)
credentials {
username = sonatypeUser
password = sonatypePassword
}
}
}
}
} }
} }

View File

@ -17,7 +17,7 @@ public fun MavenPom.useSPCTeam(){
developer { developer {
id.set("SPC") id.set("SPC")
name.set("Scientific programming centre") name.set("Scientific programming centre")
organization.set("MIPT") organization.set("SPC")
organizationUrl.set("https://sciprog.center/") organizationUrl.set("https://sciprog.center/")
} }
} }

View File

@ -2,17 +2,6 @@
The Maven coordinates of this project are `${group}:${name}:${version}`. The Maven coordinates of this project are `${group}:${name}:${version}`.
**Gradle Groovy:**
```groovy
repositories {
maven { url 'https://repo.kotlin.link' }
mavenCentral()
}
dependencies {
implementation '${group}:${name}:${version}'
}
```
**Gradle Kotlin DSL:** **Gradle Kotlin DSL:**
```kotlin ```kotlin
repositories { repositories {