Skip to content

Commit 9d998a9

Browse files
committed
Migrate android build to gitea actions
1 parent 40d8c82 commit 9d998a9

5 files changed

Lines changed: 172 additions & 4 deletions

File tree

‎.buildbot/android/build.sh‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/bin/bash
2+
exit 0 # migrated to .gitea/workflows/android.yml
23
export LC_ALL=en_US.UTF-8
34
export LANG=en_US.UTF-8
45

‎.buildbot/android/test.sh‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
#!/bin/bash
2+
exit 0 # migrated to .gitea/workflows/android.yml
23

34
RELEASE_ARTIFACT=$(grep release_artifact packages/android/buildozer.spec |cut -d= -f2|tr -Cd 'a-z')
45

‎.gitea/workflows/android.yml‎

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
name: Android Build
2+
3+
on:
4+
push:
5+
branches: [master, main, v0.6]
6+
pull_request:
7+
branches: [master, main, v0.6]
8+
9+
jobs:
10+
build:
11+
name: buildozer android debug
12+
runs-on: ubuntu-latest
13+
container: ubuntu:focal
14+
15+
steps:
16+
- name: Install system dependencies
17+
env:
18+
DEBIAN_FRONTEND: noninteractive
19+
run: |
20+
apt-get update -qq
21+
apt-get -y install -qq --no-install-recommends \
22+
locales git curl autoconf automake build-essential cmake \
23+
libtool libltdl-dev libffi-dev libssl-dev \
24+
patch pkg-config python-is-python3 python3-dev python3-pip \
25+
unzip zip openjdk-17-jdk libzbar0 gettext
26+
locale-gen en_US.UTF-8
27+
28+
- name: Checkout repository
29+
env:
30+
TOKEN: ${{ github.token }}
31+
run: |
32+
git config --global --add safe.directory "$PWD"
33+
git init
34+
SERVER="${GITHUB_SERVER_URL#https://}"
35+
git remote add origin "https://x-access-token:${TOKEN}@${SERVER}/${GITHUB_REPOSITORY}.git"
36+
git fetch --depth 1 origin "${GITHUB_SHA}"
37+
git checkout FETCH_HEAD
38+
39+
- name: Install buildozer and cython
40+
run: pip install buildozer cython==3.0.10 virtualenv
41+
42+
- name: Create build user
43+
run: |
44+
useradd -m builder
45+
chown -R builder:builder .
46+
chown -R builder:builder "${RUNNER_TOOL_CACHE}"
47+
48+
- name: Prepare source tree
49+
run: |
50+
# buildozer symlink workaround (from build.sh)
51+
rm -rf src/pybitmessage
52+
mkdir -p src/pybitmessage
53+
cp src/*.py src/pybitmessage
54+
cp -r src/bitmessagekivy src/backend src/mockbm src/images src/pybitmessage
55+
56+
# Symlink both buildozer directories to persistent tool cache:
57+
# ~/.buildozer holds SDK/NDK downloads
58+
# packages/android/.buildozer holds p4a toolchain and build artifacts
59+
mkdir -p "${RUNNER_TOOL_CACHE}/buildozer-home" "${RUNNER_TOOL_CACHE}/buildozer-builddir"
60+
ln -sfn "${RUNNER_TOOL_CACHE}/buildozer-home" /home/builder/.buildozer
61+
ln -sfn "${RUNNER_TOOL_CACHE}/buildozer-builddir" packages/android/.buildozer
62+
chown -R builder:builder "${RUNNER_TOOL_CACHE}/buildozer-home" "${RUNNER_TOOL_CACHE}/buildozer-builddir"
63+
64+
- name: Build APK
65+
env:
66+
LC_ALL: en_US.UTF-8
67+
LANG: en_US.UTF-8
68+
run: |
69+
runuser -u builder -- bash -c '
70+
# gradle OOM workaround
71+
mkdir -p ~/.gradle
72+
echo "org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8" \
73+
> ~/.gradle/gradle.properties
74+
cd packages/android
75+
buildozer android debug
76+
'
77+
78+
- name: Verify APK contents
79+
run: |
80+
RELEASE_ARTIFACT=$(grep release_artifact packages/android/buildozer.spec | cut -d= -f2 | tr -Cd 'a-z')
81+
if [ "$RELEASE_ARTIFACT" = "aab" ]; then
82+
echo "Release artifact is AAB, skipping APK verification"
83+
exit 0
84+
fi
85+
unzip -p packages/android/bin/*.apk assets/private.tar \
86+
| tar --list -z > package.list
87+
cat package.list
88+
grep '\.sql$' package.list || exit 1
89+
90+

‎.gitea/workflows/tox-lint.yml‎

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
name: Tox Linter Tests
2+
3+
on:
4+
push:
5+
branches: [master, main, v0.6]
6+
pull_request:
7+
branches: [master, main, v0.6]
8+
9+
jobs:
10+
lint:
11+
name: "${{ matrix.tox-env }} / python ${{ matrix.python-version }}"
12+
runs-on: ubuntu-latest
13+
container: ${{ matrix.container }}
14+
strategy:
15+
fail-fast: false
16+
matrix:
17+
tox-env: [bandit, flake8, pycodestyle, pylint]
18+
python-version: ["2.7", "3.10"]
19+
include:
20+
- python-version: "2.7"
21+
container: "python:2.7-buster"
22+
tox-suffix: "-py27"
23+
- python-version: "3.10"
24+
tox-suffix: ""
25+
26+
steps:
27+
# ── System packages ────────────────────────────────────────
28+
# Container (Python 2): runs as root, needs git for checkout
29+
- name: Install system dependencies (container)
30+
if: matrix.python-version == '2.7'
31+
run: |
32+
sed -i 's|deb.debian.org|archive.debian.org|g' /etc/apt/sources.list
33+
sed -i 's|security.debian.org|archive.debian.org|g' /etc/apt/sources.list
34+
sed -i '/buster-updates/d' /etc/apt/sources.list
35+
apt-get update -q
36+
apt-get install -qy git libcap-dev
37+
38+
# Host VM (Python 3): git is pre-installed, just need libcap-dev
39+
- name: Install system dependencies
40+
if: matrix.python-version != '2.7'
41+
run: |
42+
sudo apt-get update -q
43+
sudo apt-get install -qy libcap-dev
44+
45+
# GitHub mounts Node into containers, so actions/checkout works everywhere.
46+
# Gitea runners don't, so the buster container needs a manual git clone.
47+
- name: Checkout repository
48+
if: "!(matrix.python-version == '2.7' && env.GITEA_ACTIONS == 'true')"
49+
uses: actions/checkout@v4
50+
51+
- name: Checkout repository (Gitea container)
52+
if: matrix.python-version == '2.7' && env.GITEA_ACTIONS == 'true'
53+
env:
54+
TOKEN: ${{ github.token }}
55+
run: |
56+
git config --global --add safe.directory "$PWD"
57+
git init
58+
SERVER="${GITHUB_SERVER_URL#https://}"
59+
git remote add origin "https://x-access-token:${TOKEN}@${SERVER}/${GITHUB_REPOSITORY}.git"
60+
git fetch --depth 1 origin "${GITHUB_SHA}"
61+
git checkout FETCH_HEAD
62+
63+
# ── Python 3 ───────────────────────────────────────────────
64+
- name: Set up Python ${{ matrix.python-version }}
65+
if: matrix.python-version != '2.7'
66+
uses: actions/setup-python@v5
67+
with:
68+
python-version: ${{ matrix.python-version }}
69+
70+
# ── Common ─────────────────────────────────────────────────
71+
- name: Install tox
72+
run: |
73+
pip install "tox<4" "virtualenv<20.22.0"
74+
75+
- name: Run tox -e ${{ matrix.tox-env }}${{ matrix.tox-suffix }}
76+
run: tox -e ${{ matrix.tox-env }}${{ matrix.tox-suffix }}

‎packages/android/buildozer.spec‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -107,13 +107,13 @@ android.ndk_api = 21
107107
android.private_storage = True
108108

109109
# (str) Android NDK directory (if empty, it will be automatically downloaded.)
110-
android.ndk_path = /opt/android/android-ndk
110+
#android.ndk_path =
111111

112112
# (str) Android SDK directory (if empty, it will be automatically downloaded.)
113-
android.sdk_path = /opt/android/android-sdk
113+
#android.sdk_path =
114114

115115
# (str) ANT directory (if empty, it will be automatically downloaded.)
116-
android.ant_path = /opt/android/apache-ant
116+
#android.ant_path =
117117

118118
# (bool) If True, then skip trying to update the Android sdk
119119
# This can be useful to avoid excess Internet downloads or save time
@@ -124,7 +124,7 @@ android.ant_path = /opt/android/apache-ant
124124
# agreements. This is intended for automation only. If set to False,
125125
# the default, you will be shown the license when first running
126126
# buildozer.
127-
# android.accept_sdk_license = False
127+
android.accept_sdk_license = True
128128

129129
# (str) Android entry point, default is ok for Kivy-based app
130130
#android.entrypoint = org.renpy.android.PythonActivity

0 commit comments

Comments
 (0)