Skip to content

๐Ÿชธ CHORE : CICD ์„ค์ •#98

Merged
sminha merged 11 commits into
developfrom
chore/cicd
Apr 29, 2026
Merged

๐Ÿชธ CHORE : CICD ์„ค์ •#98
sminha merged 11 commits into
developfrom
chore/cicd

Conversation

@sminha

@sminha sminha commented Apr 28, 2026

Copy link
Copy Markdown
Owner

๐ŸŒ€ Related Issue

๐Ÿ’ฌ Description

CI ํŒŒ์ดํ”„๋ผ์ธ ๋ฆฌํŒฉํ† ๋ง

๊ธฐ์กด์˜ ์ „์ฒด ์ง๋ ฌ ๊ตฌ์กฐ๋กœ ๋™์ž‘ํ•˜๋˜ CI ํŒŒ์ดํ”„๋ผ์ธ์„ ๋ฆฌํŒฉํ† ๋งํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ค„์ด๊ณ , ํ”„๋กœ์ ํŠธ ๊ทœ๋ชจ ํ™•์žฅ์— ๋Œ€๋น„ํ•œ ์ตœ์ ์˜ ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

1. ๋ฌธ์ œ & ๋Œ€์•ˆ

  • ๋ฌธ์ œ์ : ์ž‘์—… ๊ฐ„ ์˜์กด์„ฑ์ด ์—†์Œ์—๋„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋˜์–ด startup ๋น„์šฉ์ด ๋ˆ„์ ๋˜๊ณ  ๋ถˆํ•„์š”ํ•œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์กด์žฌํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ๋Œ€์•ˆ 1. ์ „์ฒด ๋ณ‘๋ ฌ ๊ตฌ์กฐ: ๋ชจ๋“  ์ž‘์—…์„ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์‹œ ์‹คํ–‰
  • ๋Œ€์•ˆ 2. ์กฐ๊ฑด๋ถ€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ: ๋ณ€๊ฒฝ ๋ฒ”์œ„๋ฅผ ๊ฐ์ง€ํ•˜์—ฌ ํ•„์š”ํ•œ ์ž‘์—…๋งŒ ์„ ๋ณ„์ ์œผ๋กœ ์‹คํ–‰

์ „์ฒด ์ง๋ ฌ ๊ตฌ์กฐ ํ”Œ๋กœ์šฐ

[lint] : startup โ†’ lint ์‹คํ–‰ โ†’ [client] : startup โ†’ client ์‹คํ–‰ โ†’ [server] : startup โ†’ server ์‹คํ–‰

์ „์ฒด ๋ณ‘๋ ฌ ๊ตฌ์กฐ ํ”Œ๋กœ์šฐ

[lint] : startup โ†’ lint ์‹คํ–‰
[client] : startup โ†’ client ์‹คํ–‰
[server] : startup โ†’ server ์‹คํ–‰

์กฐ๊ฑด๋ถ€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ ํ”Œ๋กœ์šฐ

[detect] : startup โ†’ detect ์‹คํ–‰
  โ””โ†’ [lint] : startup โ†’ lint ์‹คํ–‰
  โ””โ†’ [client] : startup โ†’ client ์‹คํ–‰
  โ””โ†’ [server] : startup โ†’ server ์‹คํ–‰

2. ํ…Œ์ŠคํŠธ
๊ฐ ๋ฐฉ์‹์˜ ์‹คํšจ์„ฑ์„ ๊ฒ€์ฆํ•˜๊ธฐ ์œ„ํ•ด Client, Server, Shared ํŒจํ‚ค์ง€๋ณ„ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๋ฐœ์ƒ์‹œ์ผœ ์†Œ์š” ์‹œ๊ฐ„์„ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.

