From aa052e637676d6c011db3de50f8d0f3fddfd970e Mon Sep 17 00:00:00 2001
From: taewooyo <skaxodn97@gmail.com>
Date: Fri, 17 Nov 2023 17:36:10 +0900
Subject: [PATCH] setting maven central

---
 .github/workflows/build.yml            | 42 ++++++++++++++
 .github/workflows/publish-snapshot.yml | 38 ++++++++++++
 .github/workflows/publish.yml          | 36 ++++++++++++
 gradle.properties                      | 80 ++++++++++++++++++++------
 scripts/publish-module.gradle.kts      | 13 +++++
 shaker/build.gradle.kts                | 17 ++++++
 6 files changed, 210 insertions(+), 16 deletions(-)
 create mode 100644 .github/workflows/build.yml
 create mode 100644 .github/workflows/publish-snapshot.yml
 create mode 100644 .github/workflows/publish.yml
 create mode 100644 scripts/publish-module.gradle.kts

diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
new file mode 100644
index 0000000..7dfcf78
--- /dev/null
+++ b/.github/workflows/build.yml
@@ -0,0 +1,42 @@
+name: Android CI
+
+on:
+  push:
+    branches: [ main ]
+  pull_request:
+    branches: [ main ]
+
+jobs:
+  lint:
+    name: Spotless check
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check out code
+        uses: actions/checkout@v4.1.1
+      - name: Set up JDK
+        uses: actions/setup-java@v3.13.0
+        with:
+          distribution: zulu
+          java-version: 17
+      - uses: gradle/gradle-build-action@v2.9.0
+      - name: spotless
+        run: ./gradlew spotlessCheck
+
+  build:
+    runs-on: ubuntu-latest
+    steps:
+      - uses: actions/checkout@v4.1.1
+      - name: set up JDK
+        uses: actions/setup-java@v3.13.0
+        with:
+          distribution: zulu
+          java-version: 17
+
+      - uses: gradle/gradle-build-action@v2.9.0
+      - name: Make Gradle executable
+        run: chmod +x ./gradlew
+
+      - name: Build with Gradle
+        run: |
+          ./gradlew --scan --stacktrace \
+              assemble
\ No newline at end of file
diff --git a/.github/workflows/publish-snapshot.yml b/.github/workflows/publish-snapshot.yml
new file mode 100644
index 0000000..657b022
--- /dev/null
+++ b/.github/workflows/publish-snapshot.yml
@@ -0,0 +1,38 @@
+name: Publish Snapshot builds
+
+on:
+  push:
+    branches:
+      - main
+  workflow_dispatch:
+
+jobs:
+  publish:
+    name: Snapshot build and publish
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check out code
+        uses: actions/checkout@v4.1.1
+
+      - name: Set up JDK 17
+        uses: actions/setup-java@v3.13.0
+        with:
+          distribution: 'zulu'
+          java-version: 17
+
+      - name: Grant Permission to Execute Gradle
+        run: chmod +x gradlew
+
+      - name: Release build
+        run: ./gradlew assemble --scan
+
+      - name: Publish to MavenCentral
+        run: |
+          ./gradlew publishAllPublicationsToMavenCentral --no-daemon --no-parallel
+        env:
+          ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }}
+          ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.OSSRH_PASSWORD }}
+          ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }}
+          ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
+          ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_KEY }}
+          SNAPSHOT: true
\ No newline at end of file
diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
new file mode 100644
index 0000000..3173cdb
--- /dev/null
+++ b/.github/workflows/publish.yml
@@ -0,0 +1,36 @@
+name: Publish
+
+on:
+  release:
+    types: [ released ]
+  workflow_dispatch:
+
+jobs:
+  publish:
+    name: Snapshot build and publish
+    runs-on: ubuntu-latest
+    steps:
+      - name: Check out code
+        uses: actions/checkout@v4.1.1
+
+      - name: Set up JDK 17
+        uses: actions/setup-java@v3.13.0
+        with:
+          distribution: 'zulu'
+          java-version: 17
+
+      - name: Grant Permission to Execute Gradle
+        run: chmod +x gradlew
+
+      - name: Release build
+        run: ./gradlew assemble --scan
+
+      - name: Publish to MavenCentral
+        run: |
+          ./gradlew publishAllPublicationsToMavenCentral --no-configuration-cache
+        env:
+          ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.OSSRH_USERNAME }}
+          ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.OSSRH_PASSWORD }}
+          ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{ secrets.SIGNING_KEY_ID }}
+          ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
+          ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_KEY }}
\ No newline at end of file
diff --git a/gradle.properties b/gradle.properties
index 3c5031e..eb3d68b 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,23 +1,71 @@
-# Project-wide Gradle settings.
-# IDE (e.g. Android Studio) users:
-# Gradle settings configured through the IDE *will override*
-# any settings specified in this file.
-# For more details on how to configure your build environment visit
-# http://www.gradle.org/docs/current/userguide/build_environment.html
-# Specifies the JVM arguments used for the daemon process.
-# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
+#
+# Copyright 2023 taewooyo
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# https://docs.gradle.org/current/userguide/build_environment.html#sec:configuring_jvm_memory
+org.gradle.jvmargs=-Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:+UseParallelGC -Dlint.nullness.ignore-deprecated=true
+
+# https://docs.gradle.org/current/userguide/build_cache.html
+org.gradle.caching=true
+
 # When configured, Gradle will run in incubating parallel mode.
 # This option should only be used with decoupled projects. More details, visit
 # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
