-
Notifications
You must be signed in to change notification settings - Fork 3
151 lines (134 loc) · 6.11 KB
/
ubuntu_build_android.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
name: Android build on Ubuntu
on:
push:
branches:
- develop
- upgrade/*
pull_request:
branches:
- develop
- main
jobs:
build:
runs-on: ubuntu-latest
timeout-minutes: 30
steps:
- name: Checkout branch
uses: actions/checkout@v2
- name: Upgrade npm to latest version
run: sudo npm i -g npm@latest
- name: Check versions
run: |
echo "Node version:"
node --version
echo "NPM version:"
npm --version
echo "Java version:"
java -version
echo "PATH:"
echo $PATH
echo "ANDROID_HOME:"
echo $ANDROID_HOME
echo "Bash version:"
bash -version
- name: Installing google-drive-upload script
env:
CLIENT_ID: ${{ secrets.GOOGLE_DRIVE_CLIENT_ID }}
CLIENT_SECRET: ${{ secrets.GOOGLE_DRIVE_CLIENT_SECRET }}
REFRESH_TOKEN: ${{ secrets.GOOGLE_DRIVE_REFRESH_TOKEN }}
ACCESS_TOKEN: ${{ secrets.GOOGLE_DRIVE_ACCESS_TOKEN }}
run: |
source ~/.bashrc
echo $PATH
curl --compressed -s https://raw.githubusercontent.com/labbots/google-drive-upload/v2.7/install.sh | bash -s -- -R v2.7
echo "CLIENT_ID=\"$CLIENT_ID\"" >> ~/.googledrive.conf
echo "CLIENT_SECRET=\"$CLIENT_SECRET\"" >> ~/.googledrive.conf
echo "REFRESH_TOKEN=\"$REFRESH_TOKEN\"" >> ~/.googledrive.conf
echo "ACCESS_TOKEN=\"$ACCESS_TOKEN\"" >> ~/.googledrive.conf
echo "ACCESS_TOKEN_EXPIRY=" >> ~/.googledrive.conf
echo "ROOT_FOLDER=\"1sO16rDuJA8McRA8-Q-I6R2OjMGcG4nEp\"" >> ~/.googledrive.conf
echo "ROOT_FOLDER_NAME=" >> ~/.googledrive.conf
- name: Caching node modules
uses: actions/cache@v1
with:
path: ~/.npm
key: ${{ runner.os }}-node-treemapper2-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-treemapper2-
- name: Install npm
run: npm install --legacy-peer-deps
- name: Setting Environment Variables
env:
MAPBOXGL_ACCCESS_TOKEN: ${{ secrets.MAPBOXGL_ACCCESS_TOKEN }}
BUGSNAP_CLIENT_KEY: ${{ secrets.BUGSNAP_CLIENT_KEY }}
AUTH0_DOMAIN: ${{ secrets.AUTH0_DOMAIN }}
AUTH0_CLIENT_ID: ${{ secrets.AUTH0_CLIENT_ID }}
API_ENDPOINT: ${{ secrets.API_ENDPOINT }}
CDN_URL: ${{ secrets.CDN_URL }}
WEB_APP_URL: ${{ secrets.WEB_APP_URL }}
run: |
echo "MAPBOXGL_ACCCESS_TOKEN=$MAPBOXGL_ACCCESS_TOKEN" >> .env
echo "BUGSNAP_CLIENT_KEY=$BUGSNAP_CLIENT_KEY" >> .env
echo "AUTH0_DOMAIN=$AUTH0_DOMAIN" >> .env
echo "AUTH0_CLIENT_ID=$AUTH0_CLIENT_ID" >> .env
echo "API_ENDPOINT=$API_ENDPOINT" >> .env
echo "CDN_URL=$CDN_URL" >> .env
echo "WEB_APP_URL=$WEB_APP_URL" >> .env
cp .env .env.staging
- name: Preparing Android build
env:
android_release_password: ${{ secrets.ANDROID_RELEASE_PASSWORD }}
download_token: ${{ secrets.MAPBOXGL_DOWNLOAD_TOKEN }}
run: |
# prepare local.properties
echo "MYAPP_RELEASE_STORE_PASSWORD=$android_release_password" > android/local.properties
echo "MYAPP_RELEASE_KEY_PASSWORD=$android_release_password" >> android/local.properties
echo "MAPBOX_DOWNLOADS_TOKEN=$download_token" >> android/local.properties
- name: Fixes for Android Build
run: |
# fix problems with 'Error: ENOSPC: System limit for number of file watchers reached'
# echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
# fix for task ':app:stripDevelopReleaseDebugSymbols'
# (echo y; echo y; echo y;) | sudo $ANDROID_HOME/tools/bin/sdkmanager 'ndk;20.0.5594570'
- name: Caching Gradle dependencies
uses: actions/cache@v1
with:
path: ~/.gradle/caches
key: ${{ runner.os }}-gradle-treemapper2-${{ hashFiles('android/*.gradle') }}
restore-keys: |
${{ runner.os }}-gradle-treemapper2-
- name: Android Build
run: ./gradlew assembleStagingRelease --stacktrace --no-daemon
working-directory: ./android
# We only have 0.5GB space to store artifacts for GitHub actions
# - name: Upload Artifact
# uses: actions/upload-artifact@v1
# with:
# name: app-release.apk
# path: android/app/build/outputs/apk/release/
- name: Prepare Android APK for upload
run: |
upload_file=TreeMapper-`echo $GITHUB_REF | awk '{split($0,a,"/"); print a[3]}'`.apk
echo "upload_file=$upload_file" >> $GITHUB_ENV
mkdir -p uploads
mv android/app/build/outputs/apk/staging/release/app-staging-release.apk uploads/$upload_file
# depends on existence of upload file at uploads/$upload_file
- name: Upload Android APK to Browserstack
env:
BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
run: |
curl -u "planetit1:$BROWSERSTACK_ACCESS_KEY" -X POST "https://api-cloud.browserstack.com/app-live/upload" -F "file=@uploads/$upload_file"
curl -u "planetit1:$BROWSERSTACK_ACCESS_KEY" -X POST "https://api-cloud.browserstack.com/app-automate/upload" -F "file=@uploads/$upload_file"
# depends on existence of upload file at uploads/$upload_file
- name: Upload Android APK to Google Drive
run: |
source ~/.bashrc
# this is a dirty hack as adding the path with source ~/.bashrc does not seem to work
source ~/.google-drive-upload/google-drive-upload.binpath
gupload -C TreeMapperApp uploads/$upload_file
- name: Slack notification
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
run: |
payload="{\"channel\": \"#notifications-git\", \"username\": \"webhookbot\", \"text\": \"Finished GitHub action $GITHUB_WORKFLOW for $GITHUB_REF (TreeMapper)\"}"
curl -X POST --data-urlencode "payload=$payload" https://hooks.slack.com/services/$SLACK_WEBHOOK_URL