This is a simple visual implementation of John Conway's Game of Life. It's main focus is to learn following concepts during software application lifecycle:
- CI/CD integration using local GitLab server
- Monorepo project structure
- Websocket communication between client and server
This repository uses Yarn as a package manager. It includes the following packages/apps:
frontend
: a React app create using CRAbackend
: a Node.js app built with Express frameworklogger
: a logger implementation using Winston, used bybackend
applicationsconfig
:eslint
configurations (includeseslint-config-airbnb
andeslint-config-prettier
)tsconfig
:tsconfig.json
's used throughout the monorepo
Each package/app is 100% TypeScript.
This turborepo has some additional tools:
- TypeScript for static type checking
- ESLint for code linting
- Prettier for code formatting
- Craco for configuring CRA without eject
This turborepo, apart from being hosted on GitHub, was developed using locally set up GitLab server, in order to make use of its vast CI/CD support for learning purposes.
All services required for CI/CD and monitoring functionality are defined inside ci-cd/docker-compose.yml
file, which contains:
- GitLab server - for storing repository locally
- GitLab runner - for running CI/CD pipeline and executing jobs specified in
.gitlab-ci.yml
file - Portainer - for monitoring status of dockerized CI/CD stack
- SonarQube - for performing static code analysis automatically as a pipeline step
- PostgreSQL - for storing SonarQube related data
This repository is used in the npx create-turbo
command, and selected when choosing which package manager you wish to use with your monorepo (Yarn).
To build all apps and packages, run the following command:
cd game-of-life-v2
yarn run build
To develop all apps and packages, run the following command:
cd game-of-life-v2
yarn run dev