Skip to content

Commit 42564a6

Browse files
authored
Merge pull request #28 from stenwire/dev
Dev
2 parents 9a52487 + 8de4548 commit 42564a6

1 file changed

Lines changed: 36 additions & 35 deletions

File tree

.github/workflows/deploy.yml

Lines changed: 36 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,9 @@ on:
88

99
env:
1010
REGISTRY: ghcr.io
11-
# Project prefix – change this to rename everything
1211
PROJECT_PREFIX: "taimako"
1312

14-
# Container and network names (derived from prefix)
15-
POSTGRES_CONTAINER: ${{ env.PROJECT_PREFIX }}_postgres
16-
BACKEND_CONTAINER: ${{ env.PROJECT_PREFIX }}_backend
17-
FRONTEND_CONTAINER: ${{ env.PROJECT_PREFIX }}_frontend
18-
DOCKER_NETWORK: ${{ env.PROJECT_PREFIX }}_network
19-
20-
# Volume and backup paths
21-
DATA_DIR: ~/${{ env.PROJECT_PREFIX }}
22-
POSTGRES_DATA_DIR: ~/${{ env.PROJECT_PREFIX }}/postgres_data
23-
BACKUPS_DIR: ~/${{ env.PROJECT_PREFIX }}/backups
24-
13+
# Static environment variables
2514
BACKEND_ENV: >-
2615
-e ENVIRONMENT="production"
2716
-e DATABASE_URL="postgresql://${{ secrets.POSTGRES_USER }}:${{ secrets.POSTGRES_PASSWORD }}@${{ secrets.POSTGRES_HOST }}:5432/${{ secrets.POSTGRES_DB }}"
@@ -109,6 +98,18 @@ jobs:
10998
runs-on: ld-vps-runner
11099

111100
steps:
101+
- name: Set dynamic variables
102+
id: vars
103+
run: |
104+
PREFIX="${{ env.PROJECT_PREFIX }}"
105+
echo "postgres_container=${PREFIX}_postgres" >> $GITHUB_OUTPUT
106+
echo "backend_container=${PREFIX}_backend" >> $GITHUB_OUTPUT
107+
echo "frontend_container=${PREFIX}_frontend" >> $GITHUB_OUTPUT
108+
echo "docker_network=${PREFIX}_network" >> $GITHUB_OUTPUT
109+
echo "data_dir=~/${PREFIX}" >> $GITHUB_OUTPUT
110+
echo "postgres_data_dir=~/${PREFIX}/postgres_data" >> $GITHUB_OUTPUT
111+
echo "backups_dir=~/${PREFIX}/backups" >> $GITHUB_OUTPUT
112+
112113
- name: Set lowercase image names
113114
id: image-names
114115
run: |
@@ -127,26 +128,26 @@ jobs:
127128
docker pull ${{ env.REGISTRY }}/${{ steps.image-names.outputs.frontend_image }}:latest
128129
129130
- name: Create Docker network
130-
run: docker network create ${{ env.DOCKER_NETWORK }} || true
131+
run: docker network create ${{ steps.vars.outputs.docker_network }} || true
131132

