From 13b62d06b5efe0984f522039d6dd95d200bbefab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Muller?= Date: Tue, 12 Mar 2024 18:10:19 +0100 Subject: [PATCH 1/3] Create a custom Gradle plugin to handle the publishing logic --- buildSrc/build.gradle.kts | 5 ++ .../gradle/PillarboxPublishingPlugin.kt | 54 +++++++++++++++++++ ...ssr.pillarbox.gradle.publishing.properties | 1 + pillarbox-analytics/build.gradle.kts | 37 +++---------- pillarbox-core-business/build.gradle.kts | 36 +++---------- pillarbox-player/build.gradle.kts | 36 +++---------- pillarbox-ui/build.gradle.kts | 36 +++---------- 7 files changed, 84 insertions(+), 121 deletions(-) create mode 100644 buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt create mode 100644 buildSrc/src/main/resources/META-INF/gradle-plugins/ch.srgssr.pillarbox.gradle.publishing.properties diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index 2646a996a..a2398dfdf 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -7,5 +7,10 @@ plugins { } repositories { + google() mavenCentral() } + +dependencies { + api("com.android.tools.build:gradle-api:8.3.0") +} diff --git a/buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt b/buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt new file mode 100644 index 000000000..b1e312b59 --- /dev/null +++ b/buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt @@ -0,0 +1,54 @@ +/* + * Copyright (c) SRG SSR. All rights reserved. + * License information is available from the LICENSE file. + */ +package ch.srgssr.pillarbox.gradle + +import com.android.build.api.dsl.LibraryExtension +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.get +import org.gradle.kotlin.dsl.register + +/** + * Custom Gradle plugin to manage publication of a Pillarbox's library modules. + */ +class PillarboxPublishingPlugin : Plugin { + override fun apply(target: Project) = with(target) { + pluginManager.apply("com.android.library") + pluginManager.apply("org.gradle.maven-publish") + + extensions.configure { + publishing { + singleVariant("release") { + withSourcesJar() + withJavadocJar() + } + } + } + + extensions.configure { + publications { + register("gpr") { + afterEvaluate { + from(components["release"]) + } + } + } + + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/SRGSSR/pillarbox-android") + credentials { + username = findProperty("gpr.user") as String? ?: System.getenv("USERNAME") + password = findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") + } + } + } + } + } +} diff --git a/buildSrc/src/main/resources/META-INF/gradle-plugins/ch.srgssr.pillarbox.gradle.publishing.properties b/buildSrc/src/main/resources/META-INF/gradle-plugins/ch.srgssr.pillarbox.gradle.publishing.properties new file mode 100644 index 000000000..ab5bd13e2 --- /dev/null +++ b/buildSrc/src/main/resources/META-INF/gradle-plugins/ch.srgssr.pillarbox.gradle.publishing.properties @@ -0,0 +1 @@ +implementation-class=ch.srgssr.pillarbox.gradle.PillarboxPublishingPlugin diff --git a/pillarbox-analytics/build.gradle.kts b/pillarbox-analytics/build.gradle.kts index 0d1c8fd2a..e9aa5fdd1 100644 --- a/pillarbox-analytics/build.gradle.kts +++ b/pillarbox-analytics/build.gradle.kts @@ -1,16 +1,19 @@ -import org.gradle.api.tasks.testing.logging.TestExceptionFormat - /* * Copyright (c) SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ + +import ch.srgssr.pillarbox.gradle.PillarboxPublishingPlugin +import org.gradle.api.tasks.testing.logging.TestExceptionFormat + plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlinx.kover) - `maven-publish` } +apply() + android { namespace = "ch.srgssr.pillarbox.analytics" compileSdk = AppConfig.compileSdk @@ -47,12 +50,6 @@ android { buildConfig = true resValues = false } - publishing { - singleVariant("release") { - withSourcesJar() - withJavadocJar() - } - } testOptions { unitTests { isIncludeAndroidResources = true @@ -90,25 +87,3 @@ koverReport { } } } - -publishing { - - publications { - register("gpr") { - afterEvaluate { - from(components["release"]) - } - } - } - repositories { - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/SRGSSR/pillarbox-android") - credentials { - username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME") - password = - project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") - } - } - } -} diff --git a/pillarbox-core-business/build.gradle.kts b/pillarbox-core-business/build.gradle.kts index c306ae3ee..3528b64f3 100644 --- a/pillarbox-core-business/build.gradle.kts +++ b/pillarbox-core-business/build.gradle.kts @@ -1,17 +1,20 @@ -import org.gradle.api.tasks.testing.logging.TestExceptionFormat - /* * Copyright (c) SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ + +import ch.srgssr.pillarbox.gradle.PillarboxPublishingPlugin +import org.gradle.api.tasks.testing.logging.TestExceptionFormat + plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.kotlinx.kover) - `maven-publish` } +apply() + android { namespace = "ch.srgssr.pillarbox.core.business" compileSdk = AppConfig.compileSdk @@ -42,12 +45,6 @@ android { buildConfig = true resValues = false } - publishing { - singleVariant("release") { - withSourcesJar() - withJavadocJar() - } - } testOptions { unitTests { isIncludeAndroidResources = true @@ -108,24 +105,3 @@ koverReport { } } } - -publishing { - publications { - register("gpr") { - afterEvaluate { - from(components["release"]) - } - } - } - repositories { - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/SRGSSR/pillarbox-android") - credentials { - username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME") - password = - project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") - } - } - } -} diff --git a/pillarbox-player/build.gradle.kts b/pillarbox-player/build.gradle.kts index 539edc6da..3861d3090 100644 --- a/pillarbox-player/build.gradle.kts +++ b/pillarbox-player/build.gradle.kts @@ -1,16 +1,19 @@ -import org.gradle.api.tasks.testing.logging.TestExceptionFormat - /* * Copyright (c) SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ + +import ch.srgssr.pillarbox.gradle.PillarboxPublishingPlugin +import org.gradle.api.tasks.testing.logging.TestExceptionFormat + plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlinx.kover) - `maven-publish` } +apply() + android { namespace = "ch.srgssr.pillarbox.player" compileSdk = AppConfig.compileSdk @@ -44,12 +47,6 @@ android { buildConfig = true resValues = false } - publishing { - singleVariant("release") { - withSourcesJar() - withJavadocJar() - } - } // Mockk includes some licenses information, which may conflict with other license files. This block merges all licenses together. // Mockk excludes all licenses instead: @@ -118,24 +115,3 @@ koverReport { } } } - -publishing { - publications { - register("gpr") { - afterEvaluate { - from(components["release"]) - } - } - } - repositories { - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/SRGSSR/pillarbox-android") - credentials { - username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME") - password = - project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") - } - } - } -} diff --git a/pillarbox-ui/build.gradle.kts b/pillarbox-ui/build.gradle.kts index ef0b34450..eeb9ec925 100644 --- a/pillarbox-ui/build.gradle.kts +++ b/pillarbox-ui/build.gradle.kts @@ -1,16 +1,19 @@ -import org.gradle.api.tasks.testing.logging.TestExceptionFormat - /* * Copyright (c) SRG SSR. All rights reserved. * License information is available from the LICENSE file. */ + +import ch.srgssr.pillarbox.gradle.PillarboxPublishingPlugin +import org.gradle.api.tasks.testing.logging.TestExceptionFormat + plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) alias(libs.plugins.kotlinx.kover) - `maven-publish` } +apply() + android { namespace = "ch.srgssr.pillarbox.ui" compileSdk = AppConfig.compileSdk @@ -44,12 +47,6 @@ android { composeOptions { kotlinCompilerExtensionVersion = libs.versions.androidx.compose.compiler.get() } - publishing { - singleVariant("release") { - withSourcesJar() - withJavadocJar() - } - } } tasks.withType().configureEach { @@ -90,24 +87,3 @@ koverReport { } } } - -publishing { - publications { - register("gpr") { - afterEvaluate { - from(components["release"]) - } - } - } - repositories { - maven { - name = "GitHubPackages" - url = uri("https://maven.pkg.github.com/SRGSSR/pillarbox-android") - credentials { - username = project.findProperty("gpr.user") as String? ?: System.getenv("USERNAME") - password = - project.findProperty("gpr.key") as String? ?: System.getenv("GITHUB_TOKEN") - } - } - } -} From 176767e6ca47aa4b899adbd1fa02257f862d0d41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Muller?= Date: Tue, 12 Mar 2024 18:18:24 +0100 Subject: [PATCH 2/3] Use Gradle Version Catalog in `buildSrc` --- buildSrc/build.gradle.kts | 7 +------ buildSrc/settings.gradle.kts | 19 +++++++++++++++++++ gradle/libs.versions.toml | 1 + 3 files changed, 21 insertions(+), 6 deletions(-) create mode 100644 buildSrc/settings.gradle.kts diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts index a2398dfdf..fdb41beda 100644 --- a/buildSrc/build.gradle.kts +++ b/buildSrc/build.gradle.kts @@ -6,11 +6,6 @@ plugins { `kotlin-dsl` } -repositories { - google() - mavenCentral() -} - dependencies { - api("com.android.tools.build:gradle-api:8.3.0") + api(libs.android.gradle.api) } diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 000000000..fc0b70257 --- /dev/null +++ b/buildSrc/settings.gradle.kts @@ -0,0 +1,19 @@ +/* + * Copyright (c) SRG SSR. All rights reserved. + * License information is available from the LICENSE file. + */ + +dependencyResolutionManagement { + repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS + + repositories { + google() + mavenCentral() + } + + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 6d10b72e9..dddd66d6b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -41,6 +41,7 @@ turbine = "1.0.0" [libraries] accompanist-navigation-material = { module = "com.google.accompanist:accompanist-navigation-material", version.ref = "accompanist" } +android-gradle-api = { module = "com.android.tools.build:gradle-api", version.ref = "android-gradle-plugin" } androidx-activity = { module = "androidx.activity:activity", version.ref = "androidx-activity" } androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidx-activity" } androidx-activity-ktx = { module = "androidx.activity:activity-ktx", version.ref = "androidx-activity" } From d491c18521b187dc9710f7345465005be065ab75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ga=C3=ABtan=20Muller?= Date: Tue, 12 Mar 2024 19:49:19 +0100 Subject: [PATCH 3/3] Move module's `group` and `version` to the plugin --- buildSrc/src/main/java/VersionConfig.kt | 5 ----- .../ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt | 6 ++++++ pillarbox-analytics/build.gradle.kts | 2 -- pillarbox-core-business/build.gradle.kts | 2 -- pillarbox-player/build.gradle.kts | 2 -- pillarbox-ui/build.gradle.kts | 2 -- 6 files changed, 6 insertions(+), 13 deletions(-) diff --git a/buildSrc/src/main/java/VersionConfig.kt b/buildSrc/src/main/java/VersionConfig.kt index eda02fa56..12f4cff57 100644 --- a/buildSrc/src/main/java/VersionConfig.kt +++ b/buildSrc/src/main/java/VersionConfig.kt @@ -21,11 +21,6 @@ object VersionConfig { private val ENV_VERSION_NAME: String? = System.getenv("VERSION_NAME") private val versionOnlyRegex = "[0-9]+.[0-9].[0-9]".toRegex() - /** - * Maven artifact group - */ - const val GROUP = "ch.srgssr.pillarbox" - /** * Version name * diff --git a/buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt b/buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt index b1e312b59..843d656b3 100644 --- a/buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt +++ b/buildSrc/src/main/java/ch/srgssr/pillarbox/gradle/PillarboxPublishingPlugin.kt @@ -4,6 +4,7 @@ */ package ch.srgssr.pillarbox.gradle +import VersionConfig import com.android.build.api.dsl.LibraryExtension import org.gradle.api.Plugin import org.gradle.api.Project @@ -22,6 +23,11 @@ class PillarboxPublishingPlugin : Plugin { pluginManager.apply("org.gradle.maven-publish") extensions.configure { + defaultConfig { + group = "ch.srgssr.pillarbox" + version = VersionConfig.versionName() + } + publishing { singleVariant("release") { withSourcesJar() diff --git a/pillarbox-analytics/build.gradle.kts b/pillarbox-analytics/build.gradle.kts index e9aa5fdd1..53870b958 100644 --- a/pillarbox-analytics/build.gradle.kts +++ b/pillarbox-analytics/build.gradle.kts @@ -20,8 +20,6 @@ android { defaultConfig { minSdk = AppConfig.minSdk - version = VersionConfig.versionName() - group = VersionConfig.GROUP buildConfigField("String", "BUILD_DATE", "\"${AppConfig.getBuildDate()}\"") buildConfigField("String", "VERSION_NAME", "\"${version}\"") diff --git a/pillarbox-core-business/build.gradle.kts b/pillarbox-core-business/build.gradle.kts index 3528b64f3..faeb3243e 100644 --- a/pillarbox-core-business/build.gradle.kts +++ b/pillarbox-core-business/build.gradle.kts @@ -21,8 +21,6 @@ android { defaultConfig { minSdk = AppConfig.minSdk - version = VersionConfig.versionName() - group = VersionConfig.GROUP testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles("consumer-rules.pro") diff --git a/pillarbox-player/build.gradle.kts b/pillarbox-player/build.gradle.kts index 3861d3090..38472f71b 100644 --- a/pillarbox-player/build.gradle.kts +++ b/pillarbox-player/build.gradle.kts @@ -20,8 +20,6 @@ android { defaultConfig { minSdk = AppConfig.minSdk - version = VersionConfig.versionName() - group = VersionConfig.GROUP testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFile("consumer-rules.pro") diff --git a/pillarbox-ui/build.gradle.kts b/pillarbox-ui/build.gradle.kts index eeb9ec925..95b1574ef 100644 --- a/pillarbox-ui/build.gradle.kts +++ b/pillarbox-ui/build.gradle.kts @@ -20,8 +20,6 @@ android { defaultConfig { minSdk = AppConfig.minSdk - version = VersionConfig.versionName() - group = VersionConfig.GROUP testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" consumerProguardFile("consumer-rules.pro")