JvmPublishing.kt 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. /*
  2. * Copyright 2019-2023 Mamoe Technologies and contributors.
  3. *
  4. * 此源代码的使用受 GNU AFFERO GENERAL PUBLIC LICENSE version 3 许可证的约束, 可以在以下链接找到该许可证.
  5. * Use of this source code is governed by the GNU AGPLv3 license that can be found through the following link.
  6. *
  7. * https://github.com/mamoe/mirai/blob/dev/LICENSE
  8. */
  9. @file:Suppress(
  10. "NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS",
  11. "RECEIVER_NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS"
  12. )
  13. import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar
  14. import keys.SecretKeys
  15. import org.gradle.api.Project
  16. import org.gradle.api.publish.maven.MavenPublication
  17. import org.gradle.api.tasks.bundling.Jar
  18. import org.gradle.kotlin.dsl.get
  19. import org.gradle.kotlin.dsl.getByName
  20. import org.gradle.kotlin.dsl.register
  21. import java.io.File
  22. fun Project.configureRemoteRepos() {
  23. tasks.register("ensureMavenCentralAvailable") {
  24. doLast {
  25. val keys = SecretKeys.getCache(project)
  26. if (!keys.loadKey("sonatype").isValid) {
  27. error("Maven Central isn't available.")
  28. }
  29. }
  30. }
  31. publishing {
  32. // sonatype
  33. val keys = SecretKeys.getCache(project)
  34. repositories {
  35. maven {
  36. name = "MiraiStageRepo"
  37. val stageRepoLoc = getLocalProperty("publishing.stage-repo")?.let(::File)
  38. ?.takeIf { it.exists() }
  39. ?: rootProject.file("ci-release-helper/stage-repo")
  40. url = stageRepoLoc.also { it.mkdirs() }.toURI()
  41. }
  42. if (System.getenv("MIRAI_IS_SNAPSHOTS_PUBLISHING")?.toBoolean() == true) {
  43. maven {
  44. name = "MiraiRepo"
  45. setUrl(System.getenv("SNAPSHOTS_PUBLISHING_URL"))
  46. credentials {
  47. username = System.getenv("SNAPSHOTS_PUBLISHING_USER")
  48. password = System.getenv("SNAPSHOTS_PUBLISHING_KEY")
  49. }
  50. }
  51. }
  52. val sonatype = keys.loadKey("sonatype")
  53. if (sonatype.isValid) {
  54. maven {
  55. name = "MavenCentral"
  56. // Maven Central
  57. setUrl("https://oss.sonatype.org/service/local/staging/deploy/maven2")
  58. credentials {
  59. username = sonatype.user
  60. password = sonatype.password
  61. }
  62. }
  63. } else {
  64. println("SonaType is not available")
  65. }
  66. }
  67. }
  68. }
  69. @Suppress("NOTHING_TO_INLINE")
  70. inline fun Project.configurePublishing(
  71. artifactId: String,
  72. vcs: String = "https://github.com/mamoe/mirai",
  73. addProjectComponents: Boolean = true,
  74. skipPublicationSetup: Boolean = false,
  75. addShadowJar: Boolean = true
  76. ) {
  77. configureRemoteRepos()
  78. if (skipPublicationSetup) return
  79. val shadowJar = if (!addProjectComponents || !addShadowJar) null else tasks.register<ShadowJar>("shadowJar") {
  80. archiveClassifier.set("all")
  81. manifest.inheritFrom(tasks.getByName<Jar>("jar").manifest)
  82. from(project.sourceSets["main"].output)
  83. configurations =
  84. listOfNotNull(project.configurations.findByName("runtimeClasspath") ?: project.configurations["runtime"])
  85. exclude("META-INF/INDEX.LIST", "META-INF/*.SF", "META-INF/*.DSA", "META-INF/*.RSA", "module-info.class")
  86. }
  87. val sourcesJar = if (!addProjectComponents) null else tasks.register<Jar>("sourcesJar") {
  88. archiveClassifier.set("sources")
  89. from(sourceSets["main"].allSource)
  90. }
  91. val stubJavadoc = if (!addProjectComponents) null else tasks.register<Jar>("javadocJar") {
  92. @Suppress("NULLABILITY_MISMATCH_BASED_ON_JAVA_ANNOTATIONS")
  93. archiveClassifier.set("javadoc")
  94. }
  95. publishing {
  96. publications {
  97. register("mavenJava", MavenPublication::class) {
  98. if (addProjectComponents) from(components["java"])
  99. groupId = rootProject.group.toString()
  100. setArtifactId(artifactId)
  101. version = project.version.toString()
  102. setupPom(
  103. project = project,
  104. vcs = vcs
  105. )
  106. sourcesJar?.let { artifact(it) }
  107. stubJavadoc?.get()?.let { artifact(it) }
  108. shadowJar?.get()?.let { artifact(it) }
  109. }
  110. }
  111. }
  112. }