¿Cómo se podría implementar un flujo de trabajo de CI para plugins no oficiales?

Te invito a compartir ideas sobre posibles flujos de trabajo de CI, que ejecutarían pruebas en plugins no oficiales proporcionados por la comunidad.

Algunas comunidades dependen en gran medida de plugins, sin un mantenimiento establecido:

Dado que las pruebas de plugins dependen de una instalación de Discourse como campo de pruebas, me pregunto cómo podría ser un flujo de trabajo de CI compatible con la comunidad.

Algunos plugins incluyen especificaciones, como la implementación de @angus de activitypub, que, según entiendo, permiten realizar pruebas para CI.

Actualmente, pienso en dos formas posibles de mejorar las pruebas de plugins no oficiales, dependiendo de las especificaciones / pruebas incluidas en el código fuente del plugin:

a) construir alguna maquinaria que ayude a los mantenedores del sitio a ejecutar pruebas en un entorno de staging.
b) tener algún servicio que bifurque una imagen de prueba predefinida para informar sobre las pruebas ejecutadas en el último código publicado del plugin.

¿Qué opinas?

¿Me he perdido algún flujo de trabajo ya establecido?

Esto puede ser útil:

3 Me gusta

Además de la CI con pruebas de backend y frontend, que la mayoría de los plugins de Pavilion tienen ahora, contamos con un sistema de gestión de plugins del que la CI es una parte. Así es como funciona

3 Me gusta

Sí, y para añadir a lo que @angus ha compartido, puedes encontrar nuestro panel de compatibilidad diario aquí:

https://coop.pavilion.tech/plugins?branch=tests-passed

El cual muestra el estado de las comprobaciones de compatibilidad de los plugins de Pavilion (y a veces de otros) frente a tests-passed y stable. Esto se actualiza todos los días, automáticamente.

Esto, por supuesto, depende de las pruebas, incluidas las pruebas de humo, las especificaciones (backend) y las pruebas qunit (frontend).

Nuestro plugin de suscripción (Custom Wizard) tiene la mayor cobertura de pruebas, como te puedes imaginar, pero algunos de nuestros plugins gratuitos incluyen un buen conjunto de pruebas tanto de backend como de frontend (por ejemplo, Locations).

Escribir pruebas es una buena práctica y ciertamente Pavilion se ha vuelto aún más disciplinado en este espacio a medida que hemos madurado como negocio.

Críticamente, las pruebas también documentan la funcionalidad prevista, lo cual es extremadamente importante, especialmente durante las actualizaciones de compatibilidad o la refactorización.

2 Me gusta

Impresionante. ¿Podrías señalar el código que implementa esto?

1 me gusta

Es una arquitectura según el diagrama de @angus, con varios repositorios involucrados, pero este es el servidor de estado:

También es un enfoque:

  • Nunca implementes una solución sin verificar si existe una prueba, y si no existe una prueba adecuada, añade una.
  • Preferiblemente, desarrolla la prueba primero, demuestra que falla, luego soluciona el problema y confirma que tu nueva prueba pasa.

De esa manera, tu cobertura se construye con el tiempo…

Además:

  • Adaptar pruebas puede ser arriesgado, ya que podrías malinterpretar lo que el código pretendía hacer… aunque es mejor que no hacer nada…
1 me gusta

Todos los plugins oficiales tienen especificaciones que puedes usar como ejemplos. El plugin discourse-plugin-Skelton incluye acciones de GitHub para ejecutar pruebas en cada commit, y creo, diariamente.

2 Me gusta

¿Entiendo correctamente?

a) Esto está disponible a través de las acciones de GitHub: los plugins con especificaciones/pruebas adecuadas que utilizan las acciones de GitHub tendrán una insignia en GitHub, si todas las pruebas pasan y el estado de las acciones de CI es legible por la API.

b) Excepto los plugins oficiales de Discourse y los plugins de Pavilion, no existe una visión general automática para los administradores sobre si los plugins utilizados funcionarán en la versión prevista para la actualización.

Buscando metadatos sobre la compatibilidad de plugins, encontré Introducing .discourse-compatibility: pinned plugin/theme versions for older Discourse versions a través de un archivo .discourse-compatibility.

Según entiendo, esta es una solución al problema inverso: Discourse demasiado antiguo para un plugin.
¿Cómo tratar el otro caso: plugin demasiado antiguo para Discourse?

¿Podría /admin/upgrade advertir sobre plugins que fallen las pruebas para una actualización prevista?

Originalmente nos propusimos y proporcionamos una versión sin marca de nuestro panel de plugins donde los autores de terceros podían presentar sus plugins para que se incluyeran. Esto no ganó tracción, en parte porque la población de desarrolladores de plugins de terceros es muy pequeña.

La creación de plugins de Discourse de terceros es bastante nicho y los terceros que proporcionan plugins con una buena cobertura de pruebas son muy nicho. :sweat_smile:

Muchos de los freelancers en este espacio se han unido a Pavilion o CDCK (¡o, con el tiempo, a ambos!).

Así que al final decidimos simplemente colapsar nuestro panel en nuestro sitio comunitario de marca.

2 Me gusta