From 7a2caf6f5dd59fcd69302b96e365b1ba89d23b51 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 13 Mar 2024 15:34:58 +0100 Subject: [PATCH] Proper publishing setup (#17) * Attempt at fixing published artifact * wohoo it works * attempt at excluding bootstrap's shadow jar from publishing * Update gradle, fix publishing (aka, dont publish shadowed bootstrap build to maven) * Don't apply shadow plugin for the converter * why are we publishing the lib as an artifact...? * make these implementation * Shade bedrock-pack-schema into pack-schema-api --- .github/workflows/build.yml | 8 --- bootstrap/build.gradle.kts | 17 +++--- build-logic/build.gradle.kts | 12 +++++ build-logic/settings.gradle.kts | 1 + .../kotlin/pack.base-conventions.gradle.kts | 5 ++ .../pack.publish-conventions.gradle.kts | 25 +++++++++ build.gradle.kts | 54 ++----------------- converter/build.gradle.kts | 31 ++++++----- gradle/wrapper/gradle-wrapper.properties | 2 +- pack-schema/api/build.gradle.kts | 11 +++- settings.gradle.kts | 21 +++++++- 11 files changed, 108 insertions(+), 79 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/pack.base-conventions.gradle.kts create mode 100644 build-logic/src/main/kotlin/pack.publish-conventions.gradle.kts diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac888e5..b43363d 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -47,14 +47,6 @@ jobs: path: bootstrap/build/libs/PackConverter.jar if-no-files-found: error - - name: Archive artifacts (Converter) - uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 - if: success() - with: - name: PackConverter Library - path: converter/build/libs/PackConverter-lib.jar - if-no-files-found: error - - name: Publish to Maven Repository if: ${{ success() && github.repository == 'GeyserMC/PackConverter' && github.ref_name == 'master' }} uses: gradle/actions/setup-gradle@417ae3ccd767c252f5661f1ace9f835f9654f2b5 diff --git a/bootstrap/build.gradle.kts b/bootstrap/build.gradle.kts index 55e0ea9..1f0590f 100644 --- a/bootstrap/build.gradle.kts +++ b/bootstrap/build.gradle.kts @@ -1,5 +1,15 @@ plugins { - id("application") + `java-library` + application + id("com.github.johnrengelman.shadow") apply true +} + +sourceSets { + main { + resources { + srcDir("src/main/java/resources") + } + } } dependencies { @@ -11,10 +21,5 @@ application { } tasks.withType { - from("src/main/java/resources") { - include("*") - } - archiveFileName.set("PackConverter.jar") - archiveClassifier.set("") } \ No newline at end of file diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 0000000..4d2ad0b --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,12 @@ +plugins { + `kotlin-dsl` +} + +dependencies { + implementation("com.github.johnrengelman:shadow:8.1.1") +} + +repositories { + gradlePluginPortal() + mavenCentral() +} \ No newline at end of file diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 0000000..30499ad --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1 @@ +rootProject.name = "build-logic" \ No newline at end of file diff --git a/build-logic/src/main/kotlin/pack.base-conventions.gradle.kts b/build-logic/src/main/kotlin/pack.base-conventions.gradle.kts new file mode 100644 index 0000000..df8e1d1 --- /dev/null +++ b/build-logic/src/main/kotlin/pack.base-conventions.gradle.kts @@ -0,0 +1,5 @@ +import org.gradle.kotlin.dsl.`java-library` + +plugins { + `java-library` +} \ No newline at end of file diff --git a/build-logic/src/main/kotlin/pack.publish-conventions.gradle.kts b/build-logic/src/main/kotlin/pack.publish-conventions.gradle.kts new file mode 100644 index 0000000..60c3e34 --- /dev/null +++ b/build-logic/src/main/kotlin/pack.publish-conventions.gradle.kts @@ -0,0 +1,25 @@ +plugins { + `maven-publish` apply true + id("com.github.johnrengelman.shadow") apply false +} + +publishing { + repositories { + val repoName = if (version.toString().endsWith("SNAPSHOT")) "maven-snapshots" else "maven-releases" + maven("https://repo.opencollab.dev/${repoName}/") { + credentials.username = System.getenv("OPENCOLLAB_USERNAME") + credentials.password = System.getenv("OPENCOLLAB_PASSWORD") + name = "opencollab" + } + } + + publications { + register("publish", MavenPublication::class) { + from(project.components["java"]) + + // skip shadow jar from publishing. Workaround for https://github.com/johnrengelman/shadow/issues/651 + val javaComponent = project.components["java"] as AdhocComponentWithVariants + javaComponent.withVariantsFromConfiguration(configurations["shadowRuntimeElements"]) { skip() } + } + } +} \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index bfe42a6..30dc978 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,57 +1,13 @@ plugins { - id("java") - id("java-library") - id("maven-publish") - id("com.github.johnrengelman.shadow") version "7.1.0" - id("io.freefair.lombok") version "6.3.0" apply false + id("pack.base-conventions") } -allprojects { - apply(plugin = "java") - apply(plugin = "java-library") - apply(plugin = "maven-publish") - apply(plugin = "com.github.johnrengelman.shadow") - apply(plugin = "io.freefair.lombok") - - repositories { - mavenLocal() - mavenCentral() - - gradlePluginPortal() - - // Geyser, Floodgate, Cumulus etc. - maven("https://repo.opencollab.dev/main") - maven("https://repo.opencollab.dev/maven-snapshots") - - // Java pack library - maven("https://repo.unnamed.team/repository/unnamed-public/") - } - +subprojects{ + plugins.apply("pack.base-conventions") + plugins.apply("pack.publish-conventions") group = "org.geysermc.pack" - version = "3.0-SNAPSHOT" + version = "3.1-SNAPSHOT" java.sourceCompatibility = JavaVersion.VERSION_17 java.targetCompatibility = JavaVersion.VERSION_17 - - tasks.jar { - archiveClassifier.set("unshaded") - } - - tasks.named("build") { - dependsOn(tasks.shadowJar) - } - - publishing { - publications.create("library") { - artifact(tasks.shadowJar) - } - val repoName = if (version.toString().endsWith("SNAPSHOT")) "maven-snapshots" else "maven-releases" - repositories { - maven("https://repo.opencollab.dev/${repoName}/") { - credentials.username = System.getenv("OPENCOLLAB_USERNAME") - credentials.password = System.getenv("OPENCOLLAB_PASSWORD") - name = "opencollab" - } - } - } } \ No newline at end of file diff --git a/converter/build.gradle.kts b/converter/build.gradle.kts index 2171a7e..9ae1497 100644 --- a/converter/build.gradle.kts +++ b/converter/build.gradle.kts @@ -1,24 +1,31 @@ +plugins { + id("io.freefair.lombok") version "8.6" +} + +sourceSets { + main { + resources { + srcDir("src/main/java/resources") + } + } +} + dependencies { api(project(":pack-schema-api")) implementation("com.google.code.gson:gson:2.10.1") implementation("commons-io:commons-io:2.11.0") implementation("com.twelvemonkeys.imageio:imageio-tga:3.9.4") implementation("com.nukkitx.fastutil:fastutil-int-object-maps:8.5.3") - implementation("net.kyori:adventure-api:4.14.0") - implementation("net.kyori:adventure-text-serializer-gson:4.14.0") - implementation("net.kyori:adventure-text-serializer-legacy:4.14.0") - implementation("team.unnamed:creative-api:1.7.0") - implementation("team.unnamed:creative-serializer-minecraft:1.7.0") + api("net.kyori:adventure-api:4.14.0") + api("net.kyori:adventure-text-serializer-gson:4.14.0") + api("net.kyori:adventure-text-serializer-legacy:4.14.0") + api("team.unnamed:creative-api:1.7.0") + api("team.unnamed:creative-serializer-minecraft:1.7.0") compileOnly("com.google.auto.service:auto-service:1.0.1") annotationProcessor("com.google.auto.service:auto-service:1.0.1") } -tasks.withType { - from("src/main/java/resources") { - include("*") - } - - archiveFileName.set("PackConverter-lib.jar") - archiveClassifier.set("") +java { + withSourcesJar() } \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index ae04661..17655d0 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.5.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.6-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/pack-schema/api/build.gradle.kts b/pack-schema/api/build.gradle.kts index eb465fb..5adcc27 100644 --- a/pack-schema/api/build.gradle.kts +++ b/pack-schema/api/build.gradle.kts @@ -1,5 +1,12 @@ dependencies { - api(project(":bedrock-pack-schema")) + compileOnlyApi(project(":bedrock-pack-schema")) // Available on compile, but not runtime classpath - we shade it in task below implementation("com.google.code.gson:gson:2.10.1") implementation("org.jetbrains:annotations:24.0.1") -} \ No newline at end of file +} + +val bedrockPackSchemaSourceSet = project(":bedrock-pack-schema").sourceSets.getByName("main") + +tasks.jar { + from(bedrockPackSchemaSourceSet.output) + duplicatesStrategy = DuplicatesStrategy.WARN +} diff --git a/settings.gradle.kts b/settings.gradle.kts index debb943..c6d5a3d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,5 @@ +@file:Suppress("UnstableApiUsage") + rootProject.name = "packconverter-parent" include(":bootstrap") @@ -9,4 +11,21 @@ include(":schema-generator") project(":pack-schema-api").projectDir = file("pack-schema/api") project(":bedrock-pack-schema").projectDir = file("pack-schema/bedrock") -project(":schema-generator").projectDir = file("pack-schema/generator") \ No newline at end of file +project(":schema-generator").projectDir = file("pack-schema/generator") + +pluginManagement { + includeBuild("build-logic") +} + +dependencyResolutionManagement { + repositories { + mavenCentral() + + // Geyser, Floodgate, Cumulus etc. + maven("https://repo.opencollab.dev/main") + maven("https://repo.opencollab.dev/maven-snapshots") + + // Java pack library + maven("https://repo.unnamed.team/repository/unnamed-public/") + } +} \ No newline at end of file