-
Notifications
You must be signed in to change notification settings - Fork 148
215 lines (193 loc) · 8.67 KB
/
android-build.yml
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
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
name: "Build: Android"
on:
workflow_dispatch:
workflow_call:
inputs:
semver:
required: true
type: string
secrets:
KEYSTORE:
required: true
KEY_ALIAS:
required: true
KEY_PASS:
required: true
KEY_STORE_PASS:
required: true
push:
branches: [ "main" ]
paths: [ "mobile", "frontend" ]
pull_request:
branches: [ "main" ]
paths: [ "mobile", "frontend" ]
jobs:
build-android:
permissions: write-all
runs-on: ubuntu-latest
steps:
- name: 'Checkout'
uses: actions/checkout@v4
- name: 'Download Android Web.bundle Artifact (built frontend)'
if: inputs.semver == '' # Only if workflow fired from frontend-build.yml
uses: dawidd6/action-download-artifact@v6
with:
workflow: frontend-build.yml
workflow_conclusion: success
name: mobile-web.bundle
path: mobile/html/Web.bundle
- name: 'Download main.js Artifact for a release'
if: inputs.semver != '' # Only if fired as job in release.yml
uses: actions/download-artifact@v4
with:
name: mobile-web.bundle
path: mobile/html/Web.bundle
- name: 'Install npm Dependencies'
run: |
cd mobile
npm install
- name: 'Patch modules' # react-native-tor and react-native-encrypted-storage rely on deprecated jcenter repositories. We patch the modules temporarily
run: |
cd mobile
cp -r patch_modules/* node_modules/
- uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 11
- name: Setup Gradle
uses: gradle/gradle-build-action@v3
- name: Decode Keystore
id: decode_keystore
uses: timheuer/[email protected]
with:
fileName: 'keystore.jks'
fileDir: './'
encodedString: ${{ secrets.KEYSTORE }}
- name: 'Build Android Release'
run: |
cd mobile/android
./gradlew assembleRelease
env:
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASS: ${{ secrets.KEY_PASS }}
KEY_STORE_PASS: ${{ secrets.KEY_STORE_PASS }}
- name: 'Check for non-FOSS libraries'
run: |
wget https://github.com/iBotPeaches/Apktool/releases/download/v2.7.0/apktool_2.7.0.jar
wget https://github.com/iBotPeaches/Apktool/raw/master/scripts/linux/apktool
# clone the repo
git clone https://gitlab.com/IzzyOnDroid/repo.git
# create a directory for Apktool and move the apktool* files there
mkdir -p repo/lib/radar/tool
mv apktool* repo/lib/radar/tool
# create an alias for ease of use
chmod u+x repo/lib/radar/tool/apktool
mv repo/lib/radar/tool/apktool_2.7.0.jar repo/lib/radar/tool/apktool.jar
repo/bin/scanapk.php mobile/android/app/build/outputs/apk/release/app-universal-release.apk
- name: 'Get Commit Hash'
id: commit
uses: pr-mpt/actions-commit-hash@v3
# Create artifacts (only for Release)
# Create app-universal-release APK artifact asset for Release
- name: 'Upload universal .apk Release Artifact (for Release)'
uses: actions/upload-artifact@v4
if: inputs.semver != '' # If this workflow is called from release.yml
with:
name: robosats-${{ inputs.semver }}-universal.apk
path: mobile/android/app/build/outputs/apk/release/app-universal-release.apk
# Create app-arm64-v8a-release APK artifact asset for Release
- name: 'Upload arm64-v8a .apk Release Artifact (for Release)'
uses: actions/upload-artifact@v4
if: inputs.semver != '' # If this workflow is called from release.yml
with:
name: robosats-${{ inputs.semver }}-arm64-v8a.apk
path: mobile/android/app/build/outputs/apk/release/app-arm64-v8a-release.apk
# Create app-armeabi-v7a-release APK artifact asset for Release
- name: 'Upload armeabi-v7a .apk Release Artifact (for Release)'
uses: actions/upload-artifact@v4
if: inputs.semver != '' # If this workflow is called from release.yml
with:
name: robosats-${{ inputs.semver }}-armeabi-v7a.apk
path: mobile/android/app/build/outputs/apk/release/app-armeabi-v7a-release.apk
# Create app-x86_64-release APK artifact asset for Release
- name: 'Upload x86_64 .apk Release Artifact (for Release)'
uses: actions/upload-artifact@v4
if: inputs.semver != '' # If this workflow is called from release.yml
with:
name: robosats-${{ inputs.semver }}-x86_64.apk
path: mobile/android/app/build/outputs/apk/release/app-x86_64-release.apk
# Create app-x86-release APK artifact asset for Release
- name: 'Upload x86 .apk Release Artifact (for Release)'
uses: actions/upload-artifact@v4
if: inputs.semver != '' # If this workflow is called from release.yml
with:
name: robosats-${{ inputs.semver }}-x86.apk
path: mobile/android/app/build/outputs/apk/release/app-x86-release.apk
- name: 'Create Pre-release'
id: create_release
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release)
uses: ncipollo/[email protected]
with:
tag: android-${{ steps.commit.outputs.short }}
name: robosats-android-${{ steps.commit.outputs.short }}
prerelease: true
# Upload universal APK to pre-release
- name: 'Upload universal Pre-release APK Asset'
id: upload-release-universal-apk-asset
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./mobile/android/app/build/outputs/apk/release/app-universal-release.apk
asset_name: robosats-${{ steps.commit.outputs.short }}-universal.apk
asset_content_type: application/apk
# Upload arm64-v8a APK to pre-release
- name: 'Upload arm64-v8a Pre-release APK Asset'
id: upload-release-arm64-v8a-apk-asset
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./mobile/android/app/build/outputs/apk/release/app-arm64-v8a-release.apk
asset_name: robosats-${{ steps.commit.outputs.short }}-arm64-v8a.apk
asset_content_type: application/apk
# Upload armeabi-v7a APK to pre-release
- name: 'Upload armeabi-v7a Pre-release APK Asset'
id: upload-release-armeabi-v7a-apk-asset
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./mobile/android/app/build/outputs/apk/release/app-armeabi-v7a-release.apk
asset_name: robosats-${{ steps.commit.outputs.short }}-armeabi-v7a.apk
asset_content_type: application/apk
# Upload x86_64 APK to pre-release
- name: 'Upload x86_64 Pre-release APK Asset'
id: upload-release-x86_64-apk-asset
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./mobile/android/app/build/outputs/apk/release/app-x86_64-release.apk
asset_name: robosats-${{ steps.commit.outputs.short }}-x86_64.apk
asset_content_type: application/apk
# Upload x86 APK to pre-release
- name: 'Upload x86 Pre-release APK Asset'
id: upload-release-x86-apk-asset
if: inputs.semver == '' # only if this workflow is not called from a push to tag (a Release)
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./mobile/android/app/build/outputs/apk/release/app-x86-release.apk
asset_name: robosats-${{ steps.commit.outputs.short }}-x86.apk
asset_content_type: application/apk