123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- #!/usr/bin/env bash
- # ensure git is latest clean branch
- # require npm user
- # bump package version
- # commit
- # create tag
- # push commit & tag
- # publish
- usage() {
- echo ""
- echo " Usage: bash $0 <major|minor|patch>"
- }
- print() {
- echo "NPM RELEASE: $1"
- }
- run() {
- local version=$1
- # ensure git is ready, fetch before making comparisons
- git fetch
- local local_sha=$(git rev-parse @)
- local remote_sha=$(git rev-parse @{u})
- local base_sha=$(git merge-base @ @{u})
- if [[ -n $(git status --porcelain) ]]; then
- print "Commit or stash you changes before releasing"
- exit 1
- else
- print "Working directory is clean"
- fi
- if [ $local_sha = $remote_sha ]; then
- print "Local branch is up-to-date."
- elif [ $local_sha = $base_sha ]; then
- print "You need to pull changes before you can release."
- exit 1
- elif [ $remote_sha = $base_sha ]; then
- print "You need to push changes before you can release."
- exit 1
- else
- print "Your branch has diverged from the remote, you cannot release."
- exit 1
- fi
- # ensure npm is ready
- local npm_user=$(npm whoami)
- local is_collaborator=$(npm access ls-collaborators | grep ".*$npm_user.*:.*write.*")
- local is_owner=$(npm owner ls | grep ".*$npm_user <.*")
- if ! [[ "$npm_user" ]]; then
- print "You must be logged in to NPM to publish, run \"npm login\" first."
- exit 1
- fi
- if [[ -z "$is_collaborator" ]] && [[ -z "$is_owner" ]]; then
- print "$npm_user is not an NPM owner or collaborator. Request access from:"
- npm owner ls
- exit 1
- fi
- # all checks out, publish
- print "Publishing new $version version as $npm_user."
- print "...npm version $version"
- npm version ${version}
- print "...git push"
- git push
- print "...git push --follow-tags"
- git push --follow-tags
- print "...npm publish"
- npm publish
- }
- case $1 in
- "major" | "minor" | "patch")
- run $1
- ;;
- *)
- usage
- exit 1
- ;;
- esac
|