DEV Community

Cover image for How to setup Semantic Release for a React app or a Next.js app
amalv
amalv

Posted on

How to setup Semantic Release for a React app or a Next.js app

Overview

In this guide you'll learn how to setup Semantic Release for a React app or a Next.js app.

This will allow you to follow a workflow that performs fully automated releases for Github and enforces the Semantic Versioning specification based on your commit messages.

Here is an example from the official documentation of the release type that will be done based on commit messages:

Commit message Release type
fix(pencil): stop graphite breaking when too much pressure applied Patch Release
feat(pencil): add 'graphiteWidth' option Minor Feature Release
perf(pencil): remove graphiteWidth option

BREAKING CHANGE: The graphiteWidth option has been removed.
The default graphite width of 10mm is always used for performance reasons.
Major Breaking Release

Tools such as commitizen or commitlint can be used to enforce valid commit messages.

You can use the commitizen extension to add commitizen support to Visual Studio Code.

Basic setup

First, create a Next.js app using Create Next App:



npx create-next-app semantic-release --example with-typescript --use-npm


Enter fullscreen mode Exit fullscreen mode

Or if you prefer to use only React, use Create React App and run:



npx create-react-app semantic-release --template typescript --use-npm


Enter fullscreen mode Exit fullscreen mode

Create a Github repository

https://github.com/new

In this example I called it: semantic-release

Link local repository to Github repository



git remote add origin git@github.com:<username>/<repository-name>.git
git push -u origin master


Enter fullscreen mode Exit fullscreen mode

Github token

A Github token must be created in order for Semantic Release to be able to publish a new release to the Github repository.

You can read here how to create a token for Github. You need to give the token repo scope permissions.

Once you have the token, you have to save it in your repository secrets config:



https://github.com/<username>/<repositoryname>/settings/secrets


Enter fullscreen mode Exit fullscreen mode

Use GH_TOKEN as the secret name.

Install Semantic Release Git and Changelog plugins



npm install --save-dev @semantic-release/git @semantic-release/changelog


Enter fullscreen mode Exit fullscreen mode

These plugins are necessary in order to create a Changelog and publish the new release in Github.

Add Semantic Release config to package.json

Add the following config to your package.json:



  "private": true,
  "plugins": [
    "@semantic-release/commit-analyzer",
    "@semantic-release/release-notes-generator",
    "@semantic-release/changelog",
    "@semantic-release/github",
    "@semantic-release/npm",
    "@semantic-release/git"
  ],
  "release": {
    "prepare": [
      "@semantic-release/changelog",
      "@semantic-release/npm",
      {
        "path": "@semantic-release/git",
        "assets": [
          "package.json",
          "package-lock.json",
          "CHANGELOG.md"
        ],
        "message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
      }
    ]
  }


Enter fullscreen mode Exit fullscreen mode

When you set the private property to true, it skips the publication to the NPM repository, which in this case we don't want to do.

Setup Github Actions

Github Actions will be used to create new releases of your app.

You must store workflows in the .github/workflows directory in the root of your repository. Once you created the directories, add a main.yml file inside with the following config:



name: Semantic release

on:
push:
branches:
- master
jobs:
publish:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup Node.js
uses: actions/setup-node@v1
with:
node-version: 12
- name: Install dependencies
run: npm install
- name: Build app
run: npm run build
- name: Semantic release
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
run: npx semantic-release

Enter fullscreen mode Exit fullscreen mode




Commit and push changes

Use the following commands:



git add .
git commit -m "feat: Add Semantic Release and Github Actions"
git push

Enter fullscreen mode Exit fullscreen mode




Conclusion

Congratulations!

If you followed these steps, you should now have triggered Github Actions:

Github Actions

Also, if you check the release tab in your repository, you'll also see your first published release:

Github Release

And finally, a Changelog file should have been automatically generated and published:

Changelog

You can find the complete code for this guide in this github repository

Top comments (0)