From 780598d6fa55877b42ef55b515579ce7d64ed935 Mon Sep 17 00:00:00 2001 From: Him188 Date: Tue, 22 Sep 2020 18:56:27 +0800 Subject: [PATCH] Add mirai-core-all --- .github/workflows/bintray.yml | 2 + build.gradle.kts | 6 +- buildSrc/build.gradle.kts | 2 + buildSrc/src/main/kotlin/PublishingHelpers.kt | 164 ++++++++++++++++++ buildSrc/src/main/kotlin/Versions.kt | 2 +- mirai-core-all/build.gradle.kts | 60 +++++++ mirai-core-qqandroid/build.gradle.kts | 2 +- mirai-core/build.gradle.kts | 2 +- mirai-serialization/build.gradle.kts | 2 +- settings.gradle | 1 + 10 files changed, 237 insertions(+), 6 deletions(-) create mode 100644 buildSrc/src/main/kotlin/PublishingHelpers.kt create mode 100644 mirai-core-all/build.gradle.kts diff --git a/.github/workflows/bintray.yml b/.github/workflows/bintray.yml index 83072f5d7..ecc228e03 100644 --- a/.github/workflows/bintray.yml +++ b/.github/workflows/bintray.yml @@ -32,6 +32,8 @@ jobs: run: ./gradlew :mirai-core:publish -Dbintray_user=${{ secrets.BINTRAY_USER }} -Pbintray_user=${{ secrets.BINTRAY_USER }} -Dbintray_key=${{ secrets.BINTRAY_KEY }} -Pbintray_key=${{ secrets.BINTRAY_KEY }} - name: Gradle :mirai-core-qqandroid:publish run: ./gradlew :mirai-core-qqandroid:publish -Dbintray_user=${{ secrets.BINTRAY_USER }} -Pbintray_user=${{ secrets.BINTRAY_USER }} -Dbintray_key=${{ secrets.BINTRAY_KEY }} -Pbintray_key=${{ secrets.BINTRAY_KEY }} + - name: Gradle :mirai-core-all:publish + run: ./gradlew :mirai-core-all:publish -Dbintray_user=${{ secrets.BINTRAY_USER }} -Pbintray_user=${{ secrets.BINTRAY_USER }} -Dbintray_key=${{ secrets.BINTRAY_KEY }} -Pbintray_key=${{ secrets.BINTRAY_KEY }} # - name: Upload artifact # uses: actions/upload-artifact@v1.0.0 diff --git a/build.gradle.kts b/build.gradle.kts index 40cdeda81..ec482f51e 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,7 +17,6 @@ buildscript { } dependencies { - classpath("com.github.jengelman.gradle.plugins:shadow:6.0.0") classpath("com.android.tools.build:gradle:${Versions.Android.androidGradlePlugin}") classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.Kotlin.compiler}") classpath("org.jetbrains.kotlin:kotlin-serialization:${Versions.Kotlin.compiler}") @@ -29,7 +28,7 @@ buildscript { plugins { id("org.jetbrains.dokka") version Versions.Kotlin.dokka apply false id("net.mamoe.kotlin-jvm-blocking-bridge") version Versions.blockingBridge apply false - // id("com.jfrog.bintray") version Versions.Publishing.bintray apply false + id("com.jfrog.bintray") version Versions.Publishing.bintray } // https://github.com/kotlin/binary-compatibility-validator @@ -77,6 +76,9 @@ subprojects { } afterEvaluate { + if (name == "mirai-core-all") { + return@afterEvaluate + } apply(plugin = "com.github.johnrengelman.shadow") val kotlin = diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 1eec74a84..4d9233c82 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -25,4 +25,6 @@ dependencies { api(ktor("client-core", "1.3.2")) api(ktor("client-cio", "1.3.2")) api(ktor("client-json", "1.3.2")) + compileOnly("com.jfrog.bintray.gradle:gradle-bintray-plugin:1.8.5") + api("com.github.jengelman.gradle.plugins:shadow:6.0.0") } \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/PublishingHelpers.kt b/buildSrc/src/main/kotlin/PublishingHelpers.kt new file mode 100644 index 000000000..884eab575 --- /dev/null +++ b/buildSrc/src/main/kotlin/PublishingHelpers.kt @@ -0,0 +1,164 @@ +@file:Suppress("INVISIBLE_MEMBER", "INVISIBLE_REFERENCE", "NOTHING_TO_INLINE", "RemoveRedundantBackticks") + +import com.github.jengelman.gradle.plugins.shadow.ShadowPlugin +import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar +import org.gradle.api.Project +import org.gradle.api.Task +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.api.tasks.TaskContainer +import org.gradle.api.tasks.bundling.Jar +import org.gradle.kotlin.dsl.* +import upload.Bintray +import java.io.File +import java.util.* +import kotlin.reflect.KProperty + +/* + * Copyright 2019-2020 Mamoe Technologies and contributors. + * + * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证. + * Use of this source code is governed by the GNU AFFERO GENERAL PUBLIC LICENSE version 3 license that can be found via the following link. + * + * https://github.com/mamoe/mirai/blob/master/LICENSE + */ + +/** + * Configures the [bintray][com.jfrog.bintray.gradle.BintrayExtension] extension. + */ +@PublishedApi +internal fun org.gradle.api.Project.`bintray`(configure: com.jfrog.bintray.gradle.BintrayExtension.() -> Unit): Unit = + (this as org.gradle.api.plugins.ExtensionAware).extensions.configure("bintray", configure) + +@PublishedApi +internal operator fun RegisteringDomainObjectDelegateProviderWithTypeAndAction.provideDelegate( + receiver: Any?, + property: KProperty<*> +) = ExistingDomainObjectDelegate.of( + delegateProvider.register(property.name, type.java, action) +) + +@PublishedApi +internal val org.gradle.api.Project.`sourceSets`: org.gradle.api.tasks.SourceSetContainer + get() = + (this as org.gradle.api.plugins.ExtensionAware).extensions.getByName("sourceSets") as org.gradle.api.tasks.SourceSetContainer + +@PublishedApi +internal operator fun ExistingDomainObjectDelegate.getValue(receiver: Any?, property: KProperty<*>): T = + delegate + +/** + * Configures the [publishing][org.gradle.api.publish.PublishingExtension] extension. + */ +@PublishedApi +internal fun org.gradle.api.Project.`publishing`(configure: org.gradle.api.publish.PublishingExtension.() -> Unit): Unit = + (this as org.gradle.api.plugins.ExtensionAware).extensions.configure("publishing", configure) + + +inline fun Project.setupPublishing( + artifactId: String, + bintrayRepo: String = "mirai", + bintrayPkgName: String = artifactId, + addPrefixAll: Boolean = true, + vcs: String = "https://github.com/mamoe/mirai" +) { + + tasks.register("ensureBintrayAvailable") { + doLast { + if (!Bintray.isBintrayAvailable(project)) { + error("bintray isn't available. ") + } + } + } + apply() + + // afterEvaluate { + + val shadowJar = tasks.filterIsInstance().firstOrNull() ?: return//@afterEvaluate + + tasks.register("shadowJarMd5") { + dependsOn(shadowJar) + + val outFiles = shadowJar.outputs.files.associateWith { file -> + File(file.parentFile, file.name.removeSuffix(".jar").removeSuffix("-all") + "-all.jar.md5") + } + + outFiles.forEach { (_, output) -> + output.createNewFile() + outputs.files(output) + } + + doLast { + for ((origin, output) in outFiles) { + output + .writeText(origin.inputStream().md5().toUHexString().trim(Char::isWhitespace)) + } + } + + tasks.getByName("publish").dependsOn(this) + tasks.getByName("bintrayUpload").dependsOn(this) + } + + if (Bintray.isBintrayAvailable(project)) { + bintray { + val keyProps = Properties() + val keyFile = file("../keys.properties") + if (keyFile.exists()) keyFile.inputStream().use { keyProps.load(it) } + if (keyFile.exists()) keyFile.inputStream().use { keyProps.load(it) } + + user = Bintray.getUser(project) + key = Bintray.getKey(project) + setPublications("mavenJava") + setConfigurations("archives") + + pkg.apply { + repo = bintrayRepo + name = bintrayPkgName + setLicenses("AGPLv3") + publicDownloadNumbers = true + vcsUrl = vcs + } + } + + @Suppress("DEPRECATION") + val sourcesJar by tasks.registering(Jar::class) { + classifier = "sources" + from(sourceSets["main"].allSource) + } + + publishing { + /* + repositories { + maven { + // change to point to your repo, e.g. http://my.org/repo + url = uri("$buildDir/repo") + } + }*/ + publications { + register("mavenJava", MavenPublication::class) { + from(components["java"]) + afterEvaluate { + for (file in tasks.getByName("shadowJarMd5").outputs.files) { + artifact(provider { file }) + } + } + + groupId = rootProject.group.toString() + this.artifactId = artifactId + version = version + + pom.withXml { + val root = asNode() + root.appendNode("description", description) + root.appendNode("name", project.name) + root.appendNode("url", vcs) + root.children().last() + } + + artifact(sourcesJar.get()) + } + } + } + } else println("bintray isn't available. NO PUBLICATIONS WILL BE SET") + //} + +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt index 94e04c8d8..4c41aa563 100644 --- a/buildSrc/src/main/kotlin/Versions.kt +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -9,7 +9,7 @@ object Versions { object Mirai { - const val version = "1.3.2-dev-5" + const val version = "1.3.1" } object Kotlin { diff --git a/mirai-core-all/build.gradle.kts b/mirai-core-all/build.gradle.kts new file mode 100644 index 000000000..d5d00c41a --- /dev/null +++ b/mirai-core-all/build.gradle.kts @@ -0,0 +1,60 @@ +@file:Suppress("UnusedImport") + +plugins { + kotlin("jvm") + kotlin("plugin.serialization") + id("java") + `maven-publish` + id("com.jfrog.bintray") + id("net.mamoe.kotlin-jvm-blocking-bridge") +} + +version = Versions.Mirai.version +description = "Mirai core shadowed" + +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +tasks.withType(JavaCompile::class.java) { + options.encoding = "UTF8" +} + +kotlin { + explicitApiWarning() + + sourceSets.all { + target.compilations.all { + kotlinOptions { + jvmTarget = "1.8" + freeCompilerArgs = freeCompilerArgs + "-Xjvm-default=all" + //useIR = true + } + } + languageSettings.apply { + enableLanguageFeature("InlineClasses") + progressiveMode = true + + useExperimentalAnnotation("kotlin.Experimental") + useExperimentalAnnotation("kotlin.RequiresOptIn") + + useExperimentalAnnotation("net.mamoe.mirai.utils.MiraiInternalAPI") + useExperimentalAnnotation("net.mamoe.mirai.utils.MiraiExperimentalAPI") + useExperimentalAnnotation("net.mamoe.mirai.console.ConsoleFrontEndImplementation") + useExperimentalAnnotation("net.mamoe.mirai.console.util.ConsoleExperimentalApi") + useExperimentalAnnotation("kotlin.ExperimentalUnsignedTypes") + useExperimentalAnnotation("kotlin.experimental.ExperimentalTypeInference") + useExperimentalAnnotation("kotlin.contracts.ExperimentalContracts") + useExperimentalAnnotation("kotlinx.serialization.ExperimentalSerializationApi") + useExperimentalAnnotation("net.mamoe.mirai.console.util.ConsoleInternalApi") + } + } +} + +dependencies { + api(project(":mirai-core")) + api(project(":mirai-core-qqandroid")) +} + +setupPublishing("mirai-core-all") \ No newline at end of file diff --git a/mirai-core-qqandroid/build.gradle.kts b/mirai-core-qqandroid/build.gradle.kts index 637b3e190..4dd5ade6f 100644 --- a/mirai-core-qqandroid/build.gradle.kts +++ b/mirai-core-qqandroid/build.gradle.kts @@ -6,7 +6,7 @@ plugins { kotlin("plugin.serialization") id("net.mamoe.kotlin-jvm-blocking-bridge") `maven-publish` - id("com.jfrog.bintray") version Versions.Publishing.bintray + id("com.jfrog.bintray") } description = "Mirai Protocol implementation for QQ Android" diff --git a/mirai-core/build.gradle.kts b/mirai-core/build.gradle.kts index 7efa4d7e7..a27495b7a 100644 --- a/mirai-core/build.gradle.kts +++ b/mirai-core/build.gradle.kts @@ -7,7 +7,7 @@ plugins { id("signing") id("net.mamoe.kotlin-jvm-blocking-bridge") `maven-publish` - id("com.jfrog.bintray") version Versions.Publishing.bintray + id("com.jfrog.bintray") } description = "Mirai API module" diff --git a/mirai-serialization/build.gradle.kts b/mirai-serialization/build.gradle.kts index 753965ff0..d7c28a645 100644 --- a/mirai-serialization/build.gradle.kts +++ b/mirai-serialization/build.gradle.kts @@ -6,7 +6,7 @@ plugins { kotlin("plugin.serialization") id("signing") `maven-publish` - id("com.jfrog.bintray") version Versions.Publishing.bintray + id("com.jfrog.bintray") } description = "Mirai serialization module" diff --git a/settings.gradle b/settings.gradle index 139daf674..2745d3c68 100644 --- a/settings.gradle +++ b/settings.gradle @@ -26,6 +26,7 @@ rootProject.name = 'mirai' include(':mirai-core') include(':mirai-core-qqandroid') include(':mirai-serialization') +include(':mirai-core-all') include(':java-test') //include(':compatibility-validator') // THIS WILL CAUSE A DEPENDENCY RESOLUTION BUG