Skip to content

[develop -> main] release: codepush web 개선 (FE-66·67·68·69) - #31

Merged
devlasbe merged 6 commits into
mainfrom
develop
Jul 14, 2026
Merged

devlasbe merged 6 commits into
mainfrom
develop

Conversation

@devlasbe

Copy link
Copy Markdown

요약

FE-61 codepush web 개선 에픽의 develop 누적분 4건을 실서버에 배포한다. 이 PR 머지 = 서버 자동 배포(Workers Builds), 웹은 머지 후 수동 배포 필요.

  • PRD: 없음
  • Figma: 없음

변경 사항

테스트

  • 서버 vitest 127/127 · tsc · biome ci, 웹 tsc · build (develop 기준)
  • 로컬 실 E2E: 히스토리 페이지네이션/토글(677개 실데이터), Google 실로그인
  • PR #29는 다중 에이전트 적대적 리뷰로 기존 로직 회귀 0건 확인

참고

⚠️ 머지 전 확인 — 배포 사전작업 (완료됨)

  • 운영 D1 마이그레이션 0004_add_google_id 적용 완료 (컬럼 확인, 구버전 코드 무영향 확인)
  • GOOGLE_CLIENT_SECRET 프로덕션 시크릿 등록 완료
  • Google Console 리디렉션 URI(실서버) 등록 완료

머지 후 할 일

  1. 웹 수동 배포 (apps/web에서 pnpm deploy) — 서버 배포 완료 후
  2. 스모크: GitHub/Google 로그인, 히스토리 페이지네이션, disabled/mandatory 토글 + Slack 알림, 앱 OTA updateCheck

🤖 Generated with Claude Code

devlasbe and others added 6 commits July 14, 2026 11:43
기존에는 history 엔드포인트가 getPackageHistory로 전체 릴리즈를
조회(전건 presigned 서명 + diff 서브쿼리)한 뒤 메모리에서 뒤집어
슬라이스했다. 릴리즈 수백 건이면 cold isolate 캐시 미스마다 그만큼
낭비되므로, 관리용 전용 getPackageHistoryPage(LIMIT/OFFSET + COUNT,
서명·diff 생략, 무캐시)를 추가하고 핸들러만 교체한다.

OTA(updateCheck)·롤백·중복검사·release.update가 공유하는
getPackageHistory 계약은 미변경. 응답 shape·기본값·정렬 동일.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
[FE-68 -> develop] refactor: 히스토리 조회를 DB 레벨 페이지네이션으로 개선
- context 줄의 📦 {deploymentName} 항목 제거 (실사용 deployment가 Production 하나뿐)
- Mandatory/Disabled 표시 ✅/❌ → ✓/✗
- sendReleaseNotification 호출부 2곳에서 deploymentName 전달 제거

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
[FE-69 -> develop] chore: Slack 알림에서 deployment 이름 제거 및 체크 표기 심플화
…tory 토글 (#29)

* [FE-67] feat: 릴리즈 disabled/mandatory 전용 엔드포인트 분리 및 웹 mandatory 토글

- PATCH /release/disabled, /release/mandatory 신규 (label 생략 시 최신)
- updatePackageMetadata 부분 UPDATE로 stale 캐시 lost update 차단
- Slack MandatoryOn/Off 액션 추가, 헤더 이모지 🟢/🔴 → ✓/✕ 단순화
- 웹 Mandatory/Optional 토글 + 승격 경고 confirm, 카드 버튼 outline 통일
- api-client 재생성

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] chore: Slack 헤더 문구를 Disabled/Mandatory true·false 형식으로 변경

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] chore: Slack 헤더 기호를 on/off가 아닌 카테고리 구분으로 변경 (Disabled=✕, Mandatory=★)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] chore: Slack 헤더 이모지를 카테고리 구분 이모지로 변경 (Disabled=🧊, Mandatory=🔥)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] refactor: Slack 액션 타입을 종류별 3종(Uploaded/Disabled/Mandatory)으로 정리

on/off는 헤더 텍스트가 isDisabled/isMandatory 값으로 표현

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] feat: 릴리즈 업로드 실패 Slack 알림 추가

- 인증·권한 통과 후 업로드 파이프라인(롤아웃 미완/중복 번들/R2·D1 오류) 실패 시 UploadFailed(🚨) 알림 발사
- 에러 메시지를 본문 코드 블록으로 첨부

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] feat: 히스토리 카드 버튼에 컬러 아이콘 강조 적용

- Mandatory 버튼: Zap 아이콘 (Mandatory로 전환 시 amber, Optional 전환 시 muted)
- Disable 버튼: Power 아이콘 (Disable 시 red, Enable 시 emerald)
- 버튼 골격은 무채색 outline 유지

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] style: 히스토리 카드 액션 버튼 크기 축소

- 버튼 h-9 → h-7, 패딩 px-2, 글자 text-xs
- 아이콘 [&_svg]:size-3 강제 (버튼 베이스 [&_svg]:size-4 오버라이드), gap-1
- 버튼 사이 간격 gap-0.5

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] test: disabled/mandatory 토글 엔드포인트 테스트 6종 추가

- label 지정/생략(최신) 대상 선택, 부분 UPDATE(다른 필드 불변), 404, 401

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] refactor: HistoryPage 기능 단위 훅·컴포넌트 분리

- hooks/: useHistoryTarget(앱·배포 선택), useReleaseHistory(이력·지표·페이지), useReleaseToggles(disabled/mandatory 토글)
- components/: ReleaseCard, HistoryPagination 분리 (formatBytes/formatTime은 ReleaseCard로 이동)
- types.ts로 응답 타입 분리
- useEffect 3개 기명화: selectFirstAppOnLoad / selectDefaultDeployment / resetPageOnTargetChange
- 동작 동일, 내부 구조만 변경

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

* [FE-67] fix: 테스트가 실제 Slack 채널로 알림을 발송하던 문제 차단

vitest-pool-workers가 wrangler.toml 경유로 .dev.vars의 CODE_PUSH_NOTI_SLACK을
로드해 토글 테스트가 실채널로 webhook을 쏘고 있었음. 테스트 바인딩에서 빈 값으로 고정.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
- /auth/google/login, /auth/google/callback (허용 도메인 화이트리스트 게이트)
- account.google_id 컬럼 마이그레이션 + linkedProviders GitHub/Google 조합
- getGoogleAccessToken/getGoogleUser 헬퍼 (userinfo 엔드포인트, 미검증 이메일 거부)
- 웹 Continue with Google 버튼 + google_domain_not_allowed 에러, GitHub 버튼 검정 통일
- 테스트 4종: 로그인 리다이렉트/도메인 허용·거부/기존 계정 연결

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
@devlasbe
devlasbe merged commit 13e97e9 into main Jul 14, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant