Write GitHub Actions scripts #40

Merged
CommanderTvis merged 7 commits from commandertvis/ga into dev 2022-03-16 11:31:43 +03:00
7 changed files with 54 additions and 20 deletions
Showing only changes of commit 59c2a13e4b - Show all commits

View File

@ -7,8 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
## [Unreleased] ## [Unreleased]
### Added ### Added
- html builders for readme
### Changed ### Changed
- Kotlin 1.6.0
- Use indy lambdas by default #32
### Deprecated ### Deprecated

View File

@ -33,6 +33,8 @@ dependencies {
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)
@Suppress("UnstableApiUsage")
implementation(libs.kotlinx.html)
implementation("org.tomlj:tomlj:1.0.0") implementation("org.tomlj:tomlj:1.0.0")
// // nexus publishing plugin // // nexus publishing plugin
// implementation("io.github.gradle-nexus:publish-plugin:1.1.0") // implementation("io.github.gradle-nexus:publish-plugin:1.1.0")
@ -94,6 +96,7 @@ gradlePlugin {
//publishing version catalog //publishing version catalog
@Suppress("UnstableApiUsage")
catalog.versionCatalog { catalog.versionCatalog {
from(files("gradle/libs.versions.toml")) from(files("gradle/libs.versions.toml"))
} }
@ -210,6 +213,6 @@ afterEvaluate {
} }
tasks.processResources.configure { tasks.processResources.configure {
duplicatesStrategy = org.gradle.api.file.DuplicatesStrategy.INCLUDE duplicatesStrategy = DuplicatesStrategy.INCLUDE
from("gradle/libs.versions.toml") from("gradle/libs.versions.toml")
} }

View File

@ -1,24 +1,25 @@
[versions] [versions]
tools = "0.10.5" tools = "0.10.7"
kotlin = "1.6.0-M1" kotlin = "1.6.0"
atomicfu = "0.16.2" atomicfu = "0.16.3"
binary-compatibility-validator = "0.7.1" binary-compatibility-validator = "0.8.0"
changelog = "1.3.0" changelog = "1.3.1"
dokka = "1.5.0" dokka = "1.5.30"
kotlin-jupyter = "0.10.0-227" kotlin-jupyter = "0.10.3-36"
kotlinx-benchmark = "0.3.1" kotlinx-benchmark = "0.3.1"
kotlinx-cli = "0.3.2" kotlinx-cli = "0.3.3"
kotlinx-collections-immutable = "0.3.4" kotlinx-collections-immutable = "0.3.4"
kotlinx-coroutines = "1.5.2" kotlinx-coroutines = "1.5.2"
kotlinx-datetime = "0.2.1" kotlinx-datetime = "0.3.1"
kotlinx-html = "0.7.3" kotlinx-html = "0.7.3"
kotlinx-knit = "0.2.3" kotlinx-knit = "0.2.3"
kotlinx-nodejs = "0.0.7" kotlinx-nodejs = "0.0.7"
kotlinx-serialization = "1.3.0" kotlinx-serialization = "1.3.1"
ktor = "1.6.3" ktor = "1.6.3"
xmlutil = "0.83.0" xmlutil = "0.83.0"
yamlkt = "0.10.2" yamlkt = "0.10.2"
jsBom = "0.0.1-pre.248-kotlin-1.5.31" jsBom = "0.0.1-pre.265-kotlin-1.5.31"
junit = "5.8.1"
[libraries] [libraries]
atomicfu-gradle = { module = "org.jetbrains.kotlinx:atomicfu-gradle-plugin", version.ref = "atomicfu" } atomicfu-gradle = { module = "org.jetbrains.kotlinx:atomicfu-gradle-plugin", version.ref = "atomicfu" }

View File

