-
Notifications
You must be signed in to change notification settings - Fork 3
163 lines (147 loc) · 5.87 KB
/
build-apk.yml
File metadata and controls
163 lines (147 loc) · 5.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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
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: Commit version bump to main
if: startsWith(github.ref, 'refs/tags/')
shell: bash
run: |
set -euo pipefail
git config user.name "github-actions[bot]"
git config user.email "github-actions[bot]@users.noreply.github.com"
if ! git diff --quiet AndroidManifest.xml; then
git add AndroidManifest.xml
git commit -m "Bump version to ${GITHUB_REF_NAME#v}"
git push origin HEAD:main
fi
- name: Move tag to version-bumped commit
if: startsWith(github.ref, 'refs/tags/')
shell: bash
run: |
set -euo pipefail
# After committing the version bump to main, the tag still points
# to the pre-bump commit. Move it so raw.githubusercontent.com
# serves the correct AndroidManifest.xml for this tag.
BUMP_SHA="$(git rev-parse HEAD)"
git tag -f "${GITHUB_REF_NAME}" "${BUMP_SHA}"
git push origin "${GITHUB_REF_NAME}" --force
- 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 }}