Skip to content

Commit 9c2e7b2

Browse files
refactor(ci): refactor dapp-deploy workflow
1 parent acd0aca commit 9c2e7b2

File tree

1 file changed

+108
-91
lines changed

1 file changed

+108
-91
lines changed
Lines changed: 108 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -1,72 +1,84 @@
1-
name: dapp-manual-operations
1+
name: Deploy DApp Contract
22

33
on:
44
workflow_dispatch:
55
inputs:
66
environment:
7-
description: 'Target environment'
7+
description: 'Deployment environment'
88
required: true
99
type: choice
1010
options:
11-
- dev
12-
- prod
13-
operation:
14-
description: 'Operation to perform'
15-
required: true
16-
type: choice
17-
options:
18-
- deploy-dapp-contract
19-
- push-dapp-secret
20-
- publish-sell-order
21-
- revoke-sell-order
22-
- add-to-whitelist
23-
- remove-from-whitelist
24-
- configure-ens
25-
price:
26-
description: 'Price for sell order (xRLC)'
27-
required: false
28-
default: '0'
29-
volume:
30-
description: 'Volume for sell order'
31-
required: false
32-
default: '1000000000'
33-
order_hash:
34-
description: 'Order hash to revoke'
35-
required: false
36-
address_to_add:
37-
description: 'Address to add to whitelist'
38-
required: false
39-
address_to_remove:
40-
description: 'Address to remove from whitelist'
41-
required: false
11+
- dapp-dev
12+
- dapp-prod
13+
sconify-version:
14+
description: 'Version of the sconify image to use'
15+
type: string
16+
default: '5.9.0-v15'
17+
18+
env:
19+
DEPLOY_ENVIRONMENT: ${{ inputs.environment }}
4220