์‹คํ–‰ ๋ฐฉ์‹ ๋ณ€๊ฒฝ ๋ฒ”์œ„ ์„ธ๋ถ€ ๋‹จ๊ณ„๋ณ„ ์†Œ์š” ์‹œ๊ฐ„ ์ด ์†Œ์š” ์‹œ๊ฐ„ (Total)
์ „์ฒด ์ง๋ ฌ Client ๋ณ€๊ฒฝ Client (37s) 42s
Server ๋ณ€๊ฒฝ Server (42s) 48s
Shared ๋ณ€๊ฒฝ Shared (45s) 50s
์ „์ฒด ๋ณ‘๋ ฌ Client ๋ณ€๊ฒฝ Lint (24s), Client (31s), Server (25s) 37s
Server ๋ณ€๊ฒฝ Lint (25s), Client (37s), Server (29s) 42s
Shared ๋ณ€๊ฒฝ Lint (25s), Client (31s), Server (25s) 35s
์กฐ๊ฑด๋ถ€ ๋ณ‘๋ ฌ Client ๋ณ€๊ฒฝ Detect (6s), Lint (23s), Client (32s) 48s
Server ๋ณ€๊ฒฝ Detect (4s), Lint (26s), Server (25s) 39s
Shared ๋ณ€๊ฒฝ Detect (4s), Lint (27s), Client (35s), Server (21s) 49s

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ•ด์„ํ•ด๋ณด๋ฉด,

  • ์ „์ฒด ์ง๋ ฌ ๊ตฌ์กฐ๋Š” ์ž‘์—…๋ณ„ startup์ด ๋ˆ„์ ๋˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์ž‘์—…๊นŒ์ง€ ์ˆ˜ํ–‰๋˜๋ฏ€๋กœ 3๊ฐ€์ง€ case ๋ชจ๋‘์— ๋Œ€ํ•ด ์ด ์†Œ์š”์‹œ๊ฐ„์ด ๊ฐ€์žฅ ๊น๋‹ˆ๋‹ค.
  • ์ „์ฒด ๋ณ‘๋ ฌ ๊ตฌ์กฐ๋Š” ๋ชจ๋“  ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— startup์ด ๋™์‹œ์— ์‹คํ–‰๋˜์–ด startup ๋ˆ„์ ์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ์กฐ๊ฑด๋ถ€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ๋Š” detect ์ž‘์—… ์‹œ๊ฐ„๊ณผ detect startup์ด ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋•Œ detect๋ฅผ ํ†ตํ•ด ๋ถˆํ•„์š”ํ•œ ์ž‘์—…์„ ์ƒ๋žตํ•œ๋‹ค๋Š” ์ด์ ์ด ์žˆ์ง€๋งŒ, ์ด๋•Œ ์ ˆ์•ฝํ•œ ์‹œ๊ฐ„์ด ์•ž์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ๋ฐœ์ƒํ•œ ์‹œ๊ฐ„์„ ์ƒ์‡„ํ•  ๋งŒํผ ํฐ ๊ฒฝ์šฐ์—๋งŒ ์‹ค์งˆ์ ์ธ ์‹œ๊ฐ„ ์ ˆ์•ฝ ํšจ๊ณผ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ํ†ตํ•ด detect๋กœ ์ธํ•ด ์ถ”๊ฐ€๋œ ์‹œ๊ฐ„์ด ์ ˆ์•ฝํ•œ ์‹œ๊ฐ„๋ณด๋‹ค ํผ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

3. ํ•ด๊ฒฐ & ๊ฒฐ๊ณผ

์œ„ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ „์ฒด ๋ณ‘๋ ฌ ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•˜์—ฌ CI ์‹คํ–‰ ์‹œ๊ฐ„์„ ์ตœ๋Œ€ 28% ๋‹จ์ถ•ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

