Cómo configurar Travis-CI para crear solicitudes de extracción y fusiones para master sin redundancia


Para ponerlo en términos "BDD":

Antecedentes:
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 envio una solicitud de extracción existente
Entonces Travis debería construir el último commit

Cuando combino una pull request a master
Entonces Travis debería construir master

Me confundieron los ajustes "build pushes" y "build PRs" de Travis-CI, as:

  • Activar ambos hace que cada Pull Request sea compilado dos veces por Travis
    • una vez para la confirmación en esa rama
    • y una vez más para la confirmación de fusión de esa rama en su destino
  • Habilitar solo "compilar PRs" causa que se compile PRs, pero no resulta en compilaciones posteriores a la fusión (es decir, en master).
  • Habilitar "pushes" de fuerza bruta satisface los criterios anteriores al construir todos los pushes al repositorio. Usted puede tratar de finagle cosas por ramas blancas y negras, pero eso probablemente te morderá a menos que seas rigurosamente disciplinado con los nombres de las ramas.

Esto se explica más en Travis-CI docs y GH issue #3241.

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

Author: Brian Gerstle, 2015-08-07

4 answers

Finalmente encontré otro problema de GH(#2111) lo que me dio la idea de intentar habilitar tanto PRs como 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 push de PRs y ramificaciones en la configuración de Travis para el repositorio:

travis push / pr configuración habilitada

  1. Change .travis.yml to white-list master branch (i. e. only build pushes to maestro):
branches:
  only: 
    - master
  1. PR prueba creando un PR con el .travis.yml change, y otro PR con algunas confirmaciones vacías para verificarlo funciona también para bifurcaciones.

  2. Verificar compilación de confirmación de fusión exitosa desde master.

resultado de compilación de fusionar a master

 72
Author: Brian Gerstle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-24 16:09:45

Se acaba de encontrar en travis docs

Añadir a .travis.yml

if: type = push

Alternativamente:

if: type = pull_request
 3
Author: grosser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-12-08 01:28:47

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

Abrí un problema pidiendo una mejor solución.

 2
Author: John,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-28 23:18:15

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

  • Mantenga" Build pushes "y" Build pull requests " EN
  • Agregue branches:except directiva a su .travis.yml:

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

En esta configuración:

  • cualquier commit a branch feature-A activará la compilación
  • cualquier confirmación a branch pr.feature-A no activará la compilación
  • si branch pr.feature-A se usa en la solicitud de extracción abierta, entonces compile se activará

Ejemplo de flujo de trabajo

  • rama WIP temporal compartida entre varios desarrolladores: wip.feature-A, cualquier confirmación a esta rama activará la compilación
  • cuando branch esté listo para ser fusionado a master puede cambiarle el nombre de wip.feature-A a pr.feature-A y abrir pull request
  • si durante la revisión de pull request desea aplicar nuevas correcciones, simplemente presione a pr.feature-A

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

 2
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-01-18 09:34:00