15 consejos para mejorar tu flujo de Github

He estado trabajando en el desarrollo de software durante 10 años y, durante el camino, he tenido la oportunidad de colaborar en varios proyectos de código abierto y también he trabajado en muchos proyectos de código abierto donde utilizamos Github como nuestro repositorio de control de versiones. en equipos pequeños y grandes.

En mi viaje, he seguido diferentes flujos de trabajo según el proyecto y hoy quiero compartir con ustedes lo que considero un flujo de trabajo eficaz y pragmático para crear y mantener un software de buena calidad que se pueda aplicar a cualquier proyecto.

Los atributos del software de buena calidad son muchos: solidez, capacidad de prueba, flexibilidad, modularidad, facilidad de mantenimiento, facilidad de uso, seguridad, rendimiento, escalabilidad y más, según el tipo de aplicación que esté desarrollando. En este artículo, me centraré principalmente en las siguientes características:

  • Buena documentación: léame, sitios de documentación y registros de cambios.
  • Estándares y convenciones de codificación bien definidos.
  • Adecuado control de versiones con Sever.
  • Pruebas automáticas: no demasiadas, concéntrese en pruebas funcionales de no regresión.
  • Felicidad desarrollador, seguro!

Para lograr esto, propongo un flujo pragmático de Github que aprovecha las herramientas de código abierto que ayudan a facilitar y automatizar muchas de las tareas necesarias para lograr este objetivo.

Si está trabajando en un proyecto de código abierto y desea publicar su proyecto Github, eso es un hecho. Git y Github han cambiado radicalmente la forma en que OSS se desarrolla convirtiéndose en el lenguaje común de facto para el control de versiones y el lugar definitivo para la colaboración, respectivamente.

El flujo de trabajo oficial propuesto por Github se llama github flow y está muy bien documentado en su sitio web guides.github.com/introduction/flow , la mayoría de los proyectos de código abierto siguen este flujo de trabajo con sabores ligeramente diferentes.

El flujo de trabajo de Github es muy flexible en el sentido de que no le indica cómo publicar y documentar los cambios, qué combinación de estrategia utilizar al aceptar la solicitud de extracción, qué herramientas usar, qué estándares de compromiso debe seguir o qué revisar antes de aceptar un solicitud de extracción, eso depende de usted y eso tiene mucho sentido ya que no hay una solución universal para las necesidades de cada equipo.

La siguiente es una lista de recomendaciones basadas en mi experiencia:

Trabajo principalmente (casi exclusivamente) en JavaScript, muchas de las herramientas que mencionaré son parte del ecosistema de JS, sin embargo, los principios se aplican a cualquier idioma.

Priorice sus problemas y realice un seguimiento de su progreso con los proyectos de Github

En septiembre de 2016, se lanzó la función Proyectos. Es una herramienta que le permite crear tablas de estilo kanban para organizar, priorizar y seguir su trabajo a nivel de repositorio y organización. Si usa los problemas de Github, le sugiero que haga uso de la función para organizar y comunicar mejor las prioridades del proyecto y los esfuerzos actuales. Puede obtener más información en el siguiente enlace help.github.com/articles/tracking-the-progress-of-your-work-with-project-boards

Clasifica tus problemas con las etiquetas

Github proporciona excelentes funcionalidades de filtrado. Si está trabajando en un proyecto de código abierto, quiere que las personas colaboren en su proyecto y que brinden una buena experiencia a los desarrolladores que lo utilizan. Al etiquetar sus problemas, los desarrolladores podrán navegar más fácilmente por la lista de problemas, ahorrándoles tiempo y permitiéndoles contribuir con menos fricción de entrada.

Aproveche las plantillas de Github para solicitudes de extracción y problemas

Tomarse el tiempo para escribir plantillas de Github para sus problemas y la solicitud de extracción sin duda dará sus frutos; Esto forzará o al menos ayudará a los desarrolladores a informar errores y solicitar funciones de la manera estándar con toda la información que necesita para abordarlos.

Obtenga más información en blog.github.com/2016-02-17-issue-and-pull-request-templates

Algunas pautas generales para informes de errores :

Antes de enviar un problema, verifique que haya completado los siguientes pasos:

  • Seguro que estás en la última versión
  • Usó la función de búsqueda para asegurarse de que el error no se haya informado antes

Los informes de errores deben contener la siguiente información:

  • Resumen: una breve descripción.
  • Pasos para reproducirse: ¿Cómo encontraste el error? Instrucciones para reproducirlo.
  • Comportamiento esperado: ¿Cómo esperabas que se comportara?
  • Comportamiento real: ¿Cómo se comportó realmente?
  • Referencias: enlaces a entradas relacionadas o fuentes de información.
  • Si es posible, adjunte documentación visual del error. Capturas de pantalla, videos y / o gifs animados.

