콘텐츠로 이동

구성 참조

중앙 구성 파일은 모든 강제 적용, 동기화 및 디스패치 동작을 제어합니다. docs-control의 .github/config/repo-settings.json에 위치하며 워크플로 실행 시 다운스트림 리포지토리에서 가져옵니다.

.github/config/repo-settings.json
{
"_comment": "Central repo-settings config — enforced by enforce-repo-settings.yml",
"repository": {
"private": false,
"has_issues": true,
"has_projects": false,
"has_wiki": false,
"is_template": false,
"allow_squash_merge": true,
"allow_merge_commit": true,
"allow_rebase_merge": true,
"allow_auto_merge": false,
"delete_branch_on_merge": true,
"web_commit_signoff_required": false,
"squash_merge_commit_title": "COMMIT_OR_PR_TITLE",
"squash_merge_commit_message": "COMMIT_MESSAGES",
"merge_commit_title": "MERGE_MESSAGE",
"merge_commit_message": "PR_TITLE",
"allow_update_branch": true,
"homepage": ""
},
"actions_permissions": {
"default_workflow_permissions": "write",
"can_approve_pull_request_reviews": true
},
"branch_protection": [
{
"branch": "main",
"enforce_admins": true,
"required_status_checks": {
"strict": true,
"contexts": [
"Check linked issues",
"lint / Lint Code Base",
"lint / Shell Unit Tests"
],
"self_contexts": ["Check linked issues", "Lint Code Base", "Shell Unit Tests"]
},
"required_pull_request_reviews": {
"dismiss_stale_reviews": false,
"require_code_owner_reviews": false,
"required_approving_review_count": 0,
"require_last_push_approval": false,
"dismissal_restrictions": {
"users": [],
"teams": []
},
"bypass_pull_request_allowances": {
"users": [],
"teams": [],
"apps": []
}
},
"restrictions": null,
"required_linear_history": false,
"allow_force_pushes": false,
"allow_deletions": false,
"block_creations": false,
"required_conversation_resolution": false,
"lock_branch": false,
"allow_fork_syncing": false
}
],
"topics": [],
"pages": {
"enabled": true,
"build_type": "workflow"
},
"managed_files": {
"source_repo": "f5-sales-demo/docs-control",
"files": [
{"src": "workflows/github-pages-deploy.yml", "dest": ".github/workflows/github-pages-deploy.yml"},
{"src": "workflows/enforce-repo-settings.yml", "dest": ".github/workflows/enforce-repo-settings.yml"},
{"src": "workflows/require-linked-issue.yml", "dest": ".github/workflows/require-linked-issue.yml"},
{"src": "workflows/antigravity-review.yml", "dest": ".github/workflows/antigravity-review.yml"},
{"src": "workflows/antigravity-translate.yml", "dest": ".github/workflows/antigravity-translate.yml"},
{"src": ".github/PULL_REQUEST_TEMPLATE.md", "dest": ".github/PULL_REQUEST_TEMPLATE.md"},
{"src": ".github/ISSUE_TEMPLATE/bug_report.md", "dest": ".github/ISSUE_TEMPLATE/bug_report.md"},
{"src": ".github/ISSUE_TEMPLATE/feature_request.md", "dest": ".github/ISSUE_TEMPLATE/feature_request.md"},
{"src": ".github/ISSUE_TEMPLATE/documentation.md", "dest": ".github/ISSUE_TEMPLATE/documentation.md"},
{"src": ".github/ISSUE_TEMPLATE/config.yml", "dest": ".github/ISSUE_TEMPLATE/config.yml"},
{"src": "CONTRIBUTING.md", "dest": "CONTRIBUTING.md"},
{"src": "CLAUDE.md", "dest": "CLAUDE.md"},
{"src": "AGENTS.md", "dest": "AGENTS.md"},
{"src": ".agents/skills/demo-components/SKILL.md", "dest": ".agents/skills/demo-components/SKILL.md"},
{"src": ".agents/skills/i18n-translate/SKILL.md", "dest": ".agents/skills/i18n-translate/SKILL.md"},
{"src": ".editorconfig", "dest": ".editorconfig"},
{"src": ".gitignore", "dest": ".gitignore"},
{"src": "LICENSE", "dest": "LICENSE"},
{"src": ".pre-commit-config.yaml", "dest": ".pre-commit-config.yaml"}
]
}
}

