Learn how to setup versioning with in your CI/CD workflow
Benefits
- Easy rollback to last working release
- Automatic release workflow
Setup
npm install @changesets/cli && npx changeset init
Make sure your package.json includes the version field i.e version: "0.0.0" and private: true.
Then set privatePackages to { version: true, tag: true } in your .changesets/config.json
To create a version bump
npx changeset
which should prompt you to specify the type of change
- patch - when you fix issues with an exiting release
- minor - when you modify features that do not impact application function
- major - when you've made changes that add new features or change exiting application functionality
See here for more information on semantic versioning
You'll then be prompted to provide a message for the change.
To create a new version
npx changeset version
To publish the new version
npx changeset publish
Release setup
We'll use the changeset github action. I'll be using firebase for hosting in this example.
Github action
name: Release to Firebase
"on":
  push:
    branches:
      - master
jobs:
  build_and_deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - name: Install dependencies
        uses: ./.github/actions/setup
      # run tests before release
      - run: pnpm test
      - name: create release pull request
        id: changesets
        uses: changesets/action@v1
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      # This step can be replace with your build script i.e `npm run build`, then push to your hosting provider
      - uses: FirebaseExtended/action-hosting-deploy@v0
        # only create a release to firebase if we have changes
        if: steps.changesets.outputs.hasChangesets == 'true'
        env:
          FIREBASE_CLI_EXPERIMENTS: webframeworks
        with:
          repoToken: "${{ secrets.GITHUB_TOKEN }}"
          firebaseServiceAccount: "${{ secrets.FIREBASE_SERVICE_ACCOUNT }}"
          channelId: live
          projectId: <project-id>
This step does the following:
- triggers your github action when you merge to master
- creates a release PR based on your changesets, which when merged pushes to your desired hosting provider
- then creates a tag that's pushed to github.
cover image by Roman Synkevych on Unsplash
 
 
              
 
    
Top comments (0)