Simple
Simple
Maybe monorepo
Maybe maybe monorepo
with subtree split
Maybe all at once!
Backward resilient
Better decommissioning
Lesser PullRequest
Better Code Review
Implicit CI
Better productivity
Avoid switching repo
Better collaboration between Teams
We can fix bugs in all projects
Less Managment
Everything is centralized
Dependency managment
Code more reusable
Access Control
Better Continus Integration
Visibility
Cross Team Contribution
Single source of truth
Consistency
Shared Timeline
Atomic commits
Unified CI/CD
Unified build process
Unified deploy process
Refactoring easier
Sharing coding standard
Synchronized release
Sharing dependencies
To list a pro and cons of monorepo strategy i recommand:
It depends - sometime you want it, sometime not. But know you have the opportunity to choose.
# .gitlab-ci.yml
backend_test:
stage: test
script:
- make functional-test-backend
- make functional-test-front
rules:
changes:
- backend/*
front_test:
stage: test
script:
- make functional-test-front
rules:
changes:
- front-react/*
From SymfonyCon 2022
Ecommerce
Ecommerce
Stock
Order
Before
After
From SymfonyCon 2022
Text
paths:
- ./ecommerce/src
- ./stock/src
- ./order/src
layers:
- name: Ecommerce
collectors:
- type: className
regex: .*App\\Ecommerce\\.*
- name: Stock
collectors:
- type: className
regex: .*App\\Stock\\.*
- name: Order
collectors:
- type: className
regex: .*App\\Order\\.*
layers:
- name: Ecommerce
collectors:
- type: className
regex: .*App\\Ecommerce\\.*
- name: Stock
collectors:
- type: className
regex: .*App\\Stock\\.*
- name: PaymentBundle
collectors:
- type: className
regex: .*App\\PaymentBundle\\.*
ruleset:
Ecommerce:
- PaymentBundle
Stock:
- PaymentBundle
“With the right tools, anyone can unlock the power of monorepos”
🌍 shallow clone a lightweight "git clone" without the whole git history
🚧 partial clone a feature to avoid to download everything
git clone --depth=1 https://github.com/Symfony/symfony
git clone --filter=blob:none https://github.com/org/proj
# Git command
git subtree split --prefix=lib
# Fabpot tools
splitsh-lite --prefix=lib/