Skip to content
Merged
Show file tree
Hide file tree
Changes from 25 commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
ad78dc8
ci: test on Java 8, 11, 17, 24, 25
jGleitz Feb 27, 2026
f21d4f2
ci: stop testing on Java 8
jGleitz Feb 27, 2026
303d159
chore(deps): update gradle to v9
renovate[bot] Jan 29, 2026
1e90687
chore(deps): update plugin org.jetbrains.kotlin.jvm to v2
renovate[bot] Feb 5, 2026
c02f5a0
Initial plan
Copilot Feb 27, 2026
a557beb
Align GitHub Actions with consistent.software and update Renovate config
Copilot Feb 27, 2026
2a440fd
build: set Java target version to 11 in all subprojects
Copilot Feb 27, 2026
7d42825
build: bump Java target compatibility to 17, drop Java 11 from CI
Copilot Feb 27, 2026
1b6e999
Adapt Java versions to match jGleitz-patch-1 base branch
Copilot Feb 27, 2026
d3321e5
Address review feedback: branch filters, .sdkmanrc, move docs to CI
Copilot Feb 27, 2026
c119e4f
Address review: merge docs into build job, use native sdkmanrc, Java …
Copilot Feb 27, 2026
ccd2b16
Rename default branch master → main in all workflow files
Copilot Feb 28, 2026
4b1424b
Merge branch 'jGleitz-patch-1' of https://github.com/jGleitz/testfile…
Copilot Feb 28, 2026
947197e
Merge pull request #196 from jGleitz/copilot/align-github-actions-setup
jGleitz Feb 28, 2026
fe06df2
Initial plan
Copilot Feb 28, 2026
b2a1b11
ci: build docs as CI artifact; deploy docs to Pages in release pipeli…
Copilot Feb 28, 2026
265667c
ci: run only gradle build
jGleitz Feb 28, 2026
cf1129c
Merge pull request #197 from jGleitz/copilot/sub-pr-192-again
jGleitz Feb 28, 2026
16694e5
ci: test on Java LTS versions
jGleitz Feb 28, 2026
021a168
Initial plan
Copilot Feb 28, 2026
8126174
chore: migrate Dokka from V1 (1.9.20) to V2 (2.1.0)
Copilot Feb 28, 2026
92573d9
build: apply develocity plugin
jGleitz Feb 28, 2026
f529ff2
Merge pull request #198 from jGleitz/copilot/align-dokka-setup
jGleitz Feb 28, 2026
928fea4
Remove Palantir git-version plugin, use version-from-env pattern
Copilot Feb 28, 2026
d7e5cc2
ci: run release check only on main branch
Copilot Feb 28, 2026
f4609ca
Fix Gradle 9 compatibility: upgrade nexus plugin, fix deprecated APIs
Copilot Feb 28, 2026
65f4c08
refactor: remove explicitApi() opt-in from build files
Copilot Feb 28, 2026
8f13bb4
refactor: remove ExperimentalPathApi opt-in and restore explicitApi()
Copilot Feb 28, 2026
6f663fe
build: fix path to ExampleSpec
jGleitz Feb 28, 2026
c9e0530
build: fix path to ExampleSpec
jGleitz Feb 28, 2026
606bced
ci: activate build scan on cradle build
jGleitz Feb 28, 2026
7429ba7
build: activate gradle build and configuration cache
jGleitz Feb 28, 2026
cbf3b3f
chore: ./gradlew wrapper --distribution-type all
jGleitz Mar 1, 2026
867210c
build: convert all dependency declarations to the single string notation
jGleitz Mar 1, 2026
17e5dae
Merge branch 'v3' into jGleitz-patch-1
jGleitz Mar 1, 2026
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
75 changes: 45 additions & 30 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,61 +2,76 @@ name: CI

