Skip to content

Commit d06ca03

Browse files
committed
chore: add GitHub Actions workflow for automated Android production release
1 parent 6f958ba commit d06ca03

File tree

1 file changed

+119
-0
lines changed

1 file changed

+119
-0
lines changed

.github/workflows/android-release.yml

Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
name: Production Release
2+
3+
on:
4+
workflow_dispatch: {}
5+
6+
jobs:
7+
build:
8+
runs-on: ubuntu-latest
9+
10+
steps:
11+
- name: Checkout code
12+
uses: actions/checkout@v4
13+
14+
- name: Set up JDK 17
15+
uses: actions/setup-java@v3
16+
with:
17+
java-version: '17'
18+
distribution: 'temurin'
19+
20+
- name: Setup Node.js
21+
uses: actions/setup-node@v4
22+
with:
23+
node-version: '20'
24+
25+
- name: Install dependencies
26+
run: npm install
27+
28+
- name: Debug Secrets
29+
run: |
30+
echo "CLOUDINARY_URL: ${{ secrets.CLOUDINARY_URL }}"
31+
echo "CLOUD_NAME: ${{ secrets.CLOUD_NAME }}"
32+
echo "PRESET: ${{ secrets.PRESET }}"
33+
echo "HOST: ${{ secrets.HOST }}"
34+
35+
- name: Create .env file
36+
run: |
37+
echo "CLOUDINARY_URL=${{ secrets.CLOUDINARY_URL }}" > .env
38+
echo "CLOUD_NAME=${{ secrets.CLOUD_NAME }}" >> .env
39+
echo "PRESET=${{ secrets.PRESET }}" >> .env
40+
echo "HOST=${{ secrets.HOST }}" >> .env
41+
42+
- name: Verify .env file location
43+
run: |
44+
cat .env
45+
46+
- name: Generate React Native Bundle
47+
run: |
48+
npx react-native bundle --platform android --dev false \
49+
--entry-file index.js \
50+
--bundle-output android/app/src/main/assets/index.android.bundle \
51+
--assets-dest android/app/src/main/res
52+
53+
- name: Generate Keystore
54+
run: |
55+
keytool -genkey -v -keystore android/app/release.keystore \
56+
-alias ${{ secrets.KEY_ALIAS }} -keyalg RSA -keysize 2048 -validity 10000 \
57+
-storepass ${{ secrets.KEYSTORE_PASSWORD }} \
58+
-keypass ${{ secrets.KEY_PASSWORD }} \
59+
-dname "CN=Android Release, OU=Mobile, O=YourCompany, L=YourCity, S=YourState, C=YourCountry"
60+
shell: bash
61+
62+
- name: Build Release APK
63+
working-directory: android
64+
env:
65+
KEYSTORE_FILE: android/app/release.keystore
66+
KEYSTORE_PASSWORD: ${{ secrets.KEYSTORE_PASSWORD }}
67+
KEY_ALIAS: ${{ secrets.KEY_ALIAS }}
68+
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
69+
run: ./gradlew assembleRelease
70+
71+
- name: Upload Artifact
72+
uses: actions/upload-artifact@v4
73+
with:
74+
name: release-apk
75+
path: |
76+
android/app/build/outputs/apk/release/app-release.apk
77+
android/app/build/outputs/bundle/release/app-release.aab
78+
79+
release:
80+
needs: build
81+
runs-on: ubuntu-latest
82+
permissions:
83+
contents: write
84+
85+
steps:
86+
- name: Download APK
87+
uses: actions/download-artifact@v4
88+
with:
89+
name: release-apk
90+
path: ./release
91+
92+
- name: Verify Downloaded APK
93+
run: |
94+
ls -R ./release
95+
96+
- name: Create Release
97+
id: create_release
98+
uses: actions/create-release@v1
99+
env:
100+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
101+
with:
102+
tag_name: v${{ github.run_number }}
103+
release_name: Production Release v${{ github.run_number }}
104+
draft: false
105+
prerelease: false
106+
body: |
107+
Production release automatically generated
108+
- Commit: ${{ github.sha }}
109+
- Date: ${{ github.event.head_commit.timestamp }}
110+
111+
- name: Upload Release Assets
112+
uses: actions/upload-release-asset@v1
113+
env:
114+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
115+
with:
116+
upload_url: ${{ steps.create_release.outputs.upload_url }}
117+
asset_path: ./release/apk/release/app-release.apk
118+
asset_name: app-release.apk
119+
asset_content_type: application/vnd.android.package-archive

0 commit comments

Comments
 (0)