Tôi đang làm việc trong một dự án nguồn mở do nghiên cứu rất lớn, với một loạt những người đóng góp thường xuyên khác. Bởi vì dự án bây giờ khá lớn, một tập đoàn (gồm hai nhân viên toàn thời gian và một vài thành viên) chịu trách nhiệm duy trì dự án, tích hợp liên tục (CI), v.v. Họ chỉ không có thời gian để tích hợp bên ngoài đóng góp mặc dù.
Dự án này bao gồm một khung "cốt lõi", gồm khoảng một nửa triệu dòng mã, một loạt các "plugin" được duy trì bởi tập đoàn và một số plugin bên ngoài, hầu hết chúng tôi đều phát sinh ' thậm chí nhận thức được.
Hiện tại, CI của chúng tôi xây dựng lõi và các plugin được duy trì.
Một trong những vấn đề lớn mà chúng tôi gặp phải là hầu hết những người đóng góp (và đặc biệt là những người thỉnh thoảng) không xây dựng 90% các plugin được duy trì, vì vậy khi họ đề xuất tái cấu trúc các thay đổi trong lõi (ngày nay xảy ra khá thường xuyên), họ đã kiểm tra xem mã biên dịch trên máy của họ trước khi đưa ra yêu cầu kéo trên GitHub.
Mã hoạt động, họ rất vui, và sau đó CI hoàn thành việc xây dựng và các vấn đề bắt đầu: quá trình biên dịch thất bại trong một plugin được duy trì bởi tập đoàn, mà người đóng góp không xây dựng trên máy của anh ấy / cô ấy.
Plugin đó có thể có sự phụ thuộc vào các thư viện của bên thứ ba, chẳng hạn như CUDA và người dùng không muốn, không biết cách hoặc đơn giản là không thể vì lý do phần cứng, biên dịch plugin bị hỏng đó.
Vì vậy, sau đó - PR vẫn giữ nguyên thông tin quảng cáo trong tình trạng không bao giờ được hợp nhất PR - Hoặc người đóng góp greps biến đổi tên trong nguồn của plugin bị hỏng, thay đổi mã, đẩy vào chi nhánh của mình, chờ đợi CI hoàn thành quá trình biên dịch, thường gặp nhiều lỗi hơn và nhắc lại quy trình cho đến khi CI hài lòng - Hoặc một trong hai nhân vật đã đặt trước quá nhiều trong tập đoàn đưa ra một bàn tay và cố gắng sửa PR trên máy của họ.
Không có lựa chọn nào trong số đó là khả thi, nhưng chúng tôi không biết làm thế nào để làm điều đó khác đi. Bạn đã bao giờ phải đối mặt với một tình huống tương tự của các dự án của bạn? Và nếu vậy, làm thế nào bạn xử lý vấn đề này? Có một giải pháp tôi không thấy ở đây?