Skip to content

사후 브라우저 점검 중단으로 태그가 빠지던 배포 순서 수정 (2026-09-09)

  • 기간: 2026-09-09, Codex 1세션. 오너: “#1485 진행해줄래? 혹시 빨리 끝나면 17.7에 넣어주고”.
  • 랜딩: 2026-09-10 v0.17.7 Production 반영 완료. 앱 커밋 41d22de7통합 PR #1484main PR #1489, 배포 커밋 937042d775049b96ad00438fbe4019e1ec464e0c. Production 34375087828 success. #1485 자체의 마이그레이션·앱 동작 변경은 없다.
  • 설계서: 없음(수리 건). 이슈 #1485 분석·계획.
  • 정본: 배포 파이프라인, 앱 .github/workflows/deploy-steps.yml.
  • 도구: GitHub 실행 로그, Node 24.16.0, 기존 CI 단위 검사와 YAML 파서. 로그·보조 파서는 작업 폴더에만 두며 저장소에 추가하지 않았다.
  • 게이트: ciToolchain 회귀 검사 및 기존 deploymentTargets·ciScopePolicy, npm run check.
  • 버그리포트: BUG-089 — 사후 점검 중단으로 태그 누락. 상세 실측은 이 작업 기록과 #1485 운영 결과에 기록한다.

Phase 현황

Phase내용상태
Phase 1태그 의존 제거·비차단 점검·결과 알림v0.17.7 반영, 실제 태그·비차단 실패·자동 댓글 확인
Phase 2절차·조사 정정·통합 연결문서 PR #10 병합 및 운영 증거 연결

1. 배경

v0.17.6 Production 실행 34355624983에서 DB·Edge·frontend·docs·smoke는 성공했지만, 브라우저 점검이 20분 상한으로 중단되어 태그 잡이 건너뛰어졌다.

2. 문제 제기

release-tagneeds[smoke, browser-journeys]였기 때문에 이미 배포된 버전의 태그가 사후 점검 실패에 종속됐다. 실제 smoke 완료는 13:16:33 UTC, browser 시작·종료는 13:16:38~13:36:56 UTC이며 태그는 skipped였다.

이슈 본문의 “15개 완주”와 “점검 계정의 초안 잔존”은 로그와 구분해야 한다. 실행은 앞선 여러 실패·재시도 뒤 CASE-012 시작 중 잘렸다. CASE-011 최초 실패의 savedAt은 해당 케이스가 시작한 뒤인 13:34:35 UTC이며, 새 Playwright context의 localStorage에 생긴 빈 운동 초안이었다. 사전 DB 삭제로 해결된다는 증거는 없다.

3. 해결 방안

방안판단
smoke 직후 태그, 독립 비차단 점검과 실패 보고채택. 태그 의존성 문제를 제거하고 점검 실패는 공개한다.
실행 제한만 늘리거나 재시도 추가기각. 점검이 실패하면 태그가 다시 빠지는 구조가 남는다. 40분은 지정된 실행 상한으로만 적용한다.
점검 계정 DB 기록 일괄 삭제기각. 관측된 새 브라우저 초안과의 인과관계가 확인되지 않았다.

4. 적용한 내용

Phase 1 — 배포 태그와 점검 분리

deploy-steps.yml에서 태그의 선행 잡을 smoke 하나로 바꾸고, 브라우저 잡에 continue-on-error: true와 40분 상한을 적용했다. 모든 단계가 성공해야 마지막 성공 표식이 남는다. 별도 결과 보고 잡은 smoke 성공 후 표식 누락을 감지해 #1485 댓글·Actions 경고·요약을 기록한다. 시간초과와 준비 실패도 성공으로 오인하지 않는다.

댓글 권한은 두 호출자에서 전달하고 실제 보고 잡에만 부여한다. 기존 smoke 직렬 실행, 테스트 실패 기준, Production 영상 등 증거 수집 제한은 유지했다. 이슈의 “한 파일” 예상과 달리 실제 변경은 워크플로 3개와 회귀 검사 1개다.

Phase 2 — 운영 절차와 조사 기록

배포 절차에 태그 생성과 사후 검사 결과를 구분해 기록했다. CASE-011을 해결했다고 표시하거나 관련 앱 코드를 임의로 수리하지 않았다. 문서는 별도 저장소에서 검증·게시하며 앱에 문서를 추가하지 않는다.

작업 중 드러난 것

이슈 본문에 적힌 브라우저 실패의 근본 원인은 미확정이다. 이번 수정은 태그 누락과 사후 점검의 비차단 실행·알림만 다룬다. 통합 담당자의 요청에 따라 별도 full CI·큐 요청을 하지 않고 v0.17.7 첫 통합 후보에 검증을 모은다.

