-
Notifications
You must be signed in to change notification settings - Fork 0
177 lines (151 loc) · 6.17 KB
/
eas-deploy-prod.yml
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
name: React Native CI/CD
on:
push:
branches: [main, master, develop]
paths-ignore:
- "**.md"
- "LICENSE"
- ".github/ISSUE_TEMPLATE/**"
- ".github/PULL_REQUEST_TEMPLATE.md"
- "docs/**"
pull_request:
branches: [main, master]
paths-ignore:
- "**.md"
- "LICENSE"
- ".github/ISSUE_TEMPLATE/**"
- ".github/PULL_REQUEST_TEMPLATE.md"
- "docs/**"
workflow_dispatch:
inputs:
buildType:
type: choice
description: "Build type to run"
options:
- all
- dev
- prod-apk
- prod-aab
env:
EXPO_TOKEN: ${{ secrets.EXPO_TOKEN }}
CLOUD_STORAGE_TYPE: ${{ secrets.CLOUD_STORAGE_TYPE }}
CLOUD_STORAGE_TOKEN: ${{ secrets.CLOUD_STORAGE_TOKEN }}
CLOUD_STORAGE_ROOT_ID: ${{ secrets.CLOUD_STORAGE_ROOT_ID }}
# Keeping legacy provider for older Node.js versions
NODE_OPTIONS: --openssl-legacy-provider
jobs:
build-and-deploy:
if: (github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master')) || github.event_name == 'workflow_dispatch'
runs-on: ubuntu-latest
steps:
- name: 🏗 Checkout repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.head_ref }}
- name: 🥟 Setup Bun
uses: oven-sh/setup-bun@v2
with:
bun-version-file: '.bun-version'
- name: Setup Node
uses: actions/[email protected]
with:
node-version-file: .nvmrc
- name: 📦 Install dependencies
run: bun install --frozen-lockfile
- name: 📦 Install eas
run: |
bun install eas-cli@latest
- name: 📱 Setup EAS build cache
uses: actions/cache@v3
with:
path: ~/.eas-build-local
key: ${{ runner.os }}-eas-build-local-${{ hashFiles('**/package.json') }}
restore-keys: |
${{ runner.os }}-eas-build-local-
- name: 🔄 Verify EAS CLI installation
run: |
echo "EAS CLI version:"
eas --version
- name: 📱 Build Development APK
if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'dev' || github.event_name == 'push'
run: |
# Build with increased memory limit
export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096"
eas build --platform android --profile development --local --non-interactive --output=./app-dev.apk
env:
NODE_ENV: development
- name: 📱 Build Production APK
if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'prod-apk' || github.event_name == 'push'
run: |
export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096"
eas build --platform android --profile production --local --non-interactive --output=./app-prod.apk
env:
NODE_ENV: production
- name: 📱 Build Production AAB
if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'prod-aab' || github.event_name == 'push'
run: |
export NODE_OPTIONS="--openssl-legacy-provider --max_old_space_size=4096"
eas build --platform android --profile production --local --non-interactive --output=./app-prod.aab
env:
NODE_ENV: production
# - name: 🏗 Setup rclone
# uses: AnimMouse/setup-rclone@v1
# with:
# version: latest
# - name: 📤 Configure cloud storage
# run: |
# # Clean up any existing rclone config
# rm -rf ~/.config/rclone
# # Create rclone config directory
# mkdir -p ~/.config/rclone
# # Create rclone config file
# cat > ~/.config/rclone/rclone.conf << EOF
# [cloud]
# type = ${CLOUD_STORAGE_TYPE}
# region = com
# token = ${CLOUD_STORAGE_TOKEN}
# root_folder_id = ${CLOUD_STORAGE_ROOT_ID}
# EOF
# # Set proper permissions
# chmod 600 ~/.config/rclone/rclone.conf
# # Test configuration
# echo "Testing cloud storage configuration..."
# rclone ls cloud: --max-depth 1
# - name: 📤 Upload Development APK to cloud storage
# if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'dev' || github.event_name == 'push'
# run: |
# VERSION=$(node -p "require('./app.json').expo.version")
# BUILD_NUMBER=$(date +%Y%m%d%H%M)
# FOLDER_PATH="App Builds/$VERSION-$BUILD_NUMBER"
# # Create directory first
# echo "Creating folder: $FOLDER_PATH"
# rclone mkdir "cloud:$FOLDER_PATH"
# # Copy APK file
# echo "Uploading development APK..."
# rclone copy ./app-dev.apk "cloud:$FOLDER_PATH/app-dev-$VERSION-$BUILD_NUMBER.apk" -v
# - name: 📤 Upload Production APK to cloud storage
# if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'prod-apk' || github.event_name == 'push'
# run: |
# VERSION=$(node -p "require('./app.json').expo.version")
# BUILD_NUMBER=$(date +%Y%m%d%H%M)
# FOLDER_PATH="App Builds/$VERSION-$BUILD_NUMBER"
# echo "Uploading production APK..."
# rclone copy ./app-prod.apk "cloud:$FOLDER_PATH/app-prod-$VERSION-$BUILD_NUMBER.apk" -v
# - name: 📤 Upload Production AAB to cloud storage
# if: github.event.inputs.buildType == 'all' || github.event.inputs.buildType == 'prod-aab' || github.event_name == 'push'
# run: |
# VERSION=$(node -p "require('./app.json').expo.version")
# BUILD_NUMBER=$(date +%Y%m%d%H%M)
# FOLDER_PATH="App Builds/$VERSION-$BUILD_NUMBER"
# echo "Uploading production AAB..."
# rclone copy ./app-prod.aab "cloud:$FOLDER_PATH/app-prod-$VERSION-$BUILD_NUMBER.aab" -v
# - name: 📦 Upload build artifacts to GitHub
# uses: actions/upload-artifact@v4
# with:
# name: app-builds
# path: |
# ./app-dev.apk
# ./app-prod.apk
# ./app-prod.aab
# retention-days: 7