Skip to content

Commit 27dccbb

Browse files
committed
Add GitHub Actions workflows for APK building and releases
1 parent 39e410b commit 27dccbb

3 files changed

Lines changed: 390 additions & 0 deletions

File tree

.github/workflows/build-apk.yml

Lines changed: 93 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
name: Build and Release APK
2+
3+
on:
4+
push:
5+
tags:
6+
- 'v*' # Trigger on version tags like v1.0.0, v1.1.0, etc.
7+
8+
jobs:
9+
build:
10+
runs-on: ubuntu-latest
11+
12+
steps:
13+
- name: Checkout code
14+
uses: actions/checkout@v4
15+
16+
- name: Setup Java
17+
uses: actions/setup-java@v4
18+
with:
19+
distribution: 'zulu'
20+
java-version: '17'
21+
22+
- name: Setup Flutter
23+
uses: subosito/flutter-action@v2
24+
with:
25+
flutter-version: '3.19.0'
26+
channel: 'stable'
27+
28+
- name: Cache Gradle packages
29+
uses: actions/cache@v4
30+
with:
31+
path: |
32+
~/.gradle/caches
33+
~/.gradle/wrapper
34+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
35+
restore-keys: |
36+
${{ runner.os }}-gradle-
37+
38+
- name: Cache Pub packages
39+
uses: actions/cache@v4
40+
with:
41+
path: ${{ env.PUB_CACHE }}
42+
key: ${{ runner.os }}-pub-${{ hashFiles('**/pubspec.lock') }}
43+
restore-keys: |
44+
${{ runner.os }}-pub-
45+
46+
- name: Get Flutter dependencies
47+
run: flutter pub get
48+
49+
- name: Build APK
50+
run: flutter build apk --release
51+
52+
- name: Upload APK to artifacts
53+
uses: actions/upload-artifact@v4
54+
with:
55+
name: release-apk
56+
path: build/app/outputs/flutter-apk/app-release.apk
57+
58+
release:
59+
needs: build
60+
runs-on: ubuntu-latest
61+
if: startsWith(github.ref, 'refs/tags/')
62+
63+
steps:
64+
- name: Checkout code
65+
uses: actions/checkout@v4
66+
67+
- name: Download APK artifact
68+
uses: actions/download-artifact@v4
69+
with:
70+
name: release-apk
71+
path: .
72+
73+
- name: Create Release
74+
uses: softprops/action-gh-release@v1
75+
with:
76+
files: app-release.apk
77+
draft: false
78+
prerelease: false
79+
generate_release_notes: true
80+
env:
81+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
82+
83+
- name: Comment on PR
84+
if: github.event_name == 'pull_request'
85+
uses: actions/github-script@v7
86+
with:
87+
script: |
88+
github.rest.issues.createComment({
89+
issue_number: context.issue.number,
90+
owner: context.repo.owner,
91+
repo: context.repo.repo,
92+
body: '🚀 APK has been built and released! Check the [releases page](https://github.com/${{ github.repository }}/releases) for the latest version.'
93+
})

