You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
bug(platform): Play 업로드 경로가 versionCode 재확인·주입 검증·취소 시 edit 정리를 빠뜨린다 #1916
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
github-actions commentedon Sep 6, 2026
bug 이슈는 사이드바 Fields > Priority 로 심각도를 지정해야 합니다. 판정 기준:
값이 비어 있어도 이슈를 닫지는 않습니다. 이 안내는 이슈당 한 번만 답니다.
github-actions commentedon Sep 6, 2026
이 이슈를 맡은 PR 은 #1932 다 (base
fix/1918-preflight-guards).base 가 기본 브랜치(
develop)가 아니라서 GitHub 은 이 이슈의 Development 칸에아무것도 표시하지 않는다. 본문에
Closes #N이 있어도 마찬가지다 — 그 링크는 기본 브랜치를target 하는 PR 에서만 만들어진다.
PR 이 닫히거나 머지되면 이 이슈의
pr-open라벨은 다음 리컨사일에서 떨어진다.