Skip to content

Commit de7b3e4

Browse files
committed
feat: add environment-based deployments
1 parent a470015 commit de7b3e4

File tree

2 files changed

+112
-27
lines changed

2 files changed

+112
-27
lines changed
Lines changed: 21 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
name: CI-CD
1+
name: CI-CD (Production)
22

3-
on:
3+
on:
44
push:
55
branches: [ main ]
66
workflow_dispatch:
@@ -11,15 +11,9 @@ concurrency:
1111

1212
jobs:
1313
deploy:
14-
runs-on: ubuntu-latest
14+
environment: production
1515

16-
env:
17-
# local paths
18-
BACKEND_DIR: backend
19-
FRONTEND_DIR: frontend
20-
# remote paths
21-
REMOTE_APP_DIR: /var/www/tenantfirstaid
22-
SERVICE_NAME: tenantfirstaid-backend
16+
runs-on: ubuntu-latest
2317

2418
steps:
2519
- uses: actions/checkout@v4
@@ -29,43 +23,43 @@ jobs:
2923
with:
3024
node-version: 20
3125
cache: npm
32-
cache-dependency-path: ${{ env.FRONTEND_DIR }}/package-lock.json
26+
cache-dependency-path: ${{ vars.FRONTEND_DIR }}/package-lock.json
3327

3428
- name: Build UI
35-
working-directory: ${{ env.FRONTEND_DIR }}
29+
working-directory: ${{ vars.FRONTEND_DIR }}
3630
run: |
3731
npm ci
3832
npm run build
3933
4034
- name: Upload backend code via SCP
4135
uses: appleboy/[email protected]
4236
with:
43-
host: ${{ secrets.DO_HOST }}
44-
username: ${{ secrets.DO_USER }}
37+
host: ${{ vars.URL }}
38+
username: ${{ secrets.SSH_USER }}
4539
key: ${{ secrets.SSH_KEY }}
46-
source: ${{ env.BACKEND_DIR }}/
47-
target: ${{ env.REMOTE_APP_DIR }}
40+
source: ${{ vars.BACKEND_DIR }}/
41+
target: ${{ vars.REMOTE_APP_DIR }}
4842
rm: true
4943

5044
- name: Upload frontend code via SCP
5145
uses: appleboy/[email protected]
5246
with:
53-
host: ${{ secrets.DO_HOST }}
54-
username: ${{ secrets.DO_USER }}
47+
host: ${{ vars.URL }}
48+
username: ${{ secrets.SSH_USER }}
5549
key: ${{ secrets.SSH_KEY }}
56-
source: ${{ env.FRONTEND_DIR }}/dist
57-
target: ${{ env.REMOTE_APP_DIR }}
50+
source: ${{ vars.FRONTEND_DIR }}/dist
51+
target: ${{ vars.REMOTE_APP_DIR }}
5852
rm: false # Otherwise we wipe out the backend code
5953

6054
- name: Bootstrap on droplet
6155
uses: appleboy/[email protected]
6256
with:
63-
host: ${{ secrets.DO_HOST }}
64-
username: ${{ secrets.DO_USER }}
57+
host: ${{ vars.URL }}
58+
username: ${{ secrets.SSH_USER }}
6559
key: ${{ secrets.SSH_KEY }}
6660
script: |
6761
set -e
68-
cd ${{ env.REMOTE_APP_DIR }}/backend/
62+
cd ${{ vars.REMOTE_APP_DIR }}/backend/
6963
7064
# Install uv (fast installer from Astral) if it isn't there
7165
if ! command -v uv >/dev/null 2>&1; then
@@ -81,19 +75,19 @@ jobs:
8175
sudo chmod 750 /etc/tenantfirstaid
8276
sudo chown root:root /etc/tenantfirstaid
8377
cat > /etc/tenantfirstaid/env <<EOF
84-
ENV=prod
78+
ENV=${{ vars.ENV }}
8579
OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
8680
FLASK_SECRET_KEY=${{ secrets.FLASK_SECRET_KEY }}
8781
DB_HOST=${{secrets.DB_HOST}}
8882
DB_PASSWORD=${{secrets.DB_PASSWORD}}
89-
DB_PORT=${{secrets.DB_PORT}}
83+
DB_PORT=${{vars.DB_PORT}}
9084
DB_USER=default
9185
MODEL_REASONING_EFFORT=high
9286
VECTOR_STORE_ID=${{secrets.VECTOR_STORE_ID}}
9387
EOF
9488
chmod 640 /etc/tenantfirstaid/env
9589
9690
# Ownership, restart, reload
97-
sudo chown -R $USER:www-data ${{ env.REMOTE_APP_DIR }}
98-
sudo systemctl restart ${{ env.SERVICE_NAME }}
91+
sudo chown -R $USER:www-data ${{ vars.REMOTE_APP_DIR }}
92+
sudo systemctl restart ${{ vars.SERVICE_NAME }}
9993
sudo systemctl reload nginx

.github/workflows/deploy.staging.yml

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
name: CI-CD (Staging)
2+
3+
on:
4+
workflow_dispatch:
5+
6+
concurrency:
7+
group: deploy-to-droplet
8+
cancel-in-progress: true
9+
10+
jobs:
11+
deploy:
12+
environment: staging
13+
14+
runs-on: ubuntu-latest
15+
16+
steps:
17+
- uses: actions/checkout@v4
18+
19+
- name: Set up Node
20+
uses: actions/setup-node@v4
21+
with:
22+
node-version: 20
23+
cache: npm
24+
cache-dependency-path: ${{ vars.FRONTEND_DIR }}/package-lock.json
25+
26+
- name: Build UI
27+
working-directory: ${{ vars.FRONTEND_DIR }}
28+
run: |
29+
npm ci
30+
npm run build
31+
32+
- name: Upload backend code via SCP
33+
uses: appleboy/[email protected]
34+
with:
35+
host: ${{ vars.URL }}
36+
username: ${{ secrets.SSH_USER }}
37+
key: ${{ secrets.SSH_KEY }}
38+
source: ${{ vars.BACKEND_DIR }}/
39+
target: ${{ vars.REMOTE_APP_DIR }}
40+
rm: true
41+
42+
- name: Upload frontend code via SCP
43+
uses: appleboy/[email protected]
44+
with:
45+
host: ${{ vars.URL }}
46+
username: ${{ secrets.SSH_USER }}
47+
key: ${{ secrets.SSH_KEY }}
48+
source: ${{ vars.FRONTEND_DIR }}/dist
49+
target: ${{ vars.REMOTE_APP_DIR }}
50+
rm: false # Otherwise we wipe out the backend code
51+
52+
- name: Bootstrap on droplet
53+
uses: appleboy/[email protected]
54+
with:
55+
host: ${{ vars.URL }}
56+
username: ${{ secrets.SSH_USER }}
57+
key: ${{ secrets.SSH_KEY }}
58+
script: |
59+
set -e
60+
cd ${{ vars.REMOTE_APP_DIR }}/backend/
61+
62+
# Install uv (fast installer from Astral) if it isn't there
63+
if ! command -v uv >/dev/null 2>&1; then
64+
curl -LsSf https://astral.sh/uv/install.sh | sh
65+
export PATH="$HOME/.local/bin:$PATH"
66+
fi
67+
68+
# Sync dependencies directly from pyproject.toml
69+
uv sync
70+
71+
# Inject environment secrets
72+
sudo mkdir -p /etc/tenantfirstaid
73+
sudo chmod 750 /etc/tenantfirstaid
74+
sudo chown root:root /etc/tenantfirstaid
75+
cat > /etc/tenantfirstaid/env <<EOF
76+
ENV=${{ vars.ENV }}
77+
OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }}
78+
FLASK_SECRET_KEY=${{ secrets.FLASK_SECRET_KEY }}
79+
DB_HOST=${{secrets.DB_HOST}}
80+
DB_PASSWORD=${{secrets.DB_PASSWORD}}
81+
DB_PORT=${{vars.DB_PORT}}
82+
DB_USER=default
83+
MODEL_REASONING_EFFORT=high
84+
VECTOR_STORE_ID=${{secrets.VECTOR_STORE_ID}}
85+
EOF
86+
chmod 640 /etc/tenantfirstaid/env
87+
88+
# Ownership, restart, reload
89+
sudo chown -R $USER:www-data ${{ vars.REMOTE_APP_DIR }}
90+
sudo systemctl restart ${{ vars.SERVICE_NAME }}
91+
sudo systemctl reload nginx

0 commit comments

Comments
 (0)