1- name : dapp-manual-operations
1+ name : Deploy DApp Contract
22
33on :
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
4321jobs :
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