Skip to content

bug(platform): Play 업로드 경로가 versionCode 재확인·주입 검증·취소 시 edit 정리를 빠뜨린다 #1916

Closed

Description

@1hyok

작업 유형

bug — 버그·오동작

주 담당 모듈

platform — Android 앱·CI·빌드·릴리스·저장소 운영

개요

Play 내부 트랙 업로드 경로에 사고가 늦게 드러나는 자리가 셋 있습니다. 셋 다 "수십 MB 를 올린 뒤 Play 가 거절해야 알게 된다" 는 같은 모양이고, 첫 실배포에서 처음 만나면 진단이 어렵습니다.

1. 업로드 직전 versionCode 재확인이 없다

이 워크플로는 토큰도 digest 도 업로드 직전에 다시 확인하는 원칙으로 짜였는데 versionCode 만 예외입니다. play-internal-track.mjs:170 의 사전 가드는 listBundles 결과에서 정확히 같은 값만 막고 listTracks 는 부르지 않습니다. 정작 probe 쪽 readLatestVersionCode(:141-151)는 bundles 와 tracks 를 함께 봅니다. 첫 수동 업로드나 콘솔 작업이 빌드 중에 끼면 40분 빌드가 업로드에서 죽습니다.

2. 빌드된 AAB 가 주입한 versionCode 를 담았는지 확인하지 않는다

AFTERNOTE_VERSION_CODE 주입이 실패하면 versionCode 1 짜리 AAB 가 그대로 올라가고, 그 사실은 Play 응답에서야 드러납니다. scripts/verify-play-release-bundle.sh:36-49 는 manifest 가 있는지만 보고 그 안의 versionCode 는 안 읽습니다. preflight 워크플로가 이미 bundletool 을 SHA256 고정으로 받아 쓰고 있어(release-aab-preflight.yml:31-32,58-64) 같은 방식으로 한 줄이면 빌드와 업로드 사이가 닫힙니다.

3. 취소·타임아웃으로 죽으면 Play edit 가 남는데 문서는 아니라고 단언한다

discardEdit 은 스크립트가 예외를 잡았을 때만 돕니다(play-internal-track.mjs:132-139, :207-210). timeout-minutes: 60 초과나 사람이 누른 취소는 SIGTERM 이라 edit 가 열린 채 남습니다. 그런데 docs/play-release.md:118 은 "어느 단계에서 실패하든 열린 edit는 정리되고" 라고 못 박아 두어, 사고 때 잘못된 전제로 진단하게 됩니다.

완료 조건

  • publish 경로가 listTracks 도 보고 업로드 직전에 "expected 가 현재 최댓값보다 큰가" 를 다시 판정한다. 테스트 fake 에 이미 /tracks 라우트가 있어 추가가 싸다.
  • 빌드한 AAB 의 manifest versionCode 를 읽어 주입값과 대조한다. 로컬 검증 스크립트에서도 같은 판정을 쓴다.
  • edit id 를 파일로 떨구고 if: always() 정리 스텝을 붙이거나, 문서 문장을 실제 동작으로 정정한다. 둘 중 어느 쪽이든 문서와 코드가 같은 말을 하게 만든다.
  • 각 항목에 회귀 테스트를 붙이고, 변이를 넣어 먼저 실패시킨 뒤 고친다.

참고

원 워크플로는 #852. 가드가 스텝을 안 잠그는 문제는 #1915 로 갈라 두었습니다. 이 이슈는 동작을 바꾸는 쪽입니다.

계정 준비가 끝나기 전에는 워크플로를 실제로 돌려 볼 수 없으므로, 판정은 전부 단위 테스트와 fake 로 닫습니다.

Activity

  1. added
    bugSomething isn't working
    area:platformCI·빌드·릴리스·저장소 운영 영역
    on Sep 6, 2026
  2. github-actions commented on Sep 6, 2026

    @github-actions
    Contributor

    bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:

    • Urgent: 치명 — 크래시·데이터 소실·보안 무력화·핵심 경로 차단·가짜 성공
    • High: 심각 — 실패·틀린 값의 정상 위장, 핵심 기능 무동작
    • Medium: 불편 — 우회로가 있는 오동작·틀린 표시, 핵심 흐름은 유지
    • Low: 경미 — 문구·정렬·마감 품질 흠, 기능 영향 없음

    값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.

  3. github-actions commented on Sep 6, 2026

    @github-actions
    Contributor

    이 이슈를 맡은 PR 은 #1932 다 (base fix/1918-preflight-guards).

    base 가 기본 브랜치(develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에
    아무것도 표시하지 않는다. 본문에 Closes #N 이 있어도 마찬가지다 — 그 링크는 기본 브랜치를
    target 하는 PR 에서만 만들어진다.

    PR 이 닫히거나 머지되면 이 이슈의 pr-open 라벨은 다음 리컨사일에서 떨어진다.

  4. added
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 6, 2026
  5. removed
    pr-open이 이슈를 구현하는 PR 이 열려 있다 — base 가 기본 브랜치가 아니어도 드러낸다
    on Sep 7, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area:platformCI·빌드·릴리스·저장소 운영 영역bugSomething isn't working

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions