We employ a CI/CD pipeline for continuous integration & continuous delivery. This speeds up the development cycle by allowing us to quickly test our changes.

https://lucid.app/lucidchart/invitations/accept/inv_74ed890b-98c8-4b2c-8c74-9a6e82aeaeee

Local Machine

We begin on the local machine, after you’ve cloned the latest master branch & created a new local feature branch. After making some changes you type git add ., then git commit -m 'some-message'.

pre-commit .h

Husky will trigger .husky/pre-commit which calls lint-staged, this will call the corresponding functions in the file type map located at .lintstagedrc.js.

Then we’ll call a custom shell script to check that our local branch is following our branch naming convention.

commit-msg

Then the commit message is linted using configs at commitlint.config.js, it allows for custom commit message formats found at .cz-config.js.

It follows a scope followed by the module name in parenthesis. So feat(apps-web) would be adding a feature to the web project.

Now that we have committed our code, we’ll want to git push to the remote repository.

pre-push

The push will only be triggered once all the specs pass within .husky/pre-push, we run some unit & integration specs.

CircleCI

CircleCI will trigger the dev workflow based on .circleci/config.yml. The follow is somewhat straight forward.

  1. Install & setup the workspace
  2. lint, unit, integration, e2e
  3. Notify via Slack

Vercel

We use Vercel for app preview/deployment. Vercel will help to run custom command and also install dependencies for the app before compiling/running.

In case you want to modify that, check scripts/vercel for proper requirements update.