diff --git a/.gitignore b/.gitignore index bef914f..317aa53 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ # Build /local.properties -/.kotlin/ -/.gradle/ +**/.kotlin/ +**/.gradle/ **/build/ **/.cxx/ **/.externalNativeBuild/ diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts new file mode 100644 index 0000000..8a13a9c --- /dev/null +++ b/build-logic/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + `kotlin-dsl` +} + +dependencies { + compileOnly(libs.aliucord.gradle) +} + +gradlePlugin { + plugins { + create("aliucord-plugins-repo") { + id = "com.aliucord.plugins-repo" + implementationClass = "com.aliucord.gradle.repo.RepoPlugin" + } + } +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 0000000..6222145 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,18 @@ +@file:Suppress("UnstableApiUsage") + +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven { + name = "aliucord" + url = uri("https://maven.aliucord.com/releases") + } + } + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} diff --git a/build-logic/src/main/kotlin/com/aliucord/gradle/repo/Authors.kt b/build-logic/src/main/kotlin/com/aliucord/gradle/repo/Authors.kt new file mode 100644 index 0000000..0aa5c5e --- /dev/null +++ b/build-logic/src/main/kotlin/com/aliucord/gradle/repo/Authors.kt @@ -0,0 +1,60 @@ +package com.aliucord.gradle.repo + +import com.aliucord.gradle.AliucordExtension + +/** + * A list of all currently known authors, used in the plugin buildscripts + * to specify plugin authors. Add yourself to this list rather than duplicating + * your author information in each separate plugin. + * + * Entries are not required to use standard Kotlin naming conventions. + * + * Example usage from a plugin's `build.gradle.kts`: + * ```kotlin + * import com.aliucord.gradle.Authors + * import com.aliucord.gradle.author + * + * plugins { + * id("com.aliucord.plugins-repo") + * } + * + * version = "..." + * description = "..." + * + * aliucord { + * author(Authors.xyz) + * + * // ... + * } + * ``` + */ +@Suppress("SpellCheckingInspection", "unused", "RedundantSuppression") +object Authors { + val Aliucord = Author(name = "Aliucord") +} + +/** + * Represents a plugin author. + * + * @param name The user-facing name to display + * @param id The Discord ID of the author, optional. + * This also will allow Aliucord to show a badge on your profile if the plugin is installed. + * @param hyperlink Whether to hyperlink the Discord profile specified by [id]. + * Set this to false if you don't want to be spammed for support. + */ +data class Author( + val name: String, + val id: Long = 0L, + val hyperlink: Boolean = true, +) + +/** + * Specifies an already-known author of this plugin. + */ +fun AliucordExtension.author(author: Author) { + author( + name = author.name, + id = author.id, + hyperlink = author.hyperlink, + ) +} diff --git a/build-logic/src/main/kotlin/com/aliucord/gradle/repo/RepoPlugin.kt b/build-logic/src/main/kotlin/com/aliucord/gradle/repo/RepoPlugin.kt new file mode 100644 index 0000000..5559475 --- /dev/null +++ b/build-logic/src/main/kotlin/com/aliucord/gradle/repo/RepoPlugin.kt @@ -0,0 +1,13 @@ +package com.aliucord.gradle.repo + +import org.gradle.api.Plugin +import org.gradle.api.Project + +/** + * A dummy Gradle plugin applied to Aliucord plugin buildscripts. + * ID: `com.aliucord.plugins-repo` + */ +@Suppress("unused") +class RepoPlugin : Plugin { + override fun apply(target: Project) {} +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 95a23e0..5f8a5a0 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -12,6 +12,7 @@ ktlint-plugin = "14.2.0" [libraries] aliucord = { module = "com.aliucord:Aliucord", version.ref = "aliucord" } +aliucord-gradle = { module = "com.aliucord:gradle", version.ref = "aliucord-gradle" } discord = { module = "com.discord:discord", version.ref = "discord" } kotlin-stdlib = { module = "org.jetbrains.kotlin:kotlin-stdlib", version.ref = "kotlin-stdlib" } diff --git a/plugins/Template/build.gradle.kts b/plugins/Template/build.gradle.kts index 2db33b6..90fcd54 100644 --- a/plugins/Template/build.gradle.kts +++ b/plugins/Template/build.gradle.kts @@ -1,7 +1,16 @@ +import com.aliucord.gradle.repo.Authors +import com.aliucord.gradle.repo.author + +plugins { + id("com.aliucord.plugins-repo") +} + version = "1.0.0" description = "Template plugin" aliucord { + author(Authors.Aliucord) + changelog.set( """ # 1.0.0 diff --git a/settings.gradle.kts b/settings.gradle.kts index 362035f..20aae36 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,7 @@ @file:Suppress("UnstableApiUsage") pluginManagement { + includeBuild("build-logic") repositories { google() gradlePluginPortal()