Git budowanie monorepo z wielu repo

0

Mam nadzieję, że dobry dział strzeliłem.
Mam jeden moduł aplikacji, który składa się z ~30 repozytoriów. Nie chcę robić z tego monorepo, bo wtedy waga tego wskoczy na jakieś niebagatelne wartości i każdy nowy programista będzie zaciągać tony kodu.
Natomiast chciałbym robić z wielu repozytoriów automatycznie kolejne jedno w formie właśnie monorepo na potrzeby budowania modułu. Istnieje jakaś koncepcja automatyzacji tego procesu aby z wszystkich repozytoriów dało się budować jedno?
Dzięki za wskazówki.

2

Jeżeli chcesz to robić gitem, to submodules, ale to będzie średnia opcja. Teoretycznie przy nowym commicie w jakimś module próbujesz skompilować całe monorepo, jak zadziała, to wtedy robisz w nim nowego commita przesuwającego podmoduł do nowej wersji. Przy czym to i tak pobierze każde repozytorium na dysk.

Lepiej podejść na zasadzie produkowania osobnych artefaktów z każdego repo (modułu, komponentu, jara, dllki, biblioteki, nugeta, poda, czy jak tam to sobie nazwiesz) i potem zarządzanie zależnościami idiomatycznie w swoim języku.

0
Afish napisał(a):

Jeżeli chcesz to robić gitem, to submodules, ale to będzie średnia opcja. Teoretycznie przy nowym commicie w jakimś module próbujesz skompilować całe monorepo, jak zadziała, to wtedy robisz w nim nowego commita przesuwającego podmoduł do nowej wersji. Przy czym to i tak pobierze każde repozytorium na dysk.

Właśnie zastanawiam się czy jest możliwość wypychania z repozytorium A do jednego dużego repo X dopiero w momencie gdy kod tam zawarty przechodzi testy / świeci się na zielono.

Afish napisał(a):

Lepiej podejść na zasadzie produkowania osobnych artefaktów z każdego repo (modułu, komponentu, jara, dllki, biblioteki, nugeta, poda, czy jak tam to sobie nazwiesz) i potem zarządzanie zależnościami idiomatycznie w swoim języku.

Na razie budujemy moduł z którego składa się aplikacja do jednego osobnego artefaktu (.NET Core here). Modułów jest ~15. Repozytoriów powiedzmy 40. Jak dobrze rozumiem proponujesz rozbicie osobnego modułu składającego się z np. 15 repozytoriów na 15 artefaktów i późniejsze składanie tego w jeden artefakt? Nie jest to wykonalne w tym projekcie niestety. Jest wiele ograniczeń i pozwól, że pominę tłumaczenie.
Case jest taki, że chcieliśmy przetestować jedno narzędzie, które musi pobierać jeden moduł z jednego repo, a nie budować go osobno z wielu różnych. Chcemy bezinwazyjnie zrobić właśnie do tego celu jedno repozytorium.

3

To .NET nie ma czegoś takiego jak repozytorium artefaktów i maven/gradle?
W Javie robi się to własnie w taki sposób -> każde repo produkuje jakiś artefakt który potem pushuje się do artifactory/nexusa/archvia czy czegoś takiego. Inne projekty daja sobie zależność na artefakt w odpowiedniej wersji i tyle. Niczego nie trzeba budować go osobno z wielu różnych, po prostu pobiera się artefakt który już dawno zbudowało CI.

0
purrll napisał(a):

Właśnie zastanawiam się czy jest możliwość wypychania z repozytorium A do jednego dużego repo X dopiero w momencie gdy kod tam zawarty przechodzi testy / świeci się na zielono.

Z automatu nie widziałem, musisz sobie sam obkodować.

purrll napisał(a):

Na razie budujemy moduł z którego składa się aplikacja do jednego osobnego artefaktu (.NET Core here). Modułów jest ~15.

Czego masz dokładnie 15? Projektów? A potem do głównego projektu dodajesz referencje do tych 15 pozostałych? Jak tak, to zamieniasz tamte 15 na nugety i tak ogarniasz referencje. Ale na to pewnie byś sam wpadł, więc zakładam, że nie zrozumiałem. Najlepiej wrzuć zrzut ekranu z VS czy inaczej rozpisz, jak te csproje i repozytoria masz połączone.

1 użytkowników online, w tym zalogowanych: 0, gości: 1