.hearthforge-ci.toml
⎇
Raw
1# Steps run in file order, in one container, sharing /ci/build.
2
3image = "docker.io/library/debian:trixie"
4work_dir = "/ci/build"
5clone_project_to = "/ci/build/project"
6shell_setup = """
7set -euo pipefail
8export ANDROID_HOME=/ci/cache/android-sdk
9"""
10
11timeout = 3600
12memory_limit = "6g"
13
14cache = [
15 { path = "/ci/cache/android-sdk", max_size = "3g" },
16 { path = "/root/.gradle", max_size = "4g" },
17]
18
19[on]
20push = ["master"]
21tag = true
22
23[[steps]]
24name = "setup"
25timeout = 900
26run_sh = """
27apt-get update -qq && apt-get install -y -qq --no-install-recommends \
28 openjdk-21-jdk-headless curl unzip ca-certificates > /dev/null
29
30# Only for the license files. Gradle installs the platform and build-tools
31# that the app needs on its own.
32if [ ! -x "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" ]; then
33 curl -fsSL -o /tmp/clt.zip \
34 "https://dl.google.com/android/repository/commandlinetools-linux-15859902_latest.zip"
35 echo "040d3996a65543d22ec4bf73e4c37aa37a8d4af4 /tmp/clt.zip" | sha1sum -c -
36 unzip -q /tmp/clt.zip -d /tmp/clt
37 mkdir -p "$ANDROID_HOME/cmdline-tools"
38 mv /tmp/clt/cmdline-tools "$ANDROID_HOME/cmdline-tools/latest"
39 rm -r /tmp/clt /tmp/clt.zip
40fi
41(yes || true) | "$ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager" --licenses > /dev/null
42
43java -version
44"""
45
46[[steps]]
47name = "test"
48timeout = 1800
49run_sh = "cd project && ./gradlew --no-daemon testDebugUnitTest"
50
51[[steps]]
52name = "build"
53timeout = 1800
54run_sh = """
55cd project
56./gradlew --no-daemon assembleDebug
57cp app/build/outputs/apk/debug/app-debug.apk /ci/build/upapp-debug.apk
58"""
59publish_file = ["/ci/build/upapp-debug.apk"]
60
61# Needs the CI secrets ANDROID_KEYSTORE_BASE64 (base64 of a PKCS12 keystore)
62# and ANDROID_KEYSTORE_PASSWORD. Releases must keep the same key: Android
63# refuses an update signed with another key.
64[[steps]]
65name = "release"
66run_if = 'test -n "${CI_COMMIT_TAG}"'
67warn_on_fail = true
68timeout = 1800
69run_sh = """
70if [ -z "${ANDROID_KEYSTORE_BASE64:-}" ] || [ -z "${ANDROID_KEYSTORE_PASSWORD:-}" ]; then
71 echo "WARNING: CI secrets ANDROID_KEYSTORE_BASE64 or ANDROID_KEYSTORE_PASSWORD missing. No signed release APK."
72 exit 1
73fi
74export ANDROID_KEYSTORE=/tmp/release.p12 ANDROID_KEY_ALIAS=upapp
75printf '%s' "$ANDROID_KEYSTORE_BASE64" | base64 -d > "$ANDROID_KEYSTORE"
76cd project
77./gradlew --no-daemon assembleRelease
78cp app/build/outputs/apk/release/app-release.apk /ci/build/upapp-release.apk
79"""
80publish_file = ["/ci/build/upapp-release.apk"]
81
82[[steps]]
83name = "lint"
84warn_on_fail = true
85run_sh = "cd project && ./gradlew --no-daemon lintDebug"
86