Skip to content

Commit 9ee9505

Browse files
ci: add dapp deployment workflows and PR test workflows
1 parent 238a36b commit 9ee9505

File tree

4 files changed

+582
-0
lines changed

4 files changed

+582
-0
lines changed

.github/workflows/dapp-deploy.yml

Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
name: Deploy Dapp to Dev and Prod
2+
3+
on:
4+
push:
5+
tags:
6+
- 'web3mail-dapp-v*'
7+
8+
jobs:
9+
get-version:
10+
runs-on: ubuntu-latest
11+
steps:
12+
- name: Checkout code
13+
uses: actions/checkout@v4
14+
15+
- name: Set up Node.js
16+
uses: actions/setup-node@v4
17+
with:
18+
node-version: '20'
19+
20+
- name: Set publish version
21+
id: set-publish-version
22+
run: |
23+
GIT_TAG="${{ github.ref_name }}"
24+
VERSION=$(echo "$GIT_TAG" | sed 's/web3mail-dapp-v//')
25+
echo "VERSION=${VERSION}" | tee -a $GITHUB_OUTPUT
26+
echo "GIT_TAG=${GIT_TAG}" | tee -a $GITHUB_OUTPUT
27+
outputs:
28+
version: ${{ steps.set-publish-version.outputs.VERSION }}
29+
30+
# Single sconification job for both environments
31+
sconify:
32+
uses: iExecBlockchainComputing/github-actions-workflows/.github/workflows/[email protected]
33+
with:
34+
image-name: product/web3mail-dapp
35+
image-tag: ${{ github.ref_name }}
36+
sconify-debug: false
37+
sconify-prod: true
38+
docker-registry: docker.io
39+
sconify-version: '5.7.5-v12'
40+
binary: /usr/local/bin/node
41+
command: node /app/src/app.js
42+
host-path: |
43+
/etc/hosts
44+
/etc/resolv.conf
45+
binary-fs: true
46+
fs-dir: /app
47+
heap: 1G
48+
dlopen: 1
49+
mprotect: 1
50+
docker-username: ${{ vars.DOCKERHUB_USERNAME }}
51+
scontain-username: ${{ vars.SCONTAIN_REGISTRY_USERNAME }}
52+
secrets:
53+
docker-password: ${{ secrets.DOCKERHUB_PAT }}
54+
scontain-password: ${{ secrets.SCONTAIN_REGISTRY_PAT }}
55+
scone-signing-key: ${{ secrets.SCONIFY_SIGNING_PRIVATE_KEY }}
56+
57+
# Deploy to Dev Environment
58+
deploy-dapp-dev:
59+
runs-on: ubuntu-latest
60+
needs: sconify
61+
steps:
62+
- name: Checkout code
63+
uses: actions/checkout@v4
64+
65+
- name: Setup Node.js
66+
uses: actions/setup-node@v4
67+
with:
68+
node-version: '20'
69+
cache: 'npm'
70+
71+
- name: Install dependencies
72+
run: |
73+
npm ci
74+
cd node_modules/whitelist-smart-contract
75+
npm install --save-dev ts-node
76+
cd ../../deployment-dapp
77+
npm ci
78+
79+
- name: Create scone fingerprint file (dev)
80+
run: |
81+
MRENCLAVE="${{ needs.sconify.outputs.prod-mrenclave }}"
82+
echo "$MRENCLAVE" > deployment-dapp/.scone-fingerprint
83+
84+
- name: Deploy dapp contract (dev)
85+
env:
86+
DEPLOY_ENVIRONMENT: dapp-dev
87+
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
88+
DOCKER_IMAGE_CHECKSUM_DEV: ${{ needs.sconify.outputs.prod-checksum }}
89+
run: |
90+
cd deployment-dapp
91+
npm run deploy-dapp
92+
93+
- name: Push dapp secret (dev)
94+
env:
95+
DEPLOY_ENVIRONMENT: dapp-dev
96+
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
97+
MJ_APIKEY_PUBLIC: ${{ secrets.MJ_APIKEY_PUBLIC }}
98+
MJ_APIKEY_PRIVATE: ${{ secrets.MJ_APIKEY_PRIVATE }}
99+
MJ_SENDER: ${{ secrets.MJ_SENDER }}
100+
MAILGUN_APIKEY: ${{ secrets.MAILGUN_APIKEY }}
101+
WEB3MAIL_WHITELISTED_APPS_DEV: ${{ secrets.WEB3MAIL_WHITELISTED_APPS_DEV }}
102+
run: |
103+
cd deployment-dapp
104+
npm run push-dapp-secret
105+
106+
- name: Publish free sell order (dev)
107+
env:
108+
DEPLOY_ENVIRONMENT: dapp-dev
109+
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
110+
PRICE: '0'
111+
VOLUME: '1000000000'
112+
run: |
113+
cd deployment-dapp
114+
npm run publish-sell-order
115+
116+
- name: Add resource to whitelist (dev)
117+
env:
118+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
119+
CONTRACT_ADDRESS: ${{ secrets.WEB3MAIL_WHITELIST_DEV_ADDRESS }}
120+
run: |
121+
cd node_modules/whitelist-smart-contract
122+
export ADDRESS_TO_ADD=$(cat ../../deployment-dapp/.app-address) && npm run addResourceToWhitelist
123+
124+
- name: Configure ENS (dev)
125+
env:
126+
DEPLOY_ENVIRONMENT: dapp-dev
127+
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
128+
run: |
129+
cd deployment-dapp
130+
npm run configure-ens
131+
132+
- name: Upload deployment artifacts (dev)
133+
uses: actions/upload-artifact@v4
134+
with:
135+
name: deployment-artifacts-dev
136+
path: |
137+
deployment-dapp/.app-address
138+
deployment-dapp/.scone-fingerprint
139+
140+
# Deploy to Prod Environment
141+
deploy-dapp-prod:
142+
runs-on: ubuntu-latest
143+
needs: sconify
144+
steps:
145+
- name: Checkout code
146+
uses: actions/checkout@v4
147+
148+
- name: Setup Node.js
149+
uses: actions/setup-node@v4
150+
with:
151+
node-version: '20'
152+
cache: 'npm'
153+
154+
- name: Install dependencies
155+
run: |
156+
npm ci
157+
cd node_modules/whitelist-smart-contract
158+
npm install --save-dev ts-node
159+
cd ../../deployment-dapp
160+
npm ci
161+
162+
- name: Create scone fingerprint file (prod)
163+
run: |
164+
MRENCLAVE="${{ needs.sconify.outputs.prod-mrenclave }}"
165+
echo "$MRENCLAVE" > deployment-dapp/.scone-fingerprint
166+
167+
- name: Deploy dapp contract (prod)
168+
env:
169+
DEPLOY_ENVIRONMENT: dapp-prod
170+
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
171+
DOCKER_IMAGE_CHECKSUM_PROD: ${{ needs.sconify.outputs.prod-checksum }}
172+
run: |
173+
cd deployment-dapp
174+
npm run deploy-dapp
175+
176+
- name: Push dapp secret (prod)
177+
env:
178+
DEPLOY_ENVIRONMENT: dapp-prod
179+
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
180+
MJ_APIKEY_PUBLIC: ${{ secrets.MJ_APIKEY_PUBLIC }}
181+
MJ_APIKEY_PRIVATE: ${{ secrets.MJ_APIKEY_PRIVATE }}
182+
MJ_SENDER: ${{ secrets.MJ_SENDER }}
183+
MAILGUN_APIKEY: ${{ secrets.MAILGUN_APIKEY }}
184+
WEB3MAIL_WHITELISTED_APPS_PROD: ${{ secrets.WEB3MAIL_WHITELISTED_APPS_PROD }}
185+
run: |
186+
cd deployment-dapp
187+
npm run push-dapp-secret
188+
189+
- name: Publish free sell order (prod)
190+
env:
191+
DEPLOY_ENVIRONMENT: dapp-prod
192+
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
193+
PRICE: '0'
194+
VOLUME: '1000000000'
195+
run: |
196+
cd deployment-dapp
197+
npm run publish-sell-order
198+
199+
- name: Add resource to whitelist (prod)
200+
env:
201+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
202+
CONTRACT_ADDRESS: ${{ secrets.WEB3MAIL_WHITELIST_PROD_ADDRESS }}
203+
run: |
204+
cd node_modules/whitelist-smart-contract
205+
export ADDRESS_TO_ADD=$(cat ../../deployment-dapp/.app-address) && npm run addResourceToWhitelist
206+
207+
- name: Configure ENS (prod)
208+
env:
209+
DEPLOY_ENVIRONMENT: dapp-prod
210+
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
211+
run: |
212+
cd deployment-dapp
213+
npm run configure-ens
214+
215+
- name: Upload deployment artifacts (prod)
216+
uses: actions/upload-artifact@v4
217+
with:
218+
name: deployment-artifacts-prod
219+
path: |
220+
deployment-dapp/.app-address
221+
deployment-dapp/.scone-fingerprint

0 commit comments

Comments
 (0)