Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
19c0846
fix: Update to Patcher 1.3.0
LisoUseInAIKyrios Mar 13, 2026
7a185d6
chore: Release v1.5.1-dev.1 [skip ci]
semantic-release-bot Mar 13, 2026
412847e
fix: Bump arsclib version, remove APKEditor
wchill Mar 13, 2026
ee5e119
chore: Release v1.5.1-dev.2 [skip ci]
semantic-release-bot Mar 13, 2026
fb0e24f
chore: Add test cases for options.json (#73)
prateek-who Mar 13, 2026
c3d9a31
chore(deps): bump com.gradleup.shadow from 8.3.9 to 9.3.2 (#67)
dependabot[bot] Mar 13, 2026
4d223f2
fix: Use more logging verbosity when updating options.json (#72)
prateek-who Mar 13, 2026
9f6ee1a
chore: Release v1.5.1-dev.3 [skip ci]
semantic-release-bot Mar 13, 2026
cd627e6
feat: Add desktop GUI (#42)
prateek-who Mar 14, 2026
f966ca0
chore: Release v1.6.0-dev.1 [skip ci]
semantic-release-bot Mar 14, 2026
502cb95
ci: Update release action dependencies
LisoUseInAIKyrios Mar 14, 2026
989e72a
fix: Dispatch error when launching app (#79)
prateek-who Mar 15, 2026
8627aa1
chore: Release v1.6.0-dev.2 [skip ci]
semantic-release-bot Mar 15, 2026
1551c8e
fix: Update to latest patcher dev
LisoUseInAIKyrios Mar 15, 2026
87cb588
chore: Release v1.6.0-dev.3 [skip ci]
semantic-release-bot Mar 15, 2026
dfd8b99
ci: Fix duplicate release artifact
LisoUseInAIKyrios Mar 15, 2026
fb8a4ff
fix: Update to latest patcher dev
LisoUseInAIKyrios Mar 15, 2026
b1f6576
chore: Release v1.6.0-dev.4 [skip ci]
semantic-release-bot Mar 15, 2026
1356259
fix: Update to latest patcher dev
LisoUseInAIKyrios Mar 16, 2026
5c3bb55
chore: Release v1.6.0-dev.5 [skip ci]
semantic-release-bot Mar 16, 2026
ad53aa9
chore: Bump patcher version to latest dev
wchill Mar 19, 2026
5bcd4f7
feat: Inform user if cli is outdated (#81)
prateek-who Mar 20, 2026
7f3e513
chore: Release v1.6.0-dev.6 [skip ci]
semantic-release-bot Mar 20, 2026
496d8e9
fix: Update to latest patcher dev
LisoUseInAIKyrios Mar 20, 2026
daa7683
chore: Release v1.6.0-dev.7 [skip ci]
semantic-release-bot Mar 20, 2026
91da5fd
chore: Add URL parameter encoding for web-search
LisoUseInAIKyrios Mar 21, 2026
2aa6263
fix: Use GitHub raw links for CLI update check (#87)
prateek-who Mar 21, 2026
565a818
chore: Release v1.6.0-dev.8 [skip ci]
semantic-release-bot Mar 21, 2026
8beab4b
chore: Change to stable patcher release
LisoUseInAIKyrios Mar 22, 2026
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
8 changes: 4 additions & 4 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,23 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@v6
with:
# Make sure the release step uses its own credentials:
# https://github.com/cycjimmy/semantic-release-action#private-packages
persist-credentials: false
fetch-depth: 0

- name: Cache Gradle
uses: burrunan/gradle-cache-action@v1
uses: burrunan/gradle-cache-action@v3

- name: Build
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: ./gradlew clean build
run: ./gradlew build clean

- name: Setup Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@v6
with:
node-version: "lts/*"
cache: 'npm'
Expand Down
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@ misc.xml
deploymentTargetDropDown.xml
render.experimental.xml

# Kotlin
.kotlin/

# Keystore files
*.jks
*.keystore
Expand All @@ -33,5 +36,7 @@ google-services.json
# Android Profiling
*.hprof

# Mac files
.DS_Store
# NPM modules
node_modules/
9 changes: 9 additions & 0 deletions .run/CLI GUI.run.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="CLI GUI" type="Application" factoryName="Application">
<option name="MAIN_CLASS_NAME" value="app.morphe.MorpheLauncherKt" />
<module name="morphe-cli.main" />
<method v="2">
<option name="Make" enabled="true" />
</method>
</configuration>
</component>
77 changes: 77 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,80 @@
# [1.6.0-dev.8](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.7...v1.6.0-dev.8) (2026-03-21)


### Bug Fixes

* Use GitHub raw links for CLI update check ([#87](https://github.com/MorpheApp/morphe-cli/issues/87)) ([2aa6263](https://github.com/MorpheApp/morphe-cli/commit/2aa62637098fa52dcc79422116b91487aed5600a))

# [1.6.0-dev.7](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.6...v1.6.0-dev.7) (2026-03-20)


### Bug Fixes

* Update to latest patcher dev ([496d8e9](https://github.com/MorpheApp/morphe-cli/commit/496d8e9d2d1e402f7246b6f3adb85c4c6c1865ca))

# [1.6.0-dev.6](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.5...v1.6.0-dev.6) (2026-03-20)


### Features

* Inform user if cli is outdated ([#81](https://github.com/MorpheApp/morphe-cli/issues/81)) ([5bcd4f7](https://github.com/MorpheApp/morphe-cli/commit/5bcd4f7c612ec3aad732e83ea131a019424b3bb8))

# [1.6.0-dev.5](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.4...v1.6.0-dev.5) (2026-03-16)


### Bug Fixes

* Update to latest patcher dev ([1356259](https://github.com/MorpheApp/morphe-cli/commit/135625917a54eb5e0a9464c40d0ce504619b4845))

# [1.6.0-dev.4](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.3...v1.6.0-dev.4) (2026-03-15)


### Bug Fixes

* Update to latest patcher dev ([fb8a4ff](https://github.com/MorpheApp/morphe-cli/commit/fb8a4ffe70ae24c74c497608b9eb9aa2d76f2a8a))

# [1.6.0-dev.3](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.2...v1.6.0-dev.3) (2026-03-15)


### Bug Fixes

* Update to latest patcher dev ([1551c8e](https://github.com/MorpheApp/morphe-cli/commit/1551c8ef81bd4d267833c1dc543d13c1d1def29f))

# [1.6.0-dev.2](https://github.com/MorpheApp/morphe-cli/compare/v1.6.0-dev.1...v1.6.0-dev.2) (2026-03-15)


### Bug Fixes

* Dispatch error when launching app ([#79](https://github.com/MorpheApp/morphe-cli/issues/79)) ([989e72a](https://github.com/MorpheApp/morphe-cli/commit/989e72a04c9ea1b512d556ff8db48b99a4817d98))

# [1.6.0-dev.1](https://github.com/MorpheApp/morphe-cli/compare/v1.5.1-dev.3...v1.6.0-dev.1) (2026-03-14)


### Features

* Add desktop GUI ([#42](https://github.com/MorpheApp/morphe-cli/issues/42)) ([cd627e6](https://github.com/MorpheApp/morphe-cli/commit/cd627e6a4320084403beacd414278b3b75f469da))

## [1.5.1-dev.3](https://github.com/MorpheApp/morphe-cli/compare/v1.5.1-dev.2...v1.5.1-dev.3) (2026-03-13)


### Bug Fixes

* Use more logging verbosity when updating options.json ([#72](https://github.com/MorpheApp/morphe-cli/issues/72)) ([4d223f2](https://github.com/MorpheApp/morphe-cli/commit/4d223f299b690c100ff74ece7e4415f562c6ac96))

## [1.5.1-dev.2](https://github.com/MorpheApp/morphe-cli/compare/v1.5.1-dev.1...v1.5.1-dev.2) (2026-03-13)


### Bug Fixes

* Bump arsclib version, remove APKEditor ([412847e](https://github.com/MorpheApp/morphe-cli/commit/412847e5a0b990321b7443fe774f7420189035d6))

## [1.5.1-dev.1](https://github.com/MorpheApp/morphe-cli/compare/v1.5.0...v1.5.1-dev.1) (2026-03-13)


### Bug Fixes

* Update to Patcher 1.3.0 ([19c0846](https://github.com/MorpheApp/morphe-cli/commit/19c084612310cb590c90b809403450abf6a81560))

# [1.5.0](https://github.com/MorpheApp/morphe-cli/compare/v1.4.0...v1.5.0) (2026-03-07)


Expand Down
142 changes: 107 additions & 35 deletions build.gradle.kts
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
import org.jetbrains.kotlin.gradle.dsl.JvmTarget

plugins {
alias(libs.plugins.kotlin)
alias(libs.plugins.kotlin.jvm)
alias(libs.plugins.kotlin.compose)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.compose)
alias(libs.plugins.shadow)
application
`maven-publish`
Expand All @@ -11,10 +13,33 @@ plugins {

group = "app.morphe"

// ============================================================================
// JVM / Kotlin Configuration
// ============================================================================
kotlin {
jvmToolchain {
languageVersion.set(JavaLanguageVersion.of(17))
vendor.set(JvmVendorSpec.ADOPTIUM)
}
compilerOptions {
jvmTarget.set(JvmTarget.JVM_17)
}
}

// ============================================================================
// Application Entry Point
// ============================================================================
// Shadow JAR reads this for Main-Class manifest attribute.
//
// No args / double-click → GUI (Compose Desktop)
// With args (terminal) → CLI (PicoCLI)
application {
mainClass = "app.morphe.cli.command.MainCommandKt"
mainClass.set("app.morphe.MorpheLauncherKt")
}

// ============================================================================
// Repositories
// ============================================================================
repositories {
mavenLocal()
mavenCentral()
Expand All @@ -32,49 +57,71 @@ repositories {
maven { url = uri("https://jitpack.io") }
}

val apkEditorLib by configurations.creating

val strippedApkEditorLib by tasks.registering(org.gradle.jvm.tasks.Jar::class) {
archiveFileName.set("APKEditor-cli.jar")
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
doFirst {
from(apkEditorLib.resolve().map { zipTree(it) })
}
exclude(
"org/xmlpull/**",
"antlr/**",
"org/antlr/**",
"com/beust/jcommander/**",
"javax/annotation/**",
"smali.properties",
"baksmali.properties"
)
}

dependencies {
api(libs.morphe.patcher)
implementation(libs.arsclib)
implementation(libs.morphe.library)
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.serialization.json)
implementation(libs.picocli)
apkEditorLib(files("$rootDir/libs/APKEditor-1.4.7.jar"))
implementation(files(strippedApkEditorLib))

// -- Compose Desktop ---------------------------------------------------
// Platform-independent: single JAR runs on all supported OSes.
// Skiko auto-detects the OS at runtime and loads the correct native library.
implementation(compose.desktop.macos_arm64)
implementation(compose.desktop.macos_x64)
implementation(compose.desktop.linux_x64)
implementation(compose.desktop.linux_arm64)
implementation(compose.desktop.windows_x64)
implementation(compose.components.resources)
@Suppress("DEPRECATION")
implementation(compose.material3)
implementation(compose.materialIconsExtended)

// -- Async / Serialization ---------------------------------------------
implementation(libs.kotlinx.coroutines.core)
implementation(libs.kotlinx.coroutines.swing)
implementation(libs.kotlinx.serialization.json)
// testImplementation(libs.kotlin.test)
//}

// -- Networking (GUI) --------------------------------------------------
implementation(libs.ktor.client.core)
implementation(libs.ktor.client.cio)
implementation(libs.ktor.client.content.negotiation)
implementation(libs.ktor.serialization.kotlinx.json)
implementation(libs.ktor.client.logging)

// -- DI / Navigation (GUI) ---------------------------------------------
implementation(platform(libs.koin.bom))
implementation(libs.koin.core)
implementation(libs.koin.compose)

implementation(libs.voyager.navigator)
implementation(libs.voyager.screenmodel)
implementation(libs.voyager.koin)
implementation(libs.voyager.transitions)

// -- APK Parsing (GUI) -------------------------------------------------
implementation(libs.apk.parser)

// -- Testing -----------------------------------------------------------
testImplementation(libs.kotlin.test)
testImplementation(libs.junit.params)
testImplementation(libs.mockk)
}

kotlin {
compilerOptions {
jvmTarget.set(JvmTarget.JVM_11)
// ============================================================================
// Tasks
// ============================================================================
tasks {
jar {
manifest {
attributes(
"Implementation-Title" to project.name,
"Implementation-Version" to project.version
)
}
}
}

java {
targetCompatibility = JavaVersion.VERSION_11
}

tasks {
test {
useJUnitPlatform()
testLogging {
Expand All @@ -83,9 +130,15 @@ tasks {
}

processResources {
expand("projectVersion" to project.version)
// Only expand properties files, not binary files like PNG/ICO
filesMatching("**/*.properties") {
expand("projectVersion" to project.version)
}
}

// -------------------------------------------------------------------------
// Shadow JAR — the only distribution artifact
// -------------------------------------------------------------------------
shadowJar {
exclude(
"/prebuilt/linux/aapt",
Expand All @@ -95,14 +148,33 @@ tasks {
minimize {
exclude(dependency("org.bouncycastle:.*"))
exclude(dependency("app.morphe:morphe-patcher"))
// Ktor uses ServiceLoader
exclude(dependency("io.ktor:.*"))
// Koin uses reflection
exclude(dependency("io.insert-koin:.*"))
// Coroutines Swing provides Dispatchers.Main via ServiceLoader
exclude(dependency("org.jetbrains.kotlinx:kotlinx-coroutines-swing"))
}

mergeServiceFiles()
}

distTar {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

distZip {
duplicatesStrategy = DuplicatesStrategy.EXCLUDE
}

publish {
dependsOn(shadowJar)
}
}

// ============================================================================
// Publishing / Signing
// ============================================================================
// Needed by gradle-semantic-release-plugin.
// Tracking: https://github.com/KengoTODA/gradle-semantic-release-plugin/issues/435

Expand Down
2 changes: 1 addition & 1 deletion gradle.properties
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
org.gradle.parallel = true
org.gradle.caching = true
kotlin.code.style = official
version = 1.5.0
version = 1.6.0-dev.8
Loading
Loading