Skip to content

Commit e18f3ed

Browse files
authored
Add workflow to deploy after release published - Merge PR #31
2 parents 4e2cca6 + 7c096cf commit e18f3ed

File tree

1 file changed

+126
-0
lines changed

1 file changed

+126
-0
lines changed
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
name: Deployment
2+
3+
on:
4+
release:
5+
types: [published]
6+
7+
jobs:
8+
checks-env:
9+
runs-on: ubuntu-latest
10+
environment: PROD
11+
12+
steps:
13+
- name: 'Check if SSH_HOST is set'
14+
run: |
15+
if [ -z "${{ secrets.SSH_HOST }}" ]; then
16+
echo "SSH_HOST is not set"
17+
exit 1
18+
fi
19+
20+
- name: 'Check if SSH_PORT is set'
21+
run: |
22+
if [ -z "${{ secrets.SSH_PORT }}" ]; then
23+
echo "SSH_PORT is not set"
24+
exit 1
25+
fi
26+
27+
- name: 'Check if SSH_USER is set'
28+
run: |
29+
if [ -z "${{ secrets.SSH_USER }}" ]; then
30+
echo "SSH_USER is not set"
31+
exit 1
32+
fi
33+
34+
- name: 'Check if SSH_PRIVATE_KEY is set'
35+
run: |
36+
if [ -z "${{ secrets.SSH_PRIVATE_KEY }}" ]; then
37+
echo "SSH_PRIVATE_KEY is not set"
38+
exit 1
39+
fi
40+
41+
- name: 'Check if BOT_DIR_NAME is set'
42+
run: |
43+
if [ -z "${{ secrets.BOT_DIR_NAME }}" ]; then
44+
echo "BOT_DIR_NAME is not set"
45+
exit 1
46+
fi
47+
48+
- name: 'Check if BOT_PM2_NAME is set'
49+
run: |
50+
if [ -z "${{ secrets.BOT_PM2_NAME }}" ]; then
51+
echo "BOT_PM2_NAME is not set"
52+
exit 1
53+
fi
54+
55+
build:
56+
runs-on: ubuntu-latest
57+
needs: [checks-env]
58+
environment: PROD
59+
60+
steps:
61+
- name: Checkout repository
62+
uses: actions/checkout@v2
63+
64+
- name: 'Set up Node.js version'
65+
uses: actions/setup-node@v1
66+
with:
67+
node-version: '18.x'
68+
69+
- name: 'Build the project'
70+
run: npm run build
71+
72+
- name: 'Remove dev dependencies and scripts from package.json'
73+
run: |
74+
jq 'del(.devDependencies,.scripts)' package.json > package.json.tmp
75+
mv package.json.tmp dist/package.json
76+
77+
- name: 'Generate package-lock.json in build directory'
78+
run: |
79+
cd dist
80+
npm install --production
81+
rm -rf node_modules
82+
cd ..
83+
84+
- name: 'Upload artifact for deployment job'
85+
uses: actions/upload-artifact@v2
86+
with:
87+
name: build-artifact
88+
path: ./dist
89+
if-no-files-found: error
90+
91+
deploy:
92+
runs-on: ubuntu-latest
93+
needs: [build]
94+
environment:
95+
name: PROD
96+
97+
steps:
98+
- name: 'Download artifact from build job'
99+
uses: actions/download-artifact@v2
100+
with:
101+
name: build-artifact
102+
103+
- name: Setup SSH agent
104+
uses: webfactory/ssh-agent@v0.7.0
105+
with:
106+
ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}
107+
108+
- name: 'Creating Known Hosts file if it does not exist'
109+
run: |
110+
mkdir -p ~/.ssh
111+
touch ~/.ssh/known_hosts
112+
113+
- name: 'Adding Known Hosts'
114+
run: ssh-keyscan -p ${{ secrets.SSH_PORT }} -H ${{ secrets.SSH_HOST }} >> ~/.ssh/known_hosts
115+
116+
- name: 'Clean up deployment directory'
117+
run: ssh -A -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd /home/${{ secrets.SSH_USER }}/${{ secrets.BOT_DIR_NAME }} && find . -maxdepth 1 -mindepth 1 ! -name 'node_modules' -exec rm -rf {} \;'
118+
119+
- name: 'Deploy source code with rsync'
120+
run: rsync -avz -e "ssh -A -p ${{ secrets.SSH_PORT }}" ./ ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }}:/home/${{ secrets.SSH_USER }}/${{ secrets.BOT_DIR_NAME }}/
121+
122+
- name: 'Install dependencies'
123+
run: ssh -A -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'cd /home/${{ secrets.SSH_USER }}/${{ secrets.BOT_DIR_NAME }}/ && npm install'
124+
125+
- name: 'Restart bot'
126+
run: ssh -A -p ${{ secrets.SSH_PORT }} ${{ secrets.SSH_USER }}@${{ secrets.SSH_HOST }} 'pm2 restart ${{ secrets.BOT_PM2_NAME }}'

0 commit comments

Comments
 (0)