He configurado en mi repositorio de Github una regla de protección de rama en la verificación de rama maestra (activando) lo siguiente:
- Requerir revisiones de solicitud de incorporación de cambios antes de la fusión
- Revisores aprobadores requeridos: 1
- Incluir administradores
- Restrinja quién puede empujar a las sucursales coincidentes
Entonces estoy en una situación en la que al menos uno del equipo debe aprobar un PR antes de que alguien pueda fusionar su propia rama de desarrollo para dominar.
Además de lo anterior, también me gustaría seleccionar solo algunas personas que tendrán permiso para fusionar el PR revisado y aprobado. No todos tienen acceso al repositorio.
¿Es posible configurar esto?
No, GitHub no te permite restringir quién puede realizar una combinación. Sin embargo, si desea requerir que un grupo específico de personas apruebe un PR antes de la fusión, use el CODEOWNERS
archivo y requieren la aprobación de un propietario de código antes de fusionarse en la configuración de protección de sucursales.
Por ejemplo, si desea que el equipo central revise todos los cambios, puede usar esto en su CODEOWNERS
archivo:
* @my-org/core
-
pero esto hará que cada nueva rama creada después de eso solicite una revisión del propietario del código aunque la rama base no sea maestra
– Teju Amirthi
23 de marzo de 2022 a las 17:10
irónico
También tengo un requisito como usted de que solo quiero que algunas personas específicas (no todos los colaboradores) puedan aprobar cambios en la rama principal. E hice lo siguiente para Github Free public repository
:
- escribe un
Github Actions
archivo que comprueba el nombre de la persona que lo ejecuta. Si este es el nombre de un poderoso colaborador, las Acciones tendrán éxito.
name: actions_on_main_branch
on:
pull_request_target:
types:
- opened
- synchronize
- reopened
branches:
- 'main'
jobs:
job1:
name: check_adminA
runs-on: ubuntu-latest
env:
NAME_ADMIN: adminA
steps:
- name: st1
if: ${{ github.actor != env.NAME_ADMIN }}
run: exit 1
- name: st2
if: ${{ github.actor == env.NAME_ADMIN }}
run: echo "ok"
-
en la configuración del repositorio, agregue una regla para proteger la rama ‘principal’. en esa regla, seleccione
'Require status checks to pass before merging'
y seleccionejobs
que especificó anteriormente en el archivo de acciones de github. (si los trabajos no se muestran, intente crear una solicitud de extracción que active esas acciones de github, después de eso, los trabajos se encontrarán en la barra de búsqueda) (también puede seleccionar'Include administrators'
)
Al hacer eso, los cambios que se realizan en la rama ‘principal’ tienen que pasar por una solicitud de extracción y esas comprobaciones se ejecutarán y fallarán y evitarán la fusión. Hasta que los poderosos colaboradores (adminA, adminB) vayan a esa solicitud de extracción y vuelvan a ejecutarlos, esas comprobaciones se realizan correctamente y permiten la fusión.
(El pull_request_target evento hace Github-actions
se ejecuta en el contexto de la rama base en lugar de la rama de fusión. Por lo tanto, no tiene que preocuparse de que el archivo de acciones de github se edite para pasar fácilmente desde el exterior).
Recuerdo que al menos la mitad de esas características están en la configuración de GitHub. En su caso, solo los aprobadores deben agregarse como “colaboradores”, ya que pueden push
. Otros usuarios tendrán que abrir un pull request
para hacer cualquier cambio.
La fusión de solicitudes de extracción respeta la regla de protección de rama de la rama de destino. Así que agregue las personas a las que se les debe permitir fusionarse en la regla de protección y estará listo para comenzar.
Luis B.
Es posible por ‘Reglas de protección de sucursales’:
Tienes que seleccionar la sucursal que quieres proteger y seleccionar las personas que se permiten fusionar en esta opción:
-
Puede ver claramente en su captura de pantalla que esa función es para controlar quién puede empujar a las ramas coincidentes y no tiene nada que ver con controlar quién puede fusionarse.
– sam
16 de noviembre de 2022 a las 21:42
pensec
@irous Seguí su respuesta y funcionó para un solo usuario, pero luego, al intentar especificar para más de un usuario, se requiere que los dos colaboradores especificados pasen antes de una fusión de relaciones públicas. A continuación se muestra el script añadido:
job1:
name: check_adminA
runs-on: ubuntu-latest
env:
NAME_ADMIN1: pracin
steps:
- name: st1
if: ${{ github.actor != env.NAME_ADMIN1 }}
run: exit 1
- name: st2
if: ${{ github.actor == env.NAME_ADMIN1 }}
run: echo "ok"
job2:
name: check_adminB
runs-on: ubuntu-latest
env:
NAME_ADMIN2: stephus
steps:
- name: st1
if: ${{ github.actor != env.NAME_ADMIN2 }}
run: exit 1
- name: st2
if: ${{ github.actor == env.NAME_ADMIN2 }}
run: echo "ok"
-
Puede ver claramente en su captura de pantalla que esa función es para controlar quién puede empujar a las ramas coincidentes y no tiene nada que ver con controlar quién puede fusionarse.
– sam
16 de noviembre de 2022 a las 21:42
docs.github.com/en/github/administrar-un-repositorio/… ¿Qué falta en el documento?
– Ôrel
6 de julio de 2020 a las 15:53
He leído eso y no es tan explícito… ¿Tal vez “Restringir quién puede empujar a las ramas coincidentes” también significa restringir quién puede fusionarse con la rama coincidente? Y si habilito a esas personas, ¿podrán empujar directamente al maestro sin relaciones públicas?
– koalaok
6 de julio de 2020 a las 16:01
docs.github.com/en/github/administrar-un-repositorio/… para agregar un validador mínimo y configurar Requerir revisiones de solicitud de extracción antes de la fusión.
– Ôrel
6 de julio de 2020 a las 16:04