diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 0dc741a0e..36e937cf3 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -1,9 +1,8 @@ name: Publish package on: - release: - types: [published] - workflow_dispatch: + push: + tags: [ 'v*.*.*' ] env: MAVEN_CENTRAL_USERNAME: ${{ secrets.OSSRH_USERNAME }} @@ -16,7 +15,6 @@ jobs: runs-on: ubuntu-latest permissions: contents: read - packages: write steps: - name: Checkout Application Repository uses: actions/checkout@v4 @@ -33,7 +31,7 @@ jobs: uses: gradle/actions/setup-gradle@v4 - name: Publish to Maven Central - run: ./gradlew publishAndReleaseToMavenCentral --no-daemon --stacktrace --no-configuration-cache + run: ./gradlew publishAndReleaseToMavenCentral -Pversion=${{ github.ref_name }} --no-daemon --stacktrace --no-configuration-cache env: USERNAME: ${{ github.actor }} TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/build-logic/conventions/src/main/kotlin/InventoryFrameworkExtension.kt b/build-logic/conventions/src/main/kotlin/Extension.kt similarity index 77% rename from build-logic/conventions/src/main/kotlin/InventoryFrameworkExtension.kt rename to build-logic/conventions/src/main/kotlin/Extension.kt index fb1076f2f..d0032aa8a 100644 --- a/build-logic/conventions/src/main/kotlin/InventoryFrameworkExtension.kt +++ b/build-logic/conventions/src/main/kotlin/Extension.kt @@ -6,4 +6,6 @@ import javax.inject.Inject abstract class InventoryFrameworkExtension @Inject constructor(objects: ObjectFactory) { val publish: Property = objects.property().convention(false) + + val generateVersionFile: Property = objects.property().convention(false) } \ No newline at end of file diff --git a/build-logic/conventions/src/main/kotlin/GenerateVersionFileTask.kt b/build-logic/conventions/src/main/kotlin/GenerateVersionFileTask.kt new file mode 100644 index 000000000..e2a907e5f --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/GenerateVersionFileTask.kt @@ -0,0 +1,61 @@ +import org.gradle.api.DefaultTask +import org.gradle.api.Project +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.register +import java.io.File + +internal abstract class GenerateVersionFileTask : DefaultTask() { + + init { + group = "inventoryFramework" + } + + @get:Input + abstract val version: Property + + @get:OutputDirectory + abstract val outputDir: DirectoryProperty + + @TaskAction + fun generate() { + val packageDir = outputDir.get().dir("me/devnatan/inventoryframework/runtime").asFile + packageDir.mkdirs() + + val file = File(packageDir, "InventoryFramework.java") + file.writeText( + """ + package me.devnatan.inventoryframework.runtime; + + import org.bukkit.plugin.java.JavaPlugin; + + public final class InventoryFramework extends JavaPlugin { + + public static final String LIBRARY_VERSION = "${version.get()}"; + } + + """.trimIndent() + ) + } +} + +internal fun Project.registerGenerateVersionFileTask() { + val generateVersionFileTask = tasks.register("generateVersionFile") { + version.set(project.version.toString()) + outputDir.set(layout.buildDirectory.dir("generated/sources/ifversion")) + } + + extensions.configure("sourceSets") { + named("main") { + java.srcDir(generateVersionFileTask.flatMap { it.outputDir }) + } + } + + tasks.named("compileJava") { + dependsOn(generateVersionFileTask) + } +} \ No newline at end of file diff --git a/build-logic/conventions/src/main/kotlin/LibraryConventionPlugin.kt b/build-logic/conventions/src/main/kotlin/LibraryConventionPlugin.kt index 9bc688963..628851975 100644 --- a/build-logic/conventions/src/main/kotlin/LibraryConventionPlugin.kt +++ b/build-logic/conventions/src/main/kotlin/LibraryConventionPlugin.kt @@ -11,7 +11,7 @@ import org.gradle.kotlin.dsl.create import org.gradle.kotlin.dsl.getByType import org.gradle.kotlin.dsl.withType -class LibraryConventionPlugin : Plugin { +internal class LibraryConventionPlugin : Plugin { override fun apply(target: Project) = with(target) { group = rootProject.group @@ -23,8 +23,10 @@ class LibraryConventionPlugin : Plugin { val extension = project.extensions.create("inventoryFramework") project.afterEvaluate { + if (extension.generateVersionFile.get()) + registerGenerateVersionFileTask() + if (extension.publish.get()) { - plugins.apply("com.vanniktech.maven.publish.base") configureInventoryFrameworkPublication() } } @@ -50,6 +52,7 @@ class LibraryConventionPlugin : Plugin { java { removeUnusedImports() palantirJavaFormat() + targetExclude("build/generated/sources/ifversion/**/*.java") } kotlin { ktfmt().kotlinlangStyle() diff --git a/build-logic/conventions/src/main/kotlin/Publish.kt b/build-logic/conventions/src/main/kotlin/Publish.kt index a2dcc8f17..c4318dfa5 100644 --- a/build-logic/conventions/src/main/kotlin/Publish.kt +++ b/build-logic/conventions/src/main/kotlin/Publish.kt @@ -3,7 +3,9 @@ import com.vanniktech.maven.publish.SonatypeHost import org.gradle.api.Project import org.gradle.kotlin.dsl.configure -fun Project.configureInventoryFrameworkPublication() { +internal fun Project.configureInventoryFrameworkPublication() { + plugins.apply("com.vanniktech.maven.publish.base") + extensions.configure { publishToMavenCentral(SonatypeHost.CENTRAL_PORTAL) signAllPublications() diff --git a/build.gradle.kts b/build.gradle.kts index 551a7f46b..8a049f55e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,4 +5,20 @@ plugins { } group = "me.devnatan" -version = "3.3.0" \ No newline at end of file +version = property("version") + .toString() + .takeUnless { it == "unspecified" } + ?.filterNot { it == 'v' } ?: nextGitTag() + +@Suppress("UnstableApiUsage") +fun Project.nextGitTag(): String { + val latestTag = providers.exec { + commandLine("git", "describe", "--tags", "--abbrev=0") + }.standardOutput.asText.get().trim() + + val versionParts = latestTag.removePrefix("v").split(".") + val major = versionParts.getOrNull(0)?.toIntOrNull() ?: 0 + val minor = versionParts.getOrNull(1)?.toIntOrNull() ?: 0 + + return "$major.${minor + 1}.0-SNAPSHOT" +} \ No newline at end of file diff --git a/inventory-framework-platform-bukkit/build.gradle.kts b/inventory-framework-platform-bukkit/build.gradle.kts index b3ebb6d80..611ada158 100644 --- a/inventory-framework-platform-bukkit/build.gradle.kts +++ b/inventory-framework-platform-bukkit/build.gradle.kts @@ -1,6 +1,3 @@ -import com.vanniktech.maven.publish.JavaLibrary -import com.vanniktech.maven.publish.JavadocJar - plugins { id("me.devnatan.inventoryframework.library") alias(libs.plugins.shadowjar) @@ -9,6 +6,7 @@ plugins { inventoryFramework { publish = true + generateVersionFile = true } dependencies { diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/ViewFrame.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/ViewFrame.java index b4d98dc89..5c853e406 100644 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/ViewFrame.java +++ b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/ViewFrame.java @@ -13,6 +13,7 @@ import me.devnatan.inventoryframework.feature.FeatureInstaller; import me.devnatan.inventoryframework.internal.BukkitElementFactory; import me.devnatan.inventoryframework.internal.PlatformUtils; +import me.devnatan.inventoryframework.runtime.InventoryFramework; import me.devnatan.inventoryframework.runtime.thirdparty.Metrics; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; @@ -25,7 +26,7 @@ public class ViewFrame extends IFViewFrame { private static final String BSTATS_SYSTEM_PROP = "inventory-framework.enable-bstats"; private static final int BSTATS_PROJECT_ID = 15518; - private static final String PLUGIN_FQN = "me.devnatan.inventoryframework.runtime.InventoryFramework"; + private static final String PLUGIN_FQN = InventoryFramework.class.getName(); private static final String RELOCATION_MESSAGE = "Inventory Framework is running as a shaded non-relocated library. It's extremely recommended that " diff --git a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/runtime/InventoryFramework.java b/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/runtime/InventoryFramework.java deleted file mode 100644 index 8b12dd6ef..000000000 --- a/inventory-framework-platform-bukkit/src/main/java/me/devnatan/inventoryframework/runtime/InventoryFramework.java +++ /dev/null @@ -1,8 +0,0 @@ -package me.devnatan.inventoryframework.runtime; - -import org.bukkit.plugin.java.JavaPlugin; - -public final class InventoryFramework extends JavaPlugin { - - public static final String LIBRARY_VERSION = String.join(".", "3", "3", "0"); -} diff --git a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/ViewFrame.kt b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/ViewFrame.kt index e0c9018ac..7d97aac41 100644 --- a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/ViewFrame.kt +++ b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/ViewFrame.kt @@ -270,15 +270,6 @@ class ViewFrame private constructor( companion object { private const val BSTATS_SYSTEM_PROP = "inventory-framework.enable-bstats" - private const val BSTATS_PROJECT_ID = 15518 - private const val PLUGIN_FQN = "me.devnatan.inventoryframework.runtime.InventoryFramework" - - private const val RELOCATION_MESSAGE = - ( - "Inventory Framework is running as a shaded non-relocated library. It's extremely recommended that " + - "you relocate the library package. Learn more about on docs: " + - "https://github.com/DevNatan/inventory-framework/wiki/Installation#preventing-library-conflicts" - ) init { PlatformUtils.setFactory(MinestomElementFactory()) diff --git a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt index c06c2b327..9d5f6bed5 100644 --- a/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt +++ b/inventory-framework-platform-minestom/src/main/kotlin/me/devnatan/inventoryframework/pipeline/GlobalClickInterceptor.kt @@ -20,8 +20,7 @@ class GlobalClickInterceptor : PipelineInterceptor { // inherit cancellation so we can un-cancel it subject.isCancelled = - event.isCancelled || - subject.config.isOptionSet(ViewConfig.CANCEL_ON_CLICK, true) + event.isCancelled || subject.config.isOptionSet(ViewConfig.CANCEL_ON_CLICK, true) subject.root.onClick(subject) } }