-
Notifications
You must be signed in to change notification settings - Fork 3
138 lines (124 loc) · 4.87 KB
/
build-apk.yml
File metadata and controls
138 lines (124 loc) · 4.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
name: build-apk
on:
push:
branches:
- main
tags:
- "v*"
pull_request:
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Install SDKMAN and Java 8
shell: bash
run: |
set -eo pipefail
curl -s "https://get.sdkman.io" | bash
export SDKMAN_DIR="${HOME}/.sdkman"
source "${SDKMAN_DIR}/bin/sdkman-init.sh"
sdk install java 8.0.302-open
java -version
- name: Download Android ADT bundle
shell: bash
run: |
set -euo pipefail
ADT_URL="http://dl.google.com/android/adt/adt-bundle-linux-x86_64-20140702.zip"
ADT_ZIP="${RUNNER_TEMP}/adt-bundle.zip"
curl -L "${ADT_URL}" -o "${ADT_ZIP}"
unzip -q "${ADT_ZIP}" -d "${RUNNER_TEMP}"
- name: Download SpongyCastle JARs
shell: bash
run: |
set -euo pipefail
curl -L "https://repo1.maven.org/maven2/com/madgag/spongycastle/core/1.58.0.0/core-1.58.0.0.jar" \
-o "libs/spongycastle-core-1.58.0.0.jar"
curl -L "https://repo1.maven.org/maven2/com/madgag/spongycastle/prov/1.58.0.0/prov-1.58.0.0.jar" \
-o "libs/spongycastle-prov-1.58.0.0.jar"
curl -L "https://repo1.maven.org/maven2/com/madgag/spongycastle/bctls-jdk15on/1.58.0.0/bctls-jdk15on-1.58.0.0.jar" \
-o "libs/spongycastle-bctls-jdk15on-1.58.0.0.jar"
- name: Stamp version from tag
if: startsWith(github.ref, 'refs/tags/')
shell: bash
run: |
set -euo pipefail
chmod +x tools/set-version.sh
tools/set-version.sh "${GITHUB_REF_NAME}"
- name: Configure release signing
if: startsWith(github.ref, 'refs/tags/')
shell: bash
env:
ANDROID_KEYSTORE_BASE64: ${{ secrets.ANDROID_KEYSTORE_BASE64 }}
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }}
ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }}
run: |
set -euo pipefail
if [[ -z "${ANDROID_KEYSTORE_BASE64}" ]]; then
echo "Missing ANDROID_KEYSTORE_BASE64 secret." >&2
exit 1
fi
if [[ -z "${ANDROID_KEYSTORE_PASSWORD}" || -z "${ANDROID_KEY_ALIAS}" || -z "${ANDROID_KEY_PASSWORD}" ]]; then
echo "Missing keystore secrets (password/alias/key password)." >&2
exit 1
fi
KEYS_DIR="${RUNNER_TEMP}/keys"
mkdir -p "${KEYS_DIR}"
KEYSTORE_PATH="${KEYS_DIR}/trmnl-release.keystore"
echo "${ANDROID_KEYSTORE_BASE64}" | base64 -d > "${KEYSTORE_PATH}"
cat > ant.properties <<EOF
key.store=${KEYSTORE_PATH}
key.alias=${ANDROID_KEY_ALIAS}
key.store.password=${ANDROID_KEYSTORE_PASSWORD}
key.alias.password=${ANDROID_KEY_PASSWORD}
EOF
- name: Build APK with Ant
shell: bash
run: |
set -euo pipefail
export JAVA_HOME="${HOME}/.sdkman/candidates/java/8.0.302-open"
export PATH="${JAVA_HOME}/bin:${PATH}"
ADT_ROOT="${RUNNER_TEMP}/adt-bundle-linux-x86_64-20140702"
SDK_DIR="${ADT_ROOT}/sdk"
ANT_BIN="${ADT_ROOT}/eclipse/plugins/org.apache.ant_1.8.3.v201301120609/bin/ant"
echo "sdk.dir=${SDK_DIR}" > local.properties
chmod +x "${ANT_BIN}"
ANT_TARGET="debug"
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
ANT_TARGET="release"
fi
"${ANT_BIN}" -Dbuild.compiler=modern clean "${ANT_TARGET}"
- name: Capture APK path
id: apk
shell: bash
run: |
set -euo pipefail
if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
APK_PATH="$(ls -1 bin/*-release.apk 2>/dev/null | head -n 1 || true)"
else
APK_PATH="$(ls -1 bin/*-debug.apk 2>/dev/null | grep -v -- "-unaligned.apk" | head -n 1 || true)"
fi
if [[ -z "${APK_PATH}" ]]; then
APK_PATH="$(ls -1 bin/*-debug-unaligned.apk bin/*.apk 2>/dev/null | head -n 1 || true)"
fi
if [[ -z "${APK_PATH}" ]]; then
echo "APK not found in bin/. Ant build may have failed." >&2
exit 1
fi
echo "path=${APK_PATH}" >> "${GITHUB_OUTPUT}"
- name: Upload APK artifact
uses: actions/upload-artifact@v4
with:
name: trmnl-nook-simple-touch-apk
path: ${{ steps.apk.outputs.path }}
- name: Publish GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
prerelease: ${{ contains(github.ref_name, '-rc.') || contains(github.ref_name, '-rc') }}
files: ${{ steps.apk.outputs.path }}