forked from blockscout/blockscout
-
Notifications
You must be signed in to change notification settings - Fork 0
150 lines (130 loc) · 5.05 KB
/
deploy-config.yml
File metadata and controls
150 lines (130 loc) · 5.05 KB
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
144
145
146
147
148
149
150
name: Deploy Config
on:
push:
branches: [main]
paths:
- 'docker-compose/**'
workflow_dispatch:
inputs:
environment:
description: 'Deploy target'
required: true
type: choice
options:
- mainnet
- testnet
- beta
- both
jobs:
deploy-mainnet:
if: >
github.event_name == 'push' ||
(github.event_name == 'workflow_dispatch' &&
(inputs.environment == 'mainnet' || inputs.environment == 'both'))
runs-on: ubuntu-latest
environment: mainnet
steps:
- uses: actions/checkout@v4
- name: Copy configs to archive VM
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ vars.MAINNET_HOST }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: >-
docker-compose/docker-compose-mainnet.yml,
docker-compose/Caddyfile-mainnet,
docker-compose/envs/common-frontend.env,
docker-compose/envs/common-smart-contract-verifier.env,
docker-compose/envs/common-visualizer.env
target: /tmp/doscan-deploy
strip_components: 1
- name: Apply configs and restart services
uses: appleboy/ssh-action@v1
with:
host: ${{ vars.MAINNET_HOST }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
set -e
DEPLOY_PATH=~/doscan
SRC=/tmp/doscan-deploy
# Backup current compose
cp $DEPLOY_PATH/compose.yml $DEPLOY_PATH/compose.yml.bak 2>/dev/null || true
# Copy new configs (common-blockscout.env stays on VM with real secrets)
cp $SRC/docker-compose-mainnet.yml $DEPLOY_PATH/compose.yml
cp $SRC/Caddyfile-mainnet $DEPLOY_PATH/Caddyfile
cp $SRC/envs/common-frontend.env $DEPLOY_PATH/envs/common-frontend.env
cp $SRC/envs/common-smart-contract-verifier.env $DEPLOY_PATH/envs/common-smart-contract-verifier.env
cp $SRC/envs/common-visualizer.env $DEPLOY_PATH/envs/common-visualizer.env
# Recreate only services with config changes (no downtime)
cd $DEPLOY_PATH
sudo docker compose up -d --remove-orphans
# Cleanup
rm -rf $SRC
echo "Deploy complete!"
deploy-testnet:
if: >
github.event_name == 'push' ||
(github.event_name == 'workflow_dispatch' &&
(inputs.environment == 'testnet' || inputs.environment == 'both'))
runs-on: ubuntu-latest
environment: testnet
steps:
- uses: actions/checkout@v4
- name: Copy configs to dev VM
uses: appleboy/scp-action@v0.1.7
with:
host: ${{ vars.TESTNET_HOST }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
source: >-
docker-compose/docker-compose-testnet.yml,
docker-compose/envs/common-blockscout-testnet.env,
docker-compose/envs/common-frontend.env,
docker-compose/envs/common-frontend-testnet.env,
docker-compose/envs/common-smart-contract-verifier.env,
docker-compose/envs/common-visualizer.env
target: /tmp/doscan-deploy
strip_components: 1
- name: Apply configs and restart services
uses: appleboy/ssh-action@v1
with:
host: ${{ vars.TESTNET_HOST }}
username: ${{ vars.SSH_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY }}
script: |
set -e
DEPLOY_PATH=$HOME/services/DOScan/docker-compose
SRC=/tmp/doscan-deploy
cp $SRC/docker-compose-testnet.yml $DEPLOY_PATH/docker-compose.yml
cp $SRC/envs/common-blockscout-testnet.env $DEPLOY_PATH/envs/common-blockscout-testnet.env
cp $SRC/envs/common-frontend.env $DEPLOY_PATH/envs/common-frontend.env
cp $SRC/envs/common-frontend-testnet.env $DEPLOY_PATH/envs/common-frontend-testnet.env
cp $SRC/envs/common-smart-contract-verifier.env $DEPLOY_PATH/envs/common-smart-contract-verifier.env
cp $SRC/envs/common-visualizer.env $DEPLOY_PATH/envs/common-visualizer.env
cd $DEPLOY_PATH
sudo docker compose up -d --remove-orphans
rm -rf $SRC
echo "Testnet deploy complete!"
deploy-beta:
if: >
github.event_name == 'push' ||
(github.event_name == 'workflow_dispatch' &&
(inputs.environment == 'beta' || inputs.environment == 'both'))
runs-on: [self-hosted, beta]
environment: beta
steps:
- name: Pull latest and restart services
run: |
set -e
REPO=$HOME/Projects/DOScan
DEPLOY=$REPO/docker-compose
# Pull latest changes
cd $REPO
git pull origin main
# Restart beta compose
cd $DEPLOY
docker compose -f docker-compose-beta.yml -p doscan pull
docker compose -f docker-compose-beta.yml -p doscan up -d --remove-orphans
echo "Beta deploy complete!"