Pautas generales de solicitud de extracción :

  • Asegúrese de que no haya solicitudes de extracción existentes que intenten solucionar el problema mencionado.
  • Compruebe si hay problemas relacionados en el rastreador de problemas.
  • Los cambios no triviales deben discutirse primero en un problema.
  • Háganos saber que está trabajando en el problema.
  • Desarrollar en una rama temática, no maestra.
  • Proporcione una descripción de solicitud de extracción útil.
  • Siga las pautas de compromiso del proyecto.
  • Escribe una buena descripción de tu PR.
  • Enlace al problema de Github en la descripción.

Usa la línea de comando

La consola es tu amiga En mi experiencia, aprender a interactuar con Github desde la línea de comandos es el mejor uso de tu tiempo si trabajas con tecnologías de código abierto. Hay muchas buenas GUI, sin embargo, ninguna de ellas dará la flexibilidad de la línea de comando. También hay herramientas que simplificarán mucho la vida y un desarrollador más eficiente que solo está disponible para la línea de comando:

  • hub es un contenedor de línea de comandos para git que te hace mejor en GitHub. Tanto si eres un principiante como si eres un colaborador experimentado de código abierto, Hub hace que sea más fácil buscar repositorios, navegar por páginas de proyectos, repositorios de fork e incluso enviar solicitudes de extracción, todo desde la línea de comandos. hub.github.com
  • tj / git-extras es un conjunto de utilidades git, como el resumen del repositorio, la población de los registros de cambios, los porcentajes de confirmación del autor y más. github.com/tj/git-extras

Siga los estándares de mensajes de compromiso estricto y haga compromisos ambiciosos

Defina y siga siempre estándares claros de mensajes de compromiso para sus proyectos, algunas pautas generales son:

  • Cometa cada arreglo como un cambio por separado.
  • Proporcione mensajes de compromiso útiles.
  • Proporcione un mensaje corto de compromiso en la primera línea (50-100 caracteres). Mirando el resultado de gitk o git log --oneline puede ayudarte a entender por qué.
  • Haga referencia al problema de git en el cuerpo de su mensaje de confirmación.

Además, recomiendo encarecidamente que alcance sus mensajes para una mejor generación de registro de cambios. Cuando analiza sus mensajes, sus registros de cambios pueden ser más informativos. Las convenciones de compromiso AngularJS y la generación de registro de cambios es un gran ejemplo gist.github.com/stephenparish/9941e89d80e2bc58a153#generating-changelogmd

Definir estándares de estilo de codificación y configurar enlaces previos a la confirmación

Definir estándares de codificación y aplicarlos a través de enganches previos a la confirmación es esencial para escribir código que se pueda mantener. Al seguir estos estándares, se asegura de que todo el código se vea igual independientemente de quién lo haya escrito, lo que facilita el control y el mantenimiento del código escrito por otra persona.

Mi configuración recomendada es Prettier y StandardJS, sin embargo, eso es una cuestión de preferencia, hay muchos otros y también puede configurar uno personalizado, siempre que siga un estándar de codificación que beneficiará.

typicode / husky es una gran herramienta para configurar ganchos de precompromiso.

Configurar pruebas automatizadas y comprobaciones en solicitudes de extracción

Las pruebas funcionales automatizadas, la seguridad y las comprobaciones de estilo de código en cada solicitud de extracción son muy deseables, no desea hacerlo manualmente. Un servidor de integración continua como TravisCI se puede configurar rápidamente para ejecutar estas pruebas automáticamente frente a la rama de temas cada vez que se envía una solicitud de extracción y se puede configurar Github para evitar que el desarrollador combine las solicitudes de extracción que no pasan esta prueba. Si estas pruebas automáticas fallan, Github mostrará un mensaje en la solicitud de extracción para que el solicitante las solucione.

Obtenga más información en docs.travis-ci.com/user/pull-requests

Proteja su rama principal y exija revisiones de código

Github te brinda la posibilidad de proteger tu rama principal contra las confirmaciones directas, los empujones forzados y la rebase. Esto es muy importante cuando se colabora con otros en un proyecto. Además, desea revisiones de código como paso requerido para fusionar código en maestro. Al configurar esto en la pestaña de configuración de cada repositorio.

Al proteger el maestro y aplicar las revisiones de código, está tranquilo de que es poco probable que el código no deseado llegue al maestro y que nadie en el equipo afecte a otros que modifiquen el historial maestro de git o que presionen el código no revisado.

Aplaste sus solicitudes de extracción