server ๋ณ€๊ฒฝ case์— ๋Œ€ํ•ด ์˜ˆ์™ธ์ ์œผ๋กœ ์กฐ๊ฑด๋ถ€ ๋ณ‘๋ ฌ ๊ตฌ์กฐ์˜ ์†Œ์š” ์‹œ๊ฐ„์ด ๊ฐ€์žฅ ์งง๊ธด ํ•˜์ง€๋งŒ, 3s ์ฐจ์ด๋Š” ์‹คํ–‰ ํ™˜๊ฒฝ์— ๋”ฐ๋ฅธ ์ธก์ • ๋…ธ์ด์ฆˆ ๋ฒ”์œ„ ์•ˆ์— ์žˆ์œผ๋ฉฐ ๊ทธ ์™ธ case์— ๋Œ€ํ•ด์„œ๋Š” ์ „์ฒด ๋ณ‘๋ ฌ ๊ตฌ์กฐ๊ฐ€ 11s, 14s์˜ ์œ ์˜๋ฏธํ•œ ์ฐจ์ด๋ฅผ ๋ณด์˜€๋‹ค๋Š” ์ ์—์„œ ์ „์ฒด ๋ณ‘๋ ฌ ๊ตฌ์กฐ๊ฐ€ ๊ฐ€์žฅ ์•ˆ์ •์ ์ธ ์„ฑ๋Šฅ์„ ๋ณด์žฅํ•œ๋‹ค๊ณ  ํŒ๋‹จํ•˜์˜€์Šต๋‹ˆ๋‹ค.

cd ํŒŒ์ดํ”„๋ผ์ธ ์ถ”๊ฐ€

client์˜ ๊ฒฝ์šฐ Vercel์—์„œ ์ž๋™ ๋ฐฐํฌ๋ฅผ ์ง€์›ํ•˜๋‚˜, server์˜ ๊ฒฝ์šฐ ์ฝ”๋“œ ๋ณ€๊ฒฝ ์‹œ EC2์— SSH ์ ‘์†ํ•˜์—ฌ git pull๋ถ€ํ„ฐ ์žฌ์‹œ์ž‘๊นŒ์ง€์˜ ๊ณผ์ •์„ ์ˆ˜๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•˜๋Š” ๋น„ํšจ์œจ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด CD ํŒŒ์ดํ”„๋ผ์ธ์— server ์ž๋™ ๋ฐฐํฌ workflow๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์•ž์œผ๋กœ main ๋ธŒ๋žœ์น˜์— push๋˜๋ฉด ์•„๋ž˜ ์ˆœ์„œ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

1. verify โ€” ๋นŒ๋“œ ๊ฒ€์ฆ (์ง๋ ฌ)

lint โ†’ client type-check โ†’ client build โ†’ prisma generate โ†’ prisma validate โ†’ server type-check

2. verify ์„ฑ๊ณต ์‹œ deploy โ€” EC2 ๋ฐฐํฌ

SSH๋กœ EC2 ์ ‘์† โ†’ git pull โ†’ ์˜์กด์„ฑ ์„ค์น˜ โ†’ prisma generate โ†’ migrate deploy โ†’ pm2๋กœ ์„œ๋ฒ„ ์žฌ์‹œ์ž‘

3. deploy ์„ฑ๊ณต ์‹œ health-check โ€” ์„œ๋ฒ„ ์ •์ƒ ํ™•์ธ

/health ์—”๋“œํฌ์ธํŠธ์— ์ตœ๋Œ€ 10ํšŒ ํด๋ง (5์ดˆ ๊ฐ„๊ฒฉ), 200 ์‘๋‹ต ์˜ค๋ฉด ์„ฑ๊ณต

๐Ÿ“น Screenshot

๐Ÿ“‘ Notes

Summary by CodeRabbit

๋ฆด๋ฆฌ์Šค ๋…ธํŠธ

  • New Features

    • ์„œ๋ฒ„ API์— ํ—ฌ์Šค ์ฒดํฌ ์—”๋“œํฌ์ธํŠธ ์ถ”๊ฐ€
  • Chores

    • ์ž๋™ํ™”๋œ CI/CD ํŒŒ์ดํ”„๋ผ์ธ ์›Œํฌํ”Œ๋กœ์šฐ ๊ตฌ์ถ•
    • ํด๋ผ์ด์–ธํŠธ ๋ฐ ์„œ๋ฒ„ ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ ์ž๋™ํ™” ํ†ตํ•ฉ
    • CORS ์„ค์ •์„ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ๋™์  ๊ด€๋ฆฌ
    • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ • ์˜ˆ์‹œ ํŒŒ์ผ ์ถ”๊ฐ€

