/*
* STAROPENSOURCE ENGINE SOURCE FILE
* Copyright (c) 2024 The StarOpenSource Engine Authors
* Licensed under the GNU General Public License v3.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
import ca.solostudios.nyx.util.reposiliteMaven
import org.jetbrains.dokka.DokkaConfiguration
import org.jetbrains.dokka.gradle.DokkaTask
import java.net.URI
/*
* STAROPENSOURCE ENGINE SOURCE FILE
* Copyright (c) 2024 The StarOpenSource Engine Authors
* Licensed under the GNU Affero General Public License v3
* with an exception allowing classpath linking.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see .
*/
// Plugins
plugins {
id("java-library")
id("maven-publish")
// Kotlin support
id("org.jetbrains.kotlin.jvm") version("2.0.0")
// Dokka
id("org.jetbrains.dokka") version("1.9.20")
// Git properties
id("com.gorylenko.gradle-git-properties") version("2.4.2")
// Nyx
// Smol props to the creator of this plugin!
// solonovamax helped me (JeremyStarTM) improve
// this build script.
id("ca.solo-studios.nyx") version("0.2.3")
}
allprojects {
// Plugins
apply(plugin = "java-library")
apply(plugin = "maven-publish")
apply(plugin = "org.jetbrains.kotlin.jvm")
apply(plugin = "org.jetbrains.dokka")
apply(plugin = "com.gorylenko.gradle-git-properties")
apply(plugin = "ca.solo-studios.nyx")
nyx {
// Project information
info {
group = "de.staropensource.engine"
version = buildString {
append(property("versionRelease") as String)
append("-")
append(property("versionType") as String)
append(property("versionTyperelease") as String)
if (property("versionFork") != "") {
append(version)
append("-")
append(property("versionFork") as String)
}
if (property("versionCompanion") != "") {
append(version)
append("-")
append(property("versionCompanion") as String)
}
}
description = this@allprojects.description ?: "The description of this sos!engine subsystem or subproject was not set"
organizationName = "The StarOpenSource Project"
organizationUrl = "hhttps://staropensource.de"
developer {
id = "staropensource"
name = "The StarOpenSource Project"
email = "support@staropensource.de"
url = "https://staropensource.de"
}
repository.fromGitHostWithIssues("StarOpenSource", "Engine", "https://git.staropensource.de", "sos!git")
license.useGPLv3()
}
// Publishing
publishing {
withPublish()
repositories {
reposiliteMaven("https://mvn.staropensource.de/engine") {
name = "staropensource-engine"
credentials(PasswordCredentials::class)
}
}
}
// Compilation
compile {
withAllWarnings()
withWarningsAsErrors()
withDistributeLicense()
encoding = "UTF-8"
withZip64()
withBuildDependsOnJar()
withSuppressWarnings()
jvmToolchain = (property("languageJava") as String).toInt()
jvmTarget = (property("languageJava") as String).toInt()
withSourcesJar()
withJavadocJar()
withReproducibleBuilds()
// Kotlin-specific settings
kotlin {
apiVersion = property("languageKotlin") as String
languageVersion = property("languageKotlin") as String
compilerArgs = listOf(
"-progressive"
)
}
}
}
// Repositories
repositories {
mavenLocal()
mavenCentral()
}
// Dependencies
dependencies {
// Kotlin support
implementation("${property("dependencyKotlin_ReflectIdentifier") as String}:${property("dependencyKotlinVersion") as String}")
implementation("${property("dependencyKotlin_DateTimeIdentifier") as String}:${property("dependencyKotlin_DateTimeVersion") as String}")
// Unit testing
// -> Kotlin
testImplementation(kotlin("test"))
// -> JUnit
testImplementation(platform("${property("testDependencyJUnit_BOMIdentifier")}:${property("testDependencyJUnitVersion")}"))
testImplementation("${property("testDependencyJUnit_JupiterIdentifier")}")
testRuntimeOnly("${property("testDependencyJUnit_PlatformIdentifier")}")
// -> sos!engine
testImplementation(project(":testing"))
}
// Unit testing
// -> Configure Gradle to use JUnit
tasks.test {
useJUnitPlatform()
testLogging {
events(
"passed",
"skipped",
"failed"
)
}
maxParallelForks = 1
}
// Dokka
tasks.withType().configureEach {
// Styling
val dokkaBaseConfiguration = """
{
"_customAssets": ["${file("assets/my-image.png")}"],
"_customStyleSheets": ["${file("assets/my-styles.css")}"],
"footerMessage": "© 2024 The StarOpenSource Engine Authors. Licensed under the GNU Affero General Public License v3",
"_separateInheritedMembers": false,
"_templatesDir": "${file("dokka/templates")}",
"_mergeImplicitExpectActualDeclarations": false
}
"""
pluginsMapConfiguration = mapOf(
"org.jetbrains.dokka.base.DokkaBase" to dokkaBaseConfiguration
)
// Configuration
moduleName = rootProject.name
moduleVersion = "v" + rootProject.version as String
failOnWarning = true
suppressObviousFunctions = true
suppressInheritedMembers = true
dokkaSourceSets.configureEach {
// Metadata
displayName = this@allprojects.name
documentedVisibilities = setOf(DokkaConfiguration.Visibility.PUBLIC, DokkaConfiguration.Visibility.PROTECTED)
reportUndocumented = false
skipEmptyPackages = false
skipDeprecated = false
jdkVersion = 21
// Source link
sourceLink {
localDirectory = this@allprojects.projectDir.resolve("src")
remoteUrl = URI("https://git.staropensource.de/StarOpenSource/Engine/src/branch/develop/" + this@allprojects.name.replace(":", "/") + "/src").toURL()
remoteLineSuffix = "#L"
}
}
}
// Git properties
// -> Configure
gitProperties {
dotGitDirectory = file("${rootProject.rootDir}/.git")
failOnNoGitDirectory = false // Allow continuing if .git directory is missing (tarball)
extProperty = "git"
dateFormat = "yyyy-MM-dd'T'HH:mm:ss.S'Z'"
dateFormatTimeZone = "UTC"
}
// -> Copy task
tasks.register("copyGitProperties") {
dependsOn(tasks.generateGitProperties)
inputs.file("${this@allprojects.projectDir}/build/resources/main/git.properties")
doLast {
if (rootProject == this@allprojects)
return@doLast
file(inputs.files.first())
.copyTo(
file("${this@allprojects.projectDir}/src/main/resources/sosengine-${this@allprojects.name.replace(":", "-")}-git.properties"),
overwrite = true
)
}
}
tasks.processResources {
dependsOn(tasks["copyGitProperties"])
}
// Gradle properties
// -> Copy task
tasks.register("copyGradleProperties") {
inputs.file("${rootProject.projectDir.path}/gradle.properties")
doLast {
if (rootProject == project)
return@doLast
file(inputs.files.first())
.copyTo(
file("${this@allprojects.projectDir}/src/main/resources/sosengine-${this@allprojects.name.replace(":", "-")}-gradle.properties"),
overwrite = true
)
}
}
tasks.processResources {
dependsOn(tasks["copyGradleProperties"])
}
}