@ -17,6 +17,11 @@ import ru.mipt.npm.gradle.internal.fromJsDependencies
@Suppress("UNUSED_VARIABLE") @Suppress("UNUSED_VARIABLE")
public open class KScienceCommonPlugin : Plugin<Project> { public open class KScienceCommonPlugin : Plugin<Project> {
public companion object{
public val defaultJvmArgs: List<String> = listOf("-Xjvm-default=all","-Xlambdas=indy")
}
override fun apply(project: Project): Unit = project.run { override fun apply(project: Project): Unit = project.run {
//Common configuration //Common configuration
registerKScienceExtension() registerKScienceExtension()
@ -35,14 +40,14 @@ public open class KScienceCommonPlugin : Plugin<Project> {
sourceSets["test"].apply { sourceSets["test"].apply {
dependencies { dependencies {
implementation(kotlin("test-junit5")) implementation(kotlin("test-junit5"))
implementation("org.junit.jupiter:junit-jupiter:5.6.1") implementation("org.junit.jupiter:junit-jupiter:${KScienceVersions.junit}")
} }
} }
} }
tasks.withType<KotlinJvmCompile> { tasks.withType<KotlinJvmCompile> {
kotlinOptions { kotlinOptions {
jvmTarget = KScienceVersions.JVM_TARGET.toString() jvmTarget = KScienceVersions.JVM_TARGET.toString()
freeCompilerArgs = freeCompilerArgs + "-Xjvm-default=all" freeCompilerArgs = freeCompilerArgs + defaultJvmArgs
} }
} }
@ -99,7 +104,7 @@ public open class KScienceCommonPlugin : Plugin<Project> {
compilations.all { compilations.all {
kotlinOptions { kotlinOptions {
jvmTarget = KScienceVersions.JVM_TARGET.toString() jvmTarget = KScienceVersions.JVM_TARGET.toString()
freeCompilerArgs = freeCompilerArgs + "-Xjvm-default=all" freeCompilerArgs = freeCompilerArgs + defaultJvmArgs
} }
} }
} }
@ -128,7 +133,7 @@ public open class KScienceCommonPlugin : Plugin<Project> {
val jvmTest by getting { val jvmTest by getting {
dependencies { dependencies {
implementation(kotlin("test-junit5")) implementation(kotlin("test-junit5"))
implementation("org.junit.jupiter:junit-jupiter:5.7.2") implementation("org.junit.jupiter:junit-jupiter:${KScienceVersions.junit}")
} }
} }
val jsMain by getting val jsMain by getting

View File

@ -240,7 +240,7 @@ public open class KScienceProjectPlugin : Plugin<Project> {
//val patchChangelog by tasks.getting //val patchChangelog by tasks.getting
val release by tasks.creating { @Suppress("UNUSED_VARIABLE") val release by tasks.creating {
group = RELEASE_GROUP group = RELEASE_GROUP
description = "Publish development or production release based on version suffix" description = "Publish development or production release based on version suffix"
dependsOn(generateReadme) dependsOn(generateReadme)

View File

@ -1,16 +1,23 @@
package ru.mipt.npm.gradle package ru.mipt.npm.gradle
import groovy.text.SimpleTemplateEngine import groovy.text.SimpleTemplateEngine
import kotlinx.html.TagConsumer
import kotlinx.html.div
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.* import org.gradle.kotlin.dsl.findByType
import java.io.File import java.io.File
import kotlin.collections.component1
import kotlin.collections.component2
import kotlin.collections.set
public enum class Maturity { public enum class Maturity {
PROTOTYPE, PROTOTYPE,
EXPERIMENTAL, EXPERIMENTAL,
DEVELOPMENT, DEVELOPMENT,
STABLE STABLE,
DEPRECATED
} }
@ -48,6 +55,20 @@ public class KScienceReadmeExtension(public val project: Project) {
features += Feature(id, description(), ref, name) features += Feature(id, description(), ref, name)
} }
public fun featureWithHtml(
id: String,
ref: String? = null,
name: String = id,
htmlBuilder: TagConsumer<String>.() -> Unit,
) {
val text = createHTML().apply {
div("readme-feature") {
htmlBuilder()
}
}.finalize()
features += Feature(id, text, ref, name)
}
private val properties: MutableMap<String, () -> Any?> = mutableMapOf( private val properties: MutableMap<String, () -> Any?> = mutableMapOf(
"name" to { project.name }, "name" to { project.name },
"group" to { project.group }, "group" to { project.group },
@ -82,7 +103,7 @@ public class KScienceReadmeExtension(public val project: Project) {
/** /**
* Generate a markdown string listing features * Generate a markdown string listing features
*/ */
public fun featuresString(itemPrefix: String = " - ", pathPrefix: String = ""): String = buildString { internal fun featuresString(itemPrefix: String = " - ", pathPrefix: String = ""): String = buildString {
features.forEach { features.forEach {
appendLine("$itemPrefix[${it.name}]($pathPrefix${it.ref ?: "#"}) : ${it.description}") appendLine("$itemPrefix[${it.name}]($pathPrefix${it.ref ?: "#"}) : ${it.description}")
} }

View File

@ -22,6 +22,7 @@ public object KScienceVersions {
public val htmlVersion: String get() = toml.getString("versions.kotlinx-html")!! public val htmlVersion: String get() = toml.getString("versions.kotlinx-html")!!
public val dateTimeVersion: String get() = toml.getString("versions.kotlinx-datetime")!! public val dateTimeVersion: String get() = toml.getString("versions.kotlinx-datetime")!!
public val jsBom: String get() = toml.getString("versions.jsBom")!! public val jsBom: String get() = toml.getString("versions.jsBom")!!
internal val junit: String get() = toml.getString("versions.junit")!!
public val JVM_TARGET: JavaVersion = JavaVersion.VERSION_11 public val JVM_TARGET: JavaVersion = JavaVersion.VERSION_11