-
Notifications
You must be signed in to change notification settings - Fork 110
143 lines (126 loc) Β· 4.06 KB
/
runtime.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
name: Runtime
defaults:
run:
working-directory: runtime
concurrency:
group: runtime-${{ github.ref }}
cancel-in-progress: true
on:
workflow_dispatch:
inputs:
deploy:
description: What environment should be deployed
type: choice
default: no-deploy
options:
- no-deploy
- staging
- production
platform:
description: What platform should be deployed
type: choice
default: all
options:
- all
- web
- native
pull_request:
paths:
- .github/actions/setup-runtime/**
- .github/workflows/runtime.yml
- runtime/**
- .eslint*
- .prettier*
push:
branches: [main]
paths:
- .github/actions/setup-runtime/**
- .github/workflows/runtime.yml
- runtime/**
- .eslint*
- .prettier*
jobs:
review:
runs-on: ubuntu-latest
steps:
- name: π Setup repository
uses: actions/checkout@v3
- name: π Setup runtime
uses: ./.github/actions/setup-runtime
- name: π¨ Lint runtime
run: |
yarn tsc --noEmit
yarn lint --max-warnings 0
- name: π§ͺ Run runtime tests
run: |
yarn test --ci --maxWorkers 1
deploy-staging:
if: ${{ (github.event.inputs.deploy == 'staging' && github.event_name != 'pull_request') || (github.event_name == 'push' && github.ref == 'refs/heads/main') }}
needs: review
runs-on: ubuntu-latest
environment:
name: runtime-staging
url: https://staging.expo.dev/@exponent/snack
steps:
- name: π Setup repository
uses: actions/checkout@v3
- name: π Setup runtime
uses: ./.github/actions/setup-runtime
- name: π Deploy web-player
if: ${{ contains('all web', github.event.inputs.platform) }}
run: yarn deploy:web:staging
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_RUNTIME_KEY_STAGING }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_RUNTIME_SECRET_STAGING }}
- name: π± Deploy native runtime
if: ${{ contains('all native', github.event.inputs.platform) }}
run: yarn deploy:staging
env:
EXPO_TOKEN: ${{ secrets.EXPO_STAGING }}
NODE_OPTIONS: --max-old-space-size=4096
- name: π¬ Notify Slack
uses: 8398a7/action-slack@v3
if: ${{ always() }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_SNACK }}
with:
channel: '#snack'
status: ${{ job.status }}
author_name: Deploy Runtime to Staging
fields: message,commit,author,job,took
text: "platform: ${{ github.event.inputs.platform }}"
deploy-production:
if: ${{ github.event.inputs.deploy == 'production' && github.ref == 'refs/heads/main' }}
needs: review
runs-on: ubuntu-latest
environment:
name: runtime-production
url: https://expo.dev/@exponent/snack
steps:
- name: π Setup repository
uses: actions/checkout@v3
- name: π Setup runtime
uses: ./.github/actions/setup-runtime
- name: π Deploy web-player
if: ${{ contains('all web', github.event.inputs.platform) }}
run: yarn deploy:web:prod
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_RUNTIME_KEY_PRODUCTION }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_RUNTIME_SECRET_PRODUCTION }}
- name: π± Deploy native runtime
if: ${{ contains('all native', github.event.inputs.platform) }}
run: yarn deploy:prod
env:
EXPO_TOKEN: ${{ secrets.EXPO_PRODUCTION }}
NODE_OPTIONS: --max-old-space-size=4096
- name: π¬ Notify Slack
uses: 8398a7/action-slack@v3
if: ${{ always() }}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_SNACK }}
with:
channel: '#snack'
status: ${{ job.status }}
author_name: Deploy Runtime to Production
fields: message,commit,author,job,took
text: "platform: ${{ github.event.inputs.platform }}"