From 90ee7e382cf66b67018374c8843e36a00b29efbc Mon Sep 17 00:00:00 2001 From: Abhay Sood Date: Thu, 18 Jan 2024 18:26:43 +0530 Subject: [PATCH] ci(android): setup publishing of android sdk and gradle plugin --- .github/workflows/android.yml | 69 +++++++++++++++---- measure-android/gradle.properties | 10 +++ .../measure-gradle-plugin/build.gradle.kts | 31 ++++++++- .../measure-gradle-plugin/gradle.properties | 3 + measure-android/measure/build.gradle.kts | 34 ++++++++- measure-android/sample/build.gradle.kts | 2 +- 6 files changed, 127 insertions(+), 22 deletions(-) create mode 100644 measure-android/measure-gradle-plugin/gradle.properties diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index 49786d783..475f295d6 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -9,35 +9,74 @@ on: - 'main' paths: - 'measure-android/**' + release: + types: [ published ] env: JAVA_VERSION: 17 - CACHE_VERSION: 1 + JAVA_DISTRIBUTION: 'temurin' + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} jobs: checks: - name: Checks + name: Run checks runs-on: ubuntu-latest defaults: run: working-directory: measure-android - timeout-minutes: 5 + timeout-minutes: 10 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-java@v3 with: - distribution: 'zulu' + distribution: ${{ env.JAVA_DISTRIBUTION }} java-version: ${{ env.JAVA_VERSION }} - - run: ./ci-scripts/ci_clear_gradle_cache.sh - - uses: actions/cache@v3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ env.CACHE_VERSION }}-${{ hashFiles('**/**.gradle.kts', '**/gradle/wrapper/gradle-wrapper.properties', '**/libs.versions.toml') }} - - name: Check Gradle wrapper uses: gradle/wrapper-validation-action@v1 - - name: Run all checks - run: ./gradlew :measure:check \ No newline at end of file + run: ./gradlew :measure:check + + publish-android: + runs-on: ubuntu-latest + needs: [ checks ] + if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/measure-android-') && !startsWith(github.ref, 'refs/tags/measure-android-gradle-') + defaults: + run: + working-directory: measure-android + permissions: + contents: read + packages: write + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_DISTRIBUTION }} + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: Publish measure-android + run: ./gradlew clean :measure:publish --no-daemon --no-parallel --no-configuration-cache --stacktrace + + publish-android-gradle: + runs-on: ubuntu-latest + needs: [ checks ] + if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/measure-android-gradle-') + defaults: + run: + working-directory: measure-android + permissions: + contents: read + packages: write + timeout-minutes: 10 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v3 + with: + java-version: ${{ env.JAVA_VERSION }} + distribution: ${{ env.JAVA_DISTRIBUTION }} + - name: Validate Gradle wrapper + uses: gradle/wrapper-validation-action@v1 + - name: Publish measure-android-gradle + run: ./gradlew clean :measure-gradle-plugin:publishMavenPublicationToGitHubPackagesRepository --no-daemon --no-parallel --no-configuration-cache --stacktrace \ No newline at end of file diff --git a/measure-android/gradle.properties b/measure-android/gradle.properties index 34c1de4f1..bcce86a9c 100644 --- a/measure-android/gradle.properties +++ b/measure-android/gradle.properties @@ -12,3 +12,13 @@ android.nonTransitiveRClass=true # Code Style kotlin.code.style=official + +GROUP=sh.measure +MEASURE_ARTIFACT_ID=measure-android +MEASURE_VERSION_NAME=0.1.0 + +POM_INCEPTION_YEAR=2023 +POM_URL=https://github.com/measure-sh/measure +POM_SCM_URL=https://github.com/measure-sh/measure +POM_SCM_CONNECTION=scm:git@github.com:measure-sh/measure.git +POM_SCM_DEV_CONNECTION=scm:git@github.com:measure-sh/measure.git diff --git a/measure-android/measure-gradle-plugin/build.gradle.kts b/measure-android/measure-gradle-plugin/build.gradle.kts index 7fe68bb78..0c21cd1ec 100644 --- a/measure-android/measure-gradle-plugin/build.gradle.kts +++ b/measure-android/measure-gradle-plugin/build.gradle.kts @@ -6,15 +6,16 @@ plugins { id("java-gradle-plugin") id("com.autonomousapps.testkit") version "0.8" id("com.diffplug.spotless") version "6.24.0" + id("maven-publish") } -group = "sh.measure.plugin" -version = "0.0.1" +group = properties["GROUP"] as String +version = properties["MEASURE_PLUGIN_VERSION_NAME"] as String gradlePlugin { plugins { create("plugin") { - id = "sh.measure.plugin" + id = "sh.measure.android.gradle" displayName = "Measure Gradle Plugin" description = "A gradle plugin for Measure Android SDK" implementationClass = "sh.measure.MeasurePlugin" @@ -31,6 +32,30 @@ java { withJavadocJar() } +val measureGradlePluginVersion = properties["MEASURE_PLUGIN_VERSION_NAME"] as String + + +publishing { + publications { + create("maven") { + groupId = properties["GROUP"] as String + artifactId = properties["MEASURE_PLUGIN_ARTIFACT_ID"] as String + version = measureGradlePluginVersion + } + } + + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/measure-sh/measure") + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") + } + } + } +} + dependencies { compileOnly("com.android.tools.build:gradle:8.2.1") compileOnly("org.ow2.asm:asm-util:9.6") diff --git a/measure-android/measure-gradle-plugin/gradle.properties b/measure-android/measure-gradle-plugin/gradle.properties new file mode 100644 index 000000000..aa387facf --- /dev/null +++ b/measure-android/measure-gradle-plugin/gradle.properties @@ -0,0 +1,3 @@ +GROUP=sh.measure +MEASURE_PLUGIN_ARTIFACT_ID=measure-android-gradle +MEASURE_PLUGIN_VERSION_NAME=0.1.0 \ No newline at end of file diff --git a/measure-android/measure/build.gradle.kts b/measure-android/measure/build.gradle.kts index 504dc5317..fb845870e 100644 --- a/measure-android/measure/build.gradle.kts +++ b/measure-android/measure/build.gradle.kts @@ -8,10 +8,38 @@ plugins { kotlin("plugin.serialization") id("binary-compatibility-validator") id("com.diffplug.spotless") + id("maven-publish") +} + +// apply(from = "publish_local.gradle") + +val measureSdkVersion = properties["MEASURE_VERSION_NAME"] as String + +publishing { + publications { + create("maven") { + groupId = properties["GROUP"] as String + artifactId = properties["MEASURE_ARTIFACT_ID"] as String + version = measureSdkVersion + + afterEvaluate { + from(components["release"]) + } + } + } + + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/measure-sh/measure") + credentials { + username = System.getenv("GITHUB_ACTOR") + password = System.getenv("GITHUB_TOKEN") + } + } + } } -apply(from = "publish_local.gradle") -val measureSdkVersion = "\"0.0.1-SNAPSHOT\"" android { namespace = "sh.measure.android" compileSdk = 33 @@ -26,7 +54,7 @@ android { buildTypes { defaultConfig { manifestPlaceholders["measure_url"] = properties["measure_url"]?.toString() ?: "" - buildConfigField("String", "MEASURE_SDK_VERSION", measureSdkVersion) + buildConfigField("String", "MEASURE_SDK_VERSION", "\"$measureSdkVersion\"") } release { isMinifyEnabled = false diff --git a/measure-android/sample/build.gradle.kts b/measure-android/sample/build.gradle.kts index b18866395..e992855ed 100644 --- a/measure-android/sample/build.gradle.kts +++ b/measure-android/sample/build.gradle.kts @@ -1,7 +1,7 @@ plugins { id("com.android.application") id("org.jetbrains.kotlin.android") - id("sh.measure.plugin") + id("sh.measure.android.gradle") } android {