브랜치 보호
main에 대한 Apothem 브랜치 보호: 현재 적용된 보호 규칙, 그 필수 상태 검사, 추가 대기 중인 검사입니다.
Apothem의 main 브랜치는 클래식 GitHub 브랜치 보호 규칙으로 보호됩니다. 저장소에는 규칙 세트가 없습니다. 이 보호는 rules/production-ready-prs.md에 선언된 변경 세트 규율을 강제하며, OpenSSF Scorecard의 Branch-Protection 및 Code-Review 검사에 입력을 제공합니다.
이 페이지는 2026-10-07에 GitHub API에서 마지막으로 읽은 현재 설정을 정확히 기록합니다. 메인테이너가 의도했지만 아직 적용하지 않은 설정은 보류 중인 메인테이너 변경 아래에만 나타납니다.
보호 설정
| 설정 | API 필드 | 현재 값 | 효과 |
|---|---|---|---|
| 병합 전 풀 리퀘스트 요구 | required_pull_request_reviews(존재) | ✅ | 변경은 풀 리퀘스트를 통해 main에 도달합니다. |
| 필요한 승인 검토 수 | required_approving_review_count | 0 | 풀 리퀘스트는 승인 검토 없이 병합됩니다. 단독 메인테이너 모델을 참조하세요. |
| 새 커밋 시 오래된 승인 무효화 | dismiss_stale_reviews | ✅ | 새 푸시 전에 받은 승인은 더 이상 인정되지 않습니다. |
| Code Owners의 검토 요구 | require_code_owner_reviews | ❌ | 두 번째 메인테이너가 합류하기 전에 이를 활성화하면 단독 메인테이너의 풀 리퀘스트가 교착 상태에 빠집니다. |
| 가장 최근의 검토 가능한 푸시에 대한 승인 요구 | require_last_push_approval | ❌ | GitHub는 그 승인이 푸시한 사람이 아닌 다른 사람에게서 오도록 요구하며, 단독 메인테이너는 이를 충족할 수 없습니다. |
| 상태 검사 통과 요구 | required_status_checks | ✅ | 필수 상태 검사 아래에 나열된 12개 컨텍스트가 통과해야 합니다. |
| 병합 전 브랜치를 최신 상태로 유지 요구 | required_status_checks.strict | ❌ | 풀 리퀘스트는 필수 검사가 이전 main을 기준으로 통과했을 때에도 병합될 수 있습니다. 그런 다음 main으로의 푸시에서 실행되는 워크플로가 병합된 결과를 테스트합니다. |
| 병합 전 대화 해결 요구 | required_conversation_resolution | ✅ | 열린 검토 스레드는 병합을 차단합니다. |
| 서명된 커밋 요구 | required_signatures | ❌ | 릴리스 커밋은 로컬에서 서명됩니다. 강제 적용은 기여자 온보딩 문서가 SSH 또는 GPG 서명 설정을 기술할 때까지 기다립니다. |
| 선형 히스토리 요구 | required_linear_history | ✅ | main의 공개 히스토리를 단일 선으로 유지합니다. |
| 브랜치 잠금 | lock_branch | ❌ | main은 병합을 받아들입니다. |
| 위 설정의 우회 허용 안 함 | enforce_admins | ❌ | 위 설정은 저장소 관리자를 구속하지 않습니다. 관리자는 필수 검사 없이 병합하거나 main에 직접 푸시할 수 있습니다. |
| 강제 푸시 허용 | allow_force_pushes | ❌ | main으로의 강제 푸시는 관리자를 포함한 모든 사람에게 차단됩니다. |
| 삭제 허용 | allow_deletions | ❌ | 관리자를 포함해 누구도 main을 삭제할 수 없습니다. |
단독 메인테이너 모델
저장소에는 메인테이너가 한 명 있습니다. GitHub는 "풀 리퀘스트 작성자는 자신의 풀 리퀘스트를 승인할 수 없습니다."라고 명시합니다. 따라서 필요한 승인 수가 0보다 크면 메인테이너의 모든 풀 리퀘스트가 차단됩니다. 현재 규칙은 승인 0개의 풀 리퀘스트를 요구하고 enforce_admins를 꺼 둡니다.
관리자 권한이 없는 사람이 병합하려면 여전히 필수 상태 검사가 녹색이어야 하고, 검토 대화가 해결되어야 하며, 히스토리가 선형이어야 합니다. main에 대한 강제 푸시와 삭제는 모든 계정에 대해 계속 차단됩니다.
두 번째 메인테이너가 합류하면, 더 강한 설정은 최소 1개의 필수 승인, 최신 푸시 승인, CODEOWNERS 검토, 그리고 enforce_admins 켜기입니다. 단독 메인테이너 병합 의식은 승인을 요구하고 이를 관리자에게도 적용하는 보호에만 적용됩니다.
필수 상태 검사
다음 12개 컨텍스트는 각각 필수이며, 그 출처는 GitHub Actions(앱 ID 15368)입니다.
quality / ubuntu-latest / py3.10
quality / ubuntu-latest / py3.11
quality / ubuntu-latest / py3.12
quality / ubuntu-latest / py3.13
quality / ubuntu-latest / py3.14
quality / windows-latest / py3.10
quality / windows-latest / py3.11
quality / windows-latest / py3.12
quality / windows-latest / py3.13
quality / windows-latest / py3.14
coverage
Require Signed-off-by| 컨텍스트 | 워크플로와 작업 | 모든 풀 리퀘스트에서 보고되는 방식 |
|---|---|---|
quality / <os> / py<ver> (10) | ci.yml, 작업 quality | 풀 리퀘스트가 코드 또는 구성 경로를 건드리면 ci.yml이 실행됩니다. 문서 전용 풀 리퀘스트에서는 ci-docs-stub.yml이 같은 컨텍스트를 보고합니다. |
coverage | ci.yml, 작업 coverage | quality와 같습니다. |
Require Signed-off-by | dco.yml, 작업 dco | 풀 리퀘스트 트리거에 paths 필터가 없으므로 main으로의 모든 풀 리퀘스트에서 실행됩니다. |
quality / ubuntu-latest / py3.15 프리릴리스 셀은 ci.yml에서 continue-on-error로 실행되며 필수가 아닙니다. CodeQL, Scorecard, pip-audit을 포함한 다른 모든 워크플로는 상태를 보고할 수 있지만, 그 컨텍스트가 이 목록에 추가되지 않는 한 그 결과는 병합을 게이트하지 않습니다.
보류 중인 메인테이너 변경
메인테이너는 다음 25개 컨텍스트를 필수 목록에 추가할 계획입니다. 각 워크플로의 헤더는 해당 작업을 필수 검사로 선언하며, 풀 리퀘스트 트리거에 paths 필터가 없으므로 main으로의 모든 풀 리퀘스트에서 실행됩니다. 컨텍스트가 추가될 때까지는 그 컨텍스트의 실패가 병합을 차단하지 않습니다.
clean-install-gate.yml, 컨텍스트 7개:
installer-shell-compat / ubuntu-latest
installer-shell-compat / macos-latest
installer-shell-compat / windows-latest
clean-install-gate / ubuntu-latest
clean-install-gate / windows-latest
wheel-smoke / ubuntu-latest
wheel-smoke / windows-latestharness-matrix.yml, 컨텍스트 17개, 작업 매트릭스의 어댑터마다 matrix (<adapter>) 하나:
matrix (antigravity)
matrix (claude-code)
matrix (codebuddy)
matrix (codex)
matrix (cursor)
matrix (gemini-cli)
matrix (github-copilot)
matrix (glm)
matrix (hermes)
matrix (kimi-code)
matrix (kiro)
matrix (open-claw)
matrix (opencode)
matrix (qwen-code)
matrix (trae)
matrix (windsurf)
matrix (zed)installer-lint.yml, 컨텍스트 1개:
installer-lintharness-matrix.yml 컨텍스트가 필수가 되면, 새 어댑터를 등록할 때 matrix (<adapter>) 컨텍스트가 추가되고, 같은 변경에서 필수 목록에도 그 컨텍스트가 추가됩니다. "병합 전 브랜치를 최신 상태로 유지 요구"는 꺼진 상태로 유지됩니다. 보류 중인 변경이 적용되면, 같은 변경에서 그 내용을 위의 현재 설정 섹션으로 옮기세요.
감사 주기
이 파일은 모든 보안 감사와 모든 릴리스 엔지니어링 체크포인트에서 검토됩니다. 이 파일과 실제 브랜치 보호 구성 사이의 드리프트는 심각도 높음 발견 사항입니다. 현재 구성은 다음으로 읽습니다.
gh api repos/ahmed-g-gad/apothem/branches/main/protection
gh api repos/ahmed-g-gad/apothem/rulesets참고 자료
- OpenSSF Scorecard — Branch-Protection 검사
- GitHub — 보호된 브랜치 정보
- GitHub — 브랜치 보호 규칙 관리
- GitHub — 필수 검토가 있는 풀 리퀘스트 승인
- Apothem CODEOWNERS — 경로 범위의 검토 소유권
- Apothem CI 워크플로 — 각 필수 컨텍스트의 출처가 되는 워크플로
rules/production-ready-prs.md§1 — 이 보호가 강제하는 동일 변경 세트 규율