From 9cc93096387abb719f004492bc7805ac699e707e Mon Sep 17 00:00:00 2001 From: Marc Vale Date: Tue, 28 Oct 2025 11:20:23 +0100 Subject: [PATCH] Add initial publishing --- .github/workflows/build.yml | 76 ++++++---------------- build.gradle.kts | 36 ++++++++++ buildSrc/src/main/kotlin/BuildConstants.kt | 1 + buildSrc/src/main/kotlin/Publish.kt | 61 +++++++++++++++++ gradle/libs.versions.toml | 2 + markymark/build.gradle.kts | 14 ++++ settings.gradle.kts | 24 +++++++ 7 files changed, 158 insertions(+), 56 deletions(-) create mode 100644 buildSrc/src/main/kotlin/Publish.kt diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index b165774..e36260e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -1,68 +1,32 @@ name: 'Build' on: - pull_request: push: branches: - '**develop' - - 'master' - 'release/**' + - 'master' + pull_request: permissions: contents: write jobs: - build: - concurrency: - group: build-${{ github.ref }} - cancel-in-progress: true - runs-on: ubuntu-latest - steps: - - name: 'Checkout' - uses: actions/checkout@v4 - - - name: 'Setup JDK' - uses: actions/setup-java@v4 - with: - java-version: 17 - distribution: temurin - - - name: 'Setup Android SDK' - uses: android-actions/setup-android@v3 - - - name: 'Setup Gradle' - uses: gradle/actions/setup-gradle@v4 - with: - dependency-graph: generate-and-submit - - - name: 'Configure Gradle Properties' - run: echo 'org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=2g -XX:+HeapDumpOnOutOfMemoryError' >> gradle.properties - - - name: 'Assemble' - run: ./gradlew assembleDebug - - - name: 'Detekt' - run: ./gradlew detektDebug - - - name: 'Upload Detekt Report Artifacts' - uses: actions/upload-artifact@v4 - with: - name: 'Detekt Results' - path: | - **/build/reports/detekt/*.md - - - name: 'Android Lint' - run: ./gradlew lintDebug - - - name: 'Upload Lint Report Artifacts' - uses: actions/upload-artifact@v4 - with: - name: 'Lint Results' - path: | - **/build/reports/lint/*.html - - - uses: yutailang0119/action-android-lint@v4 - with: - report-path: | - **/build/reports/lint/*.xml - continue-on-error: false + pipeline: + uses: move-android/ams-actions/.github/workflows/build.yml@master + secrets: + artifactory-url: ${{ vars.ARTIFACTORY_URL }} + artifactory-username: ${{ secrets.ARTIFACTORY_USERNAME }} + artifactory-password: ${{ secrets.ARTIFACTORY_PASSWORD }} + debug-keystore: ${{ secrets.DEBUG_KEYSTORE }} + release-keystore: ${{ secrets.RELEASE_KEYSTORE }} + github-token: ${{ secrets.READ_GITHUB_PACKAGE_TOKEN }} + sonar-token: ${{ secrets.SONAR_TOKEN }} + sonar-url: ${{ vars.SONAR_HOST_URL }} + app-distribution-account: ${{ secrets.APP_DISTRIBUTION_ACCOUNT }} + slack-bot-token: ${{ secrets.SLACK_BOT_TOKEN }} + private-repo-ssh-key: ${{ secrets.PRIVATE_REPO_SSH_KEY }} + with: + java-version: 17 + use-larger-runner: true + setup-init-file: true diff --git a/build.gradle.kts b/build.gradle.kts index d4509be..d46ac22 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,3 +1,5 @@ +import com.m2mobi.m2ci.extension.model.BuildVariant +import com.m2mobi.m2ci.task.distribute.model.DistributionDestination import io.gitlab.arturbosch.detekt.DetektCreateBaselineTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompile @@ -10,6 +12,7 @@ buildscript { } plugins { + alias(libs.plugins.m2ci) alias(libs.plugins.android.application) apply false alias(libs.plugins.android.library) apply false alias(libs.plugins.detekt) @@ -17,6 +20,39 @@ plugins { alias(libs.plugins.kotlin.jvm) apply false } +ci { + jvmVersion = JavaVersion.toVersion(libs.versions.jvm.get()) + projectName = BuildConstants.ProjectName + projectVersion = BuildConstants.VersionName + + buildConfiguration { + all { mainVariant = BuildVariant(buildType = "release") } + } + + assemble { + enable = true + versionMetadataBuilders = emptySet() + } + + distribute { + enable = true + destination = DistributionDestination.Library + } + + sonarqube { + enable = false + } + // sonarqube { + // projectKey = BuildConstants.ProjectKey + // coverageExclusions = SonarQubeTask.DEFAULT_COVERAGE_EXCLUSIONS + setOf( + // "view/**", + // ) + // exclusions = SonarQubeTask.DEFAULT_EXCLUSIONS + setOf( + // "**/src/jvmTest/**", + // ) + // } +} + allprojects { repositories { google() diff --git a/buildSrc/src/main/kotlin/BuildConstants.kt b/buildSrc/src/main/kotlin/BuildConstants.kt index beade17..6798308 100644 --- a/buildSrc/src/main/kotlin/BuildConstants.kt +++ b/buildSrc/src/main/kotlin/BuildConstants.kt @@ -21,6 +21,7 @@ object BuildConstants { const val VersionName = "3.0.0-alpha12" const val Namespace = "com.moveagency.markymark" + const val ProjectName = "MarkyMark" const val MinSdk = 24 const val TargetSdk = 35 diff --git a/buildSrc/src/main/kotlin/Publish.kt b/buildSrc/src/main/kotlin/Publish.kt new file mode 100644 index 0000000..308fdd2 --- /dev/null +++ b/buildSrc/src/main/kotlin/Publish.kt @@ -0,0 +1,61 @@ +import org.gradle.api.Project +import org.gradle.api.artifacts.repositories.MavenArtifactRepository +import org.gradle.api.credentials.HttpHeaderCredentials +import org.gradle.api.publish.PublishingExtension +import org.gradle.api.publish.maven.MavenPublication +import org.gradle.authentication.http.HttpHeaderAuthentication +import org.gradle.kotlin.dsl.create +import org.gradle.kotlin.dsl.credentials +import org.gradle.kotlin.dsl.get + +object Publish { + + fun MavenPublication.setup(project: Project) = project.run { + groupId = BuildConstants.Namespace + version = BuildConstants.VersionName + from(components[if (isAndroid()) "release" else "java"]) + pom { + url.set("https://github.com/move-android/MarkyMark-Android") + organization { + name.set("Framna") + url.set("https://www.framna.com/") + } + scm { + connection.set("scm:git:git://github.com/move-android/MarkyMark-Android.git") + developerConnection.set("scm:git:ssh://git@github.com/move-android/MarkyMark-Android.git") + url.set("https://github.com/move-android/MarkyMark-Android") + } + } + } + + fun PublishingExtension.addPublishRepository(project: Project) = project.run { + repositories { + maven { + name = "GitHubPackages" + url = uri("https://maven.pkg.github.com/move-android/MarkyMark-Android") + headerAuthentication(getRepoToken().orEmpty()) + } + } + } + + fun Project.isAndroid() = plugins.findPlugin("com.android.library") != null || + plugins.findPlugin("com.android.application") != null + + fun Project.getRepoUsername() = findProperty("com.moveagency.username") as String + + fun Project.getRepoPassword() = findProperty("com.moveagency.password") as String + + fun Project.getRepoUrl() = findProperty("com.moveagency.repo") as String + + fun Project.getRepoToken() = findProperty("com.moveagency.github.token") as? String + + fun MavenArtifactRepository.headerAuthentication(token: String) { + credentials(HttpHeaderCredentials::class) { + name = "Authorization" + value = "Bearer $token" + } + authentication { + create("header") + } + } +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a940bc5..06f5054 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -13,6 +13,7 @@ jvm = "17" kodeview = "0.9.0" kotlin = "2.2.0" coreKtxVersion = "1.16.0" +m2ci = "64" [libraries] accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } @@ -43,5 +44,6 @@ compose-compiler = { id = "org.jetbrains.kotlin.plugin.compose", version.ref = " detekt = { id = "io.gitlab.arturbosch.detekt", version.ref = "detekt" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +m2ci = { id = "com.m2mobi.m2ci", version.ref = "m2ci" } [bundles] diff --git a/markymark/build.gradle.kts b/markymark/build.gradle.kts index 08058e7..aa56ac6 100644 --- a/markymark/build.gradle.kts +++ b/markymark/build.gradle.kts @@ -18,6 +18,9 @@ @file:Suppress("UnstableApiUsage") +import Publish.addPublishRepository +import Publish.setup + plugins { alias(libs.plugins.android.library) alias(libs.plugins.kotlin.android) @@ -100,3 +103,14 @@ dependencies { api(libs.kodeview) } + +afterEvaluate { + publishing { + publications { + create("mavenRelease") { + setup(project) + } + } + addPublishRepository(project) + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index 7ff15c2..6c35874 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -9,3 +9,27 @@ pluginManagement { gradlePluginPortal() } } + +pluginManagement.repositories.m2ciPlugin() + + +fun RepositoryHandler.m2ciPlugin() = addGitHubRepository(path = "move-android/m2ci") + +fun RepositoryHandler.addGitHubRepository(path: String) { + val gitHubToken = (settings.extra["com.moveagency.github.token"] as? String).orEmpty() + maven { + name = path + url = uri("https://maven.pkg.github.com/$path") + headerAuthentication(gitHubToken) + } +} + +fun MavenArtifactRepository.headerAuthentication(token: String) { + credentials(HttpHeaderCredentials::class) { + name = "Authorization" + value = "Bearer $token" + } + authentication { + create("header") + } +}