Rico McCluskey
Estoy usando Nx por el apoyo de monorepo en un nuevo proyecto. Uno de los beneficios de Nx es que puede determinar qué aplicaciones en el monorepo se ven afectadas por una variedad de cambios (empezar a confirmar, finalizar la confirmación). Entonces, si tiene un montón de aplicaciones, solo tiene que compilar, probar e implementar las aplicaciones que realmente se ven afectadas por los cambios en lugar de todo el monorepo.
Me gustaría configurar un flujo de trabajo de GitHub Action para implementar solo las aplicaciones afectadas al enviar o fusionar para dominar. Sin embargo, tengo problemas para averiguar cómo obtener el “compromiso de inicio” para el rango de cambios. En otras palabras, ¿cómo obtengo el hash de confirmación de la última implementación?
GitHub proporciona una variable env GITHUB_SHA
pero ese es el compromiso que activó el flujo de trabajo (es decir, el “compromiso final”). también proporciona GITHUB_BASE_REF
pero eso solo funciona en flujos de trabajo que se ejecutan desde un repositorio bifurcado en comparación con el repositorio principal.
CircleCI tiene pipeline.git.base_revision
para este propósito. ¿Las acciones de GitHub tienen algo similar?
peterevans
Para eventos de solicitud de extracción, la referencia y el sha para la base se pueden encontrar en el contexto de github de la siguiente manera.
${{ github.event.pull_request.base.ref }}
${{ github.event.pull_request.base.sha }}
Para eventos push hay base_ref
y before
parámetros
${{ github.event.base_ref }}
${{ github.event.before }}
before
es el último git sha empujado al origen en la rama base_ref
. Tenga en cuenta que si esta es la primera confirmación en una nueva rama, base_ref
y before
tendrá valores nulos/predeterminados como se muestra a continuación.
##[debug] "event": {
##[debug] "after": "727f7aec97c394083d769029e5f619e9b094a235",
##[debug] "base_ref": null,
##[debug] "before": "0000000000000000000000000000000000000000",
...
Por cierto, puede volcar el contexto de github y verificar los parámetros disponibles agregando este paso a su flujo de trabajo:
- name: Dump GitHub context
env:
GITHUB_CONTEXT: ${{ toJson(github) }}
run: echo "$GITHUB_CONTEXT"
-
¡Gracias por el consejo útil sobre cómo volcar el contexto de github! Probé eso y, curiosamente, tenía un valor para
github.event.before
en empujar a maestro. Incluso intenté presionar dos confirmaciones a la vez y el valor anterior fue correcto. No estoy seguro de por qué eso no funcionó para ti, ¡pero esto es exactamente lo que estaba buscando!– Rich McCluskey
18 de mayo de 2020 a las 4:21
-
@RichMcCluskey Me alegro de que haya encontrado una solución. No estoy seguro de por qué
before
no tenía un valor cuando probé. He actualizado la respuesta ligeramente para cualquiera que encuentre esto en el futuro.– peterevans
18 de mayo de 2020 a las 5:24
-
Seguimiento… Me di cuenta de que al primer impulso de una nueva rama le faltará el
before
cometer como se muestra en su ejemplo. Supongo que tiene sentido ya que la sucursal es nueva y no existía antes. En ese caso, solo puedo comparar con el maestro para encontrar el rango de confirmaciones.– Rich McCluskey
18 mayo 2020 a las 16:47
-
@RohitReddyAbbadi Creo que, de forma predeterminada, los flujos de trabajo de GitHub solo clonan parcialmente el repositorio en la confirmación HEAD, por lo que es posible que primero deba buscar en su flujo de trabajo
– Rich McCluskey
3 de junio de 2020 a las 17:43
-
@RohitReddyAbbadi Intenta agregar
fetch-depth: 0
aactions/checkout
. Eso recupera todo el historial de etiquetas y ramas. Ver aquí– peterevans
3 jun 2020 a las 23:00
GitHub proporciona GITHUB_BASE_REF
y el github.base_ref
contexto que contienen la rama base.
Si está interesado en la última revisión de esa rama, puede ejecutar git rev-parse $GITHUB_BASE_REF
para encontrarlo. Si está interesado en el punto en el que se bifurcaron las ramas, puede ejecutar git merge-base $GITHUB_BASE_REF $GITHUB_SHA
para encontrarlo.
Tenga en cuenta que es posible interrumpir otros proyectos con cambios de API incompatibles y similares sin realizar ningún cambio de código en ellos, por lo que, si bien será más rápido probar solo las aplicaciones que han cambiado, es posible que al hacerlo se produzca una interrupción inesperada.
-
FYI, Nx determina qué proyectos reconstruir mediante la comprensión de las dependencias importadas a ellos y mediante la configuración para decir qué depende de qué si no hay una importación directa de código. No se basa solo en dónde están los cambios 🙂
– Rich McCluskey
18 de mayo de 2020 a las 2:02
-
Desafortunadamente, esta respuesta no funciona. Los doctores dicen que
GITHUB_BASE_REF
ygithub.base_ref
solo están configurados para repositorios bifurcados. El mío no está bifurcado. También lo probé y verifiqué que los documentos son correctos.– Rich McCluskey
18 de mayo de 2020 a las 2:18