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 GHCuando creo una solicitud de extracción
Entonces Travis debería construir el último commitCuando envio una solicitud de extracción existente
Entonces Travis debería construir el último commitCuando 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?
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:
- Habilite ambos push de PRs y ramificaciones en la configuración de Travis para el repositorio:
- Change
.travis.yml
to white-listmaster
branch (i. e. only build pushes to maestro):
branches: only: - master
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.Verificar compilación de confirmación de fusión exitosa desde master.
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
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.
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 dewip.feature-A
apr.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.