5. 적용 결과

항목전 → 후 / 검증 상태
태그의 browser 의존1개 → 0개, 회귀 검사 통과
browser 실행 상한20분 → 40분, 실제 잡은 4분22초에 종료. 잡 제한 초과는 미발생
실패·시간초과 가시성배포 중단과 태그 누락 → 실제 10개 실패 후 별도 댓글·경고 발송. 시간초과·준비 실패는 미발생
관련 단위 검사수정 전 2개 실패 → 수정 후 관련 28개 통과
필수 앱 검사npm run check: 정적 검사 및 3,437 pass / 28 skip / 0 fail, 단위 77.289초
워크플로 구조YAML 3개 파싱·잡 의존 참조, git diff --check 통과
통합 후보의 관련 검사HQ가 실제 합친 상태의 권한·태그 의존 검사 2개 통과(78ms)를 보고했다. 전체 CI의 대체 증거는 아니다.
문서 검사check: 약관 4개 버전·메뉴 296개, build: 21.30초, artifact: 31개 공개 자산 통과
앱 변경 treedc4c33414d145c2a982f9f6b32b339e2b0f30136 (HQ 통합 tree와 별개)
운영 데이터사전 삭제 추가 없음
릴리스·배포v0.17.7 / main937042d7, Production34375087828 success, 태그 대상 일치

2026-09-10 실제 Production 관측

시각은 KST다. 기존 실행의 API·로그만 확인했으며 별도 smoke·브라우저·CI·배포를 실행하지 않았다.

단계실측
smoke01:14:43 success
release-tag01:14:47 시작 → 01:15:04 success
Release 발행01:15:01, smoke 성공 18초 후. 태그가 배포 커밋937042d7을 직접 가리킴
browser01:14:48 시작 → 01:19:10 failure, 4분22초. 10 failed / 5 passed, 테스트 명령 exit1
성공 표식JSON 결과 업로드 success, 마지막 성공 표식 단계 skipped
보고01:19:14~19 success. 01:19:16 자동 댓글과 Actions warning 발행
전체 배포completed/success, 사후 실패가 배포·태그를 막지 않음

자동 댓글의 잡 상태 successcontinue-on-error가 적용된 downstream needs.result다. 실제 browser 잡은 failure였고, 별도 성공 표식 누락 조건이 이를 정확히 감지했다. 40분 잡 제한·준비 실패는 발생하지 않았으므로 해당 경로를 실증했다고 주장하지 않는다. 운영 결과 댓글.

기존 실행 로그에서 확인한 실패 10개는 아래와 같다. 공통 원인은 확정하지 않았고 테스트 문제로 단정하지 않는다. 재실행·새 수리·추가 이슈는 만들지 않았다.

케이스직접 관측한 오류
CASE-001활성 커스텀 종목 high clean and jerk 1개 기대, 실제 0개
CASE-00210초 클릭 제한, composeModal 배경이 포인터 이벤트를 가림
CASE-00410초 응답 대기·클릭 제한, workoutRestorePromptDialog가 포인터 이벤트를 가림
CASE-00510초 안에 dashboard.pr 요소를 찾지 못함
CASE-006dashboard.home이 hidden 상태로 10초 제한. 정리 중 통계 last_errorProjection was superseded before computation
CASE-008workoutRestorePromptDialog가 클릭을 가려 10초 제한. 정리 중 위와 같은 통계 last_error
CASE-010화면 이동 전 Feed 청크 준비 요청이 1개 이상이어야 한다는 검사 실패
CASE-011건드리지 않은 새 기록 화면에서 browser 초안이 남아 null 기대 검사 실패
CASE-029requires the local Supabase service-role client
CASE-039requires the local Supabase service-role client

004·008의 복원 대화상자, 006·008의 통계 정리 오류, 029·039의 로컬 service-role 요구는 공유되는 관측 현상이다. 그 원인과 실제 사용자 영향은 이 로그만으로 확정하지 않았다.

6. 이번 개선으로 향상된 것

이미 smoke를 통과한 배포의 태그를 사후 브라우저 실패가 막지 않는다. 배포 성공과 브라우저 점검 통과를 따로 확인할 수 있고, 준비 실패·시간초과도 성공 표식 누락으로 드러낸다.

남은 것

태그·독립 실행·비차단 실패·성공 표식 누락·자동 보고는 실제 Production에서 확인했다. 이번 실행에서 발생하지 않은 40분 잡 제한·준비 실패 분기는 실증 범위에 포함하지 않는다. 브라우저 결과는 10개 실패·5개 통과이며, CASE-011 자체나 다른 브라우저 실패를 이번 수정으로 해결했다고 보고하지 않는다.