Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bump base etc. #65

Merged
merged 17 commits into from
Oct 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-on-ubuntu.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:

# See: https://github.com/marketplace/actions/junit-report-action
- name: Publish Test Report
uses: mikepenz/action-junit-report@v2.8.4
uses: mikepenz/action-junit-report@v3.5.2
if: always() # always run even if the previous step fails
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build-on-windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:

# See: https://github.com/marketplace/actions/junit-report-action
- name: Publish Test Report
uses: mikepenz/action-junit-report@v2.8.4
uses: mikepenz/action-junit-report@v3.5.2
if: always() # always run even if the previous step fails
with:
report_paths: '**/build/test-results/test/TEST-*.xml'
2 changes: 1 addition & 1 deletion .github/workflows/detekt-analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ jobs:
)" > ${{ github.workspace }}/detekt.sarif.json

# Uploads results to GitHub repository using the upload-sarif action
- uses: github/codeql-action/upload-sarif@v1
- uses: github/codeql-action/upload-sarif@v2
with:
# Path to SARIF file relative to the root of the repository
sarif_file: ${{ github.workspace }}/detekt.sarif.json
Expand Down
3 changes: 3 additions & 0 deletions .idea/dictionaries/common.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

207 changes: 155 additions & 52 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import io.spine.internal.dependency.ErrorProne
import io.spine.internal.dependency.Flogger
import io.spine.internal.dependency.JUnit
import io.spine.internal.dependency.Jackson
import io.spine.internal.dependency.Spine
import io.spine.internal.dependency.Truth
import io.spine.internal.gradle.applyGitHubPackages
import io.spine.internal.gradle.applyStandard
Expand All @@ -47,17 +48,13 @@ import io.spine.internal.gradle.report.license.LicenseReporter
import io.spine.internal.gradle.report.pom.PomGenerator
import io.spine.internal.gradle.testing.configureLogging
import io.spine.internal.gradle.testing.registerTestTasks
import org.gradle.jvm.tasks.Jar
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

buildscript {
io.spine.internal.gradle.doApplyStandard(repositories)
apply(from = "$rootDir/version.gradle.kts")

val protoDataVersion: String by extra

dependencies {
// The below dependency is obtained from https://plugins.gradle.org/m2/.
classpath("io.spine:protodata:$protoDataVersion")
classpath(io.spine.internal.dependency.Spine.ProtoData.pluginLib)
}
}

Expand Down Expand Up @@ -116,6 +113,34 @@ allprojects {
}

subprojects {
applyPlugins()
addDependencies()
forceConfigurations()

applyGeneratedDirectories("$projectDir/generated")

val javaVersion = JavaVersion.VERSION_11
configureJava(javaVersion)
configureKotlin(javaVersion)

configureTests()
configureTaskDependencies()
dependTestOnJavaRuntime()
}

JacocoConfig.applyTo(project)
LicenseReporter.mergeAllReports(project)
PomGenerator.applyTo(project)

/**
* A subproject of Validation.
*/
typealias Subproject = Project