PATCH /repos/{owner}/{repo}를 통해 적용되는 표준 GitHub 리포지토리 설정입니다. 각 키는 GitHub API 필드에 직접 매핑됩니다. 강제 적용 워크플로는 각 키를 리포지토리의 현재 값과 비교하고 편차가 있는 키만 패치합니다.

주요 설정:

  • delete_branch_on_merge: true — 병합된 PR 브랜치를 자동으로 정리합니다.
  • allow_update_branch: true — PR에서 “Update branch” 버튼을 활성화합니다.
  • homepage: "" — 런타임 시 https://f5-sales-demo.github.io/{repo}/ 값으로 자동 계산됩니다.

리포지토리에 대한 GitHub Actions 워크플로 권한을 제어합니다:

  • default_workflow_permissions: "write" — 워크플로는 기본적으로 리포지토리에 대한 읽기/쓰기 권한을 얻습니다.
  • can_approve_pull_request_reviews: true — 워크플로가 PR을 승인할 수 있도록 허용합니다.

Configure Antigravity Controls 워크플로는 Antigravity 검토자 및 번역자를 제어하는 조직 변수를 변경합니다. 각 단계는 안전하게 재실행할 수 있습니다:

  • disabledall 가시성과 함께 두 변수를 모두 false로 설정합니다.
  • pilot은 docs-control로 제한된 selected 가시성과 함께 두 변수를 모두 true로 설정합니다.
  • all은 선택한 파일럿의 정확한 head 검토 수증 및 12개 언어 번역 게시를 검증한 후에만 all 가시성과 함께 두 변수를 모두 true로 설정합니다.

이 워크플로는 기존 거버넌스 개인 액세스 토큰, 제한된 GitHub API 재시도 및 구조화된 진행 상황 하트비트를 사용합니다. GitHub App 또는 GitHub Enterprise 기능이 필요하지 않습니다.

브랜치 보호 규칙의 배열입니다. 각 항목은 branch 이름과 원하는 보호 설정을 지정합니다. 현재 main만 보호됩니다.

주요 필드:

  • enforce_admins: true — 보호 규칙이 리포지토리 관리자에게도 적용됩니다.
  • required_status_checks.strict: true — 병합하기 전에 브랜치가 최신 상태여야 합니다.
  • required_status_checks.contexts — 다운스트림 리포지토리가 통과해야 하는 검사 이름(예: Check linked issueslint / Shell Unit Tests)
  • required_status_checks.self_contexts — docs-control 자체가 통과해야 하는 검사 이름(예: Check linked issuesShell Unit Tests)
  • required_pull_request_reviews — 모든 변경 사항이 풀 리퀘스트를 통해 입력되도록 요구하지만, required_approving_review_count: 0으로 인해 사람의 승인은 선택 사항으로 유지되며 해제 및 우회 목록은 비어 있습니다.
  • restrictions: null — 브랜치 보호 이외의 푸시 제한이 없습니다.

다운스트림 리포지토리의 재사용 가능한 워크플로 검사는 <caller_job_key> / <reusable_job_name>을 사용하는 반면, docs-control은 원형 작업 이름을 보고합니다. 연결된 이슈 게이트는 예외입니다. 예약된 워크플로가 커밋 상태 Check linked issues를 모든 리포지토리에 직접 게시하므로 contextsself_contexts 모두 해당 정확한 이름을 사용해야 합니다.

self_contexts 필드는 docs-control 자체에 적용되는 검사 이름을 저장합니다. 강제 적용 중에 워크플로는 소스 리포지토리에서 실행 중인지 여부를 감지하고 브랜치 보호를 적용하기 전에 self_contextscontexts로 교체합니다. self_contexts 필드는 GitHub API에 페이로드를 보내기 전에 항상 제거됩니다.