-# org.gradle.parallel=true
-# AndroidX package structure to make it clearer which packages are bundled with the
-# Android operating system, and which are packaged with your app's APK
-# https://developer.android.com/topic/libraries/support-library/androidx-rn
+org.gradle.parallel=true
+
+# Configure only necessary projects, useful with multimodule projects
+org.gradle.configureondemand=true
+
+# AndroidX Migration https://developer.android.com/jetpack/androidx/migrate
 android.useAndroidX=true
-# Kotlin code style for this project: "official" or "obsolete":
-kotlin.code.style=official
+
+# Removes uneccessary default build features
+android.defaults.buildfeatures.aidl=false
+android.defaults.buildfeatures.buildconfig=false
+android.defaults.buildfeatures.renderscript=false
+android.defaults.buildfeatures.resvalues=false
+android.defaults.buildfeatures.shaders=false
+
 # Enables namespacing of each library's R class so that its R class includes only the
 # resources declared in the library itself and none from the library's dependencies,
 # thereby reducing the size of the R class for that library
-android.nonTransitiveRClass=true
\ No newline at end of file
+# https://developer.android.com/studio/releases/gradle-plugin#4.1-nontransitive-r-class
+android.nonTransitiveRClass=true
+
+## Maven Central Publication ##
+systemProp.org.gradle.internal.publish.checksums.insecure=true
+
+# Increase timeout when pushing to Sonatype (otherwise we get timeouts)
+systemProp.org.gradle.internal.http.socketTimeout=120000
+
+GROUP=io.github.taewooyo
+
+POM_URL=https://github.com/taewooyo/shaker/
+POM_SCM_URL=https://github.com/taewooyo/shaker/
+POM_SCM_CONNECTION=scm:git:git://github.com/taewooyo/shaker.git
+POM_SCM_DEV_CONNECTION=scm:git:git://github.com/taewooyo/shaker.git
+
+POM_LICENCE_NAME=The Apache Software License, Version 2.0
+POM_LICENCE_URL=http://www.apache.org/licenses/LICENSE-2.0.txt
+POM_LICENCE_DIST=repo
+
+POM_DEVELOPER_ID=taewooyo
+POM_DEVELOPER_NAME=taewooyo
+POM_DEVELOPER_URL=https://github.com/taewooyo/
+POM_DEVELOPER_EMAIL=skaxodn97@gmail.com
+
+SONATYPE_HOST=S01
+RELEASE_SIGNING_ENABLED=true
+SONATYPE_AUTOMATIC_RELEASE=true
\ No newline at end of file
diff --git a/scripts/publish-module.gradle.kts b/scripts/publish-module.gradle.kts
new file mode 100644
index 0000000..dde4d37
--- /dev/null
+++ b/scripts/publish-module.gradle.kts
@@ -0,0 +1,13 @@
+import com.taewooyo.buildsrc.Configuration
+
+apply(plugin = "com.vanniktech.maven.publish")
+
+rootProject.extra.apply {
+    val snapshot = System.getenv("SNAPSHOT").toBoolean()
+    val libVersion = if (snapshot) {
+        Configuration.snapshotVersionName
+    } else {
+        Configuration.versionName
+    }
+    set("libVersion", libVersion)
+}
\ No newline at end of file
diff --git a/shaker/build.gradle.kts b/shaker/build.gradle.kts
index 417da7f..8efd996 100644
--- a/shaker/build.gradle.kts
+++ b/shaker/build.gradle.kts
@@ -4,6 +4,23 @@ import com.taewooyo.buildsrc.Configuration
 plugins {
     id(libs.plugins.android.library.get().pluginId)
     id(libs.plugins.kotlin.android.get().pluginId)
+    id(libs.plugins.nexus.plugin.get().pluginId)
+}
+
+apply(from = "${rootDir}/scripts/publish-module.gradle.kts")
+
+mavenPublishing {
+    val artifactId = "shaker"
+    coordinates(
+        Configuration.artifactGroup,
+        artifactId,
+        rootProject.extra.get("libVersion").toString()
+    )
+
+    pom {
+        name.set(artifactId)
+        description.set("Modifier's optimally created rotation, translation, and zoom animations are fully customizable for Android. Only Jetpack Compose is supported.")
+    }
 }
 
 android {