twist/build.gradle.kts
Hellings ef72a56501
Some checks are pending
Build and publish / verify (push) Waiting to run
Build and publish / publish (push) Blocked by required conditions
branch(main): Initial commit.
2026-09-12 08:25:10 -04:00

186 lines
6.4 KiB
Text

import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import org.gradle.api.plugins.JavaApplication
import org.gradle.api.publish.PublishingExtension
import org.gradle.api.publish.maven.MavenPublication
import org.gradle.authentication.http.BasicAuthentication
import org.gradle.api.credentials.PasswordCredentials
plugins {
kotlin("jvm") version "2.4.0" apply false
id("com.ncorti.ktfmt.gradle") version "0.27.0"
}
repositories {
mavenCentral()
}
val libraryModules = setOf(
"core", "wire", "transport", "bytecode", "compiler", "proof", "ecdsa", "rsa", "merkle", "store", "state", "access", "gas", "tvm", "jit", "ope",
"p2p", "gossip", "consensus", "mint", "burn", "bips", "standards", "stake", "router", "did", "miner", "reflect", "twisto", "smartdoc",
)
val twistVersion = providers.gradleProperty("version").orElse("0.1.0-SNAPSHOT")
allprojects {
group = "rip.crit"
version = twistVersion.get()
}
val moduleDependencies = mapOf(
"wire" to listOf("core", "p2p"),
"transport" to listOf("wire", "p2p", "core"),
"bytecode" to listOf("core"),
"compiler" to listOf("bytecode", "jit", "tvm"),
"proof" to listOf("core", "merkle"),
"ecdsa" to listOf("core"),
"rsa" to listOf("core"),
"merkle" to listOf("core"),
"store" to listOf("core"),
"state" to listOf("core"),
"access" to listOf("core"),
"tvm" to listOf("core", "gas", "state", "bytecode"),
"ope" to listOf("core", "tvm", "access"),
"p2p" to listOf("core"),
"gossip" to listOf("p2p"),
"consensus" to listOf("core"),
"mint" to listOf("core"),
"burn" to listOf("core"),
"bips" to listOf("core", "proof"),
"standards" to listOf("core", "store"),
"stake" to listOf("core", "store"),
"router" to listOf("core", "proof", "ecdsa", "p2p", "store"),
"did" to listOf("core", "p2p", "store"),
"miner" to listOf("core", "proof"),
"reflect" to listOf("core", "p2p", "store", "wire"),
"twisto" to listOf("core", "standards", "bips", "store", "compiler"),
"smartdoc" to listOf("core"),
)
ktfmt {
kotlinLangStyle()
}
tasks.register<com.ncorti.ktfmt.gradle.tasks.KtfmtCheckTask>("fmtCheck") {
group = "verification"
source = project.fileTree(layout.projectDirectory.dir("app/src/main/kotlin")) {
include("**/*.kt")
}
}
tasks.register<com.ncorti.ktfmt.gradle.tasks.KtfmtFormatTask>("fmt") {
group = "formatting"
source = project.fileTree(layout.projectDirectory.dir("app/src/main/kotlin")) {
include("**/*.kt")
}
}
subprojects {
apply(plugin = "org.jetbrains.kotlin.jvm")
layout.buildDirectory.set(rootProject.layout.buildDirectory.dir("projects/${project.name}"))
repositories { mavenCentral() }
extensions.configure<KotlinJvmProjectExtension> {
jvmToolchain(25)
sourceSets.named("main") {
kotlin.srcDir(rootProject.file("app/src/main/kotlin"))
kotlin.include("rip/crit/twist/${project.name}/**")
}
}
tasks.withType<KotlinCompile>().configureEach {
compilerOptions.freeCompilerArgs.add("-Xjsr305=strict")
}
}
configure(subprojects.filter { it.name in libraryModules }) {
apply(plugin = "java-library")
apply(plugin = "maven-publish")
extensions.configure<org.gradle.api.plugins.JavaPluginExtension> {
withSourcesJar()
withJavadocJar()
}
dependencies {
moduleDependencies[name].orEmpty().forEach { dependency -> add("api", project(":$dependency")) }
}
extensions.configure<PublishingExtension> {
publications {
create<MavenPublication>("mavenJava") {
from(components["java"])
artifactId = "twist-${project.name}"
pom {
name.set("Twist ${project.name}")
description.set(project.description ?: "Twist ${project.name} library")
}
}
}
repositories {
maven {
name = "forgejo"
url = uri("https://ai.crit.rip/api/packages/jprims/maven")
credentials(PasswordCredentials::class) {
username = providers.gradleProperty("forgejoUsername").orNull
password = providers.gradleProperty("forgejoPassword").orNull
}
authentication {
create<BasicAuthentication>("basic")
}
}
}
}
}
project(":app") {
apply(plugin = "application")
extensions.configure<KotlinJvmProjectExtension> {
sourceSets.named("main") { kotlin.include("rip/crit/twist/App.kt") }
}
dependencies {
libraryModules.forEach { dependency -> add("implementation", project(":$dependency")) }
}
extensions.configure<JavaApplication> {
mainClass.set("rip.crit.twist.AppKt")
}
}
project(":compiler-app") {
apply(plugin = "application")
extensions.configure<KotlinJvmProjectExtension> {
sourceSets.named("main") {
kotlin.setSrcDirs(listOf(rootProject.file("apps/compiler/src/main/kotlin")))
kotlin.setIncludes(emptySet())
}
}
dependencies { add("implementation", project(":compiler")) }
extensions.configure<JavaApplication> { mainClass.set("rip.crit.twist.tool.compiler.MainKt") }
}
fun configureTool(projectName: String, sourceDirectory: String, dependency: String, entryPoint: String) {
project(projectName) {
apply(plugin = "application")
extensions.configure<KotlinJvmProjectExtension> {
sourceSets.named("main") {
kotlin.setSrcDirs(listOf(rootProject.file(sourceDirectory)))
kotlin.setIncludes(emptySet())
}
}
dependencies { add("implementation", project(dependency)) }
extensions.configure<JavaApplication> { mainClass.set(entryPoint) }
}
}
configureTool(":miner-tool", "apps/miner/src/main/kotlin", ":miner", "rip.crit.twist.tool.miner.MainKt")
project(":miner-tool") {
dependencies {
add("implementation", project(":stake"))
add("implementation", project(":store"))
}
}
configureTool(":reflect-tool", "apps/reflect/src/main/kotlin", ":reflect", "rip.crit.twist.tool.reflect.MainKt")
configureTool(":twisto-tool", "apps/twisto/src/main/kotlin", ":twisto", "rip.crit.twist.tool.twisto.MainKt")
configureTool(":docs-tool", "apps/docs/src/main/kotlin", ":smartdoc", "rip.crit.twist.tool.docs.MainKt")