Do not index
Do not index
This is the first blog of many in a series where I chat about one new thing I learned or experienced.
Last week a team member at Sparc and I were talking about totally refactoring the notification services of our SAAS called Finergy. During this conversation, we realized that in developing this service we were likely to have a lot of redundancy between our admin and public API and wanted to create a separate notification API (for internal use) that combated this issue.
Photo by Christopher Gower on Unsplash
The problem is that across each of these services (Admin, Public, and Notifications), they needed all the same database configuration, models, migrations, etc. This meant any time we added or modified a model we needed to update all of our projects. But then we discovered Git Submodules and wow 🤯. We now have all of our database code maintained in one repository, and added as a submodule to every service that needs to interact with our database.
What are submodules?
Submodules allow you to include or embed one or more repositories as a sub-folder inside another repository. It’s that simple. In our case, we were able to reduce redundancy across multiple services by utilizing submodules.
Adding Submodules
Let’s say you are working on a project like ours. You have a repository forÂ
service
 and a repository database-module
 that contains all your database configuration code.You can addÂ
database-module
 as a submodule to service
 by executing the following in the service
 repository.git submodule add https://github.com/<org_or_username>/database-module.git database
It’s that simple, now the database folder will be available inside yourÂ
service
 and you will be able to manage the source control for both repositories from your CLI or editor.Note: With older versions of Git you will need to run git submodule update — init — recursive in order to download the content of the submodule into your local codebase
At this point, you can commit your changes inÂ
service
 and everything will be good to go. You can even see the submodule from the code tab on Github and Bitbucket.Road Blocks
The largest roadblock we hit when implementing submodules into our services was updating our automatic deployment pipelines to handle the new submodule.
Our team mainly utilizes Google Cloud Run for these services, so if you also use Cloud Run and need some help with your deployment pipeline let me know!
Conclusion
Submodules are not always the best solution for issues like these, however, in our case, it works perfectly. Give it a try, and add this tool to your dev ops toolbelt. If you have any questions feel free to reach out!
Â