A script for integrating lerna projects with Travis CI/CD.
Install using
# If using npm
npm install -D @k88/lerna-travis
# If using yarn
yarn add -D @k88/lerna-travis
Add the following scripts to your package.json's scripts
:
{
"scripts": {
"release:alpha": "lerna-travis-release alpha && git push --tags",
"release:beta": "lerna-travis-release beta && git push --tags",
"release:public": "lerna-travis-release public && git push --tags",
"publish": "lerna-travis-publish"
}
}
It is recommended to use this script with release-it (see below for more details). If so, use the following scripts
:
{
"scripts": {
"release:alpha": "npm run release alpha $1",
"release:beta": "npm run release beta $1",
"release:public": "npm run release public $1",
"release": "lerna-travis-release $1 $2",
"postrelease": "dotenv release-it -- $(git describe --tags --abbrev=0 | cut -c 2-) --ci",
"publish": "lerna-travis-publish"
}
}
The release:*
scripts are invoked from your local machine; it will create a release tag and push the changes up.
At this point, your CI/CD pipeline should be configured to run to invoke the publish
script that would then perform the following tasks:
- Check publish version (see below for more detail)
- Removes all dist/lib/node_modules directory
- Performs a fresh
npm install
- Runs
npm run lint
- Runs
npm run test
- Runs
npm run build
- Publishes the packages
This script safeguards performing public/beta/alpha
publication based on:
public
may only run onmain
branchbeta
may only run onv\d-beta
branch (i.e.v1-beta
,v2-beta
,v3-beta
, etc)alpha
may only run on non-beta/non-publich branches
The following tags are published:
- The
public
publish pushes alatest
dist tag - The
beta
publish pushes abeta
dist tag - The
alpha
publish pushes aalpha
dist tag
You can pass an optional patch/minor/major
argument to change the version bump. By default, a patch
is published. Some examples are:
# Publishes a patch beta
npm run release:beta
# Publishes a minor public
npm run release:public minor
This repo also provides some basic templating that you can use with release-it.
- Install the following:
npm install auto-changelog dotenv-cli release-it --save-dev
- Create a
.env
file and addGITHUB_AUTH
. You can generate a token by on GitHub - Add a
postrelease
scriptdotenv release-it -- $(git describe --tags --abbrev=0 | cut -c 2-) --ci
- Create a
.release-it.json
and add the following:
{
"git": {
"tag": false,
"requireCleanWorkingDir": false,
"changelog": "npx auto-changelog --stdout --commit-limit false -u --handlebars-setup node_modules/@k88/lerna-travis/templates/releaseItHandlerbar.js --template https://raw.githubusercontent.com/ktalebian/lerna-travis/main/templates/changelog.hbs"
},
"github": {
"release": true,
"tokenRef": "GITHUB_AUTH"
},
"hooks": {
"after:bump": "auto-changelog -v $(git describe --tags --abbrev=0 | cut -c 2-)"
},
"npm": {
"publish": false,
"ignoreVersion": true
}
}
Generate an NPM token from your NPM profile and add it to Travis as NPM_TOKEN
. Here is an example of your .travis.yml
file:
language: node_js
node_js:
- '14'
- '12'
- '10'
- 'node'
- 'lts/*'
before_script:
- npm install --no-package-lock
script:
- npm run lint
- run run test
- npm run build
after_success:
- codecov --token="$CODECOV_TOKEN"
before_deploy:
- npm config set access public
- npm config set registry https://registry.npmjs.org
- npm set //registry.npmjs.org/:_authToken "$NPM_TOKEN"
deploy:
provider: script
script: "npm run publish"
skip_cleanup: true
on:
tags: true
branch: main
repo: YOUR-ORG/YOUR-REPO
node_js: '10'
branches:
- main
- /^v\d+\.\d+\.\d+.*$/