The website you're reading this post is part of a TS monorepo.
I won't dive much into the details of it but I have inside the same repo:
- CMS that runs on Heroku;
- A public package for handling MDX via rehype;
- lambda functions that run on Netlify;
- This website that runs on Vercel.
One thing that bothers me a lot is is when I change something in a lambdas project which is not related to my website but since my website is connected via git at Vercel, it triggers a build pipeline.
But then, I've realized that Vercel offers an option to decide what can cause a build trigger.
Settings: Ignore Build Step
Under Your project > Settings > Git, we can find an option called Ignore Build Step.
It's a single input field where we can specify a custom git diff command.
Based on the input placeholder, it seems Vercel uses the following command to decide rather if something has changed or not:
git diff --quiet HEAD^ HEAD ./
I'm not a git specialist but I was pretty sure we could ignore certain files on that. Doing some search of how to ignore folders/files using `git diff` and it's simple.
At the end of the same command Vercel uses, we can add :(exclude)<path-to-folder-to-exclude
git diff --quiet HEAD^ HEAD ./ ':(exclude)apps/lambdas'
And that's it.
Tip: We can also concatenate more folders by adding the same expression after each other like '(exclude)apps/lambdas' '(exclude)apps/cms' ...
Now, every time I open a PR to fix something in my lambdas code, Vercel will creates a build for that but it'll cancel it right after.
Other useful way is by just specifying the folder you want to listen for changes:
git diff --quiet HEAD^ HEAD ./apps/website
The downside is that if something has changed on root level (like global packages) it won't also trigger the build, however this could be solved by combining linting/building via Github Actions or any other CI pipeline.
Resources
- https://vercel.com/support/articles/how-do-i-use-the-ignored-build-step-field-on-vercel
- https://stackoverflow.com/questions/4380945/exclude-a-directory-from-git-diff
- https://git-scm.com/docs/git-diff#Documentation/git-diff.txt---word-diff-regexltregexgt
- https://gist.github.com/iodic/7daa1667140b1649ded747963a1303d9