From 63018da798066e4497afd88e1f8d6cf0519a645b Mon Sep 17 00:00:00 2001 From: Nariman Abdullin Date: Fri, 10 Nov 2023 17:48:39 +0300 Subject: [PATCH] Fix release to maven central (#1788) - added sources for all modules - refactored creating publication for gradle plugin --- .github/workflows/diktat_snapshot.yml | 10 ++-- README.md | 4 +- build.gradle.kts | 19 +++++- diktat-cli/build.gradle.kts | 2 + diktat-gradle-plugin/build.gradle.kts | 31 +++++----- diktat-maven-plugin/build.gradle.kts | 2 + diktat-ruleset/build.gradle.kts | 2 + .../buildutils/PublishingConfiguration.kt | 59 ++++++++++--------- .../diktat/buildutils/TaskNames.kt | 10 ++++ .../buildutils/VersioningConfiguration.kt | 16 ++++- ...detekt-convention-configuration.gradle.kts | 2 +- .../kotlin-jvm-configuration.gradle.kts | 5 ++ ...ublishing-default-configuration.gradle.kts | 1 + 13 files changed, 108 insertions(+), 55 deletions(-) create mode 100644 gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/TaskNames.kt diff --git a/.github/workflows/diktat_snapshot.yml b/.github/workflows/diktat_snapshot.yml index e2143b0289..dafc6b9786 100644 --- a/.github/workflows/diktat_snapshot.yml +++ b/.github/workflows/diktat_snapshot.yml @@ -46,11 +46,6 @@ jobs: with: gradle-version: wrapper arguments: | - :diktat-api:publishToMavenLocal - :diktat-common:publishToMavenLocal - :diktat-ktlint-engine:publishToMavenLocal - :diktat-rules:publishToMavenLocal - :diktat-gradle-plugin:publishToMavenLocal :generateLibsForDiktatSnapshot -x detekt -x test @@ -59,7 +54,10 @@ jobs: - name: 'Override ' run: | mv gradle/libs.versions.toml gradle/libs.versions.toml_current - mv build/diktat-snapshot/libs.versions.toml_snapshot gradle/libs.versions.toml + mv build/diktat-snapshot/libs.versions.toml gradle/libs.versions.toml + + mv gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/diktat-convention-configuration.gradle.kts gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/diktat-convention-configuration.gradle.kts_current + mv build/diktat-snapshot/diktat-convention-configuration.gradle.kts gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/diktat-convention-configuration.gradle.kts # copied from .github/workflows/diktat.yml - uses: gradle/gradle-build-action@v2 diff --git a/README.md b/README.md index a335942094..891bb13132 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ ![Build and test](https://github.com/saveourtool/diKTat/workflows/Build%20and%20test/badge.svg?branch=master) ![deteKT static analysis](https://github.com/saveourtool/diKTat/workflows/Run%20deteKT/badge.svg) -![diKTat code style](https://github.com/saveourtool/diKTat/workflows/Run%20diKTat%20from%20release%20version/badge.svg?branch=master) +![diKTat code style](https://github.com/saveourtool/diKTat/workflows/Run%20diKTat%20%28release%29/badge.svg?branch=master) [![codecov](https://codecov.io/gh/saveourtool/diKTat/branch/master/graph/badge.svg)](https://codecov.io/gh/saveourtool/diKTat) [![Releases](https://img.shields.io/github/v/release/saveourtool/diKTat)](https://github.com/saveourtool/diKTat/releases) [![Maven Central](https://img.shields.io/maven-central/v/com.saveourtool.diktat/diktat-rules)](https://mvnrepository.com/artifact/com.saveourtool.diktat) -[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsaveourtool%2FdiKTat.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsaveourtool%2FdiKTat?ref=badge_shield) +[![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2Fsaveourtool%2Fdiktat.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2Fsaveourtool%2Fdiktat?ref=badge_shield) [![Chat on Telegram](https://img.shields.io/badge/Chat%20on-Telegram-brightgreen.svg)](https://t.me/diktat_help) [![Hits-of-Code](https://hitsofcode.com/github/saveourtool/diktat)](https://hitsofcode.com/view/github/saveourtool/diktat) diff --git a/build.gradle.kts b/build.gradle.kts index afba69b985..ba66f0b157 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -39,10 +39,13 @@ tasks.create("generateLibsForDiktatSnapshot") { rootProject.project(":diktat-rules"), rootProject.project(":diktat-gradle-plugin"), ) - mustRunAfter(dependencies.map { "${it.path}:publishToMavenLocal" }) + dependsOn(dependencies.map { "${it.path}:publishToMavenLocal" }) + val libsFile = rootProject.file("gradle/libs.versions.toml") + val diktatGradleFile = rootProject.file("gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/diktat-convention-configuration.gradle.kts") inputs.file(libsFile) + inputs.file(diktatGradleFile) inputs.files(dependencies.map { it.pomFile() }) inputs.files(dependencies.map { it.artifactFile() }) inputs.property("project-version", version.toString()) @@ -61,10 +64,22 @@ tasks.create("generateLibsForDiktatSnapshot") { } } .let { - val libsFileForDiktatSnapshot = dir.resolve("libs.versions.toml_snapshot") + val libsFileForDiktatSnapshot = dir.resolve("libs.versions.toml") Files.write(libsFileForDiktatSnapshot.toPath(), it) } + Files.readAllLines(diktatGradleFile.toPath()) + .map { line -> + when { + line.contains("com.saveourtool.diktat.diktat-gradle-plugin") -> line.replace("com.saveourtool.diktat.diktat-gradle-plugin", "com.saveourtool.diktat") + else -> line + } + } + .let { + val diktatGradleFileForDiktatSnapshot = dir.resolve("diktat-convention-configuration.gradle.kts") + Files.write(diktatGradleFileForDiktatSnapshot.toPath(), it) + } + dependencies.forEach { dependency -> val artifactDir = dir.pathToMavenArtifact(dependency) .also { it.createDirectory() } diff --git a/diktat-cli/build.gradle.kts b/diktat-cli/build.gradle.kts index b7db4f5702..f14c1004cd 100644 --- a/diktat-cli/build.gradle.kts +++ b/diktat-cli/build.gradle.kts @@ -1,3 +1,4 @@ +import com.saveourtool.diktat.buildutils.configurePublications import com.github.jengelman.gradle.plugins.shadow.ShadowExtension import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar import org.jetbrains.kotlin.incremental.createDirectory @@ -92,3 +93,4 @@ publishing { } } } +configurePublications() diff --git a/diktat-gradle-plugin/build.gradle.kts b/diktat-gradle-plugin/build.gradle.kts index e1db1fb38c..1a2e77ff1a 100644 --- a/diktat-gradle-plugin/build.gradle.kts +++ b/diktat-gradle-plugin/build.gradle.kts @@ -1,10 +1,11 @@ +import com.saveourtool.diktat.buildutils.configurePom import org.gradle.nativeplatform.platform.internal.DefaultNativePlatform.getCurrentOperatingSystem import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("com.saveourtool.diktat.buildutils.kotlin-jvm-configuration") id("com.saveourtool.diktat.buildutils.code-quality-convention") - id("com.saveourtool.diktat.buildutils.publishing-default-configuration") + id("com.saveourtool.diktat.buildutils.publishing-configuration") id("pl.droidsonroids.jacoco.testkit") version "1.0.12" id("org.gradle.test-retry") version "1.5.6" id("com.gradle.plugin-publish") version "1.2.1" @@ -38,14 +39,28 @@ tasks.withType { } gradlePlugin { + website = "https://diktat.saveourtool.com/" + vcsUrl = "https://github.com/saveourtool/diktat" plugins { create("diktatPlugin") { - id = "com.saveourtool.diktat.diktat-gradle-plugin" + id = "com.saveourtool.diktat" implementationClass = "com.saveourtool.diktat.plugin.gradle.DiktatGradlePlugin" } } } +afterEvaluate { + publishing { + publications { + withType { + pom { + configurePom(project) + } + } + } + } +} + // === testing & code coverage, jacoco is run independent from maven val functionalTestTask by tasks.register("functionalTest") tasks.withType { @@ -103,15 +118,3 @@ tasks.jacocoTestReport { xml.required.set(true) } } - -afterEvaluate { - tasks.named("javadocJar") { - enabled = false - } - tasks.named("generateMetadataFileForPluginMavenPublication") { - dependsOn(tasks.named("dokkaJar")) - } - tasks.named("generateMetadataFileForMavenPublication") { - dependsOn(tasks.named("dokkaJar")) - } -} diff --git a/diktat-maven-plugin/build.gradle.kts b/diktat-maven-plugin/build.gradle.kts index 05ace85be0..3497312994 100644 --- a/diktat-maven-plugin/build.gradle.kts +++ b/diktat-maven-plugin/build.gradle.kts @@ -1,3 +1,4 @@ +import com.saveourtool.diktat.buildutils.configurePublications import de.benediktritter.maven.plugin.development.task.GenerateHelpMojoSourcesTask import de.benediktritter.maven.plugin.development.task.GenerateMavenPluginDescriptorTask @@ -47,3 +48,4 @@ publishing { } } } +configurePublications() diff --git a/diktat-ruleset/build.gradle.kts b/diktat-ruleset/build.gradle.kts index 6f066d90bd..94bc7dc4b7 100644 --- a/diktat-ruleset/build.gradle.kts +++ b/diktat-ruleset/build.gradle.kts @@ -1,4 +1,5 @@ import com.saveourtool.diktat.buildutils.configurePom +import com.saveourtool.diktat.buildutils.configurePublications import com.github.jengelman.gradle.plugins.shadow.ShadowExtension import com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar @@ -73,3 +74,4 @@ publishing { } } } +configurePublications() diff --git a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/PublishingConfiguration.kt b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/PublishingConfiguration.kt index 321a8295de..01fa5fb7b9 100644 --- a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/PublishingConfiguration.kt +++ b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/PublishingConfiguration.kt @@ -39,7 +39,6 @@ import org.jetbrains.dokka.gradle.DokkaPlugin * Configures all aspects of the publishing process. */ fun Project.configurePublishing() { - configurePublications() apply() if (this == rootProject) { configureNexusPublishing() @@ -95,6 +94,36 @@ fun MavenPom.configurePom(project: Project) { } } +/** + * Configures all publications. The publications must already exist. + */ +@Suppress("TOO_LONG_FUNCTION") +fun Project.configurePublications() { + if (this == rootProject) { + return + } + val sourcesJar = tasks.named(SOURCES_JAR) + apply() + @Suppress("GENERIC_VARIABLE_WRONG_DECLARATION") + val dokkaJarProvider = tasks.register("dokkaJar") { + group = "documentation" + archiveClassifier.set("javadoc") + from(tasks.named("dokkaHtml")) + } + configure { + repositories { + mavenLocal() + } + publications.withType().configureEach { + artifact(sourcesJar) + artifact(dokkaJarProvider) + pom { + configurePom(project) + } + } + } +} + /** * Configures Maven Central as the publish destination. */ @@ -157,34 +186,6 @@ private fun Project.configureGitHubPublishing() { } } -/** - * Configures all publications. The publications must already exist. - */ -@Suppress("TOO_LONG_FUNCTION") -private fun Project.configurePublications() { - if (this == rootProject) { - return - } - apply() - @Suppress("GENERIC_VARIABLE_WRONG_DECLARATION") - val dokkaJarProvider = tasks.register("dokkaJar") { - group = "documentation" - archiveClassifier.set("javadoc") - from(tasks.named("dokkaHtml")) - } - configure { - repositories { - mavenLocal() - } - publications.withType().configureEach { - artifact(dokkaJarProvider) - pom { - configurePom(project) - } - } - } -} - /** * Enables signing of the artifacts if the `signingKey` project property is set. * diff --git a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/TaskNames.kt b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/TaskNames.kt new file mode 100644 index 0000000000..1eace3d788 --- /dev/null +++ b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/TaskNames.kt @@ -0,0 +1,10 @@ +/** + * Names for common tasks + */ + +package com.saveourtool.diktat.buildutils + +/** + * Tasks with sources + */ +const val SOURCES_JAR = "sourcesJar" diff --git a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/VersioningConfiguration.kt b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/VersioningConfiguration.kt index 04bc814484..b9cca001d5 100644 --- a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/VersioningConfiguration.kt +++ b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/VersioningConfiguration.kt @@ -5,6 +5,7 @@ package com.saveourtool.diktat.buildutils import org.ajoberstar.reckon.core.Scope +import org.ajoberstar.reckon.core.VersionTagParser import org.ajoberstar.reckon.gradle.ReckonExtension import org.ajoberstar.reckon.gradle.ReckonPlugin import org.eclipse.jgit.api.Git @@ -13,6 +14,7 @@ import org.eclipse.jgit.storage.file.FileRepositoryBuilder import org.gradle.api.Project import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure +import java.util.Optional /** * Configures reckon plugin for [this] project, should be applied for root project only @@ -23,7 +25,19 @@ fun Project.configureVersioning() { // should be provided in the gradle.properties configure { setDefaultInferredScope(Scope.MINOR.name) - snapshots() + if (findProperty("reckon.stage")?.toString() == "snapshot") { + snapshots() + // skip -rc candidates tags + setTagParser { tagName -> + if (tagName.contains("-rc.[0-9]+".toRegex())) { + Optional.empty() + } else { + VersionTagParser.getDefault().parse(tagName) + } + } + } else { + stages("rc", "final") + } setScopeCalc(calcScopeFromProp()) setStageCalc(calcStageFromProp()) } diff --git a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/detekt-convention-configuration.gradle.kts b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/detekt-convention-configuration.gradle.kts index b62eedc062..5052700c2e 100644 --- a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/detekt-convention-configuration.gradle.kts +++ b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/detekt-convention-configuration.gradle.kts @@ -8,7 +8,7 @@ plugins { } detekt { - config = rootProject.files("detekt-config.yml") + config.setFrom(rootProject.files("detekt-config.yml")) basePath = rootDir.canonicalPath buildUponDefaultConfig = true } diff --git a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/kotlin-jvm-configuration.gradle.kts b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/kotlin-jvm-configuration.gradle.kts index 4c9848f100..8be3c26a19 100644 --- a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/kotlin-jvm-configuration.gradle.kts +++ b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/kotlin-jvm-configuration.gradle.kts @@ -26,6 +26,11 @@ kotlin { } } +tasks.register(SOURCES_JAR) { + archiveClassifier.set("sources") + from(kotlin.sourceSets.main.map { it.kotlin }) +} + configureJacoco() tasks.withType { useJUnitPlatform() diff --git a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/publishing-default-configuration.gradle.kts b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/publishing-default-configuration.gradle.kts index 92952dc516..47c8e7773a 100644 --- a/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/publishing-default-configuration.gradle.kts +++ b/gradle/plugins/src/main/kotlin/com/saveourtool/diktat/buildutils/publishing-default-configuration.gradle.kts @@ -16,4 +16,5 @@ publishing { } } +configurePublications() configurePublishing()