@sminha sminha self-assigned this Apr 28, 2026
@vercel

vercel Bot commented Apr 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
jumble Ready Ready Preview, Comment Apr 29, 2026 3:21am

@coderabbitai

coderabbitai Bot commented Apr 28, 2026

Copy link
Copy Markdown

Warning

Rate limit exceeded

@sminha has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 41 minutes and 17 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

โŒ› How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

๐Ÿšฆ How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

โ„น๏ธ Review info
โš™๏ธ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 7562dc26-e611-4a36-8e07-a9ca47341b2f

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 0766b91 and e7c1e21.

๐Ÿ“’ Files selected for processing (1)
  • client/.env.example
๐Ÿ“ Walkthrough

์›Œํฌ์Šค๋ฃจ

CI/CD ํŒŒ์ดํ”„๋ผ์ธ์„ ๊ตฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด cd.yml ์›Œํฌํ”Œ๋กœ์šฐ๋Š” ๋ฉ”์ธ ๋ธŒ๋žœ์น˜ ํ‘ธ์‹œ ์‹œ ๊ฒ€์ฆ ํ›„ EC2 ์ธ์Šคํ„ด์Šค์— ๋ฐฐํฌํ•˜๊ณ  ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ci.yml์„ ์ž‘์—…๋ณ„๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , CORS๋ฅผ ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ ํ™”ํ•˜๋ฉฐ, ํ—ฌ์Šค ์ฒดํฌ ์—”๋“œํฌ์ธํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๋ณ€๊ฒฝ ์‚ฌํ•ญ

Cohort / File(s) ์š”์•ฝ
CI/CD ์›Œํฌํ”Œ๋กœ์šฐ
.github/workflows/cd.yml, .github/workflows/ci.yml
๋ฐฐํฌ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ ์ถ”๊ฐ€ ๋ฐ ๊ธฐ์กด CI ์›Œํฌํ”Œ๋กœ์šฐ๋ฅผ lint, client, server 3๊ฐœ ์ž‘์—…์œผ๋กœ ๋ถ„๋ฆฌ. CD๋Š” ์˜์กด์„ฑ ์„ค์น˜, Prisma ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜, pm2 ์žฌ์‹œ์ž‘, ํ—ฌ์Šค ์ฒดํฌ๋ฅผ ์ˆœ์ฐจ ์‹คํ–‰.
์„œ๋ฒ„ ์„ค์ • ๋ฐ ์—”๋“œํฌ์ธํŠธ
server/src/app.ts, server/.env.example
CORS ์›๋ณธ์„ CORS_ORIGINS ํ™˜๊ฒฝ๋ณ€์ˆ˜(์‰ผํ‘œ ๊ตฌ๋ถ„)์—์„œ ๋™์ ์œผ๋กœ ๋กœ๋“œํ•˜๋„๋ก ๋ณ€๊ฒฝ. GET /health ์—”๋“œํฌ์ธํŠธ ์ถ”๊ฐ€ํ•˜์—ฌ ์ƒํƒœ ํ™•์ธ ์‘๋‹ต ๋ฐ˜ํ™˜.
ํ™˜๊ฒฝ๋ณ€์ˆ˜ ๋ฌธ์„œํ™”
client/.env.example
Vite API URL ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์˜ˆ์ œ ์ถ”๊ฐ€.

์˜ˆ์ƒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋‚œ์ด๋„

๐ŸŽฏ 3 (Moderate) | โฑ๏ธ ~20 minutes