132133
- name: Deploy PostgreSQL container
133134
run: |
134-
mkdir -p ${{ env.POSTGRES_DATA_DIR }}
135-
mkdir -p ${{ env.BACKUPS_DIR }}
135+
mkdir -p ${{ steps.vars.outputs.postgres_data_dir }}
136+
mkdir -p ${{ steps.vars.outputs.backups_dir }}
136137
137-
if docker ps -a --format '{{.Names}}' | grep -q "^${{ env.POSTGRES_CONTAINER }}$"; then
138+
if docker ps -a --format '{{.Names}}' | grep -q "^${{ steps.vars.outputs.postgres_container }}$"; then
138139
echo "PostgreSQL container exists."
139-
if ! docker ps --format '{{.Names}}' | grep -q "^${{ env.POSTGRES_CONTAINER }}$"; then
140+
if ! docker ps --format '{{.Names}}' | grep -q "^${{ steps.vars.outputs.postgres_container }}$"; then
140141
echo "Starting stopped PostgreSQL container..."
141-
docker start ${{ env.POSTGRES_CONTAINER }}
142+
docker start ${{ steps.vars.outputs.postgres_container }}
142143
fi
143144
else
144145
echo "Creating new PostgreSQL container..."
145146
docker run -d \
146-
--name ${{ env.POSTGRES_CONTAINER }} \
147-
--network ${{ env.DOCKER_NETWORK }} \
147+
--name ${{ steps.vars.outputs.postgres_container }} \
148+
--network ${{ steps.vars.outputs.docker_network }} \
148149
--restart unless-stopped \
149-
-v ${{ env.POSTGRES_DATA_DIR }}:/var/lib/postgresql/data \
150+
-v ${{ steps.vars.outputs.postgres_data_dir }}:/var/lib/postgresql/data \
150151
-e POSTGRES_USER="${{ secrets.POSTGRES_USER }}" \
151152
-e POSTGRES_PASSWORD="${{ secrets.POSTGRES_PASSWORD }}" \
152153
-e POSTGRES_DB="${{ secrets.POSTGRES_DB }}" \
@@ -155,7 +156,7 @@ jobs:
155156
156157
echo "Waiting for PostgreSQL to be ready..."
157158
for i in {1..30}; do
158-
if docker exec ${{ env.POSTGRES_CONTAINER }} pg_isready -U "${{ secrets.POSTGRES_USER }}" > /dev/null 2>&1; then
159+
if docker exec ${{ steps.vars.outputs.postgres_container }} pg_isready -U "${{ secrets.POSTGRES_USER }}" > /dev/null 2>&1; then
159160
echo "PostgreSQL is ready!"
160161
break
161162
fi
@@ -165,33 +166,33 @@ jobs:
165166
166167
- name: Deploy Backend container
167168
run: |
168-
docker stop ${{ env.BACKEND_CONTAINER }} || true
169-
docker rm ${{ env.BACKEND_CONTAINER }} || true
169+
docker stop ${{ steps.vars.outputs.backend_container }} || true
170+
docker rm ${{ steps.vars.outputs.backend_container }} || true
170171
171172
# Run migrations
172173
docker run --rm \
173-
--network ${{ env.DOCKER_NETWORK }} \
174+
--network ${{ steps.vars.outputs.docker_network }} \
174175
${{ env.BACKEND_ENV }} \
175176
${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest \
176177
alembic upgrade head
177178
178179
# Run backend
179180
docker run -d \
180-
--name ${{ env.BACKEND_CONTAINER }} \
181-
--network ${{ env.DOCKER_NETWORK }} \
181+
--name ${{ steps.vars.outputs.backend_container }} \
182+
--network ${{ steps.vars.outputs.docker_network }} \
182183
--restart unless-stopped \
183184
-p 127.0.0.1:8000:8000 \
184185
${{ env.BACKEND_ENV }} \
185186
${{ env.REGISTRY }}/${{ steps.image-names.outputs.backend_image }}:latest
186187
187188
- name: Deploy Frontend container
188189
run: |
189-
docker stop ${{ env.FRONTEND_CONTAINER }} || true
190-
docker rm ${{ env.FRONTEND_CONTAINER }} || true
190+
docker stop ${{ steps.vars.outputs.frontend_container }} || true
191+
docker rm ${{ steps.vars.outputs.frontend_container }} || true
191192
192193
docker run -d \
193-
--name ${{ env.FRONTEND_CONTAINER }} \
194-
--network ${{ env.DOCKER_NETWORK }} \
194+
--name ${{ steps.vars.outputs.frontend_container }} \
195+
--network ${{ steps.vars.outputs.docker_network }} \
195196
--restart unless-stopped \
196197
-p 127.0.0.1:3000:3000 \
197198
${{ env.FRONTEND_ENV }} \
@@ -204,7 +205,7 @@ jobs:
204205
run: |
205206
docker ps -a --filter "name=${{ env.PROJECT_PREFIX }}"
206207
207-
for container in "${{ env.POSTGRES_CONTAINER }}" "${{ env.BACKEND_CONTAINER }}" "${{ env.FRONTEND_CONTAINER }}"; do
208+
for container in "${{ steps.vars.outputs.postgres_container }}" "${{ steps.vars.outputs.backend_container }}" "${{ steps.vars.outputs.frontend_container }}"; do
208209
if ! docker ps --format '{{.Names}}' | grep -q "^$container$"; then
209210
echo "$container container failed to start!"
210211
docker logs $container
@@ -216,12 +217,12 @@ jobs:
216217
217218
- name: Backup database
218219
run: |
219-
docker exec ${{ env.POSTGRES_CONTAINER }} pg_dump -U "${{ secrets.POSTGRES_USER }}" "${{ secrets.POSTGRES_DB }}" > ${{ env.BACKUPS_DIR }}/backup_$(date +%Y%m%d_%H%M%S).sql
220-
ls -t ${{ env.BACKUPS_DIR }}/*.sql | tail -n +8 | xargs -r rm
220+
docker exec ${{ steps.vars.outputs.postgres_container }} pg_dump -U "${{ secrets.POSTGRES_USER }}" "${{ secrets.POSTGRES_DB }}" > ${{ steps.vars.outputs.backups_dir }}/backup_$(date +%Y%m%d_%H%M%S).sql
221+
ls -t ${{ steps.vars.outputs.backups_dir }}/*.sql | tail -n +8 | xargs -r rm
221222
222223
- name: Final cleanup
223224
if: always()
224225
run: |
225226
docker system prune -af --filter "until=24h"
226227
echo "=== Final disk space ==="
227-
df -h
228+
df -h

0 commit comments

Comments
 (0)