Je travaille sur un très grand projet open source basé sur la recherche, avec un tas d'autres contributeurs réguliers. Étant donné que le projet est maintenant assez important, un consortium (composé de deux employés à temps plein et de quelques membres) est chargé de la maintenance du projet, de l'intégration continue (IC), etc. Ils n'ont tout simplement pas le temps d'intégrer des partenaires externes. contributions bien.
Le projet est composé d'un framework "core", d'environ un demi million de lignes de code, d'un tas de "plugins" gérés par le consortium et de plusieurs plugins externes, dont la plupart ne sont pas disponibles. t même au courant.
Actuellement, notre CI construit le noyau et les plugins maintenus.
Un des gros problèmes auquel nous sommes confrontés est que la plupart des contributeurs (et en particulier les occasionnels) ne construisent pas 90% des plugins maintenus, donc quand ils proposent de refactoriser les changements dans le noyau (ce qui se passe assez régulièrement de nos jours), ils ont vérifié que le code était compilé sur leur machine avant de faire une demande de tirage sur GitHub.
Le code fonctionne, ils sont contents, puis le CI termine la construction et les problèmes commencent: la compilation a échoué dans un plug-in mis à jour par le consortium, le contributeur n'a pas construit sur sa machine.
Ce plugin peut avoir des dépendances sur des bibliothèques tierces, telles que CUDA par exemple, et l'utilisateur ne veut pas, ne sait pas comment, ou ne peut tout simplement pas, pour des raisons matérielles, compiler ce plugin endommagé.
Alors, soit le RP reste à flot dans les limbes des RP jamais fusionnés , soit le contributeur saisit la variable renommée dans la source du plug-in cassé, modifie le code, appuie sur sa branche, attend le CI pour terminer la compilation génère généralement plus d'erreurs et réitère le processus jusqu'à ce qu'il soit satisfait - Ou l'un des deux permanents déjà surbookés du consortium donne un coup de main et tente de corriger le PR sur leur machine.
Aucune de ces options n'est viable, mais nous ne savons tout simplement pas comment le faire différemment. Avez-vous déjà été confronté à une situation similaire de vos projets? Et si oui, comment avez-vous géré ce problème? Y a-t-il une solution que je ne vois pas ici?