From fb48a3c8afc8a3647ef5630443bb6d0e1b847776 Mon Sep 17 00:00:00 2001 From: Jason Penilla <11360596+jpenilla@users.noreply.github.com> Date: Mon, 14 Jun 2021 05:33:09 -0700 Subject: [PATCH] build: Update Gradle and plugins, small cleanup to build scripts --- build-logic/build.gradle.kts | 15 ++ build-logic/settings.gradle.kts | 12 ++ .../src/main/kotlin/CloudExampleExtension.kt | 2 + .../src/main/kotlin/Versions.kt | 0 .../kotlin/cloud.base-conventions.gradle.kts | 103 +++++++++++++ .../cloud.example-conventions.gradle.kts | 12 ++ .../cloud.parent-build-logic.gradle.kts | 10 ++ build-logic/src/main/kotlin/extensions.kt | 12 ++ build.gradle.kts | 142 +----------------- buildSrc/build.gradle.kts | 12 -- buildSrc/src/main/kotlin/GroupedBuild.kt | 24 --- examples/example-bukkit/build.gradle.kts | 25 +-- examples/example-bungee/build.gradle.kts | 1 + examples/example-javacord/build.gradle | 4 + examples/example-jda/build.gradle.kts | 1 + examples/example-velocity/build.gradle.kts | 3 +- gradle/libs.versions.yml | 49 ++++++ gradle/wrapper/gradle-wrapper.properties | 2 +- settings.gradle.kts | 5 + 19 files changed, 245 insertions(+), 189 deletions(-) create mode 100644 build-logic/build.gradle.kts create mode 100644 build-logic/settings.gradle.kts create mode 100644 build-logic/src/main/kotlin/CloudExampleExtension.kt rename {buildSrc => build-logic}/src/main/kotlin/Versions.kt (100%) create mode 100644 build-logic/src/main/kotlin/cloud.base-conventions.gradle.kts create mode 100644 build-logic/src/main/kotlin/cloud.example-conventions.gradle.kts create mode 100644 build-logic/src/main/kotlin/cloud.parent-build-logic.gradle.kts create mode 100644 build-logic/src/main/kotlin/extensions.kt delete mode 100644 buildSrc/build.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/GroupedBuild.kt create mode 100644 gradle/libs.versions.yml diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 00000000..2a17075b --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + `kotlin-dsl` +} + +repositories { + gradlePluginPortal() +} + +dependencies { + implementation(libs.indraCommon) + implementation(libs.indraPublishingSonatype) + implementation(libs.testLoggerPlugin) + implementation(libs.errorpronePlugin) + implementation(libs.licenser) +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 00000000..5bae3610 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,12 @@ +import ca.stellardrift.build.configurate.ConfigFormats +import ca.stellardrift.build.configurate.catalog.PolyglotVersionCatalogExtension + +enableFeaturePreview("VERSION_CATALOGS") + +plugins { + id("ca.stellardrift.polyglot-version-catalogs") version "5.0.0" +} + +extensions.configure { + from(ConfigFormats.YAML, file("../gradle/libs.versions.yml")) +} diff --git a/build-logic/src/main/kotlin/CloudExampleExtension.kt b/build-logic/src/main/kotlin/CloudExampleExtension.kt new file mode 100644 index 00000000..b72058a8 --- /dev/null +++ b/build-logic/src/main/kotlin/CloudExampleExtension.kt @@ -0,0 +1,2 @@ +abstract class CloudExampleExtension { +} diff --git a/buildSrc/src/main/kotlin/Versions.kt b/build-logic/src/main/kotlin/Versions.kt similarity index 100% rename from buildSrc/src/main/kotlin/Versions.kt rename to build-logic/src/main/kotlin/Versions.kt diff --git a/build-logic/src/main/kotlin/cloud.base-conventions.gradle.kts b/build-logic/src/main/kotlin/cloud.base-conventions.gradle.kts new file mode 100644 index 00000000..165ad6aa --- /dev/null +++ b/build-logic/src/main/kotlin/cloud.base-conventions.gradle.kts @@ -0,0 +1,103 @@ +import net.kyori.indra.repository.sonatypeSnapshots +import net.ltgt.gradle.errorprone.errorprone +import org.cadixdev.gradle.licenser.header.HeaderStyle + +plugins { + id("net.kyori.indra") + id("net.kyori.indra.publishing") + id("net.kyori.indra.checkstyle") + id("net.kyori.indra.license-header") + id("net.ltgt.errorprone") +} + +indra { + publishSnapshotsTo("incendo", "https://repo.incendo.org/content/repositories/snapshots/") + + github("Incendo", "cloud") { + ci(true) + } + mitLicense() + + javaVersions { + testWith(8, 11, 16) + } + + checkstyle("8.39") + + configurePublications { + pom { + developers { + developer { + id.set("Sauilitired") + name.set("Alexander Söderberg") + url.set("https://alexander-soderberg.com") + email.set("contact@alexander-soderberg.com") + } + } + } + } +} + +/* Disable checkstyle on tests */ +project.gradle.startParameter.excludedTaskNames.add("checkstyleTest") + +tasks { + withType { + options.errorprone { + /* These are just annoying */ + disable( + "JdkObsolete", + "FutureReturnValueIgnored", + "ImmutableEnumChecker", + "StringSplitter", + "EqualsGetClass", + "CatchAndPrintStackTrace" + ) + } + options.compilerArgs.addAll(listOf("-Xlint:-processing", "-Werror")) + } +} + +license { + header(rootProject.file("HEADER")) + style["java"] = HeaderStyle.DOUBLE_SLASH.format + style["kt"] = HeaderStyle.DOUBLE_SLASH.format +} + +repositories { + mavenCentral() + sonatypeSnapshots() + /* Velocity, used for cloud-velocity */ + maven("https://nexus.velocitypowered.com/repository/velocity-artifacts-release/") { + mavenContent { releasesOnly() } + } + /* The Minecraft repository, used for cloud-brigadier */ + maven("https://libraries.minecraft.net/") { + mavenContent { releasesOnly() } + } + /* The current Sponge repository */ + maven("https://repo-new.spongepowered.org/repository/maven-public/") + /* The Spigot repository, used for cloud-bukkit */ + maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") { + mavenContent { snapshotsOnly() } + } + /* The paper repository, used for cloud-paper */ + maven("https://papermc.io/repo/repository/maven-public/") + /* The NukkitX repository, used for cloud-cloudburst */ + maven("https://repo.nukkitx.com/maven-snapshots") { + mavenContent { snapshotsOnly() } + } + /* JitPack, used for random dependencies */ + maven("https://jitpack.io") { + content { includeGroupByRegex("com\\.github\\..*") } + } + /* JDA's maven repository for cloud-jda */ + maven("https://m2.dv8tion.net/releases") +} + +dependencies { + compileOnlyApi("org.checkerframework", "checker-qual", Versions.checkerQual) + testImplementation("org.junit.jupiter", "junit-jupiter-engine", Versions.jupiterEngine) + errorprone("com.google.errorprone", "error_prone_core", Versions.errorprone) + compileOnlyApi("com.google.errorprone", "error_prone_annotations", Versions.errorprone) +} diff --git a/build-logic/src/main/kotlin/cloud.example-conventions.gradle.kts b/build-logic/src/main/kotlin/cloud.example-conventions.gradle.kts new file mode 100644 index 00000000..1a0d7181 --- /dev/null +++ b/build-logic/src/main/kotlin/cloud.example-conventions.gradle.kts @@ -0,0 +1,12 @@ +plugins { + id("cloud.base-conventions") +} + +extensions.create("cloudExample") + +// Only compile examples on CI, or when the compile-examples property exists +if (!ci.get() && !compileExamples) { + tasks.configureEach { + onlyIf { false } + } +} diff --git a/build-logic/src/main/kotlin/cloud.parent-build-logic.gradle.kts b/build-logic/src/main/kotlin/cloud.parent-build-logic.gradle.kts new file mode 100644 index 00000000..e79cd5a2 --- /dev/null +++ b/build-logic/src/main/kotlin/cloud.parent-build-logic.gradle.kts @@ -0,0 +1,10 @@ +plugins { + id("net.kyori.indra.publishing.sonatype") +} + +System.getenv("SNAPSHOT_PUBLISHING_USERNAME")?.run { + setProperty("incendoUsername", this) +} +System.getenv("SNAPSHOT_PUBLISHING_PASSWORD")?.run { + setProperty("incendoPassword", this) +} diff --git a/build-logic/src/main/kotlin/extensions.kt b/build-logic/src/main/kotlin/extensions.kt new file mode 100644 index 00000000..04729fff --- /dev/null +++ b/build-logic/src/main/kotlin/extensions.kt @@ -0,0 +1,12 @@ +import org.gradle.api.Project +import org.gradle.api.provider.Provider + +// set by GitHub Actions +val Project.ci: Provider + get() = providers.environmentVariable("CI") + .forUseAtConfigurationTime() + .map { it.toBoolean() } + .orElse(false) + +val Project.compileExamples: Boolean + get() = hasProperty("compile-examples") diff --git a/build.gradle.kts b/build.gradle.kts index eaabe4a8..6fc168fa 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,148 +1,12 @@ -import io.github.gradlenexus.publishplugin.NexusPublishExtension -import net.kyori.indra.IndraLicenseHeaderPlugin -import net.kyori.indra.IndraCheckstylePlugin -import net.kyori.indra.IndraPublishingPlugin -import net.kyori.indra.IndraExtension -import net.kyori.indra.IndraPlugin -import net.kyori.indra.repository.sonatypeSnapshots -import net.ltgt.gradle.errorprone.ErrorPronePlugin -import net.ltgt.gradle.errorprone.errorprone -import org.cadixdev.gradle.licenser.LicenseExtension -import org.cadixdev.gradle.licenser.header.HeaderStyle -import org.gradle.api.plugins.JavaPlugin.COMPILE_ONLY_API_CONFIGURATION_NAME -import org.gradle.api.plugins.JavaPlugin.TEST_IMPLEMENTATION_CONFIGURATION_NAME - plugins { - val indraVersion = "2.0.2" - id("net.kyori.indra") version indraVersion apply false - id("net.kyori.indra.checkstyle") version indraVersion apply false - id("net.kyori.indra.publishing") version indraVersion apply false - id("net.kyori.indra.publishing.sonatype") version indraVersion - id("net.kyori.indra.license-header") version indraVersion apply false - id("com.github.johnrengelman.shadow") version "7.0.0" apply false - id("net.ltgt.errorprone") version "2.0.1" apply false - id("com.github.ben-manes.versions") version "0.38.0" -} - -//buildGroups("Minecraft", "Discord", "IRC") - -gradle.taskGraph.whenReady { - gradle.taskGraph.allTasks.forEach { - if (it.project.name.contains("example")) { - it.onlyIf { - project.hasProperty("compile-examples") - } - } - } + id("cloud.parent-build-logic") + id("com.github.ben-manes.versions") } group = "cloud.commandframework" version = "1.5.0-SNAPSHOT" description = "Command framework and dispatcher for the JVM" -extensions.configure { - repositories.create("incendoSnapshots") { - snapshotRepositoryUrl.set(uri("https://repo.incendo.org/content/repositories/snapshots/")) - username.set(System.getenv("SNAPSHOT_PUBLISHING_USERNAME")) - password.set(System.getenv("SNAPSHOT_PUBLISHING_PASSWORD")) - } -} - subprojects { - apply() - apply() - apply() - apply() - apply() - - extensions.configure(IndraExtension::class) { - github("Incendo", "cloud") { - ci(true) - } - mitLicense() - - javaVersions { - testWith(8, 11, 16) - } - - checkstyle("8.39") - - configurePublications { - pom { - developers { - developer { - id.set("Sauilitired") - name.set("Alexander Söderberg") - url.set("https://alexander-soderberg.com") - email.set("contact@alexander-soderberg.com") - } - } - } - } - } - - /* Disable checkstyle on tests */ - project.gradle.startParameter.excludedTaskNames.add("checkstyleTest") - - tasks { - withType(JavaCompile::class) { - options.errorprone { - /* These are just annoying */ - disable( - "JdkObsolete", - "FutureReturnValueIgnored", - "ImmutableEnumChecker", - "StringSplitter", - "EqualsGetClass", - "CatchAndPrintStackTrace" - ) - } - options.compilerArgs.addAll(listOf("-Xlint:-processing", "-Werror")) - } - } - - extensions.configure { - header(rootProject.file("HEADER")) - style["java"] = HeaderStyle.DOUBLE_SLASH.format - style["kt"] = HeaderStyle.DOUBLE_SLASH.format - } - - repositories { - mavenCentral() - sonatypeSnapshots() - /* Velocity, used for cloud-velocity */ - maven("https://nexus.velocitypowered.com/repository/velocity-artifacts-release/") { - mavenContent { releasesOnly() } - } - /* The Minecraft repository, used for cloud-brigadier */ - maven("https://libraries.minecraft.net/") { - mavenContent { releasesOnly() } - } - /* The current Sponge repository */ - maven("https://repo-new.spongepowered.org/repository/maven-public/") - /* The Spigot repository, used for cloud-bukkit */ - maven("https://hub.spigotmc.org/nexus/content/repositories/snapshots/") { - mavenContent { snapshotsOnly() } - } - /* The paper repository, used for cloud-paper */ - maven("https://papermc.io/repo/repository/maven-public/") - /* The NukkitX repository, used for cloud-cloudburst */ - maven("https://repo.nukkitx.com/maven-snapshots") { - mavenContent { snapshotsOnly() } - } - /* JitPack, used for random dependencies */ - maven("https://jitpack.io") { - content { includeGroupByRegex("com\\.github\\..*") } - } - /* JDA's maven repository for cloud-jda */ - maven("https://m2.dv8tion.net/releases") - } - - dependencies { - COMPILE_ONLY_API_CONFIGURATION_NAME("org.checkerframework", "checker-qual", Versions.checkerQual) - TEST_IMPLEMENTATION_CONFIGURATION_NAME("org.junit.jupiter", "junit-jupiter-engine", Versions.jupiterEngine) - "errorprone"("com.google.errorprone", "error_prone_core", Versions.errorprone) - COMPILE_ONLY_API_CONFIGURATION_NAME("com.google.errorprone", "error_prone_annotations", Versions.errorprone) - } - + plugins.apply("cloud.base-conventions") } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index 8211c2f6..00000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,12 +0,0 @@ -plugins { - `kotlin-dsl` -} - -repositories { - mavenCentral() - maven("https://oss.sonatype.org/content/repositories/snapshots/") -} - -dependencies { - implementation("com.bmuschko", "gradle-nexus-plugin", "2.3.1") -} diff --git a/buildSrc/src/main/kotlin/GroupedBuild.kt b/buildSrc/src/main/kotlin/GroupedBuild.kt deleted file mode 100644 index f39710e4..00000000 --- a/buildSrc/src/main/kotlin/GroupedBuild.kt +++ /dev/null @@ -1,24 +0,0 @@ -import org.gradle.api.Project -import org.gradle.kotlin.dsl.invoke - -fun Project.buildGroups(vararg groupNames: String) = - groupNames.forEach(this::buildGroup) - -fun Project.buildGroup(groupName: String) { - tasks { - register("build$groupName") { - group = "cloud" - rootProject.subprojects - .filter { it.projectDir.parentFile.name == "cloud-${groupName.toLowerCase()}" } - .map { it.tasks.getByName("build") } - .forEach { dependsOn(it) } - } - register("install$groupName") { - group = "cloud" - rootProject.subprojects - .filter { it.projectDir.parentFile.name == "cloud-${groupName.toLowerCase()}" } - .map { it.tasks.getByName("publishToMavenLocal") } - .forEach { dependsOn(it) } - } - } -} diff --git a/examples/example-bukkit/build.gradle.kts b/examples/example-bukkit/build.gradle.kts index 57332ce9..b5d41366 100644 --- a/examples/example-bukkit/build.gradle.kts +++ b/examples/example-bukkit/build.gradle.kts @@ -1,8 +1,21 @@ plugins { + id("cloud.example-conventions") id("com.github.johnrengelman.shadow") id("xyz.jpenilla.run-paper") version "1.0.3-SNAPSHOT" } +dependencies { + /* Cloud */ + implementation(project(":cloud-paper")) + implementation(project(":cloud-annotations")) + implementation(project(":cloud-minecraft-extras")) + /* Extras */ + implementation("me.lucko", "commodore", Versions.commodore) + implementation("net.kyori", "adventure-platform-bukkit", Versions.adventurePlatform) + /* Bukkit */ + compileOnly("org.bukkit", "bukkit", Versions.bukkit) +} + tasks { shadowJar { dependencies { @@ -18,15 +31,3 @@ tasks { legacyPluginLoading() } } - -dependencies { - /* Cloud */ - implementation(project(":cloud-paper")) - implementation(project(":cloud-annotations")) - implementation(project(":cloud-minecraft-extras")) - /* Extras */ - implementation("me.lucko", "commodore", Versions.commodore) - implementation("net.kyori", "adventure-platform-bukkit", Versions.adventurePlatform) - /* Bukkit */ - compileOnly("org.bukkit", "bukkit", Versions.bukkit) -} diff --git a/examples/example-bungee/build.gradle.kts b/examples/example-bungee/build.gradle.kts index 64105d40..6f79a69f 100644 --- a/examples/example-bungee/build.gradle.kts +++ b/examples/example-bungee/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + id("cloud.example-conventions") id ("com.github.johnrengelman.shadow") } diff --git a/examples/example-javacord/build.gradle b/examples/example-javacord/build.gradle index 8070803e..0fdea1f7 100644 --- a/examples/example-javacord/build.gradle +++ b/examples/example-javacord/build.gradle @@ -1,3 +1,7 @@ +plugins { + id("cloud.example-conventions") +} + apply plugin: "application" apply plugin: "com.github.johnrengelman.shadow" diff --git a/examples/example-jda/build.gradle.kts b/examples/example-jda/build.gradle.kts index fef49f30..d2c0c431 100644 --- a/examples/example-jda/build.gradle.kts +++ b/examples/example-jda/build.gradle.kts @@ -1,5 +1,6 @@ plugins { application + id("cloud.example-conventions") id("com.github.johnrengelman.shadow") } diff --git a/examples/example-velocity/build.gradle.kts b/examples/example-velocity/build.gradle.kts index 84b0a9bd..2e1c6ee7 100644 --- a/examples/example-velocity/build.gradle.kts +++ b/examples/example-velocity/build.gradle.kts @@ -1,5 +1,6 @@ plugins { - id ("com.github.johnrengelman.shadow") + id("com.github.johnrengelman.shadow") + id("cloud.example-conventions") } val velocityRunClasspath by configurations.creating { diff --git a/gradle/libs.versions.yml b/gradle/libs.versions.yml new file mode 100644 index 00000000..f57f4c11 --- /dev/null +++ b/gradle/libs.versions.yml @@ -0,0 +1,49 @@ +metadata: + format: { version: 1.0 } + polyglot-extensions: + - plugins + +plugins: + com.github.johnrengelman.shadow: 7.0.0 + net.ltgt.errorprone: 2.0.1 + com.github.ben-manes.versions: 0.36.0 + +versions: + checkerQual: 3.14.0 + + # build-logic + checkstyle: 8.39 + indra: 2.0.5 + testLoggerPlugin: 3.0.0 + errorpronePlugin: 2.0.1 + licenser: 0.6.0 + +dependencies: + checkerQual: + group: org.checkerframework + name: checker-qual + version: { ref: checkerQual } + + # build-logic + indraCommon: + group: net.kyori + name: indra-common + version: { ref: indra } + indraPublishingSonatype: + group: net.kyori + name: indra-publishing-sonatype + version: { ref: indra } + licenser: + group: gradle.plugin.org.cadixdev.gradle + name: licenser + version: { ref: licenser } + testLoggerPlugin: + group: com.adarshr + name: gradle-test-logger-plugin + version: { ref: testLoggerPlugin } + errorpronePlugin: + group: net.ltgt.gradle + name: gradle-errorprone-plugin + version: { ref: errorpronePlugin } + +bundles: diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index f371643e..0f80bbf5 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/settings.gradle.kts b/settings.gradle.kts index 089d7e56..c2b57525 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -4,6 +4,11 @@ pluginManagement { maven("https://maven.fabricmc.net") maven("https://repo.jpenilla.xyz/snapshots") // todo - for run-paper snapshot } + includeBuild("build-logic") +} + +plugins { + id("ca.stellardrift.polyglot-version-catalogs") version "5.0.0" } rootProject.name = "cloud"