Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 18 additions & 16 deletions .github/workflows/android-branch_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,24 +27,26 @@ 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
- name: Decode keystore
id: write_base64_file
uses: Swisyn/Base64-hash-to-file@v1.0
with:
name: Signed app apk
path: app/build/outputs/apk/debug/*.apk
retention-days: 3
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"
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 }}

28 changes: 18 additions & 10 deletions .github/workflows/android-main_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,25 @@ 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: 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 && ./gradlew assembleProdDebug
run: ./gradlew clean assembleProdDebug --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 }}
34 changes: 18 additions & 16 deletions .github/workflows/android-pr_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,24 +25,26 @@ 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
- name: Decode keystore
id: write_base64_file
uses: Swisyn/Base64-hash-to-file@v1.0
with:
name: Signed app apk
path: app/build/outputs/apk/debug/*.apk
retention-days: 3
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"
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 }}

54 changes: 19 additions & 35 deletions .github/workflows/android-release_ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,38 +25,34 @@ 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
- name: Decode keystore
id: write_base64_file
uses: Swisyn/Base64-hash-to-file@v1.0
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
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
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
Expand All @@ -70,23 +66,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
Expand Down
44 changes: 20 additions & 24 deletions .github/workflows/nightly-release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: bash clearRelease.sh



build:
name: Build, Sign & Release
runs-on: ubuntu-latest

needs: release
steps:
- name: Checkout project
Expand All @@ -39,32 +39,28 @@ 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
- name: Decode keystore
id: write_base64_file
uses: Swisyn/Base64-hash-to-file@v1.0
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
destinationFileName: 'mLauncher.jks'
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: ${{ 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
Expand All @@ -82,7 +78,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/nightly/release/*.apk ./build/release/mLauncher-Nightly-Signed.apk
shell: bash

- name: Create and Upload Release
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,4 @@ app/release
app/build
app/debug
diff.*
*.jks
38 changes: 38 additions & 0 deletions BuildApp.py
Original file line number Diff line number Diff line change
@@ -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.")
16 changes: 1 addition & 15 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

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
## [1110303 (1.11.3.3) - Multi Launcher ‧ Home Screen](https://github.com/CodeWorksCreativeHub/mLauncher/tree/1.11.3.3) - (06, January 2026)

### :sparkles: Enhancements:

Expand Down Expand Up @@ -139,19 +139,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
Loading