Pular para o conteúdo

Referência de Configuração

O arquivo de configuração central orienta todo o comportamento de imposição, sincronização e envio. Ele reside em .github/config/repo-settings.json no docs-control e é obtido por repositórios downstream no momento da execução do fluxo de trabalho.

.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"}
]
}
}

Configurações padrão do repositório do GitHub aplicadas via PATCH /repos/{owner}/{repo}. Cada chave é mapeada diretamente para o campo da API do GitHub. O fluxo de trabalho de imposição compara cada chave com o valor atual do repositório e aplica patches apenas nas chaves que sofreram desvio.

Configurações destacadas:

  • delete_branch_on_merge: true — exclui automaticamente ramificações de PR mescladas
  • allow_update_branch: true — habilita o botão “Update branch” nas PRs
  • homepage: "" — calculado automaticamente no tempo de execução como https://f5-sales-demo.github.io/{repo}/

Controla as permissões do fluxo de trabalho do GitHub Actions para o repositório:

  • default_workflow_permissions: "write" — os fluxos de trabalho recebem acesso de leitura/gravação ao repositório por padrão
  • can_approve_pull_request_reviews: true — permite que fluxos de trabalho aprovem revisões de PR

O fluxo de trabalho Configure Antigravity Controls altera as variáveis da organização que controlam o revisor e o tradutor do Antigravity. Cada fase é segura para ser reexecutada:

  • disabled define ambas as variáveis para false com visibilidade all.
  • pilot define ambas as variáveis para true com visibilidade selected restrita ao docs-control.
  • all define ambas as variáveis para true com visibilidade all somente após validar o comprovante de revisão do commit exato da ramificação do piloto selecionado e a publicação da tradução em 12 idiomas.

O fluxo de trabalho usa o token de acesso pessoal de governança existente, tentativas limitadas da API do GitHub e sinais de vida estruturados de progresso. Ele não requer um aplicativo do GitHub ou recursos do GitHub Enterprise.

Uma matriz de regras de proteção de ramificação. Cada entrada especifica um nome de branch e as configurações de proteção desejadas. Atualmente, apenas a main está protegida.

Campos principais:

  • enforce_admins: true — as regras de proteção também se aplicam aos administradores do repositório
  • required_status_checks.strict: true — as ramificações devem estar atualizadas antes da mesclagem
  • required_status_checks.contexts — os nomes das verificações que os repositórios downstream devem aprovar (por exemplo, Check linked issues e lint / Shell Unit Tests)
  • required_status_checks.self_contexts — os nomes das verificações que o próprio docs-control deve aprovar (por exemplo, Check linked issues e Shell Unit Tests)
  • required_pull_request_reviews — exige que todas as alterações entrem por meio de um pull request, enquanto required_approving_review_count: 0 mantém a aprovação humana opcional; as listas de dispensa e imune permanecem vazias
  • restrictions: null — sem restrições de envio além da proteção de ramificação

Verificações de fluxo de trabalho reutilizáveis em repositórios downstream usam <caller_job_key> / <reusable_job_name>, enquanto o docs-control relata seus nomes de trabalho simples. O portão de problemas vinculados é uma exceção: seu fluxo de trabalho agendado publica o status do commit Check linked issues diretamente em cada repositório, portanto, tanto contexts quanto self_contexts devem usar esse nome exato.

O campo self_contexts armazena os nomes das verificações que se aplicam ao próprio docs-control. Durante a imposição, o fluxo de trabalho detecta se está sendo executado no repositório de origem e substitui self_contexts em contexts antes de aplicar a proteção de ramificação. O campo self_contexts é sempre removido antes do envio da carga útil para a API do GitHub.

Shell Unit Tests é o portão uniforme de teste do repositório. O fluxo de trabalho reutilizável sempre o relata: os repositórios consumidores executam cada arquivo tests/test-*.sh, enquanto um repositório sem testes correspondentes relata sucesso com uma mensagem explícita de ausência de testes. Isso torna os testes de shell do repositório obrigatórios por padrão, em vez de depender de listas de aceitação por repositório.

O padrão pressupõe que cada script tests/test-*.sh no nível raiz é hermético em um executor hospedado no GitHub não provisionado. Um repositório que também armazena testes de integração de contêiner ou serviço sob esse glob precisa de uma entrada consumer_shell_tests.profiles em repo-settings.json.

Cada perfil classifica todo o inventário correspondente:

  • Entradas unit contêm um path de teste e uma matriz args. O executor passa cada argumento literalmente, sem avaliação de shell.
  • Entradas environment contêm um path de teste e um reason não vazio explicando por que o portão de unidade do executor simples não pode executá-lo.

O fluxo de trabalho reutilizável obtém o seletor e a configuração da mesma revisão main do docs-control, registra essa revisão e valida o inventario antes de executar qualquer coisa. Configuração ausente, caminhos ou argumentos não seguros, caminhos duplicados e testes não classificados ou ausentes falham no contexto exigido. Isso torna um perfil um contrato de classificação auditado, em vez de uma lista de ignorados. Repositórios sem um perfil mantêm o padrão amplo.

A substituição do xcsh exclui ambos os contextos do Super-Linter porque esse repositório não chama o fluxo de trabalho reutilizável do Super-Linter; seus contextos nativos check, pii-guard e test permanecem obrigatórios. A verificação em tempo real deve provar que uma exclusão é necessária antes de ser adicionada.

Não exija um contexto de um fluxo de trabalho com filtros paths ou paths-ignore. O GitHub deixa esse contexto pendente quando o fluxo de trabalho não é iniciado. Ferramentas de segurança amplas devem ser executadas em um fluxo de trabalho de solicitação de busca não filtrado ou em uma auditoria programada de árvore completa; a auditoria gerenciada de segurança de fluxo de trabalho usa esse último modelo para o zizmor. Uma condição no nível do trabalho é segura porque um trabalho ignorado ainda relata uma verificação bem-sucedida.

Uma matriz de tópicos do GitHub para aplicar ao repositório. Atualmente vazia — os tópicos não são impostos.

Configuração do GitHub Pages:

  • enabled: true — garante que o Pages esteja habilitado em todos os repositórios inscritos
  • build_type: "workflow" — usa o GitHub Actions para a compilação do Pages (não compilações legadas baseadas em ramificações)

Define o manifesto de sincronização de arquivos:

  • source_repo — o repositório que contém versões canônicas dos arquivos gerenciados (f5-sales-demo/docs-control)
  • files — uma matriz de objetos {src, dest} mapeando caminhos de origem no docs-control para caminhos de destino em repositórios downstream

O fluxo de trabalho de sincronização de arquivos itera essa matriz para detectar e corrigir desvios. Arquivos não listados aqui (como dependabot.yml e README.md) são gerados dinamicamente em vez de serem sincronizados a partir de fontes estáticas.