From ddbdf09b80d9baec91c54b68c80b46607542878b Mon Sep 17 00:00:00 2001 From: Gitbot-Actions Date: Tue, 6 Jan 2026 13:00:12 +0000 Subject: [PATCH 01/20] chore(changelog): Update CHANGELOG.md --- .github/workflows/android-branch_ci.yml | 29 ++++++-------- .github/workflows/android-main_ci.yml | 22 ++++++----- .github/workflows/android-pr_ci.yml | 29 ++++++-------- .github/workflows/android-release_ci.yml | 50 +++++++----------------- .github/workflows/nightly-release.yml | 36 ++++++----------- .gitignore | 1 + BuildApp.py | 38 ++++++++++++++++++ CHANGELOG.md | 27 ++++++------- app/build.gradle.kts | 49 ++++++++++++++++++++++- gradle.properties | 3 +- settings.gradle.kts | 19 +++++---- 11 files changed, 173 insertions(+), 130 deletions(-) create mode 100644 BuildApp.py diff --git a/.github/workflows/android-branch_ci.yml b/.github/workflows/android-branch_ci.yml index 71725531f..17dbeadad 100644 --- a/.github/workflows/android-branch_ci.yml +++ b/.github/workflows/android-branch_ci.yml @@ -13,6 +13,12 @@ jobs: build: name: Build, Sign & Upload runs-on: ubuntu-latest + env: + KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -27,24 +33,13 @@ jobs: distribution: 'temurin' cache: gradle - - uses: actions/cache@v5.0.1 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew clean && ./gradlew assembleProdDebug + - name: Stop Gradle daemons + run: ./gradlew --stop - - name: Upload Artifact - uses: actions/upload-artifact@v6.0.0 - with: - name: Signed app apk - path: app/build/outputs/apk/debug/*.apk - retention-days: 3 + - name: Build with Gradle + run: ./gradlew clean assembleProdDebug --refresh-dependencies --no-daemon + env: + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" \ No newline at end of file diff --git a/.github/workflows/android-main_ci.yml b/.github/workflows/android-main_ci.yml index f92a5f4c3..09e5e5ee3 100644 --- a/.github/workflows/android-main_ci.yml +++ b/.github/workflows/android-main_ci.yml @@ -11,6 +11,12 @@ jobs: build: name: Build, Sign & Upload runs-on: ubuntu-latest + env: + KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -25,17 +31,13 @@ jobs: distribution: 'temurin' cache: gradle - - uses: actions/cache@v5.0.1 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Grant execute permission for gradlew run: chmod +x gradlew + - name: Stop Gradle daemons + run: ./gradlew --stop + - name: Build with Gradle - run: ./gradlew clean && ./gradlew assembleProdDebug + run: ./gradlew clean assembleProdDebug --refresh-dependencies --no-daemon + env: + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" \ No newline at end of file diff --git a/.github/workflows/android-pr_ci.yml b/.github/workflows/android-pr_ci.yml index 8c8979d21..e0a7dfc42 100644 --- a/.github/workflows/android-pr_ci.yml +++ b/.github/workflows/android-pr_ci.yml @@ -11,6 +11,12 @@ jobs: build: name: Build, Sign & Upload runs-on: ubuntu-latest + env: + KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -25,24 +31,13 @@ jobs: distribution: 'temurin' cache: gradle - - uses: actions/cache@v5.0.1 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew clean && ./gradlew assembleProdDebug + - name: Stop Gradle daemons + run: ./gradlew --stop - - name: Upload Artifact - uses: actions/upload-artifact@v6.0.0 - with: - name: Signed app apk - path: app/build/outputs/apk/debug/*.apk - retention-days: 3 + - name: Build with Gradle + run: ./gradlew clean assembleProdDebug --refresh-dependencies --no-daemon + env: + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" \ No newline at end of file diff --git a/.github/workflows/android-release_ci.yml b/.github/workflows/android-release_ci.yml index 8d8cadcf0..6b9cc335f 100644 --- a/.github/workflows/android-release_ci.yml +++ b/.github/workflows/android-release_ci.yml @@ -11,6 +11,12 @@ jobs: name: Build, Sign & Release if: "!startsWith(github.ref_name, 'nightly')" runs-on: ubuntu-latest + env: + KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -25,38 +31,22 @@ jobs: distribution: 'temurin' cache: gradle - - uses: actions/cache@v5.0.1 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build - run: ./gradlew clean && ./gradlew assembleProdRelease && ./gradlew bundleProdRelease + - name: Stop Gradle daemons + run: ./gradlew --stop - - name: Sign APK - uses: ilharp/sign-android-release@v2.0.0 - # ID used to access action output - id: sign_app_apk - with: - releaseDir: app/build/outputs/apk/prod/release - signingKey: ${{ secrets.SIGNINGKEY_BASE64 }} - keyAlias: ${{ secrets.KEY_ALIAS }} - keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.KEY_PASSWORD }} - buildToolsVersion: 35.0.0 + - name: Build + run: ./gradlew clean assembleProdRelease --refresh-dependencies --no-daemon && ./gradlew clean bundleProdRelease --refresh-dependencies --no-daemon + env: + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" - name: Release to GitHub uses: svenstaro/upload-release-action@2.11.3 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ${{steps.sign_app_apk.outputs.signedFile}} + file: app/build/outputs/apk/prob/release/app-prod-release.apk asset_name: MultiLauncher-${{ github.ref_name }}-Signed.apk tag: ${{ github.ref }} overwrite: true @@ -70,23 +60,11 @@ jobs: tag: ${{ github.ref }} overwrite: true - - name: Sign AAB - uses: ilharp/sign-android-release@v2.0.0 - # ID used to access action output - id: sign_app_aab - with: - releaseDir: app/build/outputs/bundle/prodRelease/ - signingKey: ${{ secrets.SIGNINGKEY_BASE64 }} - keyAlias: ${{ secrets.KEY_ALIAS }} - keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.KEY_PASSWORD }} - buildToolsVersion: 35.0.0 - - name: Release to GitHub uses: svenstaro/upload-release-action@2.11.3 with: repo_token: ${{ secrets.GITHUB_TOKEN }} - file: ${{steps.sign_app_aab.outputs.signedFile}} + file: app/build/outputs/bundle/prodRelease/app-prod-release.aab asset_name: MultiLauncher-${{ github.ref_name }}-Signed.aab tag: ${{ github.ref }} overwrite: true diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 33bcb4858..ad15481e5 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -25,6 +25,12 @@ jobs: build: name: Build, Sign & Release runs-on: ubuntu-latest + env: + KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + needs: release steps: - name: Checkout project @@ -39,32 +45,16 @@ jobs: distribution: "temurin" cache: gradle - - uses: actions/cache@v4.2.3 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }} - restore-keys: | - ${{ runner.os }}-gradle- - - name: Grant execute permission for gradlew run: chmod +x gradlew - - name: Build with Gradle - run: ./gradlew clean && ./gradlew assembleNightlyRelease + - name: Stop Gradle daemons + run: ./gradlew --stop - - name: Sign APK - Nightly - uses: ilharp/sign-android-release@v2.0.0 - # ID used to access action output - id: sign_app_nightly - with: - releaseDir: app/build/outputs/apk/nightly/release - signingKey: ${{ secrets.SIGNINGKEY_BASE64 }} - keyAlias: ${{ secrets.KEY_ALIAS }} - keyStorePassword: ${{ secrets.KEY_STORE_PASSWORD }} - keyPassword: ${{ secrets.KEY_PASSWORD }} - buildToolsVersion: 35.0.0 + - name: Build with Gradle + run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon + env: + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" - name: Extract Version id: extract_version @@ -82,7 +72,7 @@ jobs: - name: Rename files run: | mkdir -p ./build/release/ - mv ${{steps.sign_app_nightly.outputs.signedFile}} ./build/release/mLauncher-Nightly-Signed.apk + mv app/build/outputs/apk/nightlyRelease/*.apk ./build/release/mLauncher-Nightly-Signed.apk shell: bash - name: Create and Upload Release diff --git a/.gitignore b/.gitignore index 651d7c683..cc1bd38de 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,4 @@ app/release app/build app/debug diff.* +*.jks diff --git a/BuildApp.py b/BuildApp.py new file mode 100644 index 000000000..47f8f280f --- /dev/null +++ b/BuildApp.py @@ -0,0 +1,38 @@ +import os +import subprocess +import sys + +build_type = sys.argv[1] if len(sys.argv) > 1 else "Prod" +print(f"Building {build_type} version...") + +required_vars = ["KEY_STORE_PASSWORD", "KEY_ALIAS", "KEY_PASSWORD"] +for var in required_vars: + if not os.getenv(var): + print(f"ERROR: {var} is not set!") + sys.exit(1) + +print(f"Using signing key: {os.getenv('KEY_ALIAS')}") + + +def run(cmd): + subprocess.check_call(cmd, shell=True) + + +run(f"gradlew clean") +run(f"gradlew assemble{build_type}Release --no-configuration-cache --refresh-dependencies") +run(f"gradlew bundle{build_type}Release --no-configuration-cache --refresh-dependencies") + +apk_path = f"app/build/outputs/apk/{build_type}/release/app-{build_type}-release.apk".lower() +bundle_path = f"app/build/outputs/bundle/{build_type}Release/app-{build_type}-release.aab".lower() + +if os.path.exists(apk_path): + print(f"APK built successfully: {apk_path}") +else: + print(f"APK not found: {apk_path}") + +if os.path.exists(bundle_path): + print(f"Bundle built successfully: {bundle_path}") +else: + print(f"Bundle not found: {bundle_path}") + +print("Build finished.") diff --git a/CHANGELOG.md b/CHANGELOG.md index 720d319ab..e4dcdd198 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,18 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. -## [1.11.3.2 → Unreleased](https://github.com/CodeWorksCreativeHub/mLauncher/tree/main) - In Development +## [1.11.3.3 → Unreleased](https://github.com/CodeWorksCreativeHub/mLauncher/tree/main) - In Development + +### :wrench: Code Quality: + +* Simplify artifact paths and CI workflows ([b46dc0fb](https://github.com/CodeWorksCreativeHub/mLauncher/commit/b46dc0fb)) +* Refactor nightly release workflow and update dependencies ([ecac7d6f](https://github.com/CodeWorksCreativeHub/mLauncher/commit/ecac7d6f)) + +### :x: Feature Removals: + +* Remove keystore restoration and enforce TLSv1.2 ([533e8ce3](https://github.com/CodeWorksCreativeHub/mLauncher/commit/533e8ce3)) + +## [1110303 (1.11.3.3) - Multi Launcher ‧ Home Screen](https://github.com/CodeWorksCreativeHub/mLauncher/tree/1.11.3.3) - (06, January 2026) ### :sparkles: Enhancements: @@ -139,19 +150,5 @@ All notable changes to this project will be documented in this file. See [conven * Updated Language Files. ([#936](https://github.com/CodeWorksCreativeHub/mLauncher/pull/936)) ([dd0bc103](https://github.com/CodeWorksCreativeHub/mLauncher/commit/dd0bc103)) -## [1110203 (1.11.2.3) - Multi Launcher ‧ Home Screen](https://github.com/CodeWorksCreativeHub/mLauncher/tree/1.11.2.3) - (16, October 2025) - -### :sparkles: Enhancements: - -* Add option to force colored wallpaper ([03fac865](https://github.com/CodeWorksCreativeHub/mLauncher/commit/03fac865)) - -### :bug: Bug Fixes: - -* Adjust font sizes for consistency ([07046ce1](https://github.com/CodeWorksCreativeHub/mLauncher/commit/07046ce1)) - -### :books: Documentation: - -* Remove "Known Issues" references ([06a9923f](https://github.com/CodeWorksCreativeHub/mLauncher/commit/06a9923f)) - --- > Generated by CodeWorks Creative Hub \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts index d2affeb19..0da805f8a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -1,3 +1,5 @@ +import java.util.Base64 + plugins { alias(libs.plugins.android.application) alias(libs.plugins.kotlin.android) @@ -69,6 +71,47 @@ android { } } + signingConfigs { + val keystoreB64: String = + System.getenv("KEY_STORE_FILE") ?: throw GradleException("KEY_STORE_FILE not set.") + val keystorePassword: String = + System.getenv("KEY_STORE_PASSWORD") ?: throw GradleException("KEY_STORE_PASSWORD not set") + val keyAlias: String = + System.getenv("KEY_ALIAS") ?: throw GradleException("KEY_ALIAS not set") + val keyPassword: String = + System.getenv("KEY_PASSWORD") ?: throw GradleException("KEY_PASSWORD not set") + + // Use file helper to ensure correct path + val localKeystore = rootProject.file("app/mLauncher.jks") + val ciKeystore = layout.buildDirectory.file("temp-keystore.jks").get().asFile + + val keystoreFile = when { + localKeystore.exists() -> localKeystore + else -> ciKeystore + } + + if (!keystoreFile.exists()) { + keystoreFile.parentFile.mkdirs() + + val bytes = Base64.getDecoder().decode(keystoreB64) + + if (bytes.size < 1024) { + throw GradleException("Decoded keystore is too small (${bytes.size} bytes)") + } + + keystoreFile.writeBytes(bytes) + } + + println("Using keystore: ${keystoreFile.absolutePath} (${keystoreFile.length()} bytes)") + + create("release") { + storeFile = keystoreFile + storePassword = keystorePassword + this.keyAlias = keyAlias + this.keyPassword = keyPassword + } + } + buildTypes { getByName("debug") { isDebuggable = true @@ -76,6 +119,8 @@ android { isShrinkResources = false applicationIdSuffix = ".dev" + signingConfig = signingConfigs["release"] + resValue("string", "app_version", baseVersionName) resValue("string", "empty", "") } @@ -89,6 +134,8 @@ android { "proguard-rules.pro" ) + signingConfig = signingConfigs["release"] + resValue("string", "app_version", baseVersionName) resValue("string", "empty", "") } @@ -105,7 +152,7 @@ android { this as com.android.build.gradle.internal.api.BaseVariantOutputImpl output.outputFileName = - "${applicationId}_${flavorName}_${versionName}.apk" + "app_${flavorName}_release.apk" } } diff --git a/gradle.properties b/gradle.properties index 0fc35d068..35e0768e4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -6,7 +6,8 @@ # 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 +org.gradle.jvmargs=-Xmx4g -Dfile.encoding=UTF-8 +org.gradle.internal.http.useHead=false # 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 diff --git a/settings.gradle.kts b/settings.gradle.kts index 97a32757a..3dae8478d 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -2,9 +2,11 @@ pluginManagement { repositories { - gradlePluginPortal() - google() - mavenCentral() + google() // for Android dependencies + gradlePluginPortal() // for plugins + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") + maven("https://jitpack.io") + mavenCentral() // for Kotlin stdlib } } @@ -15,14 +17,11 @@ plugins { dependencyResolutionManagement { repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) repositories { - google() - mavenCentral { - metadataSources { - mavenPom() - artifact() - } - } + google() // for Android dependencies + gradlePluginPortal() // for plugins + maven("https://maven.pkg.jetbrains.space/kotlin/p/kotlin/dev") maven("https://jitpack.io") + mavenCentral() // for Kotlin stdlib } } From 45c52b741b4b7946a6137cc31b7591e42001efee Mon Sep 17 00:00:00 2001 From: Gitbot-Actions Date: Wed, 7 Jan 2026 17:25:23 +0000 Subject: [PATCH 02/20] chore(changelog): Update CHANGELOG.md --- CHANGELOG.md | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4dcdd198..451d34f1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,17 +2,6 @@ All notable changes to this project will be documented in this file. See [conventional commits](https://www.conventionalcommits.org/) for commit guidelines. -## [1.11.3.3 → Unreleased](https://github.com/CodeWorksCreativeHub/mLauncher/tree/main) - In Development - -### :wrench: Code Quality: - -* Simplify artifact paths and CI workflows ([b46dc0fb](https://github.com/CodeWorksCreativeHub/mLauncher/commit/b46dc0fb)) -* Refactor nightly release workflow and update dependencies ([ecac7d6f](https://github.com/CodeWorksCreativeHub/mLauncher/commit/ecac7d6f)) - -### :x: Feature Removals: - -* Remove keystore restoration and enforce TLSv1.2 ([533e8ce3](https://github.com/CodeWorksCreativeHub/mLauncher/commit/533e8ce3)) - ## [1110303 (1.11.3.3) - Multi Launcher ‧ Home Screen](https://github.com/CodeWorksCreativeHub/mLauncher/tree/1.11.3.3) - (06, January 2026) ### :sparkles: Enhancements: From 3d51c94f6c67b2f2a6e16311ee61455f61c201ac Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Wed, 7 Jan 2026 17:27:12 +0000 Subject: [PATCH 03/20] unused variables from build script The `applicationId` and `versionName` variables were declared in `app/build.gradle.kts` but never used. This commit removes them to clean up the build script. --- app/build.gradle.kts | 3 --- 1 file changed, 3 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0da805f8a..7aa98b52a 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -142,10 +142,7 @@ android { } applicationVariants.all { - - val applicationId = this.applicationId val flavorName = this.flavorName - val versionName = this.versionName outputs.all { val output = From ddca4df3c99b51cabebe66baea4815ff0ccc86b2 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Wed, 7 Jan 2026 17:39:02 +0000 Subject: [PATCH 04/20] Correct APK filename in build script The build script `BuildApp.py` has been updated to use the correct filename for the generated APK. The script previously looked for `app-{build_type}-release.apk`, but the correct filename uses an underscore, `app_{build_type}_release.apk`. This change ensures that the build script can locate the APK file for subsequent steps. --- BuildApp.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildApp.py b/BuildApp.py index 47f8f280f..db024e3c1 100644 --- a/BuildApp.py +++ b/BuildApp.py @@ -22,7 +22,7 @@ def run(cmd): run(f"gradlew assemble{build_type}Release --no-configuration-cache --refresh-dependencies") run(f"gradlew bundle{build_type}Release --no-configuration-cache --refresh-dependencies") -apk_path = f"app/build/outputs/apk/{build_type}/release/app-{build_type}-release.apk".lower() +apk_path = f"app/build/outputs/apk/{build_type}/release/app_{build_type}_release.apk".lower() bundle_path = f"app/build/outputs/bundle/{build_type}Release/app-{build_type}-release.aab".lower() if os.path.exists(apk_path): From 1cd2f23691e474a90b7f95c3dc9b956fdfad04ad Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Wed, 7 Jan 2026 22:25:23 +0000 Subject: [PATCH 05/20] Decode keystore from base64 in nightly workflow The nightly release workflow has been updated to decode the keystore from a base64 secret. Previously, the workflow relied on a different secret (`SIGNINGKEY_BASE64`) and set environment variables at the job level. This change introduces a dedicated step to decode the `KEYSTORE_BASE64` secret into a `keystore.jks` file. The environment variables required for signing are now scoped to this decoding step and the subsequent build step, improving the clarity and security of the signing process. --- .github/workflows/nightly-release.yml | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index ad15481e5..1b85ccd0c 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -25,11 +25,6 @@ jobs: build: name: Build, Sign & Release runs-on: ubuntu-latest - env: - KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env - KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} needs: release steps: @@ -51,10 +46,17 @@ jobs: - name: Stop Gradle daemons run: ./gradlew --stop + - name: Decode keystore + run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > keystore.jks + - name: Build with Gradle run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" + KEY_STORE_FILE: keystore.jks + KEY_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - name: Extract Version id: extract_version From c0cecec12d81748d7243a320ba5e4e6d5b522ac9 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Wed, 7 Jan 2026 23:37:17 +0000 Subject: [PATCH 06/20] Update keystore decoding in nightly release workflow Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 1b85ccd0c..d02cf2ce3 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -47,13 +47,18 @@ jobs: run: ./gradlew --stop - name: Decode keystore - run: echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 --decode > keystore.jks + id: write_base64_file + uses: Swisyn/Base64-hash-to-file@v1.0 + with: + destinationFileName: 'mLauncher.jks' + destinationPath: './app/' + encodedString: ${{ secrets.KEYSTORE_BASE64 }} - name: Build with Gradle run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" - KEY_STORE_FILE: keystore.jks + KEY_STORE_FILE: ${{ steps.write_base64_file.outputs.filePath }} KEY_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} From ef36b4c96814cd569f0e2b1a01ef4dede4f3b886 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Wed, 7 Jan 2026 23:59:54 +0000 Subject: [PATCH 07/20] Add keystore test step in nightly release workflow Add a test step to verify the keystore Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index d02cf2ce3..987a64134 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -54,6 +54,10 @@ jobs: destinationPath: './app/' encodedString: ${{ secrets.KEYSTORE_BASE64 }} + - name: test + run: keytool -list -keystore ${{ steps.write_base64_file.outputs.filepath }} -storepass ${{ secrets.KEY_PASSWORD }} + + - name: Build with Gradle run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: From 3fc578252d9517de0cf696c026fe5529b7d9bf1d Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 00:04:51 +0000 Subject: [PATCH 08/20] Update keystore path and password in nightly release Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 987a64134..d6a8638ce 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -55,7 +55,7 @@ jobs: encodedString: ${{ secrets.KEYSTORE_BASE64 }} - name: test - run: keytool -list -keystore ${{ steps.write_base64_file.outputs.filepath }} -storepass ${{ secrets.KEY_PASSWORD }} + run: keytool -list -keystore ./app/mLauncher.jks -storepass mLauncher - name: Build with Gradle From c38a7847f39972828aa1ca389dc3e805970b5a90 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 00:10:42 +0000 Subject: [PATCH 09/20] Update nightly-release.yml Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index d6a8638ce..8d4cf041f 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -20,8 +20,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: bash clearRelease.sh - - + build: name: Build, Sign & Release runs-on: ubuntu-latest @@ -52,7 +51,7 @@ jobs: with: destinationFileName: 'mLauncher.jks' destinationPath: './app/' - encodedString: ${{ secrets.KEYSTORE_BASE64 }} + encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} - name: test run: keytool -list -keystore ./app/mLauncher.jks -storepass mLauncher From 1734f723a7cf5ac1dd3b453000a8bca7aba38772 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 00:13:45 +0000 Subject: [PATCH 10/20] Update nightly-release.yml Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 8d4cf041f..932f02dca 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -53,10 +53,6 @@ jobs: destinationPath: './app/' encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} - - name: test - run: keytool -list -keystore ./app/mLauncher.jks -storepass mLauncher - - - name: Build with Gradle run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: From 4dd649f9e2dd5a484206be31c170d168b5ebf322 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 00:27:18 +0000 Subject: [PATCH 11/20] Update nightly-release.yml Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 932f02dca..9a0a79240 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -57,7 +57,7 @@ jobs: run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" - KEY_STORE_FILE: ${{ steps.write_base64_file.outputs.filePath }} + KEY_STORE_FILE: ./app/mLauncher.jks KEY_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} From bc9ef6bca3688b4bd791fa433dcfc9bcc09c3c49 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 00:39:54 +0000 Subject: [PATCH 12/20] Update nightly-release.yml Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 9a0a79240..ec1170408 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -50,17 +50,17 @@ jobs: uses: Swisyn/Base64-hash-to-file@v1.0 with: destinationFileName: 'mLauncher.jks' - destinationPath: './app/' + destinationPath: 'app' encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} - name: Build with Gradle run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" - KEY_STORE_FILE: ./app/mLauncher.jks - KEY_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + KEY_STORE_FILE: "app/mLauncher.jks" + KEY_STORE_PASSWORD: "${{ secrets.KEYSTORE_PASSWORD }}" + KEY_ALIAS: "${{ secrets.KEY_ALIAS }}" + KEY_PASSWORD: "${{ secrets.KEY_PASSWORD }}" - name: Extract Version id: extract_version From 5bbe79456b19cce6ef1bf18ec895e71ca05c3d89 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 00:57:27 +0000 Subject: [PATCH 13/20] Update nightly-release.yml Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index ec1170408..760d31faa 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -53,14 +53,18 @@ jobs: destinationPath: 'app' encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} + - name: Create temporary gradle.properties for signing + run: | + echo "signing.storeFile=app/mLauncher.jks" >> gradle.properties + echo "signing.storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> gradle.properties + echo "signing.keyAlias=${{ secrets.KEY_ALIAS }}" >> gradle.properties + echo "signing.keyPassword=${{ secrets.KEY_PASSWORD }}" >> gradle.properties + + - name: Build with Gradle run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" - KEY_STORE_FILE: "app/mLauncher.jks" - KEY_STORE_PASSWORD: "${{ secrets.KEYSTORE_PASSWORD }}" - KEY_ALIAS: "${{ secrets.KEY_ALIAS }}" - KEY_PASSWORD: "${{ secrets.KEY_PASSWORD }}" - name: Extract Version id: extract_version From eef6991e7f10ce4a3042c6b34e8abec221d74dcb Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 01:01:20 +0000 Subject: [PATCH 14/20] Update nightly-release.yml Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 760d31faa..767ec7621 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -56,7 +56,7 @@ jobs: - name: Create temporary gradle.properties for signing run: | echo "signing.storeFile=app/mLauncher.jks" >> gradle.properties - echo "signing.storePassword=${{ secrets.KEYSTORE_PASSWORD }}" >> gradle.properties + echo "signing.storePassword=${{ secrets.KEY_STORE_PASSWORD }}" >> gradle.properties echo "signing.keyAlias=${{ secrets.KEY_ALIAS }}" >> gradle.properties echo "signing.keyPassword=${{ secrets.KEY_PASSWORD }}" >> gradle.properties From 4e7c88865d2f5c146861778ba65c6bb6a048279e Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 01:06:56 +0000 Subject: [PATCH 15/20] Update nightly-release.yml Signed-off-by: CreativeCodeCat --- .github/workflows/nightly-release.yml | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 767ec7621..62f74004b 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -53,18 +53,15 @@ jobs: destinationPath: 'app' encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} - - name: Create temporary gradle.properties for signing - run: | - echo "signing.storeFile=app/mLauncher.jks" >> gradle.properties - echo "signing.storePassword=${{ secrets.KEY_STORE_PASSWORD }}" >> gradle.properties - echo "signing.keyAlias=${{ secrets.KEY_ALIAS }}" >> gradle.properties - echo "signing.keyPassword=${{ secrets.KEY_PASSWORD }}" >> gradle.properties - - - name: Build with Gradle run: ./gradlew clean assembleNightlyRelease --refresh-dependencies --no-daemon env: JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" + KEY_STORE_FILE: ${{ steps.write_base64_file.outputs.filePath }} + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + - name: Extract Version id: extract_version From 77764b3d23c1721bfda7a196ea6a6ffbb7a43f01 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 01:32:27 +0000 Subject: [PATCH 16/20] Update Workflows * Update nightly-release.yml Signed-off-by: CreativeCodeCat * Update android-branch_ci.yml Signed-off-by: CreativeCodeCat * Update nightly-release.yml Signed-off-by: CreativeCodeCat * Update android-branch_ci.yml Signed-off-by: CreativeCodeCat * Update android-pr_ci.yml Signed-off-by: CreativeCodeCat * Update android-release_ci.yml Signed-off-by: CreativeCodeCat --------- Signed-off-by: CreativeCodeCat --- .github/workflows/android-branch_ci.yml | 21 ++++++++++++++------- .github/workflows/android-pr_ci.yml | 21 ++++++++++++++------- .github/workflows/android-release_ci.yml | 18 ++++++++++++------ .github/workflows/nightly-release.yml | 3 +-- 4 files changed, 41 insertions(+), 22 deletions(-) diff --git a/.github/workflows/android-branch_ci.yml b/.github/workflows/android-branch_ci.yml index 17dbeadad..5b1c8f435 100644 --- a/.github/workflows/android-branch_ci.yml +++ b/.github/workflows/android-branch_ci.yml @@ -13,12 +13,6 @@ jobs: build: name: Build, Sign & Upload runs-on: ubuntu-latest - env: - KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env - KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -39,7 +33,20 @@ jobs: - name: Stop Gradle daemons run: ./gradlew --stop + - name: Decode keystore + id: write_base64_file + uses: Swisyn/Base64-hash-to-file@v1.0 + with: + destinationFileName: 'mLauncher.jks' + destinationPath: 'app' + encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} + - name: Build with Gradle run: ./gradlew clean assembleProdDebug --refresh-dependencies --no-daemon env: - JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" \ No newline at end of file + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" + KEY_STORE_FILE: ${{ steps.write_base64_file.outputs.filePath }} + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + diff --git a/.github/workflows/android-pr_ci.yml b/.github/workflows/android-pr_ci.yml index e0a7dfc42..318319173 100644 --- a/.github/workflows/android-pr_ci.yml +++ b/.github/workflows/android-pr_ci.yml @@ -11,12 +11,6 @@ jobs: build: name: Build, Sign & Upload runs-on: ubuntu-latest - env: - KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env - KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -37,7 +31,20 @@ jobs: - name: Stop Gradle daemons run: ./gradlew --stop + - name: Decode keystore + id: write_base64_file + uses: Swisyn/Base64-hash-to-file@v1.0 + with: + destinationFileName: 'mLauncher.jks' + destinationPath: 'app' + encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} + - name: Build with Gradle run: ./gradlew clean assembleProdDebug --refresh-dependencies --no-daemon env: - JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" \ No newline at end of file + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" + KEY_STORE_FILE: ${{ steps.write_base64_file.outputs.filePath }} + KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + diff --git a/.github/workflows/android-release_ci.yml b/.github/workflows/android-release_ci.yml index 6b9cc335f..9612408b5 100644 --- a/.github/workflows/android-release_ci.yml +++ b/.github/workflows/android-release_ci.yml @@ -11,12 +11,6 @@ jobs: name: Build, Sign & Release if: "!startsWith(github.ref_name, 'nightly')" runs-on: ubuntu-latest - env: - KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env - KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -37,10 +31,22 @@ jobs: - name: Stop Gradle daemons run: ./gradlew --stop + - name: Decode keystore + id: write_base64_file + uses: Swisyn/Base64-hash-to-file@v1.0 + with: + destinationFileName: 'mLauncher.jks' + destinationPath: 'app' + encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} + - name: Build run: ./gradlew clean assembleProdRelease --refresh-dependencies --no-daemon && ./gradlew clean bundleProdRelease --refresh-dependencies --no-daemon env: JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" + KEY_STORE_FILE: ${{ steps.write_base64_file.outputs.filePath }} + KEY_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - name: Release to GitHub uses: svenstaro/upload-release-action@2.11.3 diff --git a/.github/workflows/nightly-release.yml b/.github/workflows/nightly-release.yml index 62f74004b..e1143a725 100644 --- a/.github/workflows/nightly-release.yml +++ b/.github/workflows/nightly-release.yml @@ -61,7 +61,6 @@ jobs: KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} KEY_ALIAS: ${{ secrets.KEY_ALIAS }} KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - - name: Extract Version id: extract_version @@ -79,7 +78,7 @@ jobs: - name: Rename files run: | mkdir -p ./build/release/ - mv app/build/outputs/apk/nightlyRelease/*.apk ./build/release/mLauncher-Nightly-Signed.apk + mv app/build/outputs/apk/nightly/release/*.apk ./build/release/mLauncher-Nightly-Signed.apk shell: bash - name: Create and Upload Release From 4d137f9029024584ef3af4c8cac594464774002b Mon Sep 17 00:00:00 2001 From: Gitbot-Actions Date: Thu, 8 Jan 2026 01:32:41 +0000 Subject: [PATCH 17/20] chore(changelog): Update CHANGELOG.md --- CHANGELOG.md | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 451d34f1f..3fa451969 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -117,27 +117,5 @@ All notable changes to this project will be documented in this file. See [conven * prevent icon pack icons from showing in app list when disabled ([6a3d504b](https://github.com/CodeWorksCreativeHub/mLauncher/commit/6a3d504b)) -## [1110204 (1.11.2.4) - Multi Launcher ‧ Home Screen](https://github.com/CodeWorksCreativeHub/mLauncher/tree/1.11.2.4) - (20, October 2025) - -### :sparkles: Enhancements: - -* Implement native crash reporting service ([4d750cb8](https://github.com/CodeWorksCreativeHub/mLauncher/commit/4d750cb8)) -* Add grab line to bottom and top sheet dialogs ([6a81010d](https://github.com/CodeWorksCreativeHub/mLauncher/commit/6a81010d)) -* Move cache files to cache directory ([2e383825](https://github.com/CodeWorksCreativeHub/mLauncher/commit/2e383825)) -* Configure Room schema for WidgetDatabase ([802c1b1a](https://github.com/CodeWorksCreativeHub/mLauncher/commit/802c1b1a)) - -### :wrench: Code Quality: - -* Use CardView for Top and Bottom Sheets ([e1b5abe2](https://github.com/CodeWorksCreativeHub/mLauncher/commit/e1b5abe2)) -* Rearchitect FontBottomSheetDialogLocked ([84de7e2e](https://github.com/CodeWorksCreativeHub/mLauncher/commit/84de7e2e)) -* Rename LockedBottomSheetDialog to FontBottomSheetDialogLocked and move to shared component package ([899cba8c](https://github.com/CodeWorksCreativeHub/mLauncher/commit/899cba8c)) -* Implement Device Admin for screen lock ([f4f8eec3](https://github.com/CodeWorksCreativeHub/mLauncher/commit/f4f8eec3)) -* Improve performance and readability ([ebb3ece7](https://github.com/CodeWorksCreativeHub/mLauncher/commit/ebb3ece7)) -* Optimize app list loading and sorting ([354b0ce4](https://github.com/CodeWorksCreativeHub/mLauncher/commit/354b0ce4)) - -### :globe_with_meridians: Localization: - -* Updated Language Files. ([#936](https://github.com/CodeWorksCreativeHub/mLauncher/pull/936)) ([dd0bc103](https://github.com/CodeWorksCreativeHub/mLauncher/commit/dd0bc103)) - --- > Generated by CodeWorks Creative Hub \ No newline at end of file From f3fc950f247637c9fed04323dad9e2ddd8490bd6 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 01:39:29 +0000 Subject: [PATCH 18/20] Update build.gradle.kts Signed-off-by: CreativeCodeCat --- app/build.gradle.kts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7aa98b52a..fec335ffe 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -14,9 +14,9 @@ plugins { val major = 1 val minor = 11 val patch = 3 -val build = 3 +val build = 4 -val baseVersionName = "$major.$minor.$patch" +val baseVersionName = "$major.$minor.$patch Build $build" val versionCodeBase = (String.format("%02d", major) + From 0ed64fcb3dc39b283a25e082caffc160109188c6 Mon Sep 17 00:00:00 2001 From: CreativeCodeCat Date: Thu, 8 Jan 2026 01:46:30 +0000 Subject: [PATCH 19/20] Update android-main_ci.yml Signed-off-by: CreativeCodeCat --- .github/workflows/android-main_ci.yml | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/.github/workflows/android-main_ci.yml b/.github/workflows/android-main_ci.yml index 09e5e5ee3..1c3fc4029 100644 --- a/.github/workflows/android-main_ci.yml +++ b/.github/workflows/android-main_ci.yml @@ -11,12 +11,6 @@ jobs: build: name: Build, Sign & Upload runs-on: ubuntu-latest - env: - KEY_STORE_FILE: ${{ secrets.SIGNINGKEY_BASE64 }} # optional if using a file from env - KEY_STORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }} - KEY_ALIAS: ${{ secrets.KEY_ALIAS }} - KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} - steps: - name: Checkout project uses: actions/checkout@v6.0.1 @@ -37,7 +31,19 @@ jobs: - name: Stop Gradle daemons run: ./gradlew --stop + - name: Decode keystore + id: write_base64_file + uses: Swisyn/Base64-hash-to-file@v1.0 + with: + destinationFileName: 'mLauncher.jks' + destinationPath: 'app' + encodedString: ${{ secrets.SIGNINGKEY_BASE64 }} + - name: Build with Gradle run: ./gradlew clean assembleProdDebug --refresh-dependencies --no-daemon env: - JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" \ No newline at end of file + JAVA_TOOL_OPTIONS: "-Dhttps.protocols=TLSv1.2" + KEY_STORE_FILE: ${{ steps.write_base64_file.outputs.filePath }} + KEY_STORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }} + KEY_ALIAS: ${{ secrets.KEY_ALIAS }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} From b197b8b009dc95b56609e5eb022879336ac05922 Mon Sep 17 00:00:00 2001 From: Gitbot-Actions Date: Thu, 8 Jan 2026 01:46:44 +0000 Subject: [PATCH 20/20] chore(changelog): Update CHANGELOG.md --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3fa451969..451d34f1f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -117,5 +117,27 @@ All notable changes to this project will be documented in this file. See [conven * prevent icon pack icons from showing in app list when disabled ([6a3d504b](https://github.com/CodeWorksCreativeHub/mLauncher/commit/6a3d504b)) +## [1110204 (1.11.2.4) - Multi Launcher ‧ Home Screen](https://github.com/CodeWorksCreativeHub/mLauncher/tree/1.11.2.4) - (20, October 2025) + +### :sparkles: Enhancements: + +* Implement native crash reporting service ([4d750cb8](https://github.com/CodeWorksCreativeHub/mLauncher/commit/4d750cb8)) +* Add grab line to bottom and top sheet dialogs ([6a81010d](https://github.com/CodeWorksCreativeHub/mLauncher/commit/6a81010d)) +* Move cache files to cache directory ([2e383825](https://github.com/CodeWorksCreativeHub/mLauncher/commit/2e383825)) +* Configure Room schema for WidgetDatabase ([802c1b1a](https://github.com/CodeWorksCreativeHub/mLauncher/commit/802c1b1a)) + +### :wrench: Code Quality: + +* Use CardView for Top and Bottom Sheets ([e1b5abe2](https://github.com/CodeWorksCreativeHub/mLauncher/commit/e1b5abe2)) +* Rearchitect FontBottomSheetDialogLocked ([84de7e2e](https://github.com/CodeWorksCreativeHub/mLauncher/commit/84de7e2e)) +* Rename LockedBottomSheetDialog to FontBottomSheetDialogLocked and move to shared component package ([899cba8c](https://github.com/CodeWorksCreativeHub/mLauncher/commit/899cba8c)) +* Implement Device Admin for screen lock ([f4f8eec3](https://github.com/CodeWorksCreativeHub/mLauncher/commit/f4f8eec3)) +* Improve performance and readability ([ebb3ece7](https://github.com/CodeWorksCreativeHub/mLauncher/commit/ebb3ece7)) +* Optimize app list loading and sorting ([354b0ce4](https://github.com/CodeWorksCreativeHub/mLauncher/commit/354b0ce4)) + +### :globe_with_meridians: Localization: + +* Updated Language Files. ([#936](https://github.com/CodeWorksCreativeHub/mLauncher/pull/936)) ([dd0bc103](https://github.com/CodeWorksCreativeHub/mLauncher/commit/dd0bc103)) + --- > Generated by CodeWorks Creative Hub \ No newline at end of file