2024-06-28 01:08:45 +02:00
/ *
* STAROPENSOURCE ENGINE SOURCE FILE
* Copyright ( c ) 2024 The StarOpenSource Engine Contributors
* Licensed under the GNU Affero General Public License v3
*
* 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 < https: //www.gnu.org/licenses/>.
* /
2024-07-11 04:59:35 +02:00
import java.nio.file.Files
2024-07-11 04:03:08 +02:00
// Plugins
2024-06-08 15:33:03 +02:00
plugins {
2024-07-08 12:39:04 +02:00
id ( "java" )
id ( "io.freefair.lombok" ) version ( "${pluginLombok}" )
2024-07-08 19:04:18 +02:00
id ( "com.gorylenko.gradle-git-properties" ) version ( "${pluginGitProperties}" )
2024-07-08 12:39:04 +02:00
id ( "maven-publish" )
2024-06-08 15:33:03 +02:00
}
2024-07-11 04:03:08 +02:00
// Project dependencies
2024-06-08 15:33:03 +02:00
dependencies {
2024-06-09 00:21:01 +02:00
// -> Runtime <-
2024-06-08 15:33:03 +02:00
// Lombok
2024-07-08 12:39:04 +02:00
compileOnly ( "org.projectlombok:lombok:${dependencyLombok}" )
annotationProcessor ( "org.projectlombok:lombok:${dependencyLombok}" )
2024-06-08 15:33:03 +02:00
2024-06-09 00:21:01 +02:00
// JetBrains Annotations
2024-07-08 12:39:04 +02:00
compileOnly ( "org.jetbrains:annotations:${dependencyJetbrainsAnnotations}" )
2024-06-08 15:33:03 +02:00
2024-06-09 19:05:30 +02:00
// Reflections
2024-07-08 19:04:18 +02:00
implementation ( "org.reflections:reflections:${dependencyReflections}" )
2024-06-09 19:05:30 +02:00
2024-06-09 00:21:01 +02:00
// -> Testing <-
// Jetbrains Annotations
2024-07-08 12:39:04 +02:00
testCompileOnly ( "org.jetbrains:annotations:${dependencyJetbrainsAnnotations}" )
2024-06-09 00:21:01 +02:00
// JUnit
2024-07-08 12:39:04 +02:00
testImplementation ( platform ( "org.junit:junit-bom:${dependencyJunit}" ) )
testImplementation ( "org.junit.jupiter:junit-jupiter" )
testRuntimeOnly ( "org.junit.platform:junit-platform-launcher" )
2024-06-08 15:33:03 +02:00
}
2024-07-11 04:59:35 +02:00
// Fix delombok task
delombok . doFirst {
File target = file ( "${project.projectDir}/src/main/module-info.java" )
File source = file ( "${project.projectDir}/src/main/java/module-info.java" )
target . delete ( )
source . renameTo ( target )
}
delombok . doLast {
File target = file ( "${project.projectDir}/src/main/java/module-info.java" )
File source = file ( "${project.projectDir}/src/main/module-info.java" )
target . delete ( )
source . renameTo ( target )
}
// Copy gradle.properties file
// for inclusion in final build
tasks . register ( "copyGradleProperties" ) {
doFirst {
2024-08-03 17:13:01 +02:00
File target = file ( "${project.projectDir}/src/main/resources/sosengine-gradle.properties" )
2024-07-11 04:59:35 +02:00
File source = file ( project ( ":" ) . projectDir . getPath ( ) + "/gradle.properties" )
target . delete ( )
Files . copy ( source . toPath ( ) , target . toPath ( ) )
}
outputs . upToDateWhen ( { false } ) // Force task execution
}
processResources . dependsOn ( copyGradleProperties )
2024-07-11 04:03:08 +02:00
// Git properties configuration
// Allows us to embed git commit information in the engine build
2024-06-28 18:21:59 +02:00
gitProperties {
dotGitDirectory = file ( "${rootProject.rootDir}/.git" )
2024-07-11 04:03:08 +02:00
failOnNoGitDirectory = false // Allow continuing if .git directory is missing for the few who use tarballs
2024-07-08 12:39:04 +02:00
extProperty = "gitProps"
2024-06-28 18:21:59 +02:00
dateFormat = "yyyy-MM-dd'T'HH:mmZ"
dateFormatTimeZone = "UTC"
}
2024-07-11 04:03:08 +02:00
tasks . register ( "writeGitProperties" ) { // This task's only purpose is to copy the git.properties from our git properties plugin to the resources directory so it's included in the final build
2024-06-28 18:21:59 +02:00
doLast {
2024-08-03 17:13:01 +02:00
File target = file ( "${project.projectDir}/src/main/resources/sosengine-git.properties" )
2024-06-28 18:21:59 +02:00
File source = file ( "${project.projectDir}/build/resources/main/git.properties" )
target . delete ( )
source . renameTo ( target )
}
2024-07-11 04:03:08 +02:00
outputs . upToDateWhen ( { false } ) // Force task execution
2024-06-28 18:21:59 +02:00
}
2024-07-11 04:03:08 +02:00
generateGitProperties . outputs . upToDateWhen ( { false } ) // Force task execution
processResources . dependsOn ( writeGitProperties ) // Ensure git.properties file is present
// Javadoc configuration
javadoc {
outputs . upToDateWhen { false } // Force task execution
dependsOn ( delombok ) // Make sure the source is delomboked first
javadoc {
setClasspath ( files ( project . sourceSets . main . compileClasspath ) ) // Include dependencies
options {
if ( new File ( projectDir , "src/main/javadoc/theme.css" ) . exists ( ) )
stylesheetFile = new File ( projectDir , "src/main/javadoc/theme.css" ) // Theming is cool :3
setMemberLevel ( JavadocMemberLevel . PUBLIC ) // Only display public stuff
setOverview ( "src/main/javadoc/overview.html" ) // We want a custom overview page to greet the visitor
setLocale ( "en_US" ) // 你好
2024-08-18 19:34:15 +02:00
addStringOption ( "Xwerror" , "-quiet" ) // Fail build on warning
2024-07-11 04:03:08 +02:00
setJFlags ( [
"-Duser.language=en_US" // See above
] )
}
}
2024-06-08 15:33:03 +02:00
}
2024-06-09 00:21:01 +02:00
2024-07-11 04:03:08 +02:00
// Unit testing configuration
2024-06-09 00:21:01 +02:00
test {
useJUnitPlatform ( )
2024-07-29 19:58:41 +02:00
2024-08-19 02:06:26 +02:00
Map < String , String > testConfiguration = new HashMap < > ( ) ;
for ( String property : project . properties . keySet ( ) )
if ( property . startsWith ( "test." ) )
testConfiguration . put ( property , project . properties . get ( property ) . toString ( ) )
systemProperties ( testConfiguration )
2024-07-29 19:58:41 +02:00
setMaxParallelForks ( project . hasProperty ( "jobs" ) ? Integer . parseInt ( ( String ) project . property ( "jobs" ) ) : 8 )
setForkEvery ( 1 )
setFailFast ( true )
2024-06-09 00:21:01 +02:00
testLogging {
2024-07-08 12:39:04 +02:00
events ( "passed" , "skipped" , "failed" )
2024-06-09 00:21:01 +02:00
}
}
2024-06-16 13:36:06 +02:00
2024-07-18 01:25:23 +02:00
// Include javadoc and source jar during publishing
java {
withJavadocJar ( )
withSourcesJar ( )
}
2024-07-11 04:03:08 +02:00
// Build publishing configuration
// Note: You can safely ignore any errors or warnings thrown by your IDE here
2024-06-16 13:36:06 +02:00
publishing {
repositories {
maven {
name = "staropensource"
url = uri ( "https://mvn.staropensource.de/sosengine" )
credentials ( org . gradle . api . credentials . PasswordCredentials )
authentication {
//noinspection GroovyAssignabilityCheck
basic ( BasicAuthentication )
}
}
}
publications {
//noinspection GroovyAssignabilityCheck
maven ( MavenPublication ) {
groupId = group
2024-08-01 03:17:22 +02:00
artifactId = project . getName ( )
2024-06-16 13:36:06 +02:00
version = version
//noinspection GroovyAssignabilityCheck
from components . java
}
}
}