Skip to content

Commit 606a79d

Browse files
committed
refactor gradle config to build-logic
1 parent 10733fe commit 606a79d

11 files changed

Lines changed: 221 additions & 156 deletions

File tree

build-logic/build.gradle.kts

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
plugins {
2+
`kotlin-dsl`
3+
`kotlin-dsl-precompiled-script-plugins`
4+
}
5+
6+
repositories {
7+
mavenCentral()
8+
gradlePluginPortal()
9+
}
10+
11+
dependencies {
12+
implementation(libs.gradle.kotlin.dsl)
13+
implementation(libs.gradle.plugin.kotlin.withVersion(embeddedKotlinVersion))
14+
implementation(libs.gradle.plugin.publish)
15+
implementation(libs.gradle.plugin.checkstyle)
16+
implementation(libs.gradle.plugin.javadocLinks)
17+
implementation(files(libs.javaClass.superclass.protectionDomain.codeSource.location))
18+
}
19+
20+
fun Provider<MinimalExternalModuleDependency>.withVersion(version: String): Provider<String> {
21+
return map { "${it.module.group}:${it.module.name}:$version" }
22+
}

build-logic/settings.gradle.kts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
rootProject.name = "build-logic"
2+
3+
dependencyResolutionManagement {
4+
versionCatalogs {
5+
create("libs") {
6+
from(files("../gradle/libs.versions.toml"))
7+
}
8+
}
9+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import org.gradle.accessors.dm.LibrariesForLibs
2+
import org.incendo.cloudbuildlogic.javadoclinks.JavadocLinksExtension
3+
4+
plugins {
5+
id("net.kyori.indra")
6+
id("org.incendo.cloud-build-logic.javadoc-links")
7+
}
8+
9+
val libs = the<LibrariesForLibs>()
10+
11+
dependencies {
12+
api(libs.asm)
13+
testImplementation(libs.asm)
14+
api(libs.asmCommons)
15+
testImplementation(libs.asmCommons)
16+
}
17+
18+
javadocLinks {
19+
override(startsWithAnyOf("org.ow2.asm:asm"), JavadocLinksExtension.LinkOverride.Simple("https://asm.ow2.io/javadoc"))
20+
}
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
import java.nio.file.Files
2+
import kotlin.io.path.*
3+
4+
plugins {
5+
id("config-java")
6+
}
7+
8+
val mainForNewTargets = sourceSets.create("mainForNewTargets")
9+
10+
val testDataSet = sourceSets.create("testData")
11+
val testDataNewTargets = sourceSets.create("testDataNewTargets")
12+
13+
val filtered = tasks.register<FilterTestClasspath>("filteredTestClasspath") {
14+
outputDir.set(layout.buildDirectory.dir("filteredTestClasspath"))
15+
old.from(testDataSet.output)
16+
new.from(testDataNewTargets.output)
17+
}
18+
19+
dependencies {
20+
api(mainForNewTargets.output)
21+
testRuntimeOnly(files(filtered.flatMap { it.outputDir })) // only have access to old targets at runtime, don't use them in actual tests
22+
testImplementation(testDataNewTargets.output)
23+
24+
testDataNewTargets.implementationConfigurationName(mainForNewTargets.output)
25+
}
26+
27+
abstract class FilterTestClasspath : DefaultTask() {
28+
@get:InputFiles
29+
abstract val old: ConfigurableFileCollection
30+
31+
@get:InputFiles
32+
abstract val new: ConfigurableFileCollection
33+
34+
@get:OutputDirectory
35+
abstract val outputDir: DirectoryProperty
36+
37+
@get:Inject
38+
abstract val fsOps: FileSystemOperations
39+
40+
@TaskAction
41+
fun run() {
42+
if (!outputDir.get().asFile.toPath().exists()) {
43+
outputDir.get().asFile.mkdirs()
44+
} else {
45+
fsOps.delete {
46+
delete(outputDir.get())
47+
}
48+
outputDir.get().asFile.mkdirs()
49+
}
50+
51+
val newExisting = mutableListOf<String>()
52+
for (file in new.files) {
53+
if (file.exists()) {
54+
Files.walk(file.toPath()).use { s ->
55+
s.forEach {
56+
if (it.isDirectory()) {
57+
return@forEach
58+
}
59+
newExisting += file.toPath().relativize(it).invariantSeparatorsPathString
60+
}
61+
}
62+
}
63+
}
64+
for (file in old.files) {
65+
if (file.exists()) {
66+
Files.walk(file.toPath()).use { s ->
67+
s.forEach {
68+
if (it.isDirectory()) {
69+
return@forEach
70+
}
71+
val rel = file.toPath().relativize(it).invariantSeparatorsPathString
72+
if (rel !in newExisting) {
73+
it.copyTo(outputDir.get().asFile.toPath().resolve(rel).also { f -> f.parent.createDirectories() })
74+
}
75+
}
76+
}
77+
}
78+
}
79+
}
80+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import org.gradle.accessors.dm.LibrariesForLibs
2+
import org.incendo.cloudbuildlogic.jmp
3+
4+
plugins {
5+
id("net.kyori.indra")
6+
id("net.kyori.indra.publishing")
7+
id("net.kyori.indra.checkstyle")
8+
id("org.incendo.cloud-build-logic.javadoc-links")
9+
}
10+
11+
val libs = the<LibrariesForLibs>()
12+
13+
indra {
14+
javaVersions {
15+
target(21)
16+
strictVersions(true)
17+
}
18+
19+
publishSnapshotsTo("paperSnapshots", "https://artifactory.papermc.io/artifactory/snapshots/")
20+
publishReleasesTo("paperReleases", "https://artifactory.papermc.io/artifactory/releases/")
21+
signWithKeyFromProperties("signingKey", "signingPassword")
22+
23+
apache2License()
24+
25+
github("PaperMC", "asm-utils") {
26+
ci(true)
27+
}
28+
29+
configurePublications {
30+
pom {
31+
developers {
32+
jmp()
33+
developer {
34+
id = "Machine-Maker"
35+
name = "Jake Potrebic"
36+
url = "https://github.com/Machine-Maker"
37+
}
38+
developer {
39+
id = "kennytv"
40+
name = "Nassim Jahnke"
41+
url = "https://github.com/kennytv"
42+
}
43+
}
44+
}
45+
}
46+
}
47+
48+
repositories {
49+
mavenCentral()
50+
}
51+
52+
dependencies {
53+
compileOnlyApi(libs.jspecify)
54+
testCompileOnly(libs.jspecify)
55+
compileOnly(libs.jetbrainsAnnotations)
56+
testCompileOnly(libs.jetbrainsAnnotations)
57+
58+
testImplementation(libs.jupiterApi)
59+
testImplementation(libs.jupiterParams)
60+
testRuntimeOnly(libs.jupiterEngine)
61+
testRuntimeOnly(libs.platformLauncher)
62+
}
63+
64+
javadocLinks {
65+
override(libs.jspecify, "https://jspecify.dev/docs/api/")
66+
}

build.gradle.kts

Lines changed: 2 additions & 156 deletions
Original file line numberDiff line numberDiff line change
@@ -1,159 +1,5 @@
1-
import org.incendo.cloudbuildlogic.javadoclinks.JavadocLinksExtension
2-
import org.incendo.cloudbuildlogic.jmp
3-
import java.nio.file.Files
4-
import kotlin.io.path.copyTo
5-
import kotlin.io.path.createDirectories
6-
import kotlin.io.path.exists
7-
import kotlin.io.path.invariantSeparatorsPathString
8-
import kotlin.io.path.isDirectory
9-
101
plugins {
11-
alias(libs.plugins.indra)
12-
alias(libs.plugins.indraCheckstyle)
13-
alias(libs.plugins.indraPublishing)
14-
alias(libs.plugins.javadocLinks)
15-
}
16-
17-
allprojects {
18-
plugins.apply("net.kyori.indra")
19-
plugins.apply("net.kyori.indra.checkstyle")
20-
plugins.apply("net.kyori.indra.publishing")
21-
plugins.apply("org.incendo.cloud-build-logic.javadoc-links")
22-
23-
indra {
24-
javaVersions {
25-
target(21)
26-
strictVersions(true)
27-
}
28-
29-
publishSnapshotsTo("paperSnapshots", "https://artifactory.papermc.io/artifactory/snapshots/")
30-
publishReleasesTo("paperReleases", "https://artifactory.papermc.io/artifactory/releases/")
31-
signWithKeyFromProperties("signingKey", "signingPassword")
32-
33-
apache2License()
34-
35-
github("PaperMC", "asm-utils") {
36-
ci(true)
37-
}
38-
39-
configurePublications {
40-
pom {
41-
developers {
42-
jmp()
43-
developer {
44-
id = "Machine-Maker"
45-
name = "Jake Potrebic"
46-
url = "https://github.com/Machine-Maker"
47-
}
48-
developer {
49-
id = "kennytv"
50-
name = "Nassim Jahnke"
51-
url = "https://github.com/kennytv"
52-
}
53-
}
54-
}
55-
}
56-
}
57-
58-
repositories {
59-
mavenCentral()
60-
}
61-
62-
dependencies {
63-
if ("-runtime" !in project.name) {
64-
api(rootProject.libs.asm)
65-
testImplementation(rootProject.libs.asm)
66-
api(rootProject.libs.asmCommons)
67-
testImplementation(rootProject.libs.asmCommons)
68-
}
69-
70-
compileOnlyApi(rootProject.libs.jspecify)
71-
testCompileOnly(rootProject.libs.jspecify)
72-
compileOnly(rootProject.libs.jetbrainsAnnotations)
73-
testCompileOnly(rootProject.libs.jetbrainsAnnotations)
74-
75-
testImplementation(rootProject.libs.jupiterApi)
76-
testImplementation(rootProject.libs.jupiterParams)
77-
testRuntimeOnly(rootProject.libs.jupiterEngine)
78-
testRuntimeOnly(rootProject.libs.platformLauncher)
79-
}
80-
81-
javadocLinks {
82-
override(startsWithAnyOf("org.ow2.asm:asm"), JavadocLinksExtension.LinkOverride.Simple("https://asm.ow2.io/javadoc"))
83-
override(rootProject.libs.jspecify, "https://jspecify.dev/docs/api/")
84-
}
2+
id("config-bytecode-testing")
3+
id("config-asm")
854
}
86-
val mainForNewTargets = sourceSets.create("mainForNewTargets")
875

88-
val testDataSet = sourceSets.create("testData")
89-
val testDataNewTargets = sourceSets.create("testDataNewTargets")
90-
91-
val filtered = tasks.register<FilterTestClasspath>("filteredTestClasspath") {
92-
outputDir.set(layout.buildDirectory.dir("filteredTestClasspath"))
93-
old.from(testDataSet.output)
94-
new.from(testDataNewTargets.output)
95-
}
96-
97-
dependencies {
98-
api(mainForNewTargets.output)
99-
testRuntimeOnly(files(filtered.flatMap { it.outputDir })) // only have access to old targets at runtime, don't use them in actual tests
100-
testImplementation(testDataNewTargets.output)
101-
102-
testDataNewTargets.implementationConfigurationName(mainForNewTargets.output)
103-
}
104-
105-
106-
abstract class FilterTestClasspath : DefaultTask() {
107-
@get:InputFiles
108-
abstract val old: ConfigurableFileCollection
109-
110-
@get:InputFiles
111-
abstract val new: ConfigurableFileCollection
112-
113-
@get:OutputDirectory
114-
abstract val outputDir: DirectoryProperty
115-
116-
@get:Inject
117-
abstract val fsOps: FileSystemOperations
118-
119-
@TaskAction
120-
fun run() {
121-
if (!outputDir.get().asFile.toPath().exists()) {
122-
outputDir.get().asFile.mkdirs()
123-
} else {
124-
fsOps.delete {
125-
delete(outputDir.get())
126-
}
127-
outputDir.get().asFile.mkdirs()
128-
}
129-
130-
val newExisting = mutableListOf<String>()
131-
for (file in new.files) {
132-
if (file.exists()) {
133-
Files.walk(file.toPath()).use { s ->
134-
s.forEach {
135-
if (it.isDirectory()) {
136-
return@forEach
137-
}
138-
newExisting += file.toPath().relativize(it).invariantSeparatorsPathString
139-
}
140-
}
141-
}
142-
}
143-
for (file in old.files) {
144-
if (file.exists()) {
145-
Files.walk(file.toPath()).use { s ->
146-
s.forEach {
147-
if (it.isDirectory()) {
148-
return@forEach
149-
}
150-
val rel = file.toPath().relativize(it).invariantSeparatorsPathString
151-
if (rel !in newExisting) {
152-
it.copyTo(outputDir.get().asFile.toPath().resolve(rel).also { f -> f.parent.createDirectories() })
153-
}
154-
}
155-
}
156-
}
157-
}
158-
}
159-
}

gradle/libs.versions.toml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,14 @@ jupiterEngine = { module = "org.junit.jupiter:junit-jupiter-engine", version.ref
1616
jupiterParams = { module = "org.junit.jupiter:junit-jupiter-params", version.ref = "junit" }
1717
platformLauncher = { module = "org.junit.platform:junit-platform-launcher", version.ref = "junit" }
1818

19+
gradle-kotlin-dsl = "org.gradle.kotlin.kotlin-dsl:org.gradle.kotlin.kotlin-dsl.gradle.plugin:6.4.2"
20+
gradle-plugin-kotlin = { module = "org.jetbrains.kotlin.jvm:org.jetbrains.kotlin.jvm.gradle.plugin" }
21+
gradle-plugin-indra = { module = "net.kyori.indra:net.kyori.indra.gradle.plugin", version.ref = "indra" }
22+
gradle-plugin-publish = { module = "net.kyori.indra.publishing:net.kyori.indra.publishing.gradle.plugin", version.ref = "indra" }
23+
gradle-plugin-checkstyle = { module = "net.kyori.indra.checkstyle:net.kyori.indra.checkstyle.gradle.plugin", version.ref = "indra" }
24+
gradle-plugin-javadocLinks = "org.incendo.cloud-build-logic.javadoc-links:org.incendo.cloud-build-logic.javadoc-links.gradle.plugin:0.0.18"
25+
26+
1927
[plugins]
2028
indra = { id = "net.kyori.indra", version.ref = "indra" }
2129
indraCheckstyle = { id = "net.kyori.indra.checkstyle", version.ref = "indra" }
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
plugins {
2+
id("config-java")
3+
id("config-asm")
4+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
plugins {
2+
id("config-java")
3+
id("config-asm")
4+
}
5+
16
dependencies {
27
api(project(":"))
38
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
plugins {
2+
id("config-java")
3+
}

0 commit comments

Comments
 (0)