Skip to content

Commit 88ba8c4

Browse files
committed
feat(.github/workflows): Firebase CI/CD
Create a CI/CD workflow for Firebase distribution.
1 parent f5028f3 commit 88ba8c4

File tree

1 file changed

+143
-0
lines changed

1 file changed

+143
-0
lines changed
+143
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,143 @@
1+
name: firebase-release
2+
3+
on:
4+
pull_request:
5+
branches: [master]
6+
7+
jobs:
8+
distribute-android:
9+
runs-on: ubuntu-latest
10+
timeout-minutes: 120
11+
12+
steps:
13+
- uses: actions/checkout@v2
14+
15+
- uses: actions/setup-node@v2
16+
with:
17+
node-version: '16.15.0'
18+
19+
- name: Setup firebase
20+
run: |
21+
curl -sL https://firebase.tools | bash
22+
23+
- name: Build Ionic
24+
env:
25+
NUMBERS_STORAGE_BASE_URL: ${{ secrets.NUMBERS_STORAGE_BASE_URL }}
26+
NUMBERS_STORAGE_TRUSTED_CLIENT_KEY: ${{ secrets.NUMBERS_STORAGE_TRUSTED_CLIENT_KEY }}
27+
NUMBERS_BUBBLE_DB_URL: ${{ secrets.NUMBERS_BUBBLE_DB_URL }}
28+
NUMBERS_BUBBLE_IFRAME_URL: ${{ secrets.NUMBERS_BUBBLE_IFRAME_URL }}
29+
BUBBLE_API_URL: ${{ secrets.BUBBLE_API_URL }}
30+
APPS_FLYER_DEV_KEY: ${{ secrets.APPS_FLYER_DEV_KEY }}
31+
NUMBERS_PQINA_NPM_KEY: ${{ secrets.NUMBERS_PQINA_NPM_KEY }}
32+
PIPEDREAM_DELETE_CAPTURE_ACCOUNT: ${{ secrets.PIPEDREAM_DELETE_CAPTURE_ACCOUNT }}
33+
run: |
34+
npm run preconfig.npmrc
35+
npm install -g @ionic/cli
36+
npm install
37+
npm run build
38+
39+
- name: Set up JDK 17
40+
uses: actions/setup-java@v3
41+
with:
42+
distribution: 'temurin' # https://github.com/actions/setup-java#supported-distributions
43+
java-version: '17'
44+
45+
- name: Build Android release bundle (AAB) for Firebase
46+
run: |
47+
npx cap sync android
48+
cd android/
49+
./gradlew bundleRelease
50+
51+
- name: Sign release AAB
52+
uses: r0adkll/[email protected]
53+
with:
54+
releaseDirectory: ./android/app/build/outputs/bundle/release
55+
signingKeyBase64: ${{ secrets.ANDROID_KEYSTORE_FILE }}
56+
alias: ${{ secrets.ANDROID_KEY_ALIAS }}
57+
keyStorePassword: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
58+
keyPassword: ${{ secrets.ANDROID_KEY_PASSWORD }}
59+
60+
- name: Distribute Android App to Firebase
61+
env:
62+
APP_ID: ${{ secrets.FIREBASE_ANDROID_APP_ID }}
63+
TEST_GROUPS: ${{ secrets.FIREBASE_TEST_GROUPS }}
64+
GOOGLE_APPLICATION_CREDENTIALS: service_account.json
65+
GOOGLE_APPLICATION_CREDENTIALS_CONTENT: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }}
66+
run: |
67+
echo "$GOOGLE_APPLICATION_CREDENTIALS_CONTENT" > "$GOOGLE_APPLICATION_CREDENTIALS"
68+
firebase appdistribution:distribute ./android/app/build/outputs/bundle/release/app-release.aab --app ${APP_ID} --groups "${TEST_GROUPS}"
69+
70+
distribute-ios:
71+
runs-on: macos-latest
72+
timeout-minutes: 120
73+
74+
steps:
75+
- uses: actions/checkout@v2
76+
77+
- uses: actions/setup-node@v2
78+
with:
79+
node-version: '16.15.0'
80+
81+
- name: Setup firebase
82+
run: |
83+
curl -sL https://firebase.tools | bash
84+
85+
- name: Build Ionic
86+
env:
87+
NUMBERS_STORAGE_BASE_URL: ${{ secrets.NUMBERS_STORAGE_BASE_URL }}
88+
NUMBERS_STORAGE_TRUSTED_CLIENT_KEY: ${{ secrets.NUMBERS_STORAGE_TRUSTED_CLIENT_KEY }}
89+
NUMBERS_BUBBLE_DB_URL: ${{ secrets.NUMBERS_BUBBLE_DB_URL }}
90+
NUMBERS_BUBBLE_IFRAME_URL: ${{ secrets.NUMBERS_BUBBLE_IFRAME_URL }}
91+
BUBBLE_API_URL: ${{ secrets.BUBBLE_API_URL }}
92+
APPS_FLYER_DEV_KEY: ${{ secrets.APPS_FLYER_DEV_KEY }}
93+
NUMBERS_PQINA_NPM_KEY: ${{ secrets.NUMBERS_PQINA_NPM_KEY }}
94+
PIPEDREAM_DELETE_CAPTURE_ACCOUNT: ${{ secrets.PIPEDREAM_DELETE_CAPTURE_ACCOUNT }}
95+
run: |
96+
npm run preconfig.npmrc
97+
npm install -g @ionic/cli
98+
npm install
99+
npm run build
100+
101+
- name: Import the Code-Signing PKCS12 Certificate
102+
uses: apple-actions/import-codesign-certs@v1
103+
with:
104+
p12-file-base64: ${{ secrets.CERTIFICATES_P12 }}
105+
p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }}
106+
107+
- name: Download provisioning profiles
108+
uses: Apple-Actions/download-provisioning-profiles@v1
109+
with:
110+
bundle-id: io.numbersprotocol.capturelite
111+
profile-type: 'IOS_APP_ADHOC'
112+
issuer-id: ${{ secrets.APPSTORE_ISSUER_ID }}
113+
api-key-id: ${{ secrets.APPSTORE_KEY_ID }}
114+
api-private-key: ${{ secrets.APPSTORE_PRIVATE_KEY }}
115+
116+
- name: Get current time
117+
uses: 1466587594/get-current-time@v2
118+
id: current-time
119+
with:
120+
format: YYYYMMDDHHmmss
121+
122+
- name: Build iOS Xcode Archive
123+
env:
124+
PROVISIONING_PROFILE: ${{ secrets.FIREBASE_PROVISIONING_PROFILE_NAME }}
125+
run: |
126+
npx cap sync ios
127+
sed -i '' "s/NumbersAppDistributionV6/${PROVISIONING_PROFILE}/g" ios/App/ExportOptions.plist
128+
sed -i '' 's/app-store/release-testing/g' ios/App/ExportOptions.plist
129+
xcodebuild archive -workspace ios/App/App.xcworkspace -scheme App -sdk iphoneos -configuration Release -archivePath build/App.xcarchive -showBuildTimingSummary CURRENT_PROJECT_VERSION=${{ steps.current-time.outputs.formattedTime }} PROVISIONING_PROFILE_SPECIFIER=${PROVISIONING_PROFILE} -allowProvisioningUpdates
130+
131+
- name: Export IPA from Xcode Archive
132+
run: |
133+
xcodebuild -exportArchive -archivePath build/App.xcarchive -exportPath build -exportOptionsPlist ios/App/ExportOptions.plist -allowProvisioningUpdates
134+
135+
- name: Distribute iOS App to Firebase
136+
env:
137+
APP_ID: ${{ secrets.FIREBASE_IOS_APP_ID }}
138+
TEST_GROUPS: ${{ secrets.FIREBASE_TEST_GROUPS }}
139+
GOOGLE_APPLICATION_CREDENTIALS: service_account.json
140+
GOOGLE_APPLICATION_CREDENTIALS_CONTENT: ${{ secrets.FIREBASE_SERVICE_ACCOUNT_JSON }}
141+
run: |
142+
echo "$GOOGLE_APPLICATION_CREDENTIALS_CONTENT" > "$GOOGLE_APPLICATION_CREDENTIALS"
143+
firebase appdistribution:distribute build/App.ipa --app ${APP_ID} --groups "${TEST_GROUPS}"

0 commit comments

Comments
 (0)