/**
* Applies plugins to a subproject
*/
fun Subproject.applyPlugins() {
apply {
plugin("net.ltgt.errorprone")
plugin("java-library")
Expand All @@ -131,6 +156,15 @@ subprojects {
plugin("pmd-settings")
}

apply<IncrementGuard>()
LicenseReporter.generateReportIn(project)
JavadocConfig.applyTo(project)
}

/**
* Adds dependencies common to all subprojects.
*/
fun Subproject.addDependencies() {
dependencies {
ErrorProne.apply {
errorprone(core)
Expand All @@ -140,33 +174,68 @@ subprojects {
Truth.libs.forEach { testImplementation(it) }
testRuntimeOnly(JUnit.runner)
}
}

/**
* Sets dependencies on `:java-runtime-bundle:shadowJar` for Java-related modules,
* unless it's ":java-runtime-bundle" itself.
*
* The dependencies are set for the tasks:
* 1. `test`
* 2. `launchProtoDataMain`
* 3. `launchProtoDataTest`
* 4. `pmdMain`.
*/
fun Subproject.dependTestOnJavaRuntime() {
val javaBundleModule = ":java-runtime-bundle"
if (!name.startsWith(":java") || name == javaBundleModule) {
return
}

afterEvaluate {
val test: Task by tasks.getting
val javaBundleJar = project(javaBundleModule).tasks.findByName("shadowJar")

fun String.dependOn(task: Task) = tasks.findByName(this)?.dependsOn(task)

javaBundleJar?.let {
test.dependsOn(it)
"launchProtoDataMain".dependOn(it)
"launchProtoDataTest".dependOn(it)
"pmdMain".dependOn(it)
}
}
}

/**
* Forces versions of dependencies and excludes Protobuf Light.
*/
fun Subproject.forceConfigurations() {
configurations {
forceVersions()
excludeProtobufLite()

val spineBaseVersion: String by extra
val spineServerVersion: String by extra
val spineTimeVersion: String by extra
val spineToolBaseVersion: String by extra

all {
resolutionStrategy {
val spine = Spine(project)
force(
Flogger.lib,
Flogger.Runtime.systemBackend,
"io.spine:spine-base:$spineBaseVersion",
"io.spine:spine-time:$spineTimeVersion",
"io.spine.tools:spine-testlib:$spineBaseVersion",
"io.spine.tools:spine-tool-base:$spineToolBaseVersion",
"io.spine:spine-server:$spineServerVersion",

spine.base,
spine.time,
spine.testlib,
spine.toolBase,
spine.server,

Jackson.core,
Jackson.moduleKotlin,
Jackson.databind,
Jackson.bom,
Jackson.annotations,
Jackson.dataformatYaml,
Jackson.dataformatXml,

Dokka.BasePlugin.lib
)
}
Expand All @@ -175,9 +244,12 @@ subprojects {
exclude("io.spine", "spine-validate")
}
}
}

val javaVersion = JavaVersion.VERSION_11

/**
* Configures Java in this subproject.
*/
fun Subproject.configureJava(javaVersion: JavaVersion) {
java {
sourceCompatibility = javaVersion
targetCompatibility = javaVersion
Expand All @@ -187,12 +259,17 @@ subprojects {
configureJavac()
configureErrorProne()
}
withType<org.gradle.jvm.tasks.Jar>().configureEach {
withType<Jar>().configureEach {
duplicatesStrategy = DuplicatesStrategy.INCLUDE
}
}
}
}

/**
* Configures Kotlin in this subproject.
*/
fun Subproject.configureKotlin(javaVersion: JavaVersion) {
kotlin {
explicitApi()

Expand All @@ -204,7 +281,12 @@ subprojects {
}
}
}
}

/**
* Configures test tasks.
*/
fun Project.configureTests() {
tasks {
registerTestTasks()
test {
Expand All @@ -214,46 +296,67 @@ subprojects {
configureLogging()
}
}

project.configureTaskDependencies()
project.dependTestOnJavaRuntime()

apply<IncrementGuard>()
LicenseReporter.generateReportIn(project)
JavadocConfig.applyTo(project)
}

JacocoConfig.applyTo(project)
LicenseReporter.mergeAllReports(project)
PomGenerator.applyTo(project)

/**
* Sets dependencies on `:java-runtime-bundle:shadowJar` for Java-related modules,
* unless it's ":java-runtime-bundle" itself.
* Adds directories with the generated source code to source sets of the project and
* to IntelliJ IDEA module settings.
*
* The dependencies are set for the tasks:
* 1. `test`
* 2. `launchProtoDataMain`
* 3. `launchProtoDataTest`
* 4. `pmdMain`.
* @param generatedDir
* the name of the root directory with the generated code
*/
fun Project.dependTestOnJavaRuntime() {
val javaBundleModule = ":java-runtime-bundle"
if (!name.startsWith(":java") || name == javaBundleModule) {
return
fun Subproject.applyGeneratedDirectories(generatedDir: String) {
val generatedMain = "$generatedDir/main"
val generatedJava = "$generatedMain/java"
val generatedKotlin = "$generatedMain/kotlin"
val generatedGrpc = "$generatedMain/grpc"
val generatedSpine = "$generatedMain/spine"

val generatedTest = "$generatedDir/test"
val generatedTestJava = "$generatedTest/java"
val generatedTestKotlin = "$generatedTest/kotlin"
val generatedTestGrpc = "$generatedTest/grpc"
val generatedTestSpine = "$generatedTest/spine"

sourceSets {
main {
java.srcDirs(
generatedJava,
generatedGrpc,
generatedSpine,
)
kotlin.srcDirs(
generatedKotlin,
)
}
test {
java.srcDirs(
generatedTestJava,
generatedTestGrpc,
generatedTestSpine,
)
kotlin.srcDirs(
generatedTestKotlin,
)
}
}

afterEvaluate {
val test: Task by tasks.getting
val javaBundleJar = project(javaBundleModule).tasks.findByName("shadowJar")

fun String.dependOn(task: Task) = tasks.findByName(this)?.dependsOn(task)

javaBundleJar?.let {
test.dependsOn(it)
"launchProtoDataMain".dependOn(it)
"launchProtoDataTest".dependOn(it)
"pmdMain".dependOn(it)
idea {
module {
generatedSourceDirs.addAll(files(
generatedJava,
generatedKotlin,
generatedGrpc,
generatedSpine,
))
testSources.from(
generatedTestJava,
generatedTestKotlin,
generatedTestGrpc,
generatedTestSpine,
)
isDownloadJavadoc = true
isDownloadSources = true
}
}
}
6 changes: 3 additions & 3 deletions buildSrc/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ repositories {
* Please keep this value in sync. with `io.spine.internal.dependency.Jackson.version`.
* It's not a requirement, but would be good in terms of consistency.
*/
val jacksonVersion = "2.13.0"
val jacksonVersion = "2.13.4"

val googleAuthToolVersion = "2.1.2"
val licenseReportVersion = "2.1"
Expand Down Expand Up @@ -80,7 +80,7 @@ val guavaVersion = "31.1-jre"
* @see <a href="https://github.com/tbroyer/gradle-errorprone-plugin/releases">
* Error Prone Gradle Plugin Releases</a>
*/
val errorProneVersion = "2.0.2"
val errorProneVersion = "3.0.1"

/**
* The version of Protobuf Gradle Plugin.
Expand All @@ -100,7 +100,7 @@ val protobufPluginVersion = "0.8.19"
* @see <a href="https://github.com/Kotlin/dokka/releases">
* Dokka Releases</a>
*/
val dokkaVersion = "1.7.10"
val dokkaVersion = "1.7.20"

configurations.all {
resolutionStrategy {
Expand Down
2 changes: 1 addition & 1 deletion buildSrc/src/main/kotlin/deps-between-tasks.kt
Original file line number Diff line number Diff line change
Expand Up @@ -62,10 +62,10 @@ fun Project.configureTaskDependencies() {
"sourcesJar".dependOn("generateProto")
"sourcesJar".dependOn("launchProtoDataMain")
"sourcesJar".dependOn("createVersionFile")
"sourcesJar".dependOn("prepareProtocConfigVersions")
"dokkaHtml".dependOn("generateProto")
"dokkaHtml".dependOn("launchProtoDataMain")
"dokkaJavadoc".dependOn("launchProtoDataMain")
"test".dependOn("shadowJar")
"publishPluginJar".dependOn("createVersionFile")
}
}
Loading