Summary
CI/CD를 CI / CD 워크플로 분리로 정리하고, Actions 이름을 읽기 쉽게 맞춘 뒤 main까지 반영했다. 이어서 **React hydration 418 수정, 모바일·데스크톱 헤더/navigation 개선(TASK-020~023)을 develop에 merge했다.
CI/CD — TASK-019
배경
- TASK-018
workflow_call이후: push당 CI run + Deploy Dev/Prod child run 2줄 (배포 2회는 아님) - 목표: push당 workflow run 1개, PR은 validate만
구현
| Before | After |
|---|---|
ci.yml PR + push + deploy | ci.yml — PR only → validate |
deploy-dev.yml / deploy-prod.yml | cd.yml — push + dispatch → validate → deploy |
workflow_call | 제거 (workflow_run / workflow_call 0건) |
Follow-up — Actions naming (PR #41)
- Sidebar:
goodtek-web · CI (Pull Request),goodtek-web · CD (Deploy) - Run title:
CI · PR #N · head → base,CD · dev · push develop등 - Job:
Gate · lint & build,Deploy · dev (dev.goodtek.xyz)등
Release
- PR #42
develop→mainmerge - Prod CD run
CD · prod · push mainsuccess
문서
docs/project/06-decisions.md— D-012~D-015 (콘텐츠 채널, CI/CD split, Actions naming)
Frontend fixes & UX — TASK-020 ~ 023
TASK-020 — React hydration #418
- 증상: prod 콘솔
Minified React error #418(text mismatch) - 원인: home 카드
Intl.DateTimeFormat에timeZone없음 → SSR(UTC) vs 브라우저(KST) 날짜 문자열 불일치 - 수정:
apps/web/src/lib/format-date.ts—formatPublishedDate()+timeZone: "Asia/Seoul" - PR: #43
TASK-021 — Mobile navigation
< md: 햄버거 → 왼쪽 Sheet 드로어 (shadcn)- nav 6개 단일 정의:
header-nav-items.ts - Auth Option A: 로그인 + 회원가입 드로어 footer (헤더는 Logo + Menu만)
- breakpoint: nav
md+, mobilemd:hidden - PR: #45
TASK-022 — Mobile drawer header
- 드로어 상단 「Menu」/「메뉴」→
Logo(sr-onlySheetTitle유지) - 로고 탭 → 홈 + 드로어 닫기 (
Logo.onNavigate) - PR: #47
TASK-023 — Desktop header
- Nav 그룹: site(만들기·소개) │ content(블로그·노트·커뮤니티) │ contact(문의)
- Active state:
/→ 만들기,/about→ 소개 - 외부 링크 ↗ (데스크톱 nav)
- Auth: Log in 텍스트 링크 + Sign up compact primary pill (
headerSignupCtaClassName) - nav / auth
border-l구분 - PR: #49
세션 중 UX polish (TASK-023 이후)
md근처 Log in 두 줄 → authwhitespace-nowrap+shrink-0- en 라벨 Log in / Sign up 띄어쓰기 통일
- (논의) 데스크톱 ↗ 아이콘은 선택 — 산만하면 desktop만 제거 검토
PR / merge 타임라인
| PR | 내용 | target |
|---|---|---|
| #39 | TASK-019 CI/CD 분리 | develop |
| #40 | Release develop → main | main |
| #41 | TASK-019 Actions naming | develop |
| #42 | Release (naming 포함) | main |
| #43 | TASK-020 hydration #418 | develop |
| #45 | TASK-021 mobile nav | develop |
| #47 | TASK-022 drawer logo | develop |
| #49 | TASK-023 desktop menu | develop |
Actions 기대 동작 (after TASK-019)
| 이벤트 | Run |
|---|---|
| PR → develop/main | goodtek-web · CI 1개 |
| push develop | goodtek-web · CD · dev 1개 |
| push main | goodtek-web · CD · prod 1개 |
Files touched (high level)
.github/workflows/ci.yml # PR only .github/workflows/cd.yml # push + dispatch (new) .github/workflows/deploy-*.yml # deleted
apps/web/src/lib/format-date.ts apps/web/src/components/header/* # MobileNav, HeaderDesktopNav, … apps/web/src/components/ui/sheet.tsx apps/web/src/components/Header.tsx apps/web/src/components/HeaderAuth.tsx apps/web/src/components/Logo.tsx apps/web/src/lib/cta.ts
docs/project/03-architecture.md docs/project/05-current-state.md docs/project/06-decisions.md docs/tasks/TASK-019 ~ TASK-023
Verify checklist
-
pnpm lint/pnpm build(각 TASK) -
CI/CD smoke (PR #39~#42, CD run IDs in TASK-019)
-
TASK-020 prod console —
/ko/enhard refresh, #418 없음 -
Mobile 375px — Menu → 6 links, drawer logo, auth footer
-
Desktop 768px~1280px — nav groups, Sign up pill, Log in 한 줄
-
Release PR #49 이후
develop→main(미실행 시 pending)
Next / open
-
develop→mainRelease (TASK-020~023 prod 반영) -
(선택) 데스크톱 nav 외부 ↗ 아이콘 제거
-
(선택) CD
workflow_dispatchdev/prod 수동 smoke -
Notes Infisical env (TASK-017 human checklist) — 서버 반영 여부 확인
Links
-
Repo:
goodtekxyz/goodtek-web -
Prod: https://goodtek.xyz/ko