Skip to content

Nest.js boilerplate with CircleCI, Commitizen, Commitlint, Docker-Compose, ESLint, GitHub Actions, Husky, Lint-staged, OpenAPI, Prettier, PostGreSQL, TypeORM

smarlhens/nest-boilerplate

Repository files navigation

Nest logo TypeORM logo PostgreSQL logo Jest logo Prettier logo ESLint logo

Docker logo GitHub Actions logo CircleCI logo

Nest - Boilerplate

GitHub CI CircleCI Commitizen friendly code style: prettier Conventional Commits

Table of contents


Getting started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

What things you need to install the software and how to install them :


Installation

  1. Clone the git repository

    git clone https://github.com/smarlhens/nest-boilerplate.git
  2. Go into the project directory

    cd nest-boilerplate/
  3. Checkout working branch

    git checkout <branch>
  4. Install NPM dependencies

    npm i
  5. Copy .env.dist to .env

    cp .env.dist .env
  6. Replace the values of the variables with your own

  7. Create Docker images and launch them

    docker-compose up -d --build

What's in the box ?

CircleCI

CircleCI automates your software builds, tests, and deployments.

CircleCI pipeline file: .circleci/config.yml.

For more configuration options and details, see the configuration docs.


Commitizen

commitizen is a command line utility that makes it easier to create commit messages following the conventional commit format specification.

Use git cz instead of git commit to use commitizen.

Add and commit with Commitizen

Configuration file: .czrc.


Commitlint

commitlint checks if your commit messages meet the conventional commit format.

Configuration file: .commitlintrc.json.

In general the pattern mostly looks like this:

type(scope?): subject  #scope is optional

Are you a good commitizen ?


Docker Compose

Compose file: docker-compose.yml.

Containers :

  • PostgreSQL 14
  • pgAdmin 6

Compose file uses .env.


ESLint

ESLint is a fully pluggable tool for identifying and reporting on patterns in JavaScript.

Configuration file: .eslintrc.js.

For more configuration options and details, see the configuration docs.


GitHub Actions

GitHub Actions makes it easy to automate all your software workflows, now with world-class CI/CD. Build, test, and deploy your code right from GitHub. Make code reviews, branch management, and issue triaging work the way you want.

CI workflow file: .github/workflows/ci.yml.


Husky

Husky is a package that helps you create Git hooks easily.

Configuration folder: .husky.


Lint-staged

Lint-staged is a Node.js script that allows you to run arbitrary scripts against currently staged files.

Configuration file: .lintstagedrc.json.


Prettier

Prettier is an opinionated code formatter.

Configuration file: .prettierrc.json.
Ignore file: .prettierignore.

For more configuration options and details, see the configuration docs.


Running the app

development

npm run start

watch mode

npm run start:dev

production mode

npm run start:prod

Code scaffolding

Run nest generate|g <schematic> <name> [options] to generate a new Nest Element.


Build

Run npm run build to build the project. The build artifacts will be stored in the dist/ directory.


Test

unit tests

npm run test

e2e tests

npm run test:e2e

test coverage

npm run test:cov

Further help

To get more help on the Nest CLI use nest --help or go check out the Nest CLI README.


Useful Docker commands

  1. If you want to check that all containers are up :

    docker-compose ps
  2. Other Docker commands :

    # Start Docker
    docker-compose start
    
    # Restart Docker
    docker-compose restart
    
    # Stop Docker
    docker-compose stop
    
    # Delete all containers
    docker rm $(docker ps -aq)
    
    # Delete all images
    docker rmi $(docker images -q)
  3. How to get a Docker container's IP address from the host ?

    docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container>
    docker inspect $(docker ps -f name=<service> -q) | grep IPAddress