¿Cómo restringir quién puede fusionarse para dominar en un repositorio de github?

5 minutos de lectura

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?

  • 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

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

avatar de usuario de irous
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 seleccione jobs 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')

    ingrese la descripción de la imagen aquí

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.ingrese la descripción de la imagen aquí

Avatar de usuario de Luigi B
Luis B.

Es posible por ‘Reglas de protección de sucursales’:

Sección de 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:

Sección para agregar personas que pueden aprobar la solicitud de extracció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

Avatar de usuario de Pensec
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

¿Ha sido útil esta solución?