on:
push:
branches: [ master ]
branches: [ main, renovate/** ]
pull_request:
Comment thread
jGleitz marked this conversation as resolved.

jobs:
build:
name: Build
name: Assemble & Test
runs-on: ${{ matrix.os }}

permissions:
contents: read

strategy:
matrix:
os: [ ubuntu-latest, macos-latest, windows-latest ]
java-version: [ 8, 11, 16 ]
java-version: [ 17, 21, 25 ]
fail-fast: false
Comment thread
jGleitz marked this conversation as resolved.
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.gradle/wrapper
~/.gradle/caches
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle.*') }}
restore-keys: |
gradle-${{ runner.os }}
gradle-
- name: Set up JDK ${{ matrix.java-version }}
uses: actions/setup-java@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Set Up JDK ${{ matrix.java-version }}
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
java-version: ${{ matrix.java-version }}
distribution: adopt
- name: Prepare
run: ./gradlew clean dependencies
distribution: temurin

- name: Set Up Gradle
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5
with:
build-scan-publish: true
Comment thread
jGleitz marked this conversation as resolved.
build-scan-terms-of-use-url: "https://gradle.com/terms-of-service"
build-scan-terms-of-use-agree: "yes"
Comment thread
jGleitz marked this conversation as resolved.

- name: Build
run: ./gradlew assemble testClasses
- name: Test
run: ./gradlew test
- name: Publish Test Report
uses: scacap/action-surefire-report@v1
if: failure()
run: ./gradlew build

- name: Upload Test Results
if: ${{ !cancelled() }}
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
report_paths: '**/build/test-results/test/TEST-*.xml'
check_name: Test Results (${{ matrix.os }}, ${{ matrix.java-version }})
name: test-results-${{ matrix.os }}-java-${{ matrix.java-version }}
path: "**/build/test-results/"

- name: Generate Documentation
if: matrix.os == 'ubuntu-latest' && matrix.java-version == 25
run: ./gradlew dokkaGeneratePublicationHtml
env:
ORG_GRADLE_PROJECT_githubRepository: ${{ github.repository }}

- name: Upload Documentation
if: matrix.os == 'ubuntu-latest' && matrix.java-version == 25
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: documentation
path: ./build/dokka/html

release:
name: Release Check
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main'
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6.2.0
with:
node-version: lts/*

- name: Release Check
env:
GITHUB_TOKEN: ${{ secrets.RELEASE_GITHUB_TOKEN }}
Expand Down
26 changes: 26 additions & 0 deletions .github/workflows/dependency-graph.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
name: Dependency Graph

on:
push:
branches: [main]

permissions:
contents: write

jobs:
submit:
name: Submit Dependency Graph
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Set Up Java
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
java-version-file: '.sdkmanrc'
distribution: temurin

- name: Generate and Submit Dependency Graph
uses: gradle/actions/dependency-submission@0723195856401067f7a2779048b490ace7a47d7c # v5
23 changes: 23 additions & 0 deletions .github/workflows/pull-request-title.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
name: Pull Request Title

on:
pull_request_target:
types:
- opened
- edited
- synchronize
- reopened

jobs:
check:
name: Check Title Format
runs-on: ubuntu-latest

permissions:
pull-requests: read
Comment thread
jGleitz marked this conversation as resolved.

steps:
- name: Check Pull Request Title
uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Comment thread
jGleitz marked this conversation as resolved.
76 changes: 31 additions & 45 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,34 +4,40 @@ on:
release:
types: [ published ]

env:
ORG_GRADLE_PROJECT_version: ${{ github.event.release.tag_name }}

jobs:
release:
name: Release Artefacts
runs-on: ubuntu-latest

permissions:
contents: read
pages: write
id-token: write

environment:
name: github-pages

steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.gradle/wrapper
~/.gradle/caches
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle.*') }}
restore-keys: |
gradle-${{ runner.os }}
gradle-
- name: Set up JDK 11
uses: actions/setup-java@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6

- name: Set Up JDK
uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 # v5
with:
java-version: 11
distribution: adopt
- name: Prepare
run: ./gradlew clean dependencies
java-version-file: '.sdkmanrc'
distribution: temurin

- name: Set Up Gradle
uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c # v5

- name: Assemble Artefacts
run: ./gradlew assemble
env:
ORG_GRADLE_PROJECT_githubRepository: ${{ github.repository }}

- name: Release Artefacts
run: ./gradlew release
env:
Expand All @@ -42,35 +48,15 @@ jobs:
ORG_GRADLE_PROJECT_ossrhUsername: ${{ secrets.OSSRH_USERNAME }}
ORG_GRADLE_PROJECT_ossrhPassword: ${{ secrets.OSSRH_PASSWORD }}

docs:
name: Publish Documentation
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.gradle/wrapper
~/.gradle/caches
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle.*') }}
restore-keys: |
gradle-${{ runner.os }}
gradle-
- name: Set up JDK 11
uses: actions/setup-java@v4
with:
java-version: 11
distribution: adopt
- name: Prepare
run: ./gradlew clean dependencies
- name: Generate Documentation
run: ./gradlew dokkaHtmlCollector
run: ./gradlew dokkaGeneratePublicationHtml
env:
ORG_GRADLE_PROJECT_githubRepository: ${{ github.repository }}
- name: Publish Documentation
uses: peaceiris/actions-gh-pages@v3.9.3

- name: Upload Documentation
uses: actions/upload-pages-artifact@7b1f4a764d45c48632c6b24a0339c27f5614fb0b # v4.0.0
with:
publish_dir: ./build/dokka/htmlCollector
deploy_key: ${{ secrets.GH_PAGES_DEPLOY_KEY }}
path: ./build/dokka/html

- name: Deploy to GitHub Pages
uses: actions/deploy-pages@d6db90164ac5ed86f2b6aed7e0febac5b3c0c03e # v4.0.5
30 changes: 30 additions & 0 deletions .github/workflows/test-report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# See https://github.com/dorny/test-reporter?tab=readme-ov-file#recommended-setup-for-public-repositories
# for more info on this workflow

name: Test Report

on:
workflow_run:
workflows: [CI]
types:
- completed

permissions:
contents: read
actions: read
checks: write

jobs:
add_report:
name: Annotate Test Results on Pull Request
runs-on: ubuntu-latest

steps:
- uses: dorny/test-reporter@b082adf0eced0765477756c2a610396589b8c637 # v2
with:
artifact: /test-results-.*/
name: Test Results
path: "**/*.xml"
reporter: java-junit
max-annotations: "50"
fail-on-error: "false"
1 change: 1 addition & 0 deletions .sdkmanrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
java=25.0.2-tem
8 changes: 4 additions & 4 deletions base/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import org.gradle.api.JavaVersion.VERSION_1_8
import org.gradle.api.JavaVersion.VERSION_17
import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

Expand All @@ -23,8 +23,8 @@ dependencies {
}

java {
sourceCompatibility = VERSION_1_8
targetCompatibility = VERSION_1_8
sourceCompatibility = VERSION_17
targetCompatibility = VERSION_17
}
Comment on lines 23 to 26

Copilot AI Feb 28, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Raising sourceCompatibility/targetCompatibility and the Kotlin jvmTarget to 17 drops Java 8 runtime compatibility for published artifacts, which is a breaking change for consumers on older JVMs. If this is intentional, consider documenting the new minimum supported Java version (and ensuring the next release versioning reflects the break).

Copilot uses AI. Check for mistakes.

kotlin {
Expand All @@ -33,7 +33,7 @@ kotlin {

tasks.withType<KotlinCompile> {
kotlinOptions {
jvmTarget = "1.8"
jvmTarget = "17"
freeCompilerArgs += "-Xopt-in=kotlin.io.path.ExperimentalPathApi"
}
}
Expand Down
30 changes: 13 additions & 17 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,19 +1,18 @@
import org.jetbrains.dokka.gradle.DokkaTask
import org.jetbrains.dokka.gradle.DokkaExtension

plugins {
kotlin("jvm") version "1.9.23"
id("org.jetbrains.dokka") version "1.9.20"
id("com.palantir.git-version") version "3.0.0"
kotlin("jvm") version "2.3.10"
id("org.jetbrains.dokka") version "2.1.0"
id("org.jetbrains.dokka-javadoc") version "2.1.0" apply false
`maven-publish`
signing
id("io.github.gradle-nexus.publish-plugin") version "1.3.0"
idea
}

group = "de.joshuagleitze"
version = if (isSnapshot) versionDetails.gitHash else versionDetails.lastTag.drop("v")
status = if (isSnapshot) "snapshot" else "release"
val gitRef = if (isSnapshot) versionDetails.gitHash else versionDetails.lastTag
version = if (version == "unspecified") "local" else version.toString().removePrefix("v")
status = if (version == "local") "snapshot" else "release"

subprojects {
group = rootProject.group
Expand Down Expand Up @@ -53,6 +52,7 @@ subprojects {
afterEvaluate {
apply {
plugin("org.jetbrains.dokka")
plugin("org.jetbrains.dokka-javadoc")
plugin("org.gradle.maven-publish")
plugin("org.gradle.signing")
}
Expand All @@ -64,14 +64,13 @@ subprojects {
from(sourceSets.main.map { it.allSource })
}

tasks.withType<DokkaTask> {
val projectPath = projectDir.absoluteFile.relativeTo(rootProject.projectDir.absoluteFile)
configure<DokkaExtension> {
dokkaSourceSets.named("main") {
this.DokkaSourceSetID(if (extra.has("artifactId")) extra["artifactId"] as String else project.name)
sourceLink {
val projectPath = projectDir.absoluteFile.relativeTo(rootProject.projectDir.absoluteFile)
localDirectory.set(file("src/main/kotlin"))
remoteUrl.set(uri("https://github.com/$githubRepository/blob/$gitRef/$projectPath/src/main/kotlin").toURL())
remoteLineSuffix.set("#L")
localDirectory = file("src/main/kotlin")
remoteUrl = uri("https://github.com/$githubRepository/blob/main/$projectPath/src/main/kotlin")
remoteLineSuffix = "#L"
}
}
}
Expand All @@ -80,7 +79,7 @@ subprojects {
group = "build"
description = "Assembles the Kotlin docs with Dokka"
archiveClassifier.set("javadoc")
from(tasks.named("dokkaJavadoc"))
from(tasks.named("dokkaGeneratePublicationJavadoc"))
}

artifacts {
Expand Down Expand Up @@ -158,7 +157,4 @@ subprojects {
}
}

val Project.isSnapshot get() = versionDetails.commitDistance != 0
fun String.drop(prefix: String) = if (this.startsWith(prefix)) this.drop(prefix.length) else this
fun String.firstUpper() = this.replaceFirstChar { it.titlecase() }
val Project.versionDetails get() = (this.extra["versionDetails"] as groovy.lang.Closure<*>)() as com.palantir.gradle.gitversion.VersionDetails
5 changes: 3 additions & 2 deletions gradle.properties
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
org.gradle.parallel=true
## TODO: Required because the dokka task runs out of Metaspace. Remove as soon as possible!
org.gradle.jvmargs=-XX:MaxMetaspaceSize=384m

org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled
org.jetbrains.dokka.experimental.gradle.pluginMode.noWarn=true
Loading
Loading