Skip to content

Commit e028a1c

Browse files
Chore/ci workflows (#193)
* chore(dapp): upgrade to node 20 * feat(ci): migrate from Drone to GitHub Actions - Remove .drone.yml configuration - Add GitHub Actions workflows for CI/CD - Update .gitignore for GitHub Actions artifacts - Add workflows for SDK and Dapp CI/CD pipelines * feat(release): configure release-please for automated releases - Add release-please configuration for automated versioning - Add release manifest for tracking version changes - Enable conventional commit checks for PR titles and commits * refactor(deployment): update deployment scripts for GitHub Actions - Migrate deployment scripts from Drone to GitHub Actions environment variables - Update configuration to support multi-environment deployments - Improve environment-specific whitelisted apps configuration - Update deployment scripts for new workflow compatibility * test: update test utilities and environment configuration - Update test utilities for new environment configuration - Update environment preparation scripts for multi-env support - Update dapp e2e tests for new environment configuration - Improve test environment setup for CI/CD workflows * chore(deps): update package.json for new CI/CD setup * chore(dapp): sync package-lock.json with package.json * ci: add bellecour-dev environment and move WEB3MAIL_WHITELISTED_APPS to secrets * Update deployment-dapp utils * chore: format code with prettier * ci: add RPC_URL environment variable to push secret and publish sell order steps and use only dev tag * chore: temporarily remove bellecour-prod from deployment matrix --------- Co-authored-by: SeddikBellamine <[email protected]>
1 parent 84f26de commit e028a1c

33 files changed

+9310
-5359
lines changed

.drone.yml

Lines changed: 0 additions & 1282 deletions
This file was deleted.
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
name: check-conventional-commits
2+
3+
on: [pull_request]
4+
5+
jobs:
6+
check-conventional-commits:
7+
runs-on: ubuntu-latest
8+
steps:
9+
- uses: actions/checkout@v4
10+
- name: Check Commit Conventions
11+
uses: webiny/[email protected]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
name: check-conventional-commit-pr-title
2+
3+
on:
4+
pull_request_target:
5+
types:
6+
- opened
7+
- edited
8+
- reopened
9+
10+
jobs:
11+
lint-pr-title:
12+
permissions:
13+
pull-requests: read
14+
uses: iExecBlockchainComputing/github-actions-workflows/.github/workflows/[email protected]

.github/workflows/dapp-ci.yml

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
name: web3mail-dapp-ci
2+
3+
on:
4+
pull_request:
5+
paths:
6+
- 'dapp/**'
7+
8+
concurrency:
9+
group: ${{ github.ref }}-dapp-ci
10+
cancel-in-progress: true
11+
12+
env:
13+
WORKING_DIRECTORY: ./dapp
14+
15+
jobs:
16+
check-code:
17+
runs-on: ubuntu-latest
18+
defaults:
19+
run:
20+
working-directory: ${{ env.WORKING_DIRECTORY }}
21+
steps:
22+
- uses: actions/checkout@v4
23+
24+
- uses: actions/setup-node@v4
25+
with:
26+
node-version: '20.19.0'
27+
cache: 'npm'
28+
cache-dependency-path: dapp/package-lock.json
29+
30+
- name: Install Dependencies
31+
run: npm ci
32+
33+
- name: Lint
34+
run: npm run lint
35+
36+
- name: Check format (prettier)
37+
run: npm run check-format
38+
39+
test:
40+
runs-on: ubuntu-latest
41+
environment: bellecour-dev
42+
defaults:
43+
run:
44+
working-directory: ${{ env.WORKING_DIRECTORY }}
45+
env:
46+
MJ_APIKEY_PUBLIC: ${{ secrets.MAILJET_APIKEY_PUBLIC }}
47+
MJ_APIKEY_PRIVATE: ${{ secrets.MAILJET_APIKEY_PRIVATE }}
48+
MJ_SENDER: ${{ secrets.MAILJET_SENDER }}
49+
MAILGUN_APIKEY: ${{ secrets.MAILGUN_APIKEY }}
50+
WEB3MAIL_WHITELISTED_APPS: ${{ secrets.WEB3MAIL_WHITELISTED_APPS }}
51+
steps:
52+
- uses: actions/checkout@v4
53+
54+
- uses: actions/setup-node@v4
55+
with:
56+
node-version: '20.19.0'
57+
cache: 'npm'
58+
cache-dependency-path: dapp/package-lock.json
59+
60+
- name: Install Dependencies
61+
run: npm ci
62+
63+
- name: Test unit
64+
run: npm run test
65+
66+
- name: Test with coverage
67+
run: npm run ctest

.github/workflows/dapp-deploy.yml

Lines changed: 154 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,154 @@
1+
name: deploy-dapp
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
environment:
7+
description: 'Deployment environment'
8+
required: true
9+
type: choice
10+
options:
11+
- bellecour-dev
12+
- arbitrum-sepolia-dev
13+
- arbitrum-mainnet-dev
14+
price:
15+
description: 'Sell order price (optionnel)'
16+
type: string
17+
required: false
18+
default: ''
19+
volume:
20+
description: 'Sell order volume (optionnel)'
21+
type: string
22+
required: false
23+
default: ''
24+
25+
jobs:
26+
extract-tag:
27+
runs-on: ubuntu-latest
28+
outputs:
29+
clean_tag: ${{ steps.tag.outputs.clean_tag }}
30+
steps:
31+
- name: Checkout code
32+
uses: actions/checkout@v4
33+
34+
- name: Extract tag
35+
id: tag
36+
run: |
37+
echo "clean_tag=dev" | tee -a $GITHUB_OUTPUT
38+
39+
docker-publish:
40+
uses: iExecBlockchainComputing/github-actions-workflows/.github/workflows/[email protected]
41+
needs: [extract-tag]
42+
with:
43+
image-name: 'iexechub/web3mail-dapp'
44+
registry: 'docker.io'
45+
dockerfile: 'dapp/Dockerfile'
46+
context: 'dapp'
47+
security-scan: true
48+
security-report: 'sarif'
49+
hadolint: true
50+
push: true
51+
image-tag: ${{ needs.extract-tag.outputs.clean_tag }}
52+
secrets:
53+
username: ${{ secrets.DOCKERHUB_USERNAME }}
54+
password: ${{ secrets.DOCKERHUB_PAT }}
55+
56+
sconify:
57+
uses: iExecBlockchainComputing/github-actions-workflows/.github/workflows/[email protected]
58+
needs: [docker-publish, extract-tag]
59+
with:
60+
image-name: 'iexechub/web3mail-dapp'
61+
image-tag: ${{ needs.extract-tag.outputs.clean_tag }}
62+
sconify-debug: false
63+
sconify-prod: true
64+
docker-registry: docker.io
65+
sconify-version: '5.9.0-v15'
66+
binary: /usr/local/bin/node
67+
command: node /app/src/app.js
68+
host-path: |
69+
/etc/hosts
70+
/etc/resolv.conf
71+
binary-fs: true
72+
fs-dir: /app
73+
heap: 1G
74+
dlopen: 1
75+
mprotect: 1
76+
secrets:
77+
docker-username: ${{ secrets.DOCKERHUB_USERNAME }}
78+
docker-password: ${{ secrets.DOCKERHUB_PAT }}
79+
scontain-username: ${{ secrets.SCONTAIN_REGISTRY_USERNAME }}
80+
scontain-password: ${{ secrets.SCONTAIN_REGISTRY_PAT }}
81+
scone-signing-key: ${{ secrets.SCONIFY_SIGNING_PRIVATE_KEY }}
82+
83+
deploy-dapp:
84+
needs: [extract-tag, sconify]
85+
runs-on: ubuntu-latest
86+
environment: ${{ inputs.environment }}
87+
steps:
88+
- name: Checkout code
89+
uses: actions/checkout@v4
90+
91+
- name: Setup Node.js
92+
uses: actions/setup-node@v4
93+
with:
94+
node-version: '20.19.0'
95+
cache: 'npm'
96+
97+
- name: Install dependencies
98+
run: |
99+
npm ci
100+
cd node_modules/whitelist-smart-contract
101+
npm install --save-dev ts-node
102+
cd ../../deployment-dapp
103+
npm ci
104+
105+
- name: Deploy dapp contract
106+
env:
107+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
108+
DOCKER_IMAGE_TAG: ${{ needs.sconify.outputs.prod-image-tag }}
109+
CHECKSUM: ${{ needs.sconify.outputs.prod-checksum }}
110+
FINGERPRINT: ${{ needs.sconify.outputs.prod-mrenclave }}
111+
RPC_URL: ${{ secrets.RPC_URL }}
112+
run: |
113+
cd deployment-dapp
114+
npm run deploy-dapp
115+
116+
- name: Push dapp secret
117+
env:
118+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
119+
MJ_APIKEY_PUBLIC: ${{ secrets.MAILJET_APIKEY_PUBLIC }}
120+
MJ_APIKEY_PRIVATE: ${{ secrets.MAILJET_APIKEY_PRIVATE }}
121+
MJ_SENDER: ${{ secrets.MAILJET_SENDER }}
122+
MAILGUN_APIKEY: ${{ secrets.MAILGUN_APIKEY }}
123+
WEB3MAIL_WHITELISTED_APPS: ${{ vars.WEB3MAIL_WHITELISTED_APPS }}
124+
RPC_URL: ${{ secrets.RPC_URL }}
125+
run: |
126+
cd deployment-dapp
127+
npm run push-dapp-secret
128+
129+
- name: Publish free sell order
130+
env:
131+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
132+
PRICE: ${{ inputs.price || vars.SELL_ORDER_PRICE }}
133+
VOLUME: ${{ inputs.volume || vars.SELL_ORDER_VOLUME }}
134+
RPC_URL: ${{ secrets.RPC_URL }}
135+
run: |
136+
cd deployment-dapp
137+
npm run publish-sell-order
138+
139+
- name: Add resource to whitelist
140+
env:
141+
CONTRACT_ADDRESS: ${{ secrets.WEB3MAIL_WHITELIST_CONTRACT_ADDRESS }}
142+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
143+
run: |
144+
cd node_modules/whitelist-smart-contract
145+
export ADDRESS_TO_ADD=$(cat ../../deployment-dapp/.app-address) && npm run addResourceToWhitelist
146+
147+
- name: Configure ENS
148+
if: ${{ vars.DAPP_ENS_NAME }}
149+
env:
150+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
151+
DAPP_ENS_NAME: ${{ vars.DAPP_ENS_NAME }}
152+
run: |
153+
cd deployment-dapp
154+
npm run configure-ens

.github/workflows/dapp-release.yml

Lines changed: 136 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
name: dapp-release
2+
3+
on:
4+
push:
5+
tags:
6+
- 'dapp-v*'
7+
8+
jobs:
9+
extract-tag:
10+
runs-on: ubuntu-latest
11+
outputs:
12+
clean_tag: ${{ steps.tag.outputs.clean_tag }}
13+
steps:
14+
- name: Extract tag
15+
id: tag
16+
run: |
17+
TAG=${GITHUB_REF#refs/tags/dapp-v}
18+
echo "clean_tag=${TAG}" >> $GITHUB_OUTPUT
19+
20+
docker-publish:
21+
uses: iExecBlockchainComputing/github-actions-workflows/.github/workflows/[email protected]
22+
with:
23+
image-name: 'iexechub/web3mail-dapp'
24+
registry: 'docker.io'
25+
dockerfile: 'dapp/Dockerfile'
26+
context: 'dapp'
27+
security-scan: true
28+
security-report: 'sarif'
29+
hadolint: true
30+
push: true
31+
image-tag: ${{ needs.extract-tag.outputs.clean_tag }}
32+
secrets:
33+
username: ${{ secrets.DOCKERHUB_USERNAME }}
34+
password: ${{ secrets.DOCKERHUB_PAT }}
35+
36+
sconify:
37+
uses: iExecBlockchainComputing/github-actions-workflows/.github/workflows/[email protected]
38+
needs: [docker-publish]
39+
with:
40+
image-name: 'iexechub/web3mail-dapp'
41+
image-tag: ${{ needs.extract-tag.outputs.clean_tag }}
42+
sconify-debug: false
43+
sconify-prod: true
44+
docker-registry: docker.io
45+
sconify-version: '5.9.0-v15'
46+
binary: /usr/local/bin/node
47+
command: node /app/src/app.js
48+
host-path: |
49+
/etc/hosts
50+
/etc/resolv.conf
51+
binary-fs: true
52+
fs-dir: /app
53+
heap: 1G
54+
dlopen: 1
55+
mprotect: 1
56+
secrets:
57+
docker-username: ${{ secrets.DOCKERHUB_USERNAME }}
58+
docker-password: ${{ secrets.DOCKERHUB_PAT }}
59+
scontain-username: ${{ secrets.SCONTAIN_REGISTRY_USERNAME }}
60+
scontain-password: ${{ secrets.SCONTAIN_REGISTRY_PAT }}
61+
scone-signing-key: ${{ secrets.SCONIFY_SIGNING_PRIVATE_KEY }}
62+
63+
deploy-multi-env-prod:
64+
strategy:
65+
matrix:
66+
# TODO: bellecour-prod already deployed add it back for next release
67+
environment: [arbitrum-sepolia-prod, arbitrum-mainnet-prod]
68+
needs: [extract-tag, sconify]
69+
runs-on: ubuntu-latest
70+
environment: ${{ matrix.environment }}
71+
steps:
72+
- name: Checkout code
73+
uses: actions/checkout@v4
74+
75+
- name: Setup Node.js
76+
uses: actions/setup-node@v4
77+
with:
78+
node-version: '20.19.0'
79+
cache: 'npm'
80+
81+
- name: Install dependencies
82+
run: |
83+
npm ci
84+
cd node_modules/whitelist-smart-contract
85+
npm install --save-dev ts-node
86+
cd ../../deployment-dapp
87+
npm ci
88+
89+
- name: Deploy dapp contract
90+
env:
91+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
92+
DOCKER_IMAGE_TAG: ${{ needs.sconify.outputs.prod-image-tag }}
93+
CHECKSUM: ${{ needs.sconify.outputs.prod-checksum }}
94+
FINGERPRINT: ${{ needs.sconify.outputs.prod-mrenclave }}
95+
RPC_URL: ${{ secrets.RPC_URL }}
96+
run: |
97+
cd deployment-dapp
98+
npm run deploy-dapp
99+
100+
- name: Push dapp secret
101+
env:
102+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
103+
MJ_APIKEY_PUBLIC: ${{ secrets.MAILJET_APIKEY_PUBLIC }}
104+
MJ_APIKEY_PRIVATE: ${{ secrets.MAILJET_APIKEY_PRIVATE }}
105+
MJ_SENDER: ${{ secrets.MAILJET_SENDER }}
106+
MAILGUN_APIKEY: ${{ secrets.MAILGUN_APIKEY }}
107+
WEB3MAIL_WHITELISTED_APPS: ${{ vars.WEB3MAIL_WHITELISTED_APPS }}
108+
run: |
109+
cd deployment-dapp
110+
npm run push-dapp-secret
111+
112+
- name: Publish free sell order
113+
env:
114+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
115+
PRICE: ${{ vars.SELL_ORDER_PRICE }}
116+
VOLUME: ${{ vars.SELL_ORDER_VOLUME }}
117+
run: |
118+
cd deployment-dapp
119+
npm run publish-sell-order
120+
121+
- name: Add resource to whitelist
122+
env:
123+
CONTRACT_ADDRESS: ${{ secrets.WEB3MAIL_WHITELIST_CONTRACT_ADDRESS }}
124+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
125+
run: |
126+
cd node_modules/whitelist-smart-contract
127+
export ADDRESS_TO_ADD=$(cat ../../deployment-dapp/.app-address) && npm run addResourceToWhitelist
128+
129+
- name: Configure ENS
130+
if: ${{ vars.DAPP_ENS_NAME }}
131+
env:
132+
WALLET_PRIVATE_KEY: ${{ secrets.WEB3MAIL_DAPP_OWNER_PRIVATEKEY }}
133+
DAPP_ENS_NAME: ${{ vars.DAPP_ENS_NAME }}
134+
run: |
135+
cd deployment-dapp
136+
npm run configure-ens

0 commit comments

Comments
 (0)