CODEOWNERS
CODEOWNERS define quién es responsable de cada parte del código. Cuando alguien abre un PR que toca archivos con owner, GitHub asigna automáticamente a esos owners como reviewers. Combinado con branch protection, se convierte en un bloqueo: nadie mergea sin la aprobación del dueño.
Ubicación
El archivo debe estar en uno de los directorios que GitHub reconoce, en la rama por defecto:
.github/CODEOWNERS(recomendado)CODEOWNERSen la raízdocs/CODEOWNERS
Sintaxis
Cada línea es un patrón de ruta estilo .gitignore seguido de uno o más owners: @usuario, @organizacion/equipo o un email.
# Patrón Owners
*.js @equipo-frontend
/docs/ @tech-writers
/src/api/ @backend-team @lider-backend
*.tf @[email protected]
Los owners a la derecha son a quienes GitHub asignará como reviewers cuando un PR toque archivos que matcheen ese patrón.
La regla clave: gana la última línea que matchea
Este es el error más común. Cuando varias líneas coinciden con un mismo archivo, no gana la más específica: gana la última línea que matchea en el archivo. El orden importa.
* @equipo-general
/src/api/ @backend-team
Para /src/api/users.js coinciden ambas líneas. Como /src/api/ @backend-team va después, el owner efectivo es @backend-team — la primera línea queda anulada para ese archivo. Si invirtieras el orden, el owner sería @equipo-general. Por eso las reglas se escriben de lo general a lo específico: lo más específico va al final para que gane.
Ejemplos de patrones
| Patrón | A qué aplica |
|---|---|
* | Todos los archivos del repo |
*.js | Cualquier .js en cualquier carpeta |
/build/ | Solo la carpeta build/ de la raíz |
docs/ | Cualquier carpeta docs/ en cualquier nivel |
/src/api/* | Archivos directos de src/api/ (no subcarpetas) |
/src/api/ | Todo dentro de src/api/, recursivo |
Convertirlo en bloqueo de merge
Por sí solo, CODEOWNERS solo asigna reviewers automáticamente; no impide el merge. Para que sea un gate real hay que activar, en la branch protection rule de la rama (Settings → Branches):
- Require a pull request before merging
- Require review from Code Owners
Con eso, un PR que toca /src/api/ no puede mergearse sin la aprobación de @backend-team.
Requisitos de los equipos
Para que un @organizacion/equipo funcione como owner:
- El equipo debe tener acceso de escritura al repo.
- Si es un equipo anidado, debe estar marcado como visible.
Un owner inválido (usuario sin acceso, equipo sin permisos) hace que GitHub ignore esa regla y muestre un error de sintaxis en el archivo.
Anterior → Capítulo 7: Community health files · Siguiente → Capítulo 9: SECURITY.md