.github/workflows/build-only.yml

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Build APK Only
2+
3+
on:
4+
push:
5+
branches: [ main, develop ]
6+
pull_request:
7+
branches: [ main, develop ]
8+
workflow_dispatch: # Allow manual triggering
9+
10+
jobs:
11+
build:
12+
runs-on: ubuntu-latest
13+
14+
steps:
15+
- name: Checkout code
16+
uses: actions/checkout@v4
17+
18+
- name: Setup Java
19+
uses: actions/setup-java@v4
20+
with:
21+
distribution: 'zulu'
22+
java-version: '17'
23+
24+
- name: Setup Flutter
25+
uses: subosito/flutter-action@v2
26+
with:
27+
flutter-version: '3.19.0'
28+
channel: 'stable'
29+
30+
- name: Cache dependencies
31+
uses: actions/cache@v4
32+
with:
33+
path: |
34+
~/.gradle/caches
35+
~/.gradle/wrapper
36+
${{ env.PUB_CACHE }}
37+
key: ${{ runner.os }}-deps-${{ hashFiles('**/pubspec.lock', '**/*.gradle*', '**/gradle-wrapper.properties') }}
38+
restore-keys: |
39+
${{ runner.os }}-deps-
40+
41+
- name: Get Flutter dependencies
42+
run: flutter pub get
43+
44+
- name: Build APK
45+
run: flutter build apk --release
46+
47+
- name: Upload APK artifact
48+
uses: actions/upload-artifact@v4
49+
with:
50+
name: app-release-apk
51+
path: build/app/outputs/flutter-apk/app-release.apk
52+
retention-days: 30
53+
54+
- name: Build Debug APK
55+
run: flutter build apk --debug
56+
57+
- name: Upload Debug APK artifact
58+
uses: actions/upload-artifact@v4
59+
with:
60+
name: app-debug-apk
61+
path: build/app/outputs/flutter-apk/app-debug.apk
62+
retention-days: 30
63+
64+
- name: Comment on PR
65+
if: github.event_name == 'pull_request'
66+
uses: actions/github-script@v7
67+
with:
68+
script: |
69+
github.rest.issues.createComment({
70+
issue_number: context.issue.number,
71+
owner: context.repo.owner,
72+
repo: context.repo.repo,
73+
body: '✅ APK has been built successfully! You can download it from the Actions tab.'
74+
})

.github/workflows/ci-cd.yml

