# DEMO Conventional Commits and Semantic Release ## Agenda - Conventional Commits - Semantic Versioning - Semantic Release ## [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) Defined commit message schema, which allows for automation of releases based on [Semantic Versioning (SemVer)](https://semver.org/). ``` [optional scope]: [optional body] [optional footer(s)] ``` Conventional Commits are considered stable with version `1.0.0` I personally prefer [Angular conventions](https://github.com/angular/angular/blob/22b96b9/CONTRIBUTING.md#-commit-message-guidelines). Which IMHO give more flexibility for various changes with more commit `type`s. The default conventions offer only a few types (`feat`, `fix`, `BREAKING CHANGE` or use `!` as a suffix after type/scope), others are allowed, but not defined. Which Angular Conventions fixes. Such as `build`, `chore`, `ci`, `docs`, `style`, `refactor`, `perf`, `test`. ## [Semantic Versioning](https://semver.org/) SemVer version format `MAJOR.MINOR.PATCH`, e.g. `1.16.3`. The version (git tag) can be prefixed with `v`, e.g. `v2.3.4`. ## [Semantic Release](https://semantic-release.gitbook.io/semantic-release/) As the name suggests, this app is responsible for creating new releases following [Semantic Versioning](https://semver.org/). It uses the commit types to determine, what kind of a release should be released next. - `BREAKING CHANGE` or `!` => `MAJOR` - `feat` => `MINOR` - `fix` => `PATCH`