Este es un debate candente: Merge vs Squash vs rebase. Creo que Squash Merge es el mejor enfoque por las siguientes razones:

  • no todos los desarrolladores saben cómo volver a basar correctamente una solicitud de extracción sobre el maestro, eso es un hecho. Muchos desarrolladores simplemente fusionarán master en la parte superior de sus cambios. Squash merge elimina esos mensajes de combinación que son inútiles para construir un registro de cambios más tarde y agregar ruido al registro de git.
  • no todos los contribuidores seguirán las pautas de compromiso, squash merge permite controlar el mensaje de compromiso que aterriza en la rama principal.

Para seguir con éxito un flujo de trabajo de fusión squash, es necesario que cada solicitud de extracción tenga un alcance para una función específica, corrección de errores o quehaceres.

Semver, etiquetas de Github, versiones y registros de cambios automatizados

El control de versiones es muy importante en software y especialmente en proyectos de código abierto donde muchos proyectos dependerán de su software. Las versiones semánticas harán la vida más fácil para todos, ya que sabrán exactamente cuándo se cambian los cambios donde se agregaron o si una nueva versión contiene una nueva función o una solución de error, simplemente mirando los números de versión.

Dado un número de versión MAJOR.MINOR.PATCH, incremente el:

  • Versión MAYOR cuando realiza cambios incompatibles de API,
  • Versión MINOR cuando agrega funcionalidad de una manera compatible con versiones anteriores, y
  • Versión PATCH cuando haces correcciones de errores compatibles con versiones anteriores.

Se encuentran disponibles etiquetas adicionales para los metadatos preliminares y de compilación como extensiones del formato MAJOR.MINOR.PATCH.

Además de cambiar su versión de package.json, generar una etiqueta de git para cada versión es una buena práctica.

Obtenga más información en semver.org .

La especificación de Compromisos convencionales propone la introducción de una convención de peso ligero estandarizada además de los mensajes de compromiso. Esta convención encaja con SemVer, pidiendo a los desarrolladores de software que describan en los mensajes de compromiso, las características, las correcciones y los cambios de última hora que realizan.

Al presentar esta convención, creamos un lenguaje común que facilita la depuración de problemas a través de los límites del proyecto.

conventionalcommits.org .

TravisCI puede ayudar a automatizar este proceso docs.travis-ci.com/user/deployment/releases

También puede encontrar estos paquetes útiles dominique-mueller / automatic-release , semántica-release / semántica-release .

Automatice implementaciones con ganchos de etiqueta

No es necesario utilizar ramas de liberación como Git Flow propuesto. Usted toma el artefacto de implementación de sus etiquetas git; En el enlace aprenderá más sobre cómo implementar etiquetas git en heroku usando TravisCI docs.travis-ci.com/user/deployment/heroku . Es muy simple, solo necesitas establecer el atributo de etiquetas en verdadero. Puede lograr el mismo comportamiento con cualquier otro servidor de CI.

Para un entorno de desarrollo puede configurar gancho que implementa la última confirmación maestra y para entornos de características, está bien tener ramas de vida no tan largas, opcionalmente podría aprovisionar entornos de prueba efímeros para cada solicitud de RP, sin embargo, esto es más complejo y no realmente necesario.

Configura un canal de transmisión Github en tu sala de chat

Esta es una forma muy conveniente de rastrear la actividad en sus repositorios de Github desde un único lugar, el lugar donde se comunica con su equipo es ideal. Estas son simples transmisiones de notificaciones en una sala de temas o varias. Pero hay mucho más que puedes hacer en tus salas de chat, en 2013 Github acuñó el término ChatOps , puedes conocerlo aquí youtube.com/watch?v=NST3u-GjjFw

Automatice las actualizaciones de dependencia

Mantener sus dependencias actualizadas es una tarea lenta y repetitiva, ideal para la automatización. Afortunadamente, hay muchas herramientas que le ayudarán a mantener sus dependencias actualizadas creando automáticamente solicitudes de extracción en su proyecto con las últimas versiones, sus pruebas automáticas de no regresión se ejecutarán contra esa solicitud de extracción y, de aprobarse, es probable que su código continúe funcionando. normalmente una vez que lo fusionas. Tenga cuidado con los principales cambios de versión, siempre vuelva a verificar.

Un par de herramientas que te ayudarán son greenkeeper.io y david-dm.org

Mejore su experiencia de UI de Github con extensiones

Puedes ver más en las extensiones del navegador GitHub .

Kikobeats / awesome-Github tiene más herramientas que aprovechas para mejorar tu flujo de github.

Aprendizaje continuo y mejora

Github y las prácticas de desarrollo de software de código abierto evolucionan de manera constante y rápida, se mantienen actualizadas con las últimas prácticas y herramientas siguiendo los anuncios de Github y siguiendo las normas y prácticas de la comunidad. El canal de GitHub Training & Guides en youtube es un gran recurso. youtube.com/githubguides