Lines changed: 223 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,223 @@
1+
name: CI/CD Pipeline
2+
3+
on:
4+
push:
5+
branches: [ main, develop ]
6+
pull_request:
7+
branches: [ main, develop ]
8+
push:
9+
tags:
10+
- 'v*'
11+
12+
jobs:
13+
test:
14+
runs-on: ubuntu-latest
15+
if: github.event_name != 'push' || !startsWith(github.ref, 'refs/tags/')
16+
17+
steps:
18+
- name: Checkout code
19+
uses: actions/checkout@v4
20+
21+
- name: Setup Java
22+
uses: actions/setup-java@v4
23+
with:
24+
distribution: 'zulu'
25+
java-version: '17'
26+
27+
- name: Setup Flutter
28+
uses: subosito/flutter-action@v2
29+
with:
30+
flutter-version: '3.19.0'
31+
channel: 'stable'
32+
33+
- name: Cache dependencies
34+
uses: actions/cache@v4
35+
with:
36+
path: |
37+
~/.gradle/caches
38+
~/.gradle/wrapper
39+
${{ env.PUB_CACHE }}
40+
key: ${{ runner.os }}-deps-${{ hashFiles('**/pubspec.lock', '**/*.gradle*', '**/gradle-wrapper.properties') }}
41+
restore-keys: |
42+
${{ runner.os }}-deps-
43+
44+
- name: Get Flutter dependencies
45+
run: flutter pub get
46+
47+
- name: Analyze code
48+
run: flutter analyze
49+
50+
- name: Run tests
51+
run: flutter test
52+
53+
- name: Upload test results
54+
uses: actions/upload-artifact@v4
55+
if: always()
56+
with:
57+
name: test-results
58+
path: |
59+
coverage/
60+
test-results/
61+
62+
build-debug:
63+
runs-on: ubuntu-latest
64+
if: github.event_name != 'push' || !startsWith(github.ref, 'refs/tags/')
65+
needs: test
66+
67+
steps:
68+
- name: Checkout code
69+
uses: actions/checkout@v4
70+
71+
- name: Setup Java
72+
uses: actions/setup-java@v4
73+
with:
74+
distribution: 'zulu'
75+
java-version: '17'
76+
77+
- name: Setup Flutter
78+
uses: subosito/flutter-action@v2
79+
with:
80+
flutter-version: '3.19.0'
81+
channel: 'stable'
82+
83+
- name: Cache dependencies
84+
uses: actions/cache@v4
85+
with:
86+
path: |
87+
~/.gradle/caches
88+
~/.gradle/wrapper
89+
${{ env.PUB_CACHE }}
90+
key: ${{ runner.os }}-deps-${{ hashFiles('**/pubspec.lock', '**/*.gradle*', '**/gradle-wrapper.properties') }}
91+
restore-keys: |
92+
${{ runner.os }}-deps-
93+
94+
- name: Get Flutter dependencies
95+
run: flutter pub get
96+
97+
- name: Build Debug APK
98+
run: flutter build apk --debug
99+
100+
- name: Upload Debug APK
101+
uses: actions/upload-artifact@v4
102+
with:
103+
name: debug-apk
104+
path: build/app/outputs/flutter-apk/app-debug.apk
105+
106+
build-release:
107+
runs-on: ubuntu-latest
108+
if: startsWith(github.ref, 'refs/tags/')
109+
110+
steps:
111+
- name: Checkout code
112+
uses: actions/checkout@v4
113+
114+
- name: Setup Java
115+
uses: actions/setup-java@v4
116+
with:
117+
distribution: 'zulu'
118+
java-version: '17'
119+
120+
- name: Setup Flutter
121+
uses: subosito/flutter-action@v2
122+
with:
123+
flutter-version: '3.19.0'
124+
channel: 'stable'
125+
126+
- name: Cache dependencies
127+
uses: actions/cache@v4
128+
with:
129+
path: |
130+
~/.gradle/caches
131+
~/.gradle/wrapper
132+
${{ env.PUB_CACHE }}
133+
key: ${{ runner.os }}-deps-${{ hashFiles('**/pubspec.lock', '**/*.gradle*', '**/gradle-wrapper.properties') }}
134+
restore-keys: |
135+
${{ runner.os }}-deps-
136+
137+
- name: Get Flutter dependencies
138+
run: flutter pub get
139+
140+
- name: Build Release APK
141+
run: flutter build apk --release
142+
143+
- name: Build Split APKs (for smaller downloads)
144+
run: flutter build apk --split-per-abi --release
145+
146+
- name: Upload Release APK
147+
uses: actions/upload-artifact@v4
148+
with:
149+
name: release-apk
150+
path: build/app/outputs/flutter-apk/app-release.apk
151+
152+
- name: Upload Split APKs
153+
uses: actions/upload-artifact@v4
154+
with:
155+
name: split-apks
156+
path: build/app/outputs/flutter-apk/
157+
158+
release:
159+
needs: build-release
160+
runs-on: ubuntu-latest
161+
if: startsWith(github.ref, 'refs/tags/')
162+
163+
steps:
164+
- name: Checkout code
165+
uses: actions/checkout@v4
166+
167+
- name: Download Release APK
168+
uses: actions/download-artifact@v4
169+
with:
170+
name: release-apk
171+
path: .
172+
173+
- name: Download Split APKs
174+
uses: actions/download-artifact@v4
175+
with:
176+
name: split-apks
177+
path: split-apks/
178+
179+
- name: Create Release
180+
uses: softprops/action-gh-release@v1
181+
with:
182+
files: |
183+
app-release.apk
184+
split-apks/app-armeabi-v7a-release.apk
185+
split-apks/app-arm64-v8a-release.apk
186+
split-apks/app-x86_64-release.apk
187+
draft: false
188+
prerelease: false
189+
generate_release_notes: true
190+
body: |
191+
## 📱 E-commerce App Release
192+
193+
### What's New
194+
- Bug fixes and improvements
195+
- Enhanced chat functionality
196+
- Better user experience
197+
198+
### Installation
199+
- **Full APK**: Download `app-release.apk` for all devices
200+
- **Split APKs**: Download the appropriate architecture for smaller file size:
201+
- `app-arm64-v8a-release.apk` (Most modern devices)
202+
- `app-armeabi-v7a-release.apk` (Older ARM devices)
203+
- `app-x86_64-release.apk` (Emulators and Intel devices)
204+
205+
### Features
206+
- User authentication
207+
- Product management
208+
- Real-time chat
209+
- Responsive design
210+
env:
211+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
212+
213+
- name: Comment on PR
214+
if: github.event_name == 'pull_request'
215+
uses: actions/github-script@v7
216+
with:
217+
script: |
218+
github.rest.issues.createComment({
219+
issue_number: context.issue.number,
220+
owner: context.repo.owner,
221+
repo: context.repo.repo,
222+
body: '🚀 APK has been built and released! Check the [releases page](https://github.com/${{ github.repository }}/releases) for the latest version.'
223+
})

0 commit comments

Comments
 (0)