dotfiles/bin/release
2013-07-02 00:21:21 +04:00

102 lines
2.6 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# Release next version of product
# Usage: release <VERSION|major|minor|patch>
#
# Require:
# - semver - https://github.com/sekati/semver
# - jq - brew install jq
# Common stuff
RED="$(tput setaf 1)"
CYAN="$(tput setaf 6)"
UNDERLINE="$(tput sgr 0 1)"
NOCOLOR="$(tput sgr0)"
function header() { echo -e "$UNDERLINE$CYAN$1$NOCOLOR\n"; }
function error() { echo -e "$UNDERLINE$RED$1$NOCOLOR"; }
if [ "$1" == "" ]; then
echo "Usage: `basename $0` <VERSION|major|minor|patch>"
exit 1
fi
# Dirty repo?
if [ "$(git status --porcelain 2>/dev/null)" ]; then
error "Repo is dirty."
echo "Pleae commit changes before continue."
echo
git status
exit 1
fi
# Read existing versions
jq_ver=$(find . -maxdepth 1 -name "*.jquery.json" | xargs cat | jq -r ".version")
cmpnt_ver=$(find . -maxdepth 1 -name "bower.json" | xargs cat | jq -r ".version")
pkg_ver=$(find . -maxdepth 1 -name "package.json" | xargs cat | jq -r ".version")
# Non npm package
[ "$pkg_ver" == "0.0.0" ] && pkg_ver=
# Verify current versions
current_ver=
[ -n "$jq_ver" ] && current_ver="$jq_ver"
[ -n "$cmpnt_ver" ] && current_ver="$cmpnt_ver"
[ -n "$pkg_ver" ] && current_ver="$pkg_ver"
[ -z "$current_ver" ] && current_ver="0.0.0"
# Validate current versions and determine new version
if [ "$1" == "major" ] || [ "$1" == "minor" ] || [ "$1" == "patch" ]; then
dont_match="Versions in *.jquery.json, bower.json and package.json dont match."
if [ -n "$jq_ver" ] && [ "$current_ver" != "$jq_ver" ]; then error $dont_match; fi
if [ -n "$cmpnt_ver" ] && [ "$current_ver" != "$cmpnt_ver" ]; then error $dont_match; fi
if [ -n "$pkg_ver" ] && [ "$current_ver" != "$pkg_ver" ]; then error $dont_match; fi
else
new_ver="$1"
fi
if [ -z "$new_ver" ]; then
[ "$1" == "patch" ] && new_ver=$(semver -p $current_ver)
[ "$1" == "minor" ] && new_ver=$(semver -n $current_ver)
[ "$1" == "major" ] && new_ver=$(semver -m $current_ver)
fi
header "Releasing v$new_ver..."
# Update bower.json
if [ -n "$cmpnt_ver" ]; then
sed -i '' "s^$current_ver^$new_ver^" bower.json
fi
# Update package.json
if [ -n "$pkg_ver" ]; then
sed -i '' "s^$current_ver^$new_ver^" package.json
fi
# Update *.jquery.json
if [ -n "$jq_ver" ]; then
find . -maxdepth 1 -name "*.jquery.json" | xargs sed -i '' "s^$current_ver^$new_ver^"
fi
# Build files
[ -f Gruntfile.js ] || [ -f Gruntfile.coffee ] && grunt build
if [ -f src/Gruntfile.js ]; then
pushd src
grunt build
popd
fi
# Commit changed files
git commit -am "v$new_ver"
git push origin
# Create tag
git tag "v$new_ver"
git push origin --tags
# Publish npm package
if [ -n "$pkg_ver" ]; then
npm publish
fi
echo "Done."