Skip to content

Commit 22b5602

Browse files
committed
ci(cert): split prod/dev deploy, add concurrency and project scoping
1 parent d68f19e commit 22b5602

File tree

2 files changed

+49
-34
lines changed

2 files changed

+49
-34
lines changed

.github/workflows/certificate-system.yml

Lines changed: 45 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,28 @@ name: Deploy (self-hosted)
22

33
on:
44
push:
5-
branches: ['**']
5+
branches:
6+
- 'main'
7+
- 'deploy/cert-develop'
8+
paths:
9+
- 'cert/**'
610
workflow_dispatch:
711

12+
# 같은 브랜치 동시 실행 시 이전 잡 취소(경쟁 배포 방지)
13+
concurrency:
14+
group: cert-${{ github.ref }}
15+
cancel-in-progress: true
16+
817
jobs:
918
deploy:
1019
runs-on: oracle
1120
defaults:
1221
run:
1322
working-directory: ./cert
23+
env:
24+
# 공용(운영/개발 공통) - 중복 제거
25+
SMTP_HOST: ${{ vars.SMTP_HOST }}
26+
SMTP_PORT: ${{ vars.SMTP_PORT }}
1427

1528
steps:
1629
- uses: actions/checkout@v4
@@ -19,56 +32,54 @@ jobs:
1932
- name: Build & up (main)
2033
if: github.ref == 'refs/heads/main'
2134
env:
22-
# --- Frontend build arg / 공용 ENV ---
35+
ENV_MODE: production
36+
37+
# --- Frontend build arg / 운영 ---
2338
FRONTEND_EXTERNAL_API_URL: ${{ vars.FRONTEND_EXTERNAL_API_URL }}
2439
FRONTEND_PORT: ${{ vars.FRONTEND_PORT }}
2540
BACKEND_PORT: ${{ vars.BACKEND_PORT }}
2641

27-
# --- Backend runtime ENV (공용) ---
42+
# --- Backend runtime / 운영 ---
2843
CORS_ORIGINS: ${{ vars.CORS_ORIGINS }}
29-
SMTP_HOST: ${{ vars.SMTP_HOST }}
30-
SMTP_PORT: ${{ vars.SMTP_PORT }}
3144
SMTP_USERNAME: ${{ vars.SMTP_USERNAME }}
3245

33-
# --- Notion / Secrets (공용) ---
46+
# --- Notion, Secrets / 운영 ---
3447
NOTION_API_KEY: ${{ secrets.NOTION_API_KEY }}
3548
NOTION_CERT_DB_ID: ${{ secrets.NOTION_CERT_DB_ID }}
3649
NOTION_PROJ_DB_ID: ${{ secrets.NOTION_PROJ_DB_ID }}
3750
SMTP_PASSWORD: ${{ secrets.SMTP_PASSWORD }}
38-
39-
ENV_MODE: production
4051
run: |
52+
set -euxo pipefail
4153
echo "ENV_MODE=$ENV_MODE"
42-
docker compose config -q
43-
docker compose down --remove-orphans
44-
docker compose up -d --build --remove-orphans
45-
docker image prune -f
54+
docker compose -p cert-main config -q
55+
docker compose -p cert-main down --remove-orphans
56+
docker compose -p cert-main up -d --build --remove-orphans
57+
docker image prune -f --filter "label=org.pseudolab.project=cert"
4658
47-
# === 비-main (테스트 배포) ===
48-
- name: Build & up (non-main)
49-
if: github.ref != 'refs/heads/main'
59+
# === 개발 배포 (deploy/cert-develop) ===
60+
- name: Build & up (develop)
61+
if: github.ref == 'refs/heads/deploy/cert-develop'
5062
env:
51-
# --- Frontend build arg / 공용 ENV ---
52-
FRONTEND_EXTERNAL_API_URL: ${{ vars.FRONTEND_EXTERNAL_API_URL }}
53-
FRONTEND_PORT: ${{ vars.FRONTEND_PORT }}
54-
BACKEND_PORT: ${{ vars.BACKEND_PORT }}
63+
ENV_MODE: development
5564

56-
# --- Backend runtime ENV (공용 + 테스트 전용) ---
57-
CORS_ORIGINS: ${{ vars.CORS_ORIGINS }}
58-
SMTP_HOST: ${{ vars.SMTP_HOST }}
59-
SMTP_PORT: ${{ vars.SMTP_PORT }}
60-
SMTP_USERNAME: ${{ vars.TEST_SMTP_USERNAME }}
65+
# --- Frontend build arg / 개발 ---
66+
FRONTEND_EXTERNAL_API_URL: ${{ vars.DEV_FRONTEND_EXTERNAL_API_URL }}
67+
FRONTEND_PORT: ${{ vars.DEV_FRONTEND_PORT }}
68+
BACKEND_PORT: ${{ vars.DEV_BACKEND_PORT }}
6169

62-
# --- Notion / Secrets (테스트 전용) ---
63-
NOTION_API_KEY: ${{ secrets.TEST_NOTION_API_KEY }}
64-
NOTION_CERT_DB_ID: ${{ secrets.TEST_NOTION_CERT_DB_ID }}
65-
NOTION_PROJ_DB_ID: ${{ secrets.TEST_NOTION_PROJ_DB_ID }}
66-
SMTP_PASSWORD: ${{ secrets.TEST_SMTP_PASSWORD }}
70+
# --- Backend runtime / 개발 ---
71+
CORS_ORIGINS: ${{ vars.DEV_CORS_ORIGINS }}
72+
SMTP_USERNAME: ${{ vars.DEV_SMTP_USERNAME }}
6773

68-
ENV_MODE: test
74+
# --- Notion, Secrets / 개발 ---
75+
NOTION_API_KEY: ${{ secrets.DEV_NOTION_API_KEY }}
76+
NOTION_CERT_DB_ID: ${{ secrets.DEV_NOTION_CERT_DB_ID }}
77+
NOTION_PROJ_DB_ID: ${{ secrets.DEV_NOTION_PROJ_DB_ID }}
78+
SMTP_PASSWORD: ${{ secrets.DEV_SMTP_PASSWORD }}
6979
run: |
80+
set -euxo pipefail
7081
echo "ENV_MODE=$ENV_MODE"
71-
docker compose config -q
72-
docker compose down --remove-orphans
73-
docker compose up -d --build --remove-orphans
74-
docker image prune -f
82+
docker compose -p cert-dev config -q
83+
docker compose -p cert-dev down --remove-orphans
84+
docker compose -p cert-dev up -d --build --remove-orphans
85+
docker image prune -f --filter "label=org.pseudolab.project=cert"

cert/docker-compose.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ services:
44
frontend:
55
build:
66
context: ./frontend
7+
labels:
8+
- "org.pseudolab.project=cert"
79
args:
810
VITE_API_BASE_URL: ${FRONTEND_EXTERNAL_API_URL:-https://backend:8000}
911
ports:
@@ -13,6 +15,8 @@ services:
1315
backend:
1416
build:
1517
context: ./backend
18+
labels:
19+
- "org.pseudolab.project=cert"
1620
ports:
1721
- "${BACKEND_PORT}:8000"
1822
environment:

0 commit comments

Comments
 (0)