From 7e0c73bbc1c557dc780634dce141ebee31117bc8 Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Sun, 27 Mar 2022 10:32:34 +0200 Subject: [PATCH 1/9] inject version at build time --- common/build.gradle.kts | 26 +++++++++++++++++++++++++ common/src/main/kotlin/KordConstants.kt | 11 ++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 224e2c809cc4..695a89847ebc 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -2,6 +2,9 @@ plugins { `kord-module` `kord-sampled-module` `kord-publishing` + + // see https://github.com/gmazzo/gradle-buildconfig-plugin + id("com.github.gmazzo.buildconfig") version "3.0.3" } dependencies { @@ -11,3 +14,26 @@ dependencies { testImplementation(libs.bundles.test.implementation) testRuntimeOnly(libs.bundles.test.runtime) } + +/* +This will generate a file named "BuildConfigGenerated.kt" that looks like: + +package dev.kord.common + +internal const val BUILD_CONFIG_GENERATED_LIBRARY_VERSION: String = "" +*/ +buildConfig { + packageName("dev.kord.common") + className("BuildConfigGenerated") + + useKotlinOutput { + topLevelConstants = true + internalVisibility = true + } + + buildConfigField( + type = "String", + name = "BUILD_CONFIG_GENERATED_LIBRARY_VERSION", + value = "\"${Library.version}\"", + ) +} diff --git a/common/src/main/kotlin/KordConstants.kt b/common/src/main/kotlin/KordConstants.kt index 1225606e8a8d..f9ad6079c373 100644 --- a/common/src/main/kotlin/KordConstants.kt +++ b/common/src/main/kotlin/KordConstants.kt @@ -1,7 +1,16 @@ +// No const vals, they are inlined, so recompiling would be required when values change. +@file:Suppress("MayBeConstant") + package dev.kord.common public object KordConstants { + /** Kord's version. */ + public val KORD_VERSION: String = BUILD_CONFIG_GENERATED_LIBRARY_VERSION + + /** URL for Kord's GitHub repository. */ + public val KORD_GITHUB_URL: String = "https://github.com/kordlib/kord" + /** Kord's value for the [User Agent header](https://discord.com/developers/docs/reference#user-agent). */ - public const val USER_AGENT: String = "DiscordBot (https://github.com/kordlib/kord, 0.8.0-M12)" + public val USER_AGENT: String = "DiscordBot ($KORD_GITHUB_URL, $KORD_VERSION)" } From 99774070cf1e3730010ec94955a6511c2f9f326c Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Sun, 27 Mar 2022 10:55:59 +0200 Subject: [PATCH 2/9] fix CI with mavenCentral()? --- common/build.gradle.kts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 695a89847ebc..087b3fb27b7d 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -7,6 +7,10 @@ plugins { id("com.github.gmazzo.buildconfig") version "3.0.3" } +repositories { + mavenCentral() +} + dependencies { api(libs.kotlinx.datetime) From 533ab860b4efb698ce59fcab0be74376756730f9 Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Sun, 27 Mar 2022 11:07:32 +0200 Subject: [PATCH 3/9] fix CI with gradlePluginPortal()? --- common/build.gradle.kts | 1 + 1 file changed, 1 insertion(+) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 087b3fb27b7d..d7b49168847c 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -8,6 +8,7 @@ plugins { } repositories { + gradlePluginPortal() mavenCentral() } From ec2362202c5b827f99ddb3b5dfebd0d7aade2935 Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Sun, 27 Mar 2022 11:18:47 +0200 Subject: [PATCH 4/9] fix CI with mavenCentral() for buildscript? --- common/build.gradle.kts | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index d7b49168847c..08a71c849370 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -1,3 +1,9 @@ +buildscript { + repositories { + mavenCentral() + } +} + plugins { `kord-module` `kord-sampled-module` @@ -7,11 +13,6 @@ plugins { id("com.github.gmazzo.buildconfig") version "3.0.3" } -repositories { - gradlePluginPortal() - mavenCentral() -} - dependencies { api(libs.kotlinx.datetime) From 85270e9c1f59709535b9a2cf93ccb85214357fb9 Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Sun, 27 Mar 2022 15:56:10 +0200 Subject: [PATCH 5/9] inject commit hash --- buildSrc/src/main/kotlin/Projects.kt | 17 +++++++++++++++-- common/build.gradle.kts | 8 +++----- common/src/main/kotlin/KordConstants.kt | 2 ++ 3 files changed, 20 insertions(+), 7 deletions(-) diff --git a/buildSrc/src/main/kotlin/Projects.kt b/buildSrc/src/main/kotlin/Projects.kt index b0ca1077170a..c640154702d9 100644 --- a/buildSrc/src/main/kotlin/Projects.kt +++ b/buildSrc/src/main/kotlin/Projects.kt @@ -1,11 +1,24 @@ -import org.gradle.kotlin.dsl.DependencyHandlerScope -import org.gradle.kotlin.dsl.project +import org.gradle.api.Project +import java.io.ByteArrayOutputStream /** * whether the process has been invoked by JitPack */ val isJitPack get() = "true" == System.getenv("JITPACK") +val Project.commitHash: String + get() = try { + ByteArrayOutputStream().use { out -> + exec { + commandLine("git", "rev-parse", "--short", "HEAD") + standardOutput = out + } + out.toString().trim() + } + } catch (e: Throwable) { + System.getenv("GITHUB_SHA") ?: "unknown" + } + object Library { const val name = "kord" const val group = "dev.kord" diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 08a71c849370..3d25f9729e6b 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -27,6 +27,7 @@ This will generate a file named "BuildConfigGenerated.kt" that looks like: package dev.kord.common internal const val BUILD_CONFIG_GENERATED_LIBRARY_VERSION: String = "" +internal const val BUILD_CONFIG_GENERATED_COMMIT_HASH: String = "" */ buildConfig { packageName("dev.kord.common") @@ -37,9 +38,6 @@ buildConfig { internalVisibility = true } - buildConfigField( - type = "String", - name = "BUILD_CONFIG_GENERATED_LIBRARY_VERSION", - value = "\"${Library.version}\"", - ) + buildConfigField(type = "String", name = "BUILD_CONFIG_GENERATED_LIBRARY_VERSION", value = "\"${Library.version}\"") + buildConfigField(type = "String", name = "BUILD_CONFIG_GENERATED_COMMIT_HASH", value = "\"$commitHash\"") } diff --git a/common/src/main/kotlin/KordConstants.kt b/common/src/main/kotlin/KordConstants.kt index f9ad6079c373..cf9f74e3db11 100644 --- a/common/src/main/kotlin/KordConstants.kt +++ b/common/src/main/kotlin/KordConstants.kt @@ -8,6 +8,8 @@ public object KordConstants { /** Kord's version. */ public val KORD_VERSION: String = BUILD_CONFIG_GENERATED_LIBRARY_VERSION + public val KORD_COMMIT_HASH: String = BUILD_CONFIG_GENERATED_COMMIT_HASH + /** URL for Kord's GitHub repository. */ public val KORD_GITHUB_URL: String = "https://github.com/kordlib/kord" From 953e96adb3f37eb55856a355ba4b06189e499baf Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Sun, 27 Mar 2022 16:45:29 +0200 Subject: [PATCH 6/9] documentation for KORD_COMMIT_HASH --- common/src/main/kotlin/KordConstants.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/common/src/main/kotlin/KordConstants.kt b/common/src/main/kotlin/KordConstants.kt index cf9f74e3db11..3db612863cf8 100644 --- a/common/src/main/kotlin/KordConstants.kt +++ b/common/src/main/kotlin/KordConstants.kt @@ -8,6 +8,7 @@ public object KordConstants { /** Kord's version. */ public val KORD_VERSION: String = BUILD_CONFIG_GENERATED_LIBRARY_VERSION + /** The hash of the commit from which this Kord version was built. */ public val KORD_COMMIT_HASH: String = BUILD_CONFIG_GENERATED_COMMIT_HASH /** URL for Kord's GitHub repository. */ From 0c8b70ddd2b80ef5da172c4ce2320dfd9ab053e1 Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Wed, 30 Mar 2022 23:08:20 +0200 Subject: [PATCH 7/9] compute short commit hash in github actions --- .github/workflows/deployment-ci.yml | 3 +++ buildSrc/src/main/kotlin/Projects.kt | 21 +++++---------------- common/build.gradle.kts | 6 ++++-- common/src/main/kotlin/KordConstants.kt | 3 +++ 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/.github/workflows/deployment-ci.yml b/.github/workflows/deployment-ci.yml index ab61425fda68..518a0aeb8cff 100644 --- a/.github/workflows/deployment-ci.yml +++ b/.github/workflows/deployment-ci.yml @@ -31,6 +31,9 @@ jobs: with: java-version: 8 + - name: Set SHORT_SHA environment variable to short commit hash + run: echo "SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV + - name: Build with Gradle uses: gradle/gradle-build-action@v2 with: diff --git a/buildSrc/src/main/kotlin/Projects.kt b/buildSrc/src/main/kotlin/Projects.kt index c640154702d9..2d54101ab39a 100644 --- a/buildSrc/src/main/kotlin/Projects.kt +++ b/buildSrc/src/main/kotlin/Projects.kt @@ -1,24 +1,8 @@ -import org.gradle.api.Project -import java.io.ByteArrayOutputStream - /** * whether the process has been invoked by JitPack */ val isJitPack get() = "true" == System.getenv("JITPACK") -val Project.commitHash: String - get() = try { - ByteArrayOutputStream().use { out -> - exec { - commandLine("git", "rev-parse", "--short", "HEAD") - standardOutput = out - } - out.toString().trim() - } - } catch (e: Throwable) { - System.getenv("GITHUB_SHA") ?: "unknown" - } - object Library { const val name = "kord" const val group = "dev.kord" @@ -36,6 +20,11 @@ object Library { } + val commitHash get() = System.getenv("GITHUB_SHA") ?: "unknown" + + // this environment variable isn't available out of the box, we set it ourselves + val shortCommitHash get() = System.getenv("SHORT_SHA") ?: "unknown" + const val description = "Idiomatic Kotlin Wrapper for The Discord API" const val projectUrl = "https://github.com/kordlib/kord" diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 3d25f9729e6b..7e6e78d98c15 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -28,6 +28,7 @@ package dev.kord.common internal const val BUILD_CONFIG_GENERATED_LIBRARY_VERSION: String = "" internal const val BUILD_CONFIG_GENERATED_COMMIT_HASH: String = "" +internal const val BUILD_CONFIG_GENERATED_SHORT_COMMIT_HASH: String = "" */ buildConfig { packageName("dev.kord.common") @@ -38,6 +39,7 @@ buildConfig { internalVisibility = true } - buildConfigField(type = "String", name = "BUILD_CONFIG_GENERATED_LIBRARY_VERSION", value = "\"${Library.version}\"") - buildConfigField(type = "String", name = "BUILD_CONFIG_GENERATED_COMMIT_HASH", value = "\"$commitHash\"") + buildConfigField("String", "BUILD_CONFIG_GENERATED_LIBRARY_VERSION", "\"${Library.version}\"") + buildConfigField("String", "BUILD_CONFIG_GENERATED_COMMIT_HASH", "\"${Library.commitHash}\"") + buildConfigField("String", "BUILD_CONFIG_GENERATED_SHORT_COMMIT_HASH", "\"${Library.shortCommitHash}\"") } diff --git a/common/src/main/kotlin/KordConstants.kt b/common/src/main/kotlin/KordConstants.kt index 3db612863cf8..b085c70fd20e 100644 --- a/common/src/main/kotlin/KordConstants.kt +++ b/common/src/main/kotlin/KordConstants.kt @@ -11,6 +11,9 @@ public object KordConstants { /** The hash of the commit from which this Kord version was built. */ public val KORD_COMMIT_HASH: String = BUILD_CONFIG_GENERATED_COMMIT_HASH + /** Short variant of [KORD_COMMIT_HASH]. */ + public val KORD_SHORT_COMMIT_HASH: String = BUILD_CONFIG_GENERATED_SHORT_COMMIT_HASH + /** URL for Kord's GitHub repository. */ public val KORD_GITHUB_URL: String = "https://github.com/kordlib/kord" From 411c5f5e9ed19ffc42236325c730d78b674e5aea Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Wed, 30 Mar 2022 23:28:08 +0200 Subject: [PATCH 8/9] set short sha in release job --- .github/workflows/deployment-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/deployment-ci.yml b/.github/workflows/deployment-ci.yml index 518a0aeb8cff..dbc2accb0501 100644 --- a/.github/workflows/deployment-ci.yml +++ b/.github/workflows/deployment-ci.yml @@ -68,6 +68,9 @@ jobs: with: java-version: 8 + - name: Set SHORT_SHA environment variable to short commit hash + run: echo "SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV + - name: Build with Gradle uses: gradle/gradle-build-action@v2 with: From dcd2f50490efa37ec15ae9168788e5bb8d849b27 Mon Sep 17 00:00:00 2001 From: Lukellmann Date: Thu, 31 Mar 2022 18:34:31 +0200 Subject: [PATCH 9/9] experimental annotations --- common/src/main/kotlin/KordConstants.kt | 8 ++++++++ core/src/main/kotlin/builder/kord/KordBuilder.kt | 2 ++ rest/src/main/kotlin/service/RestService.kt | 2 ++ 3 files changed, 12 insertions(+) diff --git a/common/src/main/kotlin/KordConstants.kt b/common/src/main/kotlin/KordConstants.kt index b085c70fd20e..02659dc904ed 100644 --- a/common/src/main/kotlin/KordConstants.kt +++ b/common/src/main/kotlin/KordConstants.kt @@ -3,20 +3,28 @@ package dev.kord.common +import dev.kord.common.annotation.KordExperimental + +@KordExperimental public object KordConstants { /** Kord's version. */ + @KordExperimental public val KORD_VERSION: String = BUILD_CONFIG_GENERATED_LIBRARY_VERSION /** The hash of the commit from which this Kord version was built. */ + @KordExperimental public val KORD_COMMIT_HASH: String = BUILD_CONFIG_GENERATED_COMMIT_HASH /** Short variant of [KORD_COMMIT_HASH]. */ + @KordExperimental public val KORD_SHORT_COMMIT_HASH: String = BUILD_CONFIG_GENERATED_SHORT_COMMIT_HASH /** URL for Kord's GitHub repository. */ + @KordExperimental public val KORD_GITHUB_URL: String = "https://github.com/kordlib/kord" /** Kord's value for the [User Agent header](https://discord.com/developers/docs/reference#user-agent). */ + @KordExperimental public val USER_AGENT: String = "DiscordBot ($KORD_GITHUB_URL, $KORD_VERSION)" } diff --git a/core/src/main/kotlin/builder/kord/KordBuilder.kt b/core/src/main/kotlin/builder/kord/KordBuilder.kt index b1fa60ea42ef..1d73450fc667 100644 --- a/core/src/main/kotlin/builder/kord/KordBuilder.kt +++ b/core/src/main/kotlin/builder/kord/KordBuilder.kt @@ -2,6 +2,7 @@ package dev.kord.core.builder.kord import dev.kord.cache.api.DataCache import dev.kord.common.KordConstants +import dev.kord.common.annotation.KordExperimental import dev.kord.common.entity.Snowflake import dev.kord.common.ratelimit.BucketRateLimiter import dev.kord.core.ClientResources @@ -195,6 +196,7 @@ public class KordBuilder(public val token: String) { */ private suspend fun HttpClient.getGatewayInfo(): BotGatewayResponse { val response = get("${Route.baseUrl}${Route.GatewayBotGet.path}") { + @OptIn(KordExperimental::class) header(UserAgent, KordConstants.USER_AGENT) header(Authorization, "Bot $token") } diff --git a/rest/src/main/kotlin/service/RestService.kt b/rest/src/main/kotlin/service/RestService.kt index 5905f8b30006..1a68da2e7bda 100644 --- a/rest/src/main/kotlin/service/RestService.kt +++ b/rest/src/main/kotlin/service/RestService.kt @@ -1,6 +1,7 @@ package dev.kord.rest.service import dev.kord.common.KordConstants +import dev.kord.common.annotation.KordExperimental import dev.kord.rest.request.RequestBuilder import dev.kord.rest.request.RequestHandler import dev.kord.rest.route.Route @@ -19,6 +20,7 @@ public abstract class RestService(@PublishedApi internal val requestHandler: Req val request = RequestBuilder(route) .apply(builder) .apply { + @OptIn(KordExperimental::class) unencodedHeader(UserAgent, KordConstants.USER_AGENT) if (route.requiresAuthorizationHeader) { unencodedHeader(Authorization, "Bot ${requestHandler.token}")