@@ -2,69 +2,122 @@ name: Build KingWatch APK
22
33on :
44 push :
5- branches :
6- - main
5+ branches : [ main ]
6+ pull_request :
7+ branches : [ main ]
78 workflow_dispatch :
89
910jobs :
1011 build :
1112 runs-on : ubuntu-22.04
13+ timeout-minutes : 60
1214
1315 steps :
14-
16+ # ── 1. Checkout ──────────────────────────────────────────────────────────
1517 - name : Checkout repository
1618 uses : actions/checkout@v4
1719
18- - name : Setup Python
20+ # ── 2. Python ────────────────────────────────────────────────────────────
21+ - name : Set up Python 3.10
1922 uses : actions/setup-python@v5
2023 with :
2124 python-version : " 3.10"
2225
26+ # ── 3. System dependencies ───────────────────────────────────────────────
2327 - name : Install system dependencies
2428 run : |
25- sudo apt update
26- sudo apt install -y \
27- git zip unzip openjdk-17-jdk \
28- autoconf libtool pkg-config \
29- zlib1g-dev libncurses5-dev libncursesw5-dev \
30- libtinfo5 cmake libffi-dev libssl-dev \
31- build-essential ccache wget
29+ sudo apt-get update -qq
30+ sudo apt-get install -y --no-install-recommends \
31+ git zip unzip curl wget \
32+ build-essential ccache \
33+ libffi-dev libssl-dev \
34+ libsqlite3-dev \
35+ autoconf libtool \
36+ pkg-config \
37+ cmake \
38+ libltdl-dev \
39+ python3-dev \
40+ openjdk-17-jdk-headless
3241
33- - name : Install Android SDK
42+ # ── 4. Java ──────────────────────────────────────────────────────────────
43+ - name : Set JAVA_HOME
3444 run : |
35- mkdir -p $HOME/android-sdk/cmdline-tools
36- cd $HOME/android-sdk/cmdline-tools
37- wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
38- unzip commandlinetools-linux-*_latest.zip
39- mv cmdline-tools latest
45+ echo "JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> $GITHUB_ENV
4046
41- echo "ANDROID_HOME=$HOME/android-sdk" >> $GITHUB_ENV
42- echo "$HOME/android-sdk/cmdline-tools/latest/bin" >> $GITHUB_PATH
43- echo "$HOME/android-sdk/platform-tools" >> $GITHUB_PATH
47+ # ── 5. pip packages ──────────────────────────────────────────────────────
48+ - name : Install Python build tools
49+ run : |
50+ pip install --upgrade pip setuptools wheel
51+ pip install buildozer==1.5.0
52+ pip install cython==0.29.33
4453
45- - name : Accept Android licenses
46- run : yes | sdkmanager --licenses
54+ # ── 6. Android SDK / NDK cache ───────────────────────────────────────────
55+ - name : Cache Android SDK, NDK and buildozer global
56+ uses : actions/cache@v4
57+ with :
58+ path : |
59+ ~/.buildozer/android/platform/android-sdk
60+ ~/.buildozer/android/platform/android-ndk-r25b
61+ key : android-sdk-ndk-${{ runner.os }}-r25b-sdk33
62+ restore-keys : |
63+ android-sdk-ndk-${{ runner.os }}-
4764
48- - name : Install Python dependencies
49- run : |
50- pip install --upgrade pip
51- pip install cython==0.29.36 buildozer virtualenv
65+ # ── 7. Buildozer local cache ─────────────────────────────────────────────
66+ - name : Cache buildozer local build
67+ uses : actions/cache@v4
68+ with :
69+ path : .buildozer
70+ key : buildozer-${{ runner.os }}-${{ hashFiles('buildozer.spec') }}-${{ hashFiles('main.py') }}
71+ restore-keys : |
72+ buildozer-${{ runner.os }}-${{ hashFiles('buildozer.spec') }}-
73+ buildozer-${{ runner.os }}-
5274
53- - name : Clean previous build
75+ # ── 8. Accept Android licenses ───────────────────────────────────────────
76+ - name : Pre-accept Android SDK licenses
5477 run : |
55- rm -rf .buildozer
56- rm -rf bin
78+ mkdir -p ~/.buildozer/android/platform/android-sdk/licenses
79+ echo "8933bad161af4178b1185d1a37fbf41ea5269c55" > ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-license
80+ echo "d56f5187479451eabf01fb78af6dfcb131a6481e" >> ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-license
81+ echo "24333f8a63b6825ea9c5514f83c2829b004d1fee" >> ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-license
82+ echo "84831b9409646a918e30573bab4c9c91346d8abd" > ~/.buildozer/android/platform/android-sdk/licenses/android-sdk-preview-license
5783
58- - name : Set JAVA_HOME
84+ # ── 9. Build APK ─────────────────────────────────────────────────────────
85+ - name : Build debug APK with buildozer
86+ env :
87+ JAVA_HOME : ${{ env.JAVA_HOME }}
5988 run : |
60- echo "JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))" >> $GITHUB_ENV
89+ # Show spec for debug
90+ echo "=== buildozer.spec ==="
91+ cat buildozer.spec
92+ echo "=== main.py head ==="
93+ head -50 main.py || echo "main.py not found!"
94+ echo "====================="
95+ # Run buildozer
96+ buildozer -v android debug 2>&1 | tee build_output.log
97+ echo "Exit code: $?"
6198
62- - name : Build APK
99+ # ── 10. Show build result ────────────────────────────────────────────────
100+ - name : Check APK produced
63101 run : |
64- buildozer android debug
102+ echo "Contents of bin/:"
103+ ls -lh bin/ 2>/dev/null || echo "bin/ directory does not exist"
104+ echo "APK files:"
105+ find . -name "*.apk" 2>/dev/null || echo "No APK found"
106+
107+ # ── 11. Upload APK ───────────────────────────────────────────────────────
108+ - name : Upload APK artifact
109+ if : success()
110+ uses : actions/upload-artifact@v4
111+ with :
112+ name : KingWatch-Pro-debug
113+ path : bin/*.apk
114+ if-no-files-found : error
65115
66- - name : Upload APK
116+ # ── 12. Upload full log (always) ─────────────────────────────────────────
117+ - name : Upload build log
118+ if : always()
67119 uses : actions/upload-artifact@v4
68120 with :
69- name : kingwatch-apk
70- path : bin/*.apk
121+ name : build-log
122+ path : build_output.log
123+ if-no-files-found : warn
0 commit comments