Repository navigation
fix(platform): dependabot PR 의 두 검증이 게이트가 채운 제목·본문을 기다렸다가 판정한다 (#2212) - #2213
Merged
Merged
Conversation
게이트는 GITHUB_TOKEN 으로 편집해 edited 가 다른 워크플로를 깨우지 못하고, PR Validation·Managed Device 는 opened 시점 페이로드를 읽어 red 로 남았다. dependabot 이 연 PR 의 pull_request run 에서만 두 검증이 live PR 을 needsGate 가 false 가 될 때까지 기다린 뒤 그 값으로 판정한다. 기기 레인은 default branch 신뢰 사본으로 기다린다. 게이트 권한은 늘리지 않는다.
…2212) 리뷰에서 나온 지적을 반영한다. 게이트가 채운 뒤의 edited·synchronize 까지 기기 레인이 매번 API 를 불러 일시 오류 하나에 required lane 이 red 가 될 수 있었다. 이벤트 페이로드 제목에 대표 이슈 번호가 이미 있으면 종전처럼 페이로드를 쓴다. 대기 종료는 게이트 마커가 아니라 제목의 대표 이슈 번호로 가른다. 조회 오류는 제한 시간 안에서 다시 시도한다. 스테이징 판별 grep 문자열이 스크립트에 실제로 있는지, 인자 없는 호출이 채우기인지 테스트로 잠근다.
Sadturtleman
approved these changes
Oct 4, 2026
Sadturtleman
left a comment
Collaborator
There was a problem hiding this comment.
dependabot PR 에서만 live PR 을 기다렸다가 판정하고, 기기 레인은 default branch 신뢰 사본으로 대기하며 head 이동도 막아 경합(#2212)을 안전하게 해소합니다. 승인합니다.
koongmai
approved these changes
Oct 4, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
먼저 볼 파일:
.github/scripts/dependabot-pr-gate.mjs:awaitsGate·awaitGate와await명령. 페이로드가 판정 가능하면 그대로 쓰고, 아니면 게이트가 채울 때까지 live PR 을 다시 읽고, 시간을 넘기면 판정을 검증에 넘긴다.github/workflows/repository-quality.yml: dependabot 이 연 PR 의pull_requestrun 만 live PR 을 기다렸다가 그 값으로 판정 재료를 만드는 분기.github/workflows/android-managed-device.yml: 게이트 스크립트를 default branch 신뢰 사본으로 스테이징하고, 계획 해석 전에 그 사본으로 기다리는 분기.github/scripts/dependabot-pr-gate.test.mjs: 대기 동작,await명령의 계약, "게이트는 검증을 다시 부르지 않는다" 결정을 잠그는 단언Closes #2212
변경
dependabot PR 이 열리면
dependabot-pr-gate가 제목(#N)·Refs·CI Test Plan 을 채우는데, 같은 순간 도는 PR Validation 과 Managed Device 는 그 값을 못 보고 red 로 남았다. #2138 에서 게이트 PATCH(21:51:06.27Z)와 Repository Quality 실패(21:51:06.53Z)가 0.3초 차이였다. 게이트의GITHUB_TOKEN편집이 낸edited는 다른 워크플로를 깨우지 못하고, 두 검증은pull_request에서 opened 시점 페이로드를 읽는다.게이트가 검증을 다시 부르는 길은 쓰지 않았다.
workflow_dispatchpull_request실패를 보인다(#1825 실측)android-managed-device-retry.yml의 1회차 인프라 복구를 잃는다pull_request_target브리지에 두는 것을create-ci-config.test.mjs가 금지한다그래서 방향을 뒤집었다. 검증이 게이트를 기다린다.
dependabot-pr-gate.mjs:awaitsGate는 dependabot 이 연 열린 PR 인데 제목에 대표 이슈 번호가 없을 때만 참이다. 게이트 마커가 아니라 제목으로 가르는 것은, 게이트가 경계 경로에서 멈춰 사람이 손으로 채운 PR(마커 없음)을 edited 마다 끝까지 기다리게 하지 않기 위해서다. 게이트는 제목과 본문을 한 번의 PATCH 로 바꾸므로 제목에 번호가 있으면 본문도 채워져 있다.awaitGate는 이벤트 페이로드의 PR 이 이미 판정 가능하면 API 를 부르지 않고 그대로 돌려준다. 게이트가 채운 뒤의 edited·synchronize 는 종전처럼 페이로드만으로 끝난다. 아니면 live PR 을 5초 간격으로 읽고, 조회 오류는 제한 시간 안에서 다시 시도한다.await <출력 경로>명령은 그 JSON 을 파일에 쓰고, 제한 시간을 넘겨도 exit 0 과 경고만 남겨 판정을 뒤따르는 검증의 평소 오류 문구에 맡긴다. 인자 없이 부르면 종전처럼 채우기, 그 밖의 명령은 API 호출 없이 실패한다.repository-quality.yml:pull_request이면서 작성자가dependabot[bot]일 때만 PR 사본의await로 90초까지 기다린 live JSON 과 그changed_files를 쓴다. quota 대기 60초와 합쳐도 job timeout 3분 안에 든다. 사람 PR 과 dispatch 경로는 그대로다.android-managed-device.yml: default branch 사본에awaitGate가 있을 때만 게이트 스크립트를 신뢰 정책으로 스테이징한다(dependabot_gate=trusted). 도입 PR 과 bootstrap 은unavailable로 종전처럼 페이로드를 읽는다. dependabot PR 이면 그 신뢰 사본으로 180초까지 기다리고, live head 가 이벤트 head 와 다르면 실패한다. 실제 테스트는 attempt 1 에서 돌아 인프라 복구가 그대로 남는다.dependabot-pr-gate.yml: 동작 변경 없음. 머리 주석에 "여기서 검증을 다시 부르지 않고 actions 권한도 두지 않는다" 는 결정과 이유를 적었다.검증
node --test .github/scripts/*.test.mjs758건, 실패 0(기존 skip 1).새 단언이 실제로 잡는지 프로덕션 변이 21종(분기 제거, 대기 시간 150초, head 대조 제거, PR 사본 호출, 스테이징 비활성, 게이트
actions: write, 페이로드 우선 제거, 다른 PR 페이로드 사용, 조회 오류 재시도 제거, 마커 기준 종료, 스테이징 grep 문자열 불일치, 인자 없는 호출이 채우기가 아님 등)을 넣어 전부 실패하는 것을 확인했다.네 관점(정확성·신뢰 경계·설계 반증·정책 테스트) 리뷰와 지적별 반박 검증을 거쳤다. 살아남은 지적(채워진 뒤의 이벤트까지 API 에 기대는 것, 마커 기준 종료, grep 문자열 미대조, 주석에 걸리는 정규식)은 두 번째 커밋에서 고쳤다.
actionlint,scripts/repository-quality.sh통과.두 워크플로의 스텝 본문을 YAML 에서 그대로 떼어 가짜 API(두 번 미충족, 세 번째에 충족) 앞에서 실행했다.
mode=none해석mode=none해석실제 봇 PR 로는 머지 뒤 다음 dependabot 주간 실행(월 21:43Z)에서 사람 편집 없이 초록인지 확인한다. 대기 분기는 dependabot 이 연 PR 에서만 타므로 이 PR 에서는 미리 돌지 않는다.
CI Test Plan
{ "androidTest": { "mode": "full", "reason": "android-managed-device.yml 의 신뢰 정책 스테이징과 계획 해석 스텝을 바꾼다. FULL_REQUIRED_PATHS 라 기기 레인 전량으로 검증한다.", "tests": [] } }