4321
jobs:
44-
build-tag:
22+
build-and-push:
4523
runs-on: ubuntu-latest
4624
outputs:
47-
image_tag: ${{ steps.set-tag.outputs.image_tag }}
25+
image-name: ${{ steps.set-outputs.outputs.image-name }}
26+
image-tag: ${{ steps.set-outputs.outputs.image-tag }}
4827
steps:
49-
- name: Set Docker image tag
50-
id: set-tag
28+
- name: Checkout code
29+
uses: actions/checkout@v4
30+
31+
- name: Set up Docker Buildx
32+
uses: docker/setup-buildx-action@v3
33+
34+
- name: Login to DockerHub
35+
uses: docker/login-action@v3
36+
with:
37+
username: ${{ secrets.DOCKERHUB_USERNAME }}
38+
password: ${{ secrets.DOCKERHUB_PAT }}
39+
40+
- name: Get dapp version
41+
id: version
5142
run: |
52-
if [ "${{ github.event.inputs.environment }}" = "dev" ]; then
53-
TAG="dev-${GITHUB_SHA}"
43+
VERSION=$(node -p "require('./dapp/package.json').version")
44+
echo "version=$VERSION" >> $GITHUB_OUTPUT
45+
echo "dapp-version=$VERSION"
46+
47+
- name: Set image tag
48+
id: image-tag
49+
run: |
50+
if [ "${{ inputs.environment }}" = "dapp-dev" ]; then
51+
echo "image-tag=dev-${{ steps.version.outputs.version }}" >> $GITHUB_OUTPUT
5452
else
55-
VERSION=$(jq -r .version dapp/package.json)
56-
TAG="web3mail-dapp-v${VERSION}"
53+
echo "image-tag=${{ steps.version.outputs.version }}" >> $GITHUB_OUTPUT
5754
fi
58-
echo "image_tag=$TAG" >> $GITHUB_OUTPUT
55+
56+
- name: Build and push Docker image
57+
id: build
58+
uses: docker/build-push-action@v5
59+
with:
60+
context: ./dapp
61+
push: true
62+
tags: iexechub/web3mail-dapp:${{ steps.image-tag.outputs.image-tag }}
63+
cache-from: type=gha
64+
cache-to: type=gha,mode=max
65+
66+
- name: Set outputs
67+
id: set-outputs
68+
run: |
69+
echo "image-name=iexechub/web3mail-dapp" >> $GITHUB_OUTPUT
70+
echo "image-tag=${{ steps.image-tag.outputs.image-tag }}" >> $GITHUB_OUTPUT
5971
6072
sconify:
61-
needs: build-tag
73+
needs: build-and-push
6274
uses: iExecBlockchainComputing/github-actions-workflows/.github/workflows/[email protected]
6375
with:
64-
image-name: 'iexechub/web3mail-dapp'
65-
image-tag: ${{ needs.build-tag.outputs.image_tag }}
76+
image-name: ${{ needs.build-and-push.outputs.image-name }}
77+
image-tag: ${{ needs.build-and-push.outputs.image-tag }}
6678
sconify-debug: false
6779
sconify-prod: true
6880
docker-registry: docker.io
69-
sconify-version: '5.9.0-v15'
81+
sconify-version: ${{ inputs.sconify-version }}
7082
binary: /usr/local/bin/node
7183
command: node /app/src/app.js
7284
host-path: |
@@ -78,27 +90,41 @@ jobs:
7890
dlopen: 1
7991
mprotect: 1
8092
secrets:
81-
docker-username: ${{ secrets.DOCKERHUB_USERNAME }}
8293
docker-password: ${{ secrets.DOCKERHUB_PAT }}
83-
scontain-username: ${{ secrets.SCONTAIN_REGISTRY_USERNAME }}
8494
scontain-password: ${{ secrets.SCONTAIN_REGISTRY_PAT }}
8595
scone-signing-key: ${{ secrets.SCONIFY_SIGNING_PRIVATE_KEY }}
96+
docker-username: ${{ secrets.DOCKERHUB_USERNAME }}
97+
scontain-username: ${{ secrets.SCONTAIN_REGISTRY_USERNAME }}
98+
99+
display-sconify-results:
100+
runs-on: ubuntu-latest
101+
needs: sconify
102+
steps:
103+
- name: Display Sconify Results
104+
run: |
105+
echo "## Sconify Results" >> $GITHUB_STEP_SUMMARY
106+
echo "" >> $GITHUB_STEP_SUMMARY
107+
108+
echo "### Production Image" >> $GITHUB_STEP_SUMMARY
109+
echo "- **Image Tag**: ${{ needs.sconify.outputs.prod-image-tag }}" >> $GITHUB_STEP_SUMMARY
110+
echo "- **Checksum**: ${{ needs.sconify.outputs.prod-checksum }}" >> $GITHUB_STEP_SUMMARY
111+
echo "- **MrEnclave**: ${{ needs.sconify.outputs.prod-mrenclave }}" >> $GITHUB_STEP_SUMMARY
112+
echo "" >> $GITHUB_STEP_SUMMARY
113+
114+
echo "### Summary" >> $GITHUB_STEP_SUMMARY
115+
echo "Sconification completed successfully!" >> $GITHUB_STEP_SUMMARY
86116
87-
manual-operation:
117+
deploy-dapp:
88118
runs-on: ubuntu-latest
89-
needs: [sconify, build-tag]
90-
env:
91-
IMAGE_TAG: ${{ needs.build-tag.outputs.image_tag }}
92-
DEPLOY_ENVIRONMENT: ${{ github.event.inputs.environment == 'dev' && 'dapp-dev' || 'dapp-prod' }}
93-
DOCKER_IMAGE_DEV_TAG: ${{ needs.sconify.outputs.prod-image-tag }}
94-
DOCKER_IMAGE_PROD_TAG: ${{ needs.sconify.outputs.prod-image-tag }}
119+
needs: [build-and-push, sconify]
95120
steps:
96-
- uses: actions/checkout@v4
121+
- name: Checkout code
122+
uses: actions/checkout@v4
97123

98124
- name: Setup Node.js
99125
uses: actions/setup-node@v4
100126
with:
101-
node-version: '18'
127+
node-version: '18.19'
102128
cache: 'npm'
103129

104130
- name: Install dependencies
@@ -115,9 +141,8 @@ jobs:
115141
echo "$MRENCLAVE" > deployment-dapp/.scone-fingerprint
116142
117143
- name: Deploy dapp contract
118-
if: ${{ github.event.inputs.operation == 'deploy-dapp-contract' }}
119144
env:
120-
DEPLOY_ENVIRONMENT: ${{ env.DEPLOY_ENVIRONMENT }}
145+
DEPLOY_ENVIRONMENT: ${{ inputs.environment }}
121146
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
122147
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
123148
DOCKER_IMAGE_DEV_TAG: ${{ env.DOCKER_IMAGE_DEV_TAG }}
@@ -127,9 +152,8 @@ jobs:
127152
npm run deploy-dapp
128153
129154
- name: Push dapp secret
130-
if: ${{ github.event.inputs.operation == 'push-dapp-secret' }}
131155
env:
132-
DEPLOY_ENVIRONMENT: ${{ env.DEPLOY_ENVIRONMENT }}
156+
DEPLOY_ENVIRONMENT: ${{ inputs.environment }}
133157
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
134158
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
135159
MJ_APIKEY_PUBLIC: ${{ secrets.MJ_APIKEY_PUBLIC }}
@@ -142,55 +166,48 @@ jobs:
142166
cd deployment-dapp
143167
npm run push-dapp-secret
144168
145-
- name: Publish sell order
146-
if: ${{ github.event.inputs.operation == 'publish-sell-order' }}
169+
- name: Publish free sell order
147170
env:
148-
DEPLOY_ENVIRONMENT: ${{ env.DEPLOY_ENVIRONMENT }}
171+
DEPLOY_ENVIRONMENT: ${{ inputs.environment }}
149172
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
150173
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
151-
PRICE: ${{ github.event.inputs.price }}
152-
VOLUME: ${{ github.event.inputs.volume }}
174+
PRICE: '0'
175+
VOLUME: '1000000000'
153176
run: |
154177
cd deployment-dapp
155178
npm run publish-sell-order
156179
157-
- name: Revoke sell order
158-
if: ${{ github.event.inputs.operation == 'revoke-sell-order' }}
180+
- name: Add resource to whitelist (dev)
181+
if: inputs.environment == 'dapp-dev'
159182
env:
160-
DEPLOY_ENVIRONMENT: ${{ env.DEPLOY_ENVIRONMENT }}
161-
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
162-
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
163-
ORDER_HASH: ${{ github.event.inputs.order_hash }}
164-
run: |
165-
cd deployment-dapp
166-
npm run revoke-sell-order
167-
168-
- name: Add to whitelist
169-
if: ${{ github.event.inputs.operation == 'add-to-whitelist' }}
170-
env:
171-
WALLET_PRIVATE_KEY: ${{ github.event.inputs.environment == 'dev' && secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY || secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
172-
CONTRACT_ADDRESS: ${{ github.event.inputs.environment == 'dev' && secrets.WEB3MAIL_WHITELIST_DEV_ADDRESS || secrets.WEB3MAIL_WHITELIST_PROD_ADDRESS }}
173-
ADDRESS_TO_ADD: ${{ github.event.inputs.address_to_add }}
183+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
184+
CONTRACT_ADDRESS: ${{ secrets.WEB3MAIL_WHITELIST_DEV_ADDRESS }}
174185
run: |
175186
cd node_modules/whitelist-smart-contract
176-
npm run addResourceToWhitelist
187+
export ADDRESS_TO_ADD=$(cat ../../deployment-dapp/.app-address) && npm run addResourceToWhitelist
177188
178-
- name: Remove from whitelist
179-
if: ${{ github.event.inputs.operation == 'remove-from-whitelist' }}
189+
- name: Add resource to whitelist (prod)
190+
if: inputs.environment == 'dapp-prod'
180191
env:
181-
WALLET_PRIVATE_KEY: ${{ github.event.inputs.environment == 'dev' && secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY || secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
182-
CONTRACT_ADDRESS: ${{ github.event.inputs.environment == 'dev' && secrets.WEB3MAIL_WHITELIST_DEV_ADDRESS || secrets.WEB3MAIL_WHITELIST_PROD_ADDRESS }}
183-
ADDRESS_TO_REMOVE: ${{ github.event.inputs.address_to_remove }}
192+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
193+
CONTRACT_ADDRESS: ${{ secrets.WEB3MAIL_WHITELIST_PROD_ADDRESS }}
184194
run: |
185195
cd node_modules/whitelist-smart-contract
186-
npm run removeResourceFromWhitelist
196+
export ADDRESS_TO_ADD=$(cat ../../deployment-dapp/.app-address) && npm run addResourceToWhitelist
187197
188198
- name: Configure ENS
189-
if: ${{ github.event.inputs.operation == 'configure-ens' }}
190199
env:
191-
DEPLOY_ENVIRONMENT: ${{ env.DEPLOY_ENVIRONMENT }}
200+
DEPLOY_ENVIRONMENT: ${{ inputs.environment }}
192201
WALLET_PRIVATE_KEY_DEV: ${{ secrets.WEB3MAIL_DAPP_OWNER_DEV_PRIVATEKEY }}
193202
WALLET_PRIVATE_KEY_PROD: ${{ secrets.WEB3MAIL_DAPP_OWNER_PROD_PRIVATEKEY }}
194203
run: |
195204
cd deployment-dapp
196205
npm run configure-ens
206+
207+
- name: Upload deployment artifacts
208+
uses: actions/upload-artifact@v4
209+
with:
210+
name: deployment-artifacts
211+
path: |
212+
deployment-dapp/.app-address
213+
deployment-dapp/.scone-fingerprint

0 commit comments

Comments
 (0)