Estoy trabajando en un gran proyecto de código abierto dirigido por la investigación, con muchos otros colaboradores habituales. Debido a que el proyecto ahora es bastante grande, un consorcio (compuesto por dos empleados a tiempo completo y pocos miembros) se encarga de mantener el proyecto, la integración continua (CI), etc. Simplemente no tienen tiempo para la integración de contribuciones sin embargo.
El proyecto se compone de un marco "central", de aproximadamente medio millón de líneas de código, un montón de "complementos" que mantiene el consorcio y varios complementos externos, la mayoría de los cuales no estamos t incluso consciente de.
Actualmente, nuestro CI crea el núcleo y los complementos mantenidos.
Uno de los grandes problemas que enfrentamos es que la mayoría de los contribuyentes (y especialmente los ocasionales) no están construyendo el 90% de los complementos mantenidos, por lo que cuando proponen cambios de refactorización en el núcleo (que actualmente ocurre de manera bastante regular), comprobaron que el código se compila en su máquina antes de realizar una solicitud de extracción en GitHub.
El código funciona, están contentos, y luego el CI termina de compilarse y comienzan los problemas: la compilación falló en un complemento mantenido por el consorcio, que el contribuyente no construyó en su máquina.
Ese complemento puede tener dependencias de bibliotecas de terceros, como CUDA, por ejemplo, y el usuario no quiere, no sabe cómo, o simplemente no puede, por razones de hardware, compilar ese complemento roto.
De manera que - ya sea el estancias de relaciones públicas ad aeternam en el limbo de la no-a-ser-fusionado RP - O el contribuyente GREPS la variable cuyo nombre cambió en la fuente del plugin roto, cambia el código, empuja a su / su rama, espera el CI para terminar de compilar, generalmente recibe más errores y reitera el proceso hasta que CI esté contento, o uno de los dos permanentes que ya están sobrevendidos en el consorcio echa una mano e intenta arreglar el RP en su máquina.
Ninguna de esas opciones es viable, pero simplemente no sabemos cómo hacerlo de manera diferente. ¿Alguna vez te has enfrentado a una situación similar de tus proyectos? Y si es así, ¿cómo manejó este problema? ¿Hay alguna solución que no esté viendo aquí?