-
Notifications
You must be signed in to change notification settings - Fork 120
136 lines (116 loc) · 4.29 KB
/
Copy pathandroid-build.yml
File metadata and controls
136 lines (116 loc) · 4.29 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
name: Android CI/CD
on:
push:
branches: [main, develop, 'release/*']
tags: ['v*']
pull_request:
branches: [main, develop]
workflow_dispatch:
inputs:
build_type:
description: '构建类型'
required: true
default: 'release'
type: choice
options: [debug, release]
env:
JAVA_VERSION: '21'
JAVA_DISTRIBUTION: 'temurin'
jobs:
build:
name: Build AAB & APK
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup JDK
uses: actions/setup-java@v4
with:
java-version: ${{ env.JAVA_VERSION }}
distribution: ${{ env.JAVA_DISTRIBUTION }}
cache: gradle
- name: Cache Gradle
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
~/.android/build-cache
key: gradle-${{ runner.os }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
restore-keys: gradle-${{ runner.os }}-
- name: Grant execute permission
run: chmod +x gradlew
- name: Run Tests
run: ./gradlew testDebugUnitTest
continue-on-error: true
- name: Run Lint
run: ./gradlew lint
continue-on-error: true
- name: Build Debug AAB
if: github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'debug')
run: ./gradlew bundleDebug
- name: Build Debug APK
if: github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && github.event.inputs.build_type == 'debug')
run: ./gradlew assembleDebug
- name: Decode Keystore
if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || github.event.inputs.build_type == 'release')
run: |
echo "${{ secrets.KEYSTORE_BASE64 }}" | base64 -d > app/keystore.jks
continue-on-error: true
- name: Build Release AAB
if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || github.event.inputs.build_type == 'release')
run: ./gradlew bundleRelease
env:
KEYSTORE_FILE: ${{ github.workspace }}/app/keystore.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
- name: Build Release APK
if: github.event_name != 'pull_request' && (github.event_name != 'workflow_dispatch' || github.event.inputs.build_type == 'release')
run: ./gradlew assembleRelease
env:
KEYSTORE_FILE: ${{ github.workspace }}/app/keystore.jks
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
- name: Upload AAB
uses: actions/upload-artifact@v4
with:
name: app-bundle-${{ github.event_name == 'pull_request' && 'debug' || github.event.inputs.build_type || 'release' }}
path: app/build/outputs/bundle/**/*.aab
retention-days: 30
if: always()
- name: Upload APK
uses: actions/upload-artifact@v4
with:
name: app-apk-${{ github.event_name == 'pull_request' && 'debug' || github.event.inputs.build_type || 'release' }}
path: app/build/outputs/apk/**/*.apk
retention-days: 14
if: always()
- name: Upload Lint Report
if: always()
uses: actions/upload-artifact@v4
with:
name: lint-report
path: app/build/reports/lint-results*.html
continue-on-error: true
deploy-play-store:
name: Deploy to Play Store
needs: build
runs-on: ubuntu-latest
if: startsWith(github.ref, 'refs/tags/v')
steps:
- name: Download AAB
uses: actions/download-artifact@v4
with:
name: app-bundle-release
- name: Deploy to Play Store
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.PLAY_STORE_SERVICE_ACCOUNT }}
packageName: ${{ secrets.PACKAGE_NAME }}
releaseFiles: release/*.aab
track: internal
status: completed