๊ด€๋ จ๋œ ๊ฐ€๋Šฅ์„ฑ ์žˆ๋Š” PR

  • PR #97: server/src/app.ts์˜ CORS ์„ค์ • ๋ณ€๊ฒฝ์ด ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฏ€๋กœ ํ•จ๊ป˜ ๊ฒ€ํ†  ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
๐Ÿšฅ Pre-merge checks | โœ… 5
โœ… Passed checks (5 passed)
Check name Status Explanation
Title check โœ… Passed PR ์ œ๋ชฉ์ด CHORE ๋ฒ”์ฃผ์™€ CICD ์„ค์ •์ด๋ผ๋Š” ๋ณ€๊ฒฝ์˜ ํ•ต์‹ฌ์„ ๋ช…ํ™•ํžˆ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
Description check โœ… Passed PR ์„ค๋ช…์ด ํ…œํ”Œ๋ฆฟ์˜ ๋ชจ๋“  ํ•„์ˆ˜ ์„น์…˜์„ ํฌํ•จํ•˜๊ณ , CI/CD ํŒŒ์ดํ”„๋ผ์ธ ๋ฆฌํŒฉํ† ๋ง๊ณผ ์ถ”๊ฐ€์— ๋Œ€ํ•ด ์ƒ์„ธํ•œ ๊ทผ๊ฑฐ์™€ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์ œ์‹œํ•ฉ๋‹ˆ๋‹ค.
Linked Issues check โœ… Passed CI ํŒŒ์ดํ”„๋ผ์ธ ๋ฆฌํŒฉํ† ๋ง๊ณผ CD ํŒŒ์ดํ”„๋ผ์ธ ์ถ”๊ฐ€๋Š” #96์˜ ci.yml ์ˆ˜์ •๊ณผ cd.yml ์ƒ์„ฑ ์š”๊ตฌ์‚ฌํ•ญ์„ ๋ชจ๋‘ ์ถฉ์กฑํ•ฉ๋‹ˆ๋‹ค.
Out of Scope Changes check โœ… Passed ๋ชจ๋“  ๋ณ€๊ฒฝ์‚ฌํ•ญ(์›Œํฌํ”Œ๋กœ์šฐ, ํ™˜๊ฒฝ ์„ค์ • ์˜ˆ์‹œ, /health ์—”๋“œํฌ์ธํŠธ, CORS ๋™์  ์„ค์ •)์ด CICD ์„ค์ •๊ณผ ๋ฐฐํฌ ์ž๋™ํ™”๋ผ๋Š” ๋ช…ํ™•ํ•œ ๋ฒ”์œ„ ๋‚ด์— ์žˆ์Šต๋‹ˆ๋‹ค.
Docstring Coverage โœ… Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

โœ๏ธ Tip: You can configure your own custom pre-merge checks in the settings.

โœจ Finishing Touches
๐Ÿงช Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch chore/cicd

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

โค๏ธ Share
Review rate limit: 0/1 reviews remaining, refill in 41 minutes and 17 seconds.

Comment @coderabbitai help to get the list of available commands and usage tips.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 5

๐Ÿค– Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/cd.yml:
- Around line 7-11: Add explicit permissions for GITHUB_TOKEN at the workflow
root to avoid relying on repo defaults: declare a top-level permissions block
with "contents: read" so the CD workflow only has read access to repository
contents; update the workflow YAML (near the existing concurrency and jobs keys)
to include this permissions declaration and ensure GITHUB_TOKEN usage elsewhere
continues to work without elevating rights.
- Around line 63-70: The curl call inside the health-check loop should include
both connection and overall timeouts to avoid hanging; update the curl
invocation that sets status=$(curl -s -o /dev/null -w "%{http_code}"
http://$EC2_HOST/health) to add --connect-timeout (e.g., 5) and --max-time
(e.g., 10) so each attempt fails fast on network issues and the loop can retry
promptly.
- Around line 46-52: Wrap the deployment script in a fail-fast shell by adding
"set -euo pipefail" at the top of the multi-line script, replace the fragile
"git pull origin main" with an explicit sync using "git fetch origin" followed
by "git reset --hard origin/main" to avoid merge/conflict surprises, and keep
the subsequent commands (pnpm install --frozen-lockfile, pnpm --filter server
exec prisma generate, pnpm --filter server exec prisma migrate deploy, and the
pm2 restart/start sequence) so that any failure in those steps will stop the job
immediately; ensure the commands shown (pnpm install..., prisma generate, prisma
migrate deploy, pm2 restart jumble-server || pm2 start "pnpm --filter server
start" --name jumble-server) run only after the git reset succeeds.

In @.github/workflows/ci-parallel.yml:
- Around line 3-67: This workflow duplicates push/pull_request CI already
handled elsewhere by running the same jobs (lint, client, server) and should be
changed to avoid double runs: remove the push/pull_request triggers under on:
and replace them with a workflow_dispatch trigger (or add strict path filters to
on: so it only runs for specific files) so that the parallel jobs lint, client,
and server only run when manually dispatched or when relevant files change;
update the top-level on: block accordingly and keep the existing job definitions
(lint, client, server) unchanged.

In `@server/src/app.ts`:
- Around line 16-18: ํ˜„์žฌ corsOptions ์ƒ์ˆ˜์˜ origin ๋ฐฐ์—ด์— ๋„๋ฉ”์ธ๋“ค์ด ํ•˜๋“œ์ฝ”๋”ฉ๋˜์–ด ์žˆ์–ด ํ™˜๊ฒฝ๋ณ„๋กœ ๋ณ€๊ฒฝํ•  ์ˆ˜
์—†์Šต๋‹ˆ๋‹ค; ๋ณ€๊ฒฝํ•˜๋ ค๋ฉด corsOptions (const corsOptions) origin ๊ฐ’์„ process.env.CORS_ORIGINS
๊ฐ™์€ ํ™˜๊ฒฝ๋ณ€์ˆ˜๋กœ ๋Œ€์ฒดํ•˜๊ณ , ์„œ๋ฒ„ ์‹œ์ž‘ ์‹œ ํ•ด๋‹น ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ comma-separated ๋ฌธ์ž์—ด๋กœ ์ฝ์–ด split(',') ๋˜๋Š” JSON ํŒŒ์‹ฑํ•˜์—ฌ
๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜๊ณ  ๊ธฐ๋ณธ๊ฐ’(fallback)์œผ๋กœ ํ˜„์žฌ ๋กœ์ปฌ/ํ”„๋กœ๋•์…˜ ๋„๋ฉ”์ธ์„ ์ œ๊ณตํ•˜์„ธ์š”; ๋˜ํ•œ ๋นˆ๊ฐ’์ด๋‚˜ ์ž˜๋ชป๋œ ํฌ๋งท ์ฒ˜๋ฆฌ(์˜ˆ: trim,
ํ•„ํ„ฐ๋ง)๋ฅผ ์ถ”๊ฐ€ํ•ด ์•ˆ์ „ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์„ธ์š”.
๐Ÿช„ Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

โ„น๏ธ Review info
โš™๏ธ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 23430158-87da-4b43-a100-ba503d6416b3

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between 7d79905 and dd36e4e.

๐Ÿ“’ Files selected for processing (4)
  • .github/workflows/cd.yml
  • .github/workflows/ci-changes.yml
  • .github/workflows/ci-parallel.yml
  • server/src/app.ts

Comment thread .github/workflows/cd.yml
Comment thread .github/workflows/cd.yml
Comment thread .github/workflows/cd.yml
Comment thread server/src/app.ts Outdated
Repository owner deleted a comment from coderabbitai Bot Apr 29, 2026

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

โ™ป๏ธ Duplicate comments (1)
server/src/app.ts (1)

15-16: โš ๏ธ Potential issue | ๐ŸŸ  Major

CORS_ORIGINS ํŒŒ์‹ฑ ์‹œ ๊ณต๋ฐฑ ์ •๋ฆฌ๊ฐ€ ๋น ์ ธ CORS ๋งค์นญ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Line 15์—์„œ split(',') ํ›„ trim()์ด ์—†์–ด "https://a.com, https://b.com" ํ˜•ํƒœ ์ž…๋ ฅ ์‹œ ๋‘ ๋ฒˆ์งธ origin์ด ๊ณต๋ฐฑ ํฌํ•จ ๋ฌธ์ž์—ด๋กœ ๋‚จ์Šต๋‹ˆ๋‹ค.

๐Ÿ”ง ์ œ์•ˆ ์ˆ˜์ •
-const allowedOrigins = (process.env.CORS_ORIGINS ?? '').split(',').filter(Boolean);
+const allowedOrigins = (process.env.CORS_ORIGINS ?? '')
+  .split(',')
+  .map((origin) => origin.trim())
+  .filter(Boolean);
๐Ÿค– Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In `@server/src/app.ts` around lines 15 - 16, The CORS_ORIGINS parsing leaves
entries with surrounding whitespace which breaks origin matching; update the
parsing for allowedOrigins (used to build corsOptions) to split on commas, trim
each entry, and then filter out empty strings so values like "https://a.com,
https://b.com" produce clean origins; ensure you update the expression that
defines allowedOrigins to perform .map(trim) before .filter(Boolean).
๐Ÿค– Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.

Inline comments:
In @.github/workflows/ci.yml:
- Around line 17-64: Summary: Replace tag-based action refs with immutable
commit SHAs to prevent supply-chain risks. Find every usage of
actions/checkout@v4, pnpm/action-setup@v3, and actions/setup-node@v4 in the
workflow and replace the tag (e.g., `@v4/`@v3) with the corresponding full commit
SHA from each action's GitHub repo (use the exact 40-character commit SHA for
the tag you intended to pin); update all occurrences across the three jobs (the
steps currently using those symbols) and verify the chosen SHAs match the
desired release commit, then run the workflow lint/CI locally or in a dry run to
confirm no syntax/compatibility issues.

In `@client/.env.example`:
- Line 1: Add a final newline to the .env.example file to satisfy dotenv-linter:
open the file containing the VITE_API_URL= entry and ensure the file ends with a
newline character (i.e., add a trailing line break after the last line) so the
linter warning about missing EOF newline is resolved.

---

Duplicate comments:
In `@server/src/app.ts`:
- Around line 15-16: The CORS_ORIGINS parsing leaves entries with surrounding
whitespace which breaks origin matching; update the parsing for allowedOrigins
(used to build corsOptions) to split on commas, trim each entry, and then filter
out empty strings so values like "https://a.com, https://b.com" produce clean
origins; ensure you update the expression that defines allowedOrigins to perform
.map(trim) before .filter(Boolean).
๐Ÿช„ Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

โ„น๏ธ Review info
โš™๏ธ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 04d0be71-0dfa-434b-aec0-da626748ba5b

๐Ÿ“ฅ Commits

Reviewing files that changed from the base of the PR and between dd36e4e and 0766b91.

๐Ÿ“’ Files selected for processing (5)
  • .github/workflows/cd.yml
  • .github/workflows/ci.yml
  • client/.env.example
  • server/.env.example
  • server/src/app.ts

Comment thread .github/workflows/ci.yml
Comment on lines +17 to 64
- uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v3
- uses: pnpm/action-setup@v3
with:
version: 10

- name: Set up Node.js
uses: actions/setup-node@v4
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'

- name: Install dependencies
run: pnpm install
- run: pnpm install --frozen-lockfile
- run: pnpm lint

client:
name: Client Type Check & Build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v3
with:
version: 10

- name: Client Lint Check
run: pnpm --filter client lint
- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'

- name: Client Build
run: pnpm --filter client build
- run: pnpm install --frozen-lockfile
- run: pnpm --filter client type-check
- run: pnpm --filter client build

- name: Generate Prisma Client
run: pnpm --filter server exec prisma generate
server:
name: Server Type Check
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4

- uses: pnpm/action-setup@v3
with:
version: 10

- uses: actions/setup-node@v4
with:
node-version: 20
cache: 'pnpm'

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

โš ๏ธ Potential issue | ๐ŸŸ  Major

๐Ÿงฉ Analysis chain

๐Ÿ Script executed:

#!/bin/bash
rg -nP '^\s*-\s*uses:\s*[^@\s]+@(?!(?:[0-9a-f]{40})\b)' --glob '.github/workflows/*.yml'

Repository: sminha/JUMBLE

Length of output: 206


๐Ÿ Script executed:

# .github/workflows ๋””๋ ‰ํ† ๋ฆฌ ํ™•์ธ
git ls-files .github/workflows/

Repository: sminha/JUMBLE

Length of output: 107


๐Ÿ Script executed:

# ci.yml ํŒŒ์ผ ๋‚ด์šฉ ํ™•์ธ
cat -n .github/workflows/ci.yml | head -100

Repository: sminha/JUMBLE

Length of output: 1852


๐Ÿ Script executed:

# ํƒœ๊ทธ ๊ธฐ๋ฐ˜ ์•ก์…˜ ์ฐธ์กฐ ํ™•์ธ
rg -n '@v[0-9]' .github/workflows/ci.yml

Repository: sminha/JUMBLE

Length of output: 399


GitHub Actions๋ฅผ ์ปค๋ฐ‹ SHA๋กœ ๊ณ ์ •ํ•˜์„ธ์š”.

ํ˜„์žฌ ์›Œํฌํ”Œ๋กœ์šฐ์˜ ๋ชจ๋“  ์•ก์…˜์ด ํƒœ๊ทธ ๊ธฐ๋ฐ˜(@v4, @v3)์œผ๋กœ ์ฐธ์กฐ๋˜์–ด ์žˆ์–ด ๊ณต๊ธ‰๋ง ๊ณต๊ฒฉ ์œ„ํ—˜์ด ์žˆ์Šต๋‹ˆ๋‹ค. ํƒœ๊ทธ๋Š” ์–ธ์ œ๋“  ์žฌ์„ค์ •๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ๋ถˆ๋ณ€์˜ ์ปค๋ฐ‹ SHA๋กœ ๊ณ ์ •ํ•˜๋Š” ๊ฒƒ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์˜ํ–ฅ์„ ๋ฐ›๋Š” ์•ก์…˜:

  • actions/checkout@v4 โ†’ actions/checkout@[SHA]
  • pnpm/action-setup@v3 โ†’ pnpm/action-setup@[SHA]
  • actions/setup-node@v4 โ†’ actions/setup-node@[SHA]

CI/CD ์‹ ๋ขฐ์„ฑ๊ณผ ๋ณด์•ˆ์„ ์œ„ํ•ด ๋ชจ๋“  ์•ก์…˜ ์ฐธ์กฐ๋ฅผ SHA๋กœ ๊ต์ฒดํ•˜์„ธ์š”.

๐Ÿค– Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.

In @.github/workflows/ci.yml around lines 17 - 64, Summary: Replace tag-based
action refs with immutable commit SHAs to prevent supply-chain risks. Find every
usage of actions/checkout@v4, pnpm/action-setup@v3, and actions/setup-node@v4 in
the workflow and replace the tag (e.g., `@v4/`@v3) with the corresponding full
commit SHA from each action's GitHub repo (use the exact 40-character commit SHA
for the tag you intended to pin); update all occurrences across the three jobs
(the steps currently using those symbols) and verify the chosen SHAs match the
desired release commit, then run the workflow lint/CI locally or in a dry run to
confirm no syntax/compatibility issues.

Comment thread client/.env.example Outdated
@sminha sminha merged commit 52b399b into develop Apr 29, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

๐Ÿชธ CHORE : CICD ์„ค์ •

1 participant