Coeur-Morny-Cono/build.gradle

217 lines
6.6 KiB
Groovy
Raw Permalink Normal View History

2021-10-07 20:50:59 +08:00
plugins {
2023-09-05 14:14:01 +08:00
id 'scala'
id 'java-library'
id 'application'
id 'maven-publish'
2023-09-16 23:12:44 +08:00
id "io.github.ysohda.scalatest" version "0.32.1"
id 'com.github.johnrengelman.shadow' version '8.1.1'
id 'com.github.gmazzo.buildconfig' version '4.1.2'
id 'org.ajoberstar.grgit' version '5.2.0'
}
import org.ajoberstar.grgit.Status
import java.nio.charset.Charset
import java.nio.charset.StandardCharsets
final boolean proj_git = grgit!=null
final String proj_store = MORNY_CODE_STORE
final String proj_commit = proj_git ? grgit.head().id : null
final String proj_commit_path = MORNY_COMMIT_PATH
final boolean proj_clean = isCleanBuild()
if (!proj_git)
println "[MornyBuild] git repository not available for current working space! git version tag will be disabled."
else if (isCleanBuild()) {
println "git: clean build at ${grgit.head().id}"
} else {
final Status status = grgit.status()
println "git: non-clean-build"
if (!status.unstaged.allChanges.empty) {
println "git: unstaged changes"
listChanges(status.unstaged)
}
if (!status.staged.allChanges.empty) {
println "git: staged changes"
listChanges(status.staged)
}
2021-10-07 20:50:59 +08:00
}
final String proj_group = 'cc.sukazyo'
final String proj_package = "${proj_group}.cono.morny"
final String proj_archive_name = MORNY_ARCHIVE_NAME
final String proj_application_main = "${proj_package}.ServerMain"
final String proj_version_base = VERSION
final String proj_version_delta = VERSION_DELTA
final boolean proj_version_use_delta = Boolean.parseBoolean(USE_DELTA)
final String proj_version = proj_version_base + (proj_version_use_delta ? "-δ${proj_version_delta}" : "")
final String proj_version_full = proj_version + (proj_git ? "+git.${proj_commit.substring(0, 8)}" + (proj_clean?"":".δ") : "")
final String proj_version_codename = CODENAME
final long proj_code_time = proj_clean ? grgit.head().dateTime.toInstant().toEpochMilli() : System.currentTimeMillis()
final JavaVersion proj_java = JavaVersion.VERSION_17
final Charset proj_file_encoding = StandardCharsets.UTF_8
2023-09-05 14:14:01 +08:00
final proj_scala_api = 3
//final proj_scala_lib = proj_scala_api+'.4.0-RC1-bin-20230901-89e8dba-NIGHTLY'
2023-09-10 22:43:39 +08:00
final proj_scala_lib = proj_scala_api+'.3.1'
String publish_local_url = null
String publish_remote_url = null
String publish_remote_username = null
String publish_remote_password = null
if (project.hasProperty("publishLocalArchiveRepoUrl")) publish_local_url = publishLocalArchiveRepoUrl
if (project.hasProperty("publishMvnRepoUrl")) {
publish_remote_url = publishMvnRepoUrl
publish_remote_username = publishMvnRepoUsername
publish_remote_password = publishMvnRepoPassword
}
group proj_group
version proj_version_full
2021-10-07 20:50:59 +08:00
repositories {
mavenCentral()
maven { name '-ws'; url 'https://mvn.sukazyo.cc/releases' }
2021-10-07 20:50:59 +08:00
}
dependencies {
2023-09-05 14:14:01 +08:00
api "org.scala-lang:scala3-library_3:${proj_scala_lib}"
compileOnlyApi "com.github.spotbugs:spotbugs-annotations:${lib_spotbugs_v}"
implementation "cc.sukazyo:messiva:${lib_messiva_v}"
implementation "cc.sukazyo:resource-tools:${lib_resourcetools_v}"
implementation "com.github.pengrad:java-telegram-bot-api:${lib_javatelegramapi_v}"
implementation "com.squareup.okhttp3:okhttp:${lib_okhttp_v}"
implementation "com.google.code.gson:gson:${lib_gson_v}"
2023-09-16 23:12:44 +08:00
testImplementation "org.scalatest:scalatest_$proj_scala_api:${lib_scalatest_v}"
testImplementation "org.scalatest:scalatest-freespec_$proj_scala_api:${lib_scalatest_v}"
testRuntimeOnly "org.scala-lang.modules:scala-xml_$proj_scala_api:${lib_scalamodule_xml_v}"
testRuntimeOnly 'com.vladsch.flexmark:flexmark-all:0.64.6' // for generating HTML report // required by gradle-scalatest plugin
2021-10-07 20:50:59 +08:00
}
2023-10-06 22:24:14 +08:00
java {
withSourcesJar()
}
2023-09-10 22:43:39 +08:00
tasks.withType(JavaCompile).configureEach {
sourceCompatibility proj_java.getMajorVersion()
targetCompatibility proj_java.getMajorVersion()
options.encoding = proj_file_encoding.name()
2021-10-07 20:50:59 +08:00
}
2021-11-09 17:33:56 +08:00
2023-09-10 22:43:39 +08:00
tasks.withType(ScalaCompile).configureEach {
2023-09-10 22:43:39 +08:00
sourceCompatibility proj_java.getMajorVersion()
targetCompatibility proj_java.getMajorVersion()
2023-09-10 22:43:39 +08:00
options.encoding = proj_file_encoding.name()
scalaCompileOptions.encoding = proj_file_encoding.name()
2023-09-10 22:43:39 +08:00
scalaCompileOptions.additionalParameters.add "-language:postfixOps"
2023-09-16 23:12:44 +08:00
}
2023-09-10 22:43:39 +08:00
2023-09-16 23:12:44 +08:00
tasks.withType(Javadoc).configureEach {
options.encoding = proj_file_encoding.name()
}
2023-09-16 23:12:44 +08:00
//tasks.withType(ScalaDoc).configureEach {
//}
2023-09-05 14:14:01 +08:00
test {
2021-11-09 17:33:56 +08:00
}
2023-09-05 14:14:01 +08:00
application {
mainClass = proj_application_main
2021-11-09 17:33:56 +08:00
}
buildConfig {
packageName(proj_package)
buildConfigField('String', 'VERSION', "\"${proj_version}\"")
buildConfigField('String', 'VERSION_FULL', "\"${proj_version_full}\"")
buildConfigField('String', 'VERSION_BASE', "\"${proj_version_base}\"")
buildConfigField('String', 'VERSION_DELTA', proj_version_use_delta ? "\"${proj_version_delta}\"" : "null")
buildConfigField('String', 'CODENAME', "\"${proj_version_codename}\"")
buildConfigField('long', 'CODE_TIMESTAMP', "${proj_code_time}L")
buildConfigField('String', 'COMMIT', proj_git ? "\"${proj_commit}\"" : "null")
buildConfigField('boolean', 'CLEAN_BUILD', "${proj_clean}")
buildConfigField('String', 'CODE_STORE', proj_store==""?"null":"\"${proj_store}\"")
buildConfigField('String', 'COMMIT_PATH', proj_commit_path==""?"null":"\"${proj_commit_path}\"")
}
2023-10-06 22:24:14 +08:00
tasks.withType(Jar).configureEach {
archiveBaseName.set proj_archive_name
}
shadowJar {
archiveClassifier.set "fat"
if (project.hasProperty("dockerBuild")) {
println "shadow-jar: using docker build name"
archiveVersion.set ""
archiveClassifier.set "docker-build"
}
}
2023-09-16 23:12:44 +08:00
@SuppressWarnings('GrMethodMayBeStatic')
boolean isCleanBuild () {
if (grgit == null) return false
Set<String> changes = grgit.status().unstaged.allChanges + grgit.status().staged.allChanges
for (String file in changes) {
if (file.startsWith("src/")) return false
if (file == "build.gradle") return false
if (file == "gradle.properties") return false
}
return true
}
void listChanges (Status.Changes listing) {
for (String file in listing.added)
println " add: ${file}"
for (String file in listing.modified)
println " mod: ${file}"
for (String file in listing.removed)
println " del: ${file}"
}
publishing {
repositories{
if (publish_local_url != null) maven {
name 'archives'
url publish_local_url
}
if (publish_remote_url != null) maven {
name '-ws-'
url publish_remote_url
credentials {
username publish_remote_username
password publish_remote_password
}
}
}
publications {
//noinspection GroovyAssignabilityCheck
main (MavenPublication) {
//noinspection GroovyAssignabilityCheck
from components.java
//noinspection GroovyAssignabilityCheck
groupId = proj_group
//noinspection GroovyAssignabilityCheck
artifactId = proj_archive_name
//noinspection GroovyAssignabilityCheck
version = proj_version
}
}
2021-11-09 17:33:56 +08:00
}