Skip to content
Apothem
보안

브랜치 보호

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_count0풀 리퀘스트는 승인 검토 없이 병합됩니다. 단독 메인테이너 모델을 참조하세요.
새 커밋 시 오래된 승인 무효화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이 같은 컨텍스트를 보고합니다.
coverageci.yml, 작업 coveragequality와 같습니다.
Require Signed-off-bydco.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-latest

harness-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-lint

harness-matrix.yml 컨텍스트가 필수가 되면, 새 어댑터를 등록할 때 matrix (<adapter>) 컨텍스트가 추가되고, 같은 변경에서 필수 목록에도 그 컨텍스트가 추가됩니다. "병합 전 브랜치를 최신 상태로 유지 요구"는 꺼진 상태로 유지됩니다. 보류 중인 변경이 적용되면, 같은 변경에서 그 내용을 위의 현재 설정 섹션으로 옮기세요.

감사 주기

이 파일은 모든 보안 감사와 모든 릴리스 엔지니어링 체크포인트에서 검토됩니다. 이 파일과 실제 브랜치 보호 구성 사이의 드리프트는 심각도 높음 발견 사항입니다. 현재 구성은 다음으로 읽습니다.

gh api repos/ahmed-g-gad/apothem/branches/main/protection
gh api repos/ahmed-g-gad/apothem/rulesets

참고 자료

On this page