Skip to content

Commit f3ab82c

Browse files
committed
build: rebuild Android.Compat.dll and add CI workflows
- Rebuild Android.Compat.dll with updated dependencies - Replace Android.Compat.dll build workflow with LFS verification check - Update gradle build scripts and dependency versions
1 parent 41a851f commit f3ab82c

6 files changed

Lines changed: 149 additions & 23 deletions

File tree

.github/workflows/docker-build.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,15 @@ jobs:
5858
with:
5959
dotnet-version: '8.0.x'
6060

61+
- name: Verify Android.Compat.dll from LFS
62+
run: |
63+
DLL="Mihon.ExtensionsBridge.Net/libs/Android.Compat.dll"
64+
if [ ! -f "$DLL" ]; then
65+
echo "::error::Android.Compat.dll not found. Run the 'Rebuild Android.Compat.dll' workflow first."
66+
exit 1
67+
fi
68+
echo "Android.Compat.dll: $(du -h "$DLL" | cut -f1)"
69+
6170
- name: Setup Node.js and pnpm
6271
uses: actions/setup-node@v4
6372
with:
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
name: Rebuild Android.Compat.dll
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
commit_result:
7+
description: 'Commit the rebuilt DLL back to the branch'
8+
required: true
9+
default: true
10+
type: boolean
11+
push:
12+
paths:
13+
- 'Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/gradle/libs.versions.toml'
14+
- 'Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/**/build.gradle.kts'
15+
- 'Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/settings.gradle.kts'
16+
- 'Mihon.ExtensionsBridge.Net/IKVM.Android.Compatibility.Layer.Builder/**'
17+
- 'Mihon.ExtensionsBridge.Net/IKVM.Android.Compatibility.Layer.CILPatcher/**'
18+
- 'Mihon.ExtensionsBridge.Net/IKVM.AndroidCompact.Build.ps1'
19+
20+
jobs:
21+
rebuild:
22+
runs-on: ubuntu-latest
23+
permissions:
24+
contents: write
25+
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
with:
30+
lfs: true
31+
token: ${{ secrets.GITHUB_TOKEN }}
32+
33+
- name: Setup JDK 21
34+
uses: actions/setup-java@v4
35+
with:
36+
distribution: 'temurin'
37+
java-version: '21'
38+
39+
- name: Setup .NET 8
40+
uses: actions/setup-dotnet@v4
41+
with:
42+
dotnet-version: '8.0.x'
43+
44+
- name: Setup Gradle
45+
uses: gradle/actions/setup-gradle@v4
46+
47+
- name: Build AndroidCompat fat JAR
48+
working-directory: Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer
49+
run: |
50+
chmod +x gradlew
51+
./gradlew fatJar :AndroidCompat:jar --no-daemon --stacktrace
52+
53+
- name: Verify fat JAR exists
54+
run: |
55+
JAR="Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/AndroidCompat/build/libs/AndroidCompat-1.0-all.jar"
56+
if [ ! -f "$JAR" ]; then
57+
echo "::error::Fat JAR not found at $JAR"
58+
exit 1
59+
fi
60+
echo "Fat JAR size: $(du -h "$JAR" | cut -f1)"
61+
62+
- name: Build IKVM Android.Compat.dll
63+
working-directory: Mihon.ExtensionsBridge.Net/IKVM.Android.Compatibility.Layer.Builder
64+
run: dotnet build -c Release
65+
66+
- name: Verify Builder output
67+
run: |
68+
DLL="Mihon.ExtensionsBridge.Net/IKVM.Android.Compatibility.Layer.Builder/bin/Release/net8.0/Android.Compat.dll"
69+
if [ ! -f "$DLL" ]; then
70+
echo "::error::Builder output not found at $DLL"
71+
exit 1
72+
fi
73+
echo "Builder DLL size: $(du -h "$DLL" | cut -f1)"
74+
75+
- name: Build CIL Patcher
76+
working-directory: Mihon.ExtensionsBridge.Net/IKVM.Android.Compatibility.Layer.CILPatcher
77+
run: dotnet build -c Release
78+
79+
- name: Run CIL Patcher
80+
run: |
81+
INPUT="Mihon.ExtensionsBridge.Net/IKVM.Android.Compatibility.Layer.Builder/bin/Release/net8.0/Android.Compat.dll"
82+
OUTPUT="Mihon.ExtensionsBridge.Net/libs/Android.Compat.dll"
83+
mkdir -p "$(dirname "$OUTPUT")"
84+
85+
PATCHER="Mihon.ExtensionsBridge.Net/IKVM.Android.Compatibility.Layer.CILPatcher/bin/Release/net8.0/IKVM.Android.Compatibility.Layer.CILPatcher"
86+
if [ -f "${PATCHER}.dll" ]; then
87+
dotnet "${PATCHER}.dll" "$INPUT" "$OUTPUT"
88+
elif [ -f "$PATCHER" ]; then
89+
"$PATCHER" "$INPUT" "$OUTPUT"
90+
else
91+
echo "::error::CIL Patcher executable not found"
92+
exit 1
93+
fi
94+
95+
- name: Verify final Android.Compat.dll
96+
run: |
97+
DLL="Mihon.ExtensionsBridge.Net/libs/Android.Compat.dll"
98+
if [ ! -f "$DLL" ]; then
99+
echo "::error::Final Android.Compat.dll not found"
100+
exit 1
101+
fi
102+
SIZE=$(du -h "$DLL" | cut -f1)
103+
SHA=$(sha256sum "$DLL" | cut -d' ' -f1)
104+
echo "## Android.Compat.dll Rebuilt" >> $GITHUB_STEP_SUMMARY
105+
echo "- **Size:** $SIZE" >> $GITHUB_STEP_SUMMARY
106+
echo "- **SHA256:** \`$SHA\`" >> $GITHUB_STEP_SUMMARY
107+
108+
- name: Upload artifact
109+
uses: actions/upload-artifact@v4
110+
with:
111+
name: Android.Compat.dll
112+
path: Mihon.ExtensionsBridge.Net/libs/Android.Compat.dll
113+
retention-days: 30
114+
115+
- name: Commit rebuilt DLL
116+
if: ${{ github.event_name == 'push' || inputs.commit_result }}
117+
run: |
118+
git config user.name "github-actions[bot]"
119+
git config user.email "github-actions[bot]@users.noreply.github.com"
120+
git add Mihon.ExtensionsBridge.Net/libs/Android.Compat.dll
121+
if git diff --cached --quiet; then
122+
echo "No changes to Android.Compat.dll"
123+
else
124+
KOTLIN_VER=$(grep 'kotlin = ' Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/gradle/libs.versions.toml | head -1 | sed 's/.*= "//;s/"//')
125+
git commit -m "$(cat <<EOF
126+
build: rebuild Android.Compat.dll
127+
128+
Triggered by changes to AndroidCompat build configuration.
129+
Kotlin ${KOTLIN_VER}
130+
EOF
131+
)"
132+
git push
133+
fi

Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/AndroidCompat/build.gradle.kts

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
import org.gradle.kotlin.dsl.withType
2-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
32
import de.undercouch.gradle.tasks.download.Download
43
import org.gradle.api.tasks.bundling.Jar
54
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
@@ -48,14 +47,8 @@ dependencies {
4847
implementation(libs.imageio.webp)
4948
}
5049
tasks {
51-
withType<KotlinCompile>().configureEach {
52-
kotlinOptions.freeCompilerArgs += "-Xcontext-receivers"
53-
kotlinOptions.freeCompilerArgs += "-opt-in=kotlinx.serialization.ExperimentalSerializationApi"
54-
55-
}
5650
withType<KotlinJvmCompile> {
5751
compilerOptions {
58-
freeCompilerArgs.add("-Xcontext-receivers")
5952
freeCompilerArgs.add("-opt-in=kotlinx.serialization.ExperimentalSerializationApi")
6053
}
6154
}

Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/build.gradle.kts

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import org.jetbrains.kotlin.gradle.dsl.JvmTarget
22
import org.jetbrains.kotlin.gradle.tasks.KotlinJvmCompile
3-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
43
import org.jlleitschuh.gradle.ktlint.KtlintExtension
54
import org.jlleitschuh.gradle.ktlint.KtlintPlugin
65

@@ -46,20 +45,12 @@ subprojects {
4645
}
4746

4847
tasks {
49-
50-
withType<KotlinCompile>().configureEach {
51-
kotlinOptions.freeCompilerArgs += "-Xcontext-receivers"
52-
kotlinOptions.freeCompilerArgs += "-opt-in=kotlinx.serialization.ExperimentalSerializationApi"
53-
54-
}
55-
5648
withType<KotlinJvmCompile> {
5749
if (plugins.hasPlugin(KtlintPlugin::class)) {
5850
dependsOn("ktlintFormat")
5951
}
6052
compilerOptions {
6153
jvmTarget = JvmTarget.fromTarget(libs.versions.jvmTarget.get())
62-
freeCompilerArgs.add("-Xcontext-receivers")
6354
freeCompilerArgs.add("-opt-in=kotlinx.serialization.ExperimentalSerializationApi")
6455
}
6556
}

Mihon.ExtensionsBridge.Net/Android.Compatibility.Layer/gradle/libs.versions.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
[versions]
2-
kotlin = "1.9.25"
3-
coroutines = "1.7.3"
4-
serialization = "1.6.3"
2+
kotlin = "2.3.0"
3+
coroutines = "1.10.2"
4+
serialization = "1.7.3"
55
jvmTarget = "1.8"
6-
okhttp = "5.0.0-alpha.11" # Major version is locked by Tachiyomi extensions
6+
okhttp = "5.3.2" # Must match Keiyoushi extension compilation target
77
jackson = "2.15.0" # jackson version locked by javalin, ref: `io.javalin.core.util.OptionalDependency`
88
dex2jar = "2.4.34"
99
rhino = "1.7.15"
@@ -121,7 +121,7 @@ kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", versi
121121
kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin"}
122122

123123
# Linter
124-
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version = "10.3.0"}
124+
ktlint = { id = "org.jlleitschuh.gradle.ktlint", version = "12.2.0"}
125125

126126
# Build config
127127
buildconfig = { id = "com.github.gmazzo.buildconfig", version = "6.0.7"}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
version https://git-lfs.github.com/spec/v1
2-
oid sha256:48dee358568f3c25353f96d24d7df630152d9a08f28c0309837c3cf155fedb89
3-
size 201415680
2+
oid sha256:6a231e322c40b47128da7c15a6835691c155aea0673250d7be3ac671bdcb4c4f
3+
size 202149376

0 commit comments

Comments
 (0)