-
Notifications
You must be signed in to change notification settings - Fork 1
153 lines (150 loc) · 5.67 KB
/
Copy pathdeploy.yml
File metadata and controls
153 lines (150 loc) · 5.67 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
151
152
153
name: Deploy codedays
on:
repository_dispatch:
types: [deploy_codedays]
workflow_dispatch:
jobs:
save-for-docker-compose:
name: Save for docker-compose
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Archive docker_compose
uses: actions/upload-artifact@v1
with:
name: docker_compose
path: docker-compose.yml
- name: Archive nginx
uses: actions/upload-artifact@v1
with:
name: nginx_conf
path: nginx
deploy-create:
name: Create basic folder
runs-on: self-hosted
steps:
- name: mkdir basic dir
run: |
mkdir -p /opt/projects
build-fe:
name: Build frontend
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Cache node modules
uses: actions/cache@v1
env:
cache-name: cache-node-modules
with:
path: ~/.npm # npm cache files are stored in `~/.npm` on Linux/macOS
key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-build-${{ env.cache-name }}-
${{ runner.os }}-build-
${{ runner.os }}-
- name: npm install, build, and test
working-directory: ./cad_fe
run: |
npm install
npm run build
rm dist/*/*.map
- name: Archive production artifacts
uses: actions/upload-artifact@v1
with:
name: cad_fe_dist
path: cad_fe/dist
deploy-fe:
needs: build-fe
name: deploy fontend
runs-on: self-hosted
steps:
- run: mkdir -p /opt/projects/codedays/cad_fe/dist/
- run: rm -rf /opt/projects/codedays/cad_fe/dist/*
- name: Download built package
uses: actions/download-artifact@v1
with:
name: cad_fe_dist
path: /opt/projects/codedays/cad_fe/dist/
compile-server:
name: Compile codedays server
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-python@v1
with:
python-version: '3.6' # Version range or exact version of a Python version to use, using SemVer's version range syntax
architecture: 'x64' # optional x64 or x86. Defaults to x64 if not specified
- name: install requirements
run: |
sudo apt install -y python3-dev gcc
pip install -r cad_server/requirements.txt
pip install Cython
- name: compile
working-directory: ./cad_server
run: |
python compile.py --rebuild
git log -1 > build/last_commit_id
- name: Archive production artifacts
uses: actions/upload-artifact@v1
with:
name: cad_server_build
path: cad_server/build
deploy-codedays:
needs: [compile-server,deploy-fe,save-for-docker-compose]
name: Deploy server
runs-on: self-hosted
env:
CODEDAYS_SECRET_KEY: ${{ secrets.CODEDAYS_SECRET_KEY }}
CODEDAYS_DATABASE_PASSWORD: ${{ secrets.CODEDAYS_DATABASE_PASSWORD }}
CODEDAYS_MAILGUN_API_KEY: ${{ secrets.CODEDAYS_MAILGUN_API_KEY }}
CODEDAYS_ENCRYPT_KEY: ${{ secrets.CODEDAYS_ENCRYPT_KEY }}
steps:
- name: backup project
working-directory: /opt/projects/codedays/
run: |
mkdir -p cad_server/cad_server
test -f cad_server/cad_server/local_settings.py && cp cad_server/cad_server/local_settings.py . || echo "no local settings"
cp -r cad_server cad_server-${GITHUB_SHA::8} && rm -rf cad_server/* || exit 1
- name: Download built package
uses: actions/download-artifact@v1
with:
name: cad_server_build
path: /opt/projects/codedays/cad_server/
- name: Download docker-compose
uses: actions/download-artifact@v1
with:
name: docker_compose
path: /opt/projects/codedays/
- name: Download nginx conf
uses: actions/download-artifact@v1
with:
name: nginx_conf
path: /opt/projects/codedays/nginx/
- name: get local_settings
working-directory: /opt/projects/codedays/cad_server/
run: |
test -f ../local_settings.py && cp ../local_settings.py cad_server/ || cp cad_server/local_settings_prod.py cad_server/local_settings.py
sed -i "s/{SECRET_KEY}/${CODEDAYS_SECRET_KEY}/g" cad_server/local_settings.py
sed -i "s/{DATABASE_PASSWORD}/${CODEDAYS_DATABASE_PASSWORD}/g" cad_server/local_settings.py
sed -i "s/{MAILGUN_API_KEY}/${CODEDAYS_MAILGUN_API_KEY}/g" cad_server/local_settings.py
sed -i "s/{ENCRYPT_KEY}/${CODEDAYS_ENCRYPT_KEY}/g" cad_server/local_settings.py
- name: Docker login
if: success()
run: sudo docker login -u "${{ secrets.DOCKER_USERNAME }}" -p "${{ secrets.DOCKER_PASSWORD }}"
- name: pull
if: success()
working-directory: /opt/projects/codedays/
run: |
mkdir -p /opt/projects/codedays_data/mysql /var/log/codedays/
sudo docker pull qiwihui/codedays:latest
sudo docker-compose stop
sudo docker-compose up -d
- name: setup server
if: success()
run: |
sudo docker exec codedays-server sh -c "cd /cad_server && chmod +x ./setup.sh && ./setup.sh"
sudo docker exec codedays-server /usr/local/bin/python /cad_server/manage.py migrate
sudo docker exec codedays-server /usr/local/bin/python /cad_server/manage.py loaddata /cad_server/kb/kb.json /cad_server/cad_server/sites.json
sudo docker exec codedays-server /etc/init.d/supervisor start