Shell Unit Tests는 통합 리포지토리 테스트 게이트입니다. 재사용 가능한 워크플로는 항상 이를 보고합니다. 소비 리포지토리는 모든 tests/test-*.sh 파일을 실행하는 반면, 일치하는 테스트가 없는 리포지토리는 명시적인 테스트 없음 메시지와 함께 성공을 보고합니다. 이렇게 하면 리포지토리별 옵트인 목록에 의존하는 대신 리포지토리 셸 테스트가 기본적으로 필수 항목이 됩니다.

기본값은 모든 루트 수준 tests/test-*.sh 스크립트가 프로비저닝되지 않은 GitHub 호스팅 러너에서 밀폐(hermetic) 상태라고 가정합니다. 해당 글로브 아래에 컨테이너 또는 서비스 통합 테스트도 저장하는 리포지토리는 repo-settings.jsonconsumer_shell_tests.profiles 항목이 필요합니다.

각 프로필은 일치하는 전체 인벤토리를 분류합니다:

  • unit 항목에는 테스트 pathargs 배열이 포함됩니다. 러너는 셸 평가 없이 각 인수를 그대로 전달합니다.
  • environment 항목에는 테스트 path 및 베어 러너 유닛 게이트가 실행할 수 없는 이유를 설명하는 비어 있지 않은 reason이 포함됩니다.

재사용 가능한 워크플로는 동일한 docs-control main 수정 버전에서 선택기 및 구성을 가져오고, 해당 수정 버전을 기록하며, 실행하기 전에 인벤토리를 검증합니다. 누락된 구성, 안전하지 않은 경로 또는 인수, 중복된 경로, 미분류 또는 누락된 테스트는 필수 컨텍스트를 실패하게 만듭니다. 이렇게 하면 프로필이 무시 목록이 아니라 감사된 분류 계약이 됩니다. 프로필이 없는 리포지토리는 광범위한 기본값을 유지합니다.

xcsh 재정의는 해당 리포지토리가 재사용 가능한 Super-Linter 워크플로를 호출하지 않기 때문에 두 Super-Linter 컨텍스트를 모두 제외합니다. 기본 check, pii-guardtest 컨텍스트는 계속 필요합니다. 라이브 검증을 통해 제외가 추가되기 전에 필요함을 증명해야 합니다.

paths 또는 paths-ignore 필터가 있는 워크플로의 컨텍스트를 요구하지 마세요. 워크플로가 시작되지 않으면 GitHub는 해당 컨텍스트를 보류 상태로 둡니다. 광범위한 보안 도구는 필터링되지 않은 풀 요청 워크플로 또는 예약된 전체 트리 감사에서 실행되어야 합니다. 관리형 워크플로 보안 감사는 zizmor에 후자 모델을 사용합니다. 건너뛴 작업은 여전히 성공적인 검사를 보고하므로 작업 수준 조건은 안전합니다.

리포지토리에 적용할 GitHub 토픽 배열입니다. 현재 비어 있습니다 — 토픽은 강제 적용되지 않습니다.

GitHub Pages 구성:

  • enabled: true — 등록된 모든 리포지토리에서 Pages가 활성화되어 있는지 확인합니다.
  • build_type: "workflow" — Pages 빌드에 GitHub Actions를 사용합니다(기존 브랜치 기반 빌드가 아님).

파일 동기화 매니페스트를 정의합니다:

  • source_repo — 관리되는 파일의 정식 버전을 포함하는 리포지토리 (f5-sales-demo/docs-control)
  • files — docs-control의 소스 경로를 다운스트림 리포지토리의 대상 경로에 매핑하는 {src, dest} 개체의 배열입니다.

파일 동기화 워크플로는 이 배열을 반복하여 편차를 감지하고 수정합니다. 여기에 나열되지 않은 파일(dependabot.ymlREADME.md 등)은 정적 소스에서 동기화되지 않고 동적으로 생성됩니다.