copy-workflows<\/code> composer script.)<\/p>\n\n\n\nThis leakage reveals another issue with this setup: I must review all contributions to the public repo before they are merged, or they could break something downstream. The contributors would also completely unaware of those leakages (and they couldn’t be blamed for it). This situation is specific to the public\/private-monorepo setup, where I am the only person who is aware of the full setup. While I share access to the public repo, I am the only one accessing the private one.<\/p>\n\n\n\n
As an example of how things could go wrong, a contributor to leoloso\/PoP<\/code> might remove CHECKOUT_SUBMODULES: \"\"<\/code> since it is superfluous. What the contributor doesn\u2019t know is that, while that line is not needed, removing it will break the private repo.<\/p>\n\n\n\nI guess I need to add a warning!<\/p>\n\n\n\n
env:\n ### ☠️ Do not delete this line! Or bad things will happen! ☠️\n CHECKOUT_SUBMODULES: \"\"\n<\/code><\/pre>\n\n\nWrapping up<\/h3>\n\n\n
My repo has gone through quite a journey, being adapted to the new requirements of my code and application at different stages:<\/p>\n\n\n\n
- It started as a single repo, hosting a monolithic app.<\/li>
- It became a multirepo when splitting the app into packages.<\/li>
- It was switched to a monorepo to better manage all the packages.<\/li>
- It was upgraded to a multi-monorepo to share files with a private monorepo.<\/li><\/ul>\n\n\n\n
Context means everything, so there is no “best” approach here\u2014only solutions that are more or less suitable to different scenarios.<\/p>\n\n\n\n
Has my repo reached the end of its journey? Who knows? The multi-monorepo satisfies my current requirements, but it hosts all private plugins together. If I ever need to grant contractors access to a specific private plugin, while preventing them to access other code, then the monorepo may no longer be the ideal solution for me, and I’ll need to iterate again.<\/p>\n\n\n\n
I hope you have enjoyed the journey. And, if you have any ideas or examples from your own experiences, I\u2019d love to hear about them in the comments.<\/p>\n","protected":false},"excerpt":{"rendered":"
I’ve been working on the same project for several years. Its initial version was a huge monolithic app containing thousands of files. It was poorly architected and non-reusable, but was hosted in a single repo making it easy to work with. Later, I \u201cfixed\u201d the mess in the project by splitting the codebase into autonomous […]<\/p>\n","protected":false},"author":275258,"featured_media":346469,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_bbp_topic_count":0,"_bbp_reply_count":0,"_bbp_total_topic_count":0,"_bbp_total_reply_count":0,"_bbp_voice_count":0,"_bbp_anonymous_reply_count":0,"_bbp_topic_count_hidden":0,"_bbp_reply_count_hidden":0,"_bbp_forum_subforum_count":0,"sig_custom_text":"","sig_image_type":"featured-image","sig_custom_image":0,"sig_is_disabled":false,"inline_featured_image":false,"c2c_always_allow_admin_comments":false,"footnotes":"","jetpack_publicize_message":"Some projects are good in a single repo, some need more, and some need to be creatively chunked up as @losoviz shares in his journey from a single repo to what he calls a \"multi-monorepo.\"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":[]},"categories":[4],"tags":[638,1513,1515,970],"jetpack_publicize_connections":[],"acf":[],"jetpack_featured_media_url":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2021\/08\/connected-repos.jpg?fit=1200%2C600&ssl=1","jetpack-related-posts":[{"id":333045,"url":"https:\/\/css-tricks.com\/monorepo\/","url_meta":{"origin":346449,"position":0},"title":"Monorepo","date":"January 26, 2021","format":false,"excerpt":"I'm not exactly a large-scale DevOps guy, but I can tell ya we've been moving back toward a monorepo at CodePen and it's rife with advantages over a system with lots of smaller repos. For us, I mean. It's very likely that you have entirely different challenges and have come\u2026","rel":"","context":"In "Article"","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2021\/01\/monorepo.jpg?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":366107,"url":"https:\/\/css-tricks.com\/beautify-github-profile\/","url_meta":{"origin":346449,"position":1},"title":"Beautify GitHub Profile","date":"May 26, 2022","format":false,"excerpt":"It wasn't long ago that Nick Sypteras showed us how to make custom badges for a GitHub repo. Well, Reza Shakeri put Beautify GitHub Profile together and it's a huuuuuuge repo of different badges that pulls lots of examples together with direct links to the repos you can use to\u2026","rel":"","context":"In "Link"","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2022\/05\/beautify-github-repo.jpg?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":293787,"url":"https:\/\/css-tricks.com\/building-a-full-stack-serverless-application-with-cloudflare-workers\/","url_meta":{"origin":346449,"position":2},"title":"Building a Full-Stack Serverless Application with Cloudflare Workers","date":"August 9, 2019","format":false,"excerpt":"One of my favorite developments in software development has been the advent of serverless. As a developer who has a tendency to get bogged down in the details of deployment and DevOps, it's refreshing to be given a mode of building web applications that simply abstracts scaling and infrastructure away\u2026","rel":"","context":"In "Article"","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2019\/08\/cloudflare-workers-1-1.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":317762,"url":"https:\/\/css-tricks.com\/the-github-profile-trick\/","url_meta":{"origin":346449,"position":3},"title":"The GitHub Profile Trick","date":"July 27, 2020","format":false,"excerpt":"Monica Powell shared a really cool trick the other day: The profile README is created by creating a new repository that\u2019s the same name as your username. For example, my GitHub username is m0nica so I created a new repository with the name m0nica. Now the README.md from that repo\u2026","rel":"","context":"In "Article"","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2020\/07\/github-profile-m0nica.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":278134,"url":"https:\/\/css-tricks.com\/a-guide-to-custom-elements-for-react-developers\/","url_meta":{"origin":346449,"position":4},"title":"A Guide to Custom Elements for React Developers","date":"November 8, 2018","format":false,"excerpt":"I had to build a UI recently and (for the first time in a long while) I didn't have the option of using React.js, which is my preferred solution for UI these days. So, I looked at what the built-in browser APIs had to offer and saw that using custom\u2026","rel":"","context":"In "Article"","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2018\/11\/web-components-react.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":332716,"url":"https:\/\/css-tricks.com\/building-an-ethereum-app-using-redwood-js-and-fauna\/","url_meta":{"origin":346449,"position":5},"title":"Building an Ethereum app using Redwood.js and Fauna","date":"January 14, 2021","format":false,"excerpt":"With the recent climb of Bitcoin\u2019s price over 20k $USD, and to it recently breaking 30k, I thought it\u2019s worth taking a deep dive back into creating Ethereum applications. Ethereum, as you should know by now, is a public (meaning, open-to-everyone-without-restrictions) blockchain that functions as a distributed consensus and data\u2026","rel":"","context":"In "Article"","img":{"alt_text":"","src":"https:\/\/i0.wp.com\/css-tricks.com\/wp-content\/uploads\/2021\/01\/ETH-redwood-fauna.png?fit=1200%2C600&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts\/346449"}],"collection":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/users\/275258"}],"replies":[{"embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/comments?post=346449"}],"version-history":[{"count":10,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts\/346449\/revisions"}],"predecessor-version":[{"id":346544,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/posts\/346449\/revisions\/346544"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/media\/346469"}],"wp:attachment":[{"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/media?parent=346449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/categories?post=346449"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/css-tricks.com\/wp-json\/wp\/v2\/tags?post=346449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}