-
Notifications
You must be signed in to change notification settings - Fork 1
242 lines (208 loc) · 9 KB
/
android.yml
File metadata and controls
242 lines (208 loc) · 9 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
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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
name: Builder for Android
on:
push:
tags:
- "v*"
jobs:
build-android:
permissions:
contents: write
strategy:
fail-fast: false
matrix:
include:
- platform: "blacksmith-2vcpu-ubuntu-2204"
args: ""
runs-on: ${{ matrix.platform }}
steps:
- uses: actions/checkout@v4
- name: Extract version from git tag
run: |
VERSION=${GITHUB_REF_NAME#v}
echo "VERSION=$VERSION" >> $GITHUB_ENV
- name: Free up disk space
run: |
echo "Freeing up disk space..."
sudo rm -rf /usr/share/dotnet || true
sudo rm -rf /opt/ghc || true
sudo rm -rf /usr/local/share/boost || true
# Skip AGENT_TOOLSDIRECTORY removal in local environments
if [ -n "$AGENT_TOOLSDIRECTORY" ] && [ "$AGENT_TOOLSDIRECTORY" != "/opt/hostedtoolcache" ]; then
sudo rm -rf "$AGENT_TOOLSDIRECTORY" || true
fi
sudo rm -rf /usr/share/swift || true
sudo rm -rf /usr/local/.ghcup || true
sudo apt-get clean || true
docker system prune -a -f || true
df -h
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: "17"
distribution: "temurin"
cache: gradle
- name: Install system packages (Linux)
run: |
sudo apt-get update
sudo apt-get install -y libwebkit2gtk-4.0-dev libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf lib32z1 lib32stdc++6 unzip wget libssl-dev
- name: Set OpenSSL environment for Android
run: |
echo "OPENSSL_LIB_DIR=/usr/lib/x86_64-linux-gnu" >> $GITHUB_ENV
echo "OPENSSL_INCLUDE_DIR=/usr/include/openssl" >> $GITHUB_ENV
- name: Create .env file
run: |
echo "NAME_APP=taskflow" > src-tauri/.env
echo "APP_HOME_FOLDER=TaskFlow" >> src-tauri/.env
echo "MONGODB_URI=${{ secrets.MONGODB_URI }}" >> src-tauri/.env
echo "MONGODB_NAME=TaskFlow" >> src-tauri/.env
echo "JWT_SECRET=${{ secrets.JWT_SECRET }}" >> src-tauri/.env
echo "JSONDB_NAME=task_flow_db" >> src-tauri/.env
echo "SMTP_USERNAME=rusnakdima03@gmail.com" >> src-tauri/.env
echo "SMTP_PASSWORD=${{ secrets.SMTP_PASSWORD }}" >> src-tauri/.env
echo "SMTP_SERVER=smtp.gmail.com" >> src-tauri/.env
echo "SMTP_PORT=587" >> src-tauri/.env
echo "RESET_TOKEN_EXPIRY_HOURS=1" >> src-tauri/.env
echo "CLIENT_ID_GITHUB=${{ secrets.CLIENT_ID_GITHUB }}" >> src-tauri/.env
echo "CLIENT_SECRET_GITHUB=${{ secrets.CLIENT_SECRET_GITHUB }}" >> src-tauri/.env
echo "CALLBACK_URL_GITHUB=${{ secrets.CALLBACK_URL_GITHUB }}" >> src-tauri/.env
- name: Install Android SDK
run: |
export ANDROID_HOME=$HOME/Android/Sdk
export ANDROID_SDK_ROOT=$ANDROID_HOME
mkdir -p "$ANDROID_HOME"
wget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip
unzip commandlinetools-linux-11076708_latest.zip -d $ANDROID_HOME/cmdline-tools
mv $ANDROID_HOME/cmdline-tools/cmdline-tools $ANDROID_HOME/cmdline-tools/latest
rm commandlinetools-linux-11076708_latest.zip
echo "ANDROID_HOME=$ANDROID_HOME" >> $GITHUB_ENV
echo "ANDROID_SDK_ROOT=$ANDROID_HOME" >> $GITHUB_ENV
echo "$ANDROID_HOME/cmdline-tools/latest/bin" >> $GITHUB_PATH
echo "$ANDROID_HOME/platform-tools" >> $GITHUB_PATH
- name: Accept Android SDK licenses and install components
run: |
yes | sdkmanager --licenses
sdkmanager "platform-tools" "build-tools;34.0.0" "platforms;android-34" "ndk;25.1.8937393"
echo "NDK_HOME=$ANDROID_HOME/ndk/25.1.8937393" >> $GITHUB_ENV
- name: Cache Gradle dependencies
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.android/build-cache
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22"
- name: Setup bun
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install Rust stable
uses: dtolnay/rust-toolchain@stable
- name: Add Android Rust targets
run: |
rustup target add aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android
- name: Rust cache
uses: swatinem/rust-cache@v2
with:
workspaces: "./src-tauri -> target"
- name: Install frontend dependencies
run: bun install
- name: Clean up before build
run: |
echo "Cleaning up before build..."
# Clean npm cache
npm cache clean --force
# Clean gradle cache if exists
rm -rf ~/.gradle/daemon/
# Clean any existing build artifacts (but preserve incremental compilation cache)
rm -rf src-tauri/gen/android/app/build/
# Only clean release artifacts, keep debug and incremental cache
rm -rf src-tauri/target/release/
df -h
- name: Require Tauri Android project
run: |
if [ ! -f "src-tauri/gen/android/gradlew" ]; then
echo "::error::Run locally: npx tauri android init — then commit src-tauri/gen/android."
exit 1
fi
- name: Grant execute permission for gradlew
run: chmod +x ./src-tauri/gen/android/gradlew
- name: Setup Android Keystore
run: |
cd src-tauri/gen/android
# Use defaults for local testing if secrets are not provided
KEY_ALIAS="${{ secrets.ANDROID_KEY_ALIAS }}"
KEY_PASSWORD="${{ secrets.ANDROID_KEY_PASSWORD }}"
if [ -z "$KEY_ALIAS" ]; then
KEY_ALIAS="androiddebugkey"
fi
if [ -z "$KEY_PASSWORD" ]; then
KEY_PASSWORD="android"
fi
echo "keyAlias=$KEY_ALIAS" > keystore.properties
echo "password=$KEY_PASSWORD" >> keystore.properties
echo "storeFile=$(pwd)/app/keystore.jks" >> keystore.properties
# Create keystore from GitHub secrets (if provided)
if [ -n "${{ secrets.ANDROID_KEY_BASE64 }}" ]; then
base64 -d <<< "${{ secrets.ANDROID_KEY_BASE64 }}" > $(pwd)/app/keystore.jks
echo "Using provided keystore"
else
# Generate a debug keystore for CI builds
echo "Generating debug keystore for CI"
keytool -genkeypair -v -keystore $(pwd)/app/keystore.jks \
-keyalg RSA -keysize 2048 -validity 10000 \
-storepass "$KEY_PASSWORD" -keypass "$KEY_PASSWORD" \
-alias "$KEY_ALIAS" \
-dname "CN=Dmitriy303, OU=TCS, O=TechCraft Solutions, L=New York, ST=Washington, C=US"
fi
- name: Build APK
run: |
echo "Building APK..."
chmod +x ./scripts/build-optimized.sh
FORCE_BUILD=true ./scripts/build-optimized.sh build android release
- name: Find and Prepare Artifacts
id: prepare-artifacts
run: |
echo "=== Finding APK files ==="
find src-tauri/gen/android -name "*.apk" 2>/dev/null || true
echo "=== Finding AAB files ==="
find src-tauri/gen/android -name "*.aab" 2>/dev/null || true
APK_PATH=$(find src-tauri/gen/android -name "app-universal-release.apk" -path "*/release/*" | head -1)
AAB_PATH=$(find src-tauri/gen/android -name "app-universal-release.aab" -path "*/universalRelease/*" | head -1)
if [ -z "$APK_PATH" ]; then
echo "Error: Could not find app-universal-release.apk"
exit 1
fi
if [ -z "$AAB_PATH" ]; then
echo "Error: Could not find app-universal-release.aab"
exit 1
fi
echo "APK_PATH=$APK_PATH" >> $GITHUB_ENV
echo "AAB_PATH=$AAB_PATH" >> $GITHUB_ENV
echo "Found APK: $APK_PATH"
echo "Found AAB: $AAB_PATH"
cp "$APK_PATH" "taskflow_${{ env.VERSION }}_universal.apk"
cp "$AAB_PATH" "taskflow_${{ env.VERSION }}_universal.aab"
ls -la taskflow_${{ env.VERSION }}_universal.apk taskflow_${{ env.VERSION }}_universal.aab
- name: Upload Artifacts
uses: actions/upload-artifact@v4
with:
name: android-artifacts
path: |
taskflow_${{ env.VERSION }}_universal.apk
taskflow_${{ env.VERSION }}_universal.aab
- name: Upload to Existing Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags/')
with:
tag_name: ${{ github.ref_name }}
files: |
taskflow_${{ env.VERSION }}_universal.apk
taskflow_${{ env.VERSION }}_universal.aab
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}