with tutorial travis pricing how deploy cli github travis-ci pull-request

github - tutorial - travis deploy



Cómo configurar Travis-CI para crear solicitudes de extracción y fusiones para dominar sin redundancia (5)

Para ponerlo en términos "BDD":

Fondo:
Dado que estoy contribuyendo a un repositorio de GH

Cuando creo una solicitud de extracción
Entonces Travis debería construir el último commit

Cuando presiono a una solicitud de extracción existente
Entonces Travis debería construir el último commit

Cuando fusiono una solicitud de extracción para dominar
Entonces Travis debería construir maestro

Estaba confundido por la configuración de "empujar compilación" y "compilación de relaciones públicas" de Travis-CI, como:

  • Habilitar ambos hace que cada solicitud de extracción sea construida dos veces por Travis
    • una vez por el compromiso en esa rama
    • y una vez más para la fusión comprometer esa rama en su destino
  • Habilitar solo "construir PR" hace que se generen PR, pero no da como resultado compilaciones posteriores a la fusión (es decir, en el maestro).
  • Habilitar los "empujes" de fuerza bruta satisface los criterios anteriores al generar todos los empujes al repositorio. Puede tratar de arreglar las cosas mediante ramas de listas blancas y negras, pero eso probablemente lo morderá a menos que sea rigurosamente disciplinado con los nombres de las ramas.

Esto se explica más en los documentos de Travis-CI y GH número 3241 .

¿Alguien conoce una configuración que satisfaga los criterios anteriores?


Acabo de encontrar en travis docs

Añadir a .travis.yml

if: type = push

alternativamente:

if: type = pull_request


El enfoque de la lista blanca descrito en la respuesta aceptada tiene algunas limitaciones significativas. En particular, no admite la creación de ramas arbitrarias sin redundancia sin abrir un RP.

Abrí un problema pidiendo una mejor solución .


Eventualmente encontré otro problema de GH ( #2111 ) que me dio la idea de intentar habilitar los RP y los push, pero con una lista blanca para restringir los push a una rama específica. Esto parece satisfacer los criterios para mi flujo de trabajo. Esto es lo que hice:

  1. Habilite ambos PRs y ramificaciones en la configuración de Travis para el repositorio:

  1. Cambie .travis.yml a la rama master lista blanca (es decir, solo .travis.yml empujes a maestro):

branches: only: - master

  1. .travis.yml creando un RP con el cambio .travis.yml , y otro RP con algunas confirmaciones vacías para verificar que también funcione para las bifurcaciones .

  2. Verifique la compilación de confirmación de fusión exitosa desde el maestro .


Puede usar el siguiente flujo de trabajo si desea probar no solo la rama master sino también algunas otras ramas:

  • Mantenga ambos "Build push" y "Build pull request" ON
  • Agregue branches:except directiva a su .travis.yml :

    branches: except: - /^pr/..*/

En esta configuración:

  • cualquier compromiso con la feature-A rama feature-A desencadenará la compilación
  • cualquier commit a branch pr.feature-A no activará la compilación
  • si se pr.feature-A rama pr.feature-A en la solicitud de extracción abierta, se generará la compilación

Ejemplo de flujo de trabajo

  • rama WIP temporal compartida entre varios desarrolladores: wip.feature-A , cualquier compromiso con esta rama activará la compilación
  • cuando la rama está lista para fusionarse con master , puede cambiarle el nombre de wip.feature-A a pr.feature-A y abrir la solicitud de extracción
  • si al revisar la solicitud de extracción desea aplicar nuevas correcciones, simplemente presione para pr.feature-A

En todos los pasos anteriores, solo se activará una compilación.


Suponiendo que desea construir todos los RP, algo como lo siguiente hará el truco. Habilite las compilaciones de sucursales y relaciones públicas en la página de configuración, y ponga esta línea como la primera línea en su travis.yml :

if: (type = push AND branch IN (master, dev)) OR (type = pull_request AND NOT branch =~ /no-ci/)

Esto intentará una acumulación de empuje en todos los empujes y una construcción de relaciones públicas en todos los empujes a un PR abierto, pero filtrará los que no cumplan la condición. Es posible que deba modificar esto un poco: la cláusula sobre no construir ramas con no-ci en algún lugar de su nombre es obviamente opcional, y es posible que no tenga dos ramas en las que siempre desee ejecutar compilaciones.

Puede leer más sobre conditions y compilaciones condicionales en el sitio de Travis.