You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
1.9 KiB
Bash
91 lines
1.9 KiB
Bash
12 months ago
|
#!/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
|