Estou trabalhando em um projeto de código aberto liderado por pesquisas, com muitos outros colaboradores regulares. Como o projeto agora é bastante grande, um consórcio (composto por dois funcionários em período integral e poucos membros) é responsável por manter o projeto, a integração contínua (IC) etc. Eles simplesmente não têm tempo para a integração de recursos externos. contribuições embora.
O projeto é composto de uma estrutura "básica", com cerca de meio milhão de linhas de código, um monte de "plugins" mantidos pelo consórcio e vários plugins externos, a maioria dos quais não somos ' nem mesmo ciente.
Atualmente, nosso IC constrói o núcleo e os plugins mantidos.
Um dos grandes problemas que enfrentamos é que a maioria dos colaboradores (e principalmente os ocasionais) não está construindo 90% dos plug-ins mantidos; portanto, quando propõem mudanças de refatoração no núcleo (o que atualmente acontece regularmente), eles verificaram se o código é compilado na máquina antes de fazer uma solicitação de recebimento no GitHub.
O código funciona, eles estão felizes e, em seguida, o IC termina a construção e os problemas começam: a compilação falhou em um plug-in mantido por consórcio, que o colaborador não construiu em sua máquina.
Esse plug-in pode ter dependências de bibliotecas de terceiros, como CUDA, por exemplo, e o usuário não deseja, não sabe como, ou simplesmente não pode, por razões de hardware, compilar esse plug-in quebrado.
Então, então - ou o PR permanece ad aeternam no limbo de PRs que nunca serão mesclados - Ou o colaborador cumprimenta a variável renomeada na fonte do plugin quebrado, altera o código, pressiona sua ramificação, aguarda por o IC para concluir a compilação, geralmente recebe mais erros e reitera o processo até que o IC esteja satisfeito - ou uma das duas permanentes já contratadas em excesso no consórcio dá uma mãozinha e tenta consertar o PR em sua máquina.
Nenhuma dessas opções é viável, mas simplesmente não sabemos como fazê-lo de maneira diferente. Você já foi confrontado com uma situação semelhante em seus projetos? E se sim, como você lidou com esse problema? Existe uma solução que não estou vendo aqui?