I’m working on a code snippet which has to work across multiple themes.
Let’s say I have three themes:
- Orange
- Green
- Blue
Every theme has a folder called “snippets” inside, and I put my code snippet there.
- Orange/snippets/code.html
- Green/snippets/code.html
- Blue/snippets/code.html
The “code.html” file is exactly the same across every theme. I keep track of it in its own GitHub repo and then copy and paste to every theme repo.
How can I edit this snippet in one place and be sure that it gets updated in all themes? I’m looking for a method that would be scalable, as soon the number of themes may grow till 20-30.
In my situation I have more files then an example with “code.html” – they are in two folders, and the total amount is around 10.
I was reading about Git submodules, but I don’t feel confident like they fit my issue. I’m not sure if this issue is related to Git at all, sorry about that.
P.S. I’m working on SaaS – Shopify to be exact. So any kind of PHP tricks will not work in this case. I need files to be processed in some way locally.
Edit: Real life example:
I have those 4 files:
{{ theme }}/snippets/file1.liquid
{{ theme }}/snippets/file2.liquid
{{ theme }}/assets/file3.liquid
{{ theme }}/assets/file4.liquid
I cannot create sub-directories or other directories.
3
Answers
A Php file structure like the one you listed above would work. The snippets folder would essentially be a .php extension file with an include for a shared html file between projects or in your case themes.
Let say you have your common code in a repository.
You could create a submodule in
<Theme>/snippets/common
. And keep it updated to the latest master every time you want to build/deploy your theme.That means your
code.html
will be in<Theme>/snippets/common/code.html
Perhaps you can use a bash script that automate this process across your repos. The following script will take all of the file paths that you set in the first variable and find the one modified last. From there it will copy that file unto all the rest of them, add them to the repo, and commit.
After you’ve modified the code.hmtl file, you could run this script or make it part of your production pipeline.