diff --git a/scripts/create-release-branch.sh b/scripts/create-release-branch.sh
index 65b0f72..e1ad4ac 100755
--- a/scripts/create-release-branch.sh
+++ b/scripts/create-release-branch.sh
@@ -39,12 +39,7 @@ function main() {
check_current_branch
create_branch ${BRANCH}
- update_changelog ${VERSION}
- update_package_version ${VERSION}
- update_dependencies_version
- regenerate_package_lock
- build_package
- commit_changes ${VERSION}
+ ./scripts/prepare-release.sh ${VERSION}
finish ${VERSION} ${BRANCH} ${TAG}
}
@@ -52,19 +47,19 @@ function usage() {
local COMMAND=`basename ${0}`
echo -e "${COLOR_SECTION}NAME${COLOR_RESET}
- ${COMMAND} - Prepare for new release
+ ${COMMAND} - Create a branch and prepare for new release
${COLOR_SECTION}SYNOPSIS${COLOR_RESET}
${COLOR_COMMAND_NAME}${COMMAND}${COLOR_RESET} <${COLOR_OPTION}new-version${COLOR_RESET}>
${COLOR_SECTION}DESCRIPTION${COLOR_RESET}
- This command will...
- - create a new branch for release
- - update ${COLOR_FILE}CHANGELOG.md${COLOR_RESET}
- - update package version in ${COLOR_FILE}package.json${COLOR_RESET}
- - update dependencies version in ${COLOR_FILE}package.json${COLOR_RESET}
- - verify
- - ...and commit!
+ This command:
+ - creates a new branch for release
+ - updates ${COLOR_FILE}CHANGELOG.md${COLOR_RESET}
+ - updates package version in ${COLOR_FILE}package.json${COLOR_RESET}
+ - updates dependencies version in ${COLOR_FILE}package.json${COLOR_RESET}
+ - verifies
+ - ...and commits!
${COLOR_OPTION}new-version${COLOR_RESET} must follow \"Semantic Versioning\" .
"
@@ -99,49 +94,6 @@ function create_branch() {
git checkout -b ${BRANCH} ${BASE_BRANCH}
}
-function update_changelog() {
- local VERSION=$1
- local DATE=`date "+%Y-%m-%d"`
- local KEYWORD="Unreleased"
-
- sed -i".bak" -r \
- -e "s/^((##\s+)\[${KEYWORD}\])$/\1\n\n\2[${VERSION}] - ${DATE}/" \
- -e "s/^(\[${KEYWORD}\](.*))(v.*)\.\.\.HEAD$/\1v${VERSION}...HEAD\n[${VERSION}]\2\3...v${VERSION}/" \
- CHANGELOG.md
-}
-
-function update_package_version() {
- local VERSION=$1
-
- sed -i".bak" -r \
- -e "s/(\"version\"\s*:\s*)\".*?\"/\1\"${VERSION}\"/" \
- package.json
-}
-
-function update_dependencies_version() {
- npm ci
- npm run check-updates -- -u
-}
-
-function regenerate_package_lock() {
- rm -rf package-lock.json node_modules
- npm install
-}
-
-function build_package() {
- npm run build
- npm run verify
-}
-
-function commit_changes() {
- local VERSION=$1
-
- rm -rf node_modules
- npm ci --only=production
- git add CHANGELOG.md package.json package-lock.json node_modules lib
- git commit -m "version ${VERSION}"
-}
-
function finish() {
local VERSION=$1
local BRANCH=$2
diff --git a/scripts/prepare-release.sh b/scripts/prepare-release.sh
new file mode 100755
index 0000000..a549057
--- /dev/null
+++ b/scripts/prepare-release.sh
@@ -0,0 +1,112 @@
+#!/bin/bash
+# requires following packages:
+# - git; I believe it's already installed.
+# - sed; GNU sed is preferred. POSIX sed may not work.
+
+set -e
+
+COLOR_ERROR="\e[1;41m"
+COLOR_SECTION="\e[1;34m"
+COLOR_COMMAND_NAME="\e[1;34m"
+COLOR_OPTION="\e[4;36m"
+COLOR_COMMAND="\e[4m"
+COLOR_FILE="\e[1;34m"
+COLOR_BRANCH="\e[1;31m"
+COLOR_INPUT="\e[1;31m"
+COLOR_SELECT="\e[1;32m"
+COLOR_RESET="\e[m"
+
+function main() {
+ if [ $# -lt 1 ]; then
+ usage
+ fi
+
+ cd $(dirname ${0})/..
+
+ local VERSION=$1
+ check_version_format ${VERSION}
+
+ update_changelog ${VERSION}
+ update_package_version ${VERSION}
+ update_dependencies_version
+ regenerate_package_lock
+ build_package
+ commit_changes ${VERSION}
+}
+
+function usage() {
+ local COMMAND=`basename ${0}`
+
+ echo -e "${COLOR_SECTION}NAME${COLOR_RESET}
+ ${COMMAND} - Prepare for new release
+
+${COLOR_SECTION}SYNOPSIS${COLOR_RESET}
+ ${COLOR_COMMAND_NAME}${COMMAND}${COLOR_RESET} <${COLOR_OPTION}new-version${COLOR_RESET}>
+
+${COLOR_SECTION}DESCRIPTION${COLOR_RESET}
+ This command:
+ - updates ${COLOR_FILE}CHANGELOG.md${COLOR_RESET}
+ - updates package version in ${COLOR_FILE}package.json${COLOR_RESET}
+ - updates dependencies version in ${COLOR_FILE}package.json${COLOR_RESET}
+ - verifies
+ - ...and commits!
+
+ ${COLOR_OPTION}new-version${COLOR_RESET} must follow \"Semantic Versioning\" .
+"
+ exit 1
+}
+
+function check_version_format() {
+ if [[ $1 =~ ^[0-9]+\.[0-9]+\.[0-9]+ ]]; then
+ return
+ fi
+
+ echo -e "${COLOR_ERROR}ERROR:${COLOR_RESET} Follow \"Semantic Versioning\" for new version.
+" >&2
+ exit 2
+}
+
+function update_changelog() {
+ local VERSION=$1
+ local DATE=`date "+%Y-%m-%d"`
+ local KEYWORD="Unreleased"
+
+ sed -i".bak" -r \
+ -e "s/^((##\s+)\[${KEYWORD}\])$/\1\n\n\2[${VERSION}] - ${DATE}/" \
+ -e "s/^(\[${KEYWORD}\](.*))(v.*)\.\.\.HEAD$/\1v${VERSION}...HEAD\n[${VERSION}]\2\3...v${VERSION}/" \
+ CHANGELOG.md
+}
+
+function update_package_version() {
+ local VERSION=$1
+
+ sed -i".bak" -r \
+ -e "s/(\"version\"\s*:\s*)\".*?\"/\1\"${VERSION}\"/" \
+ package.json
+}
+
+function update_dependencies_version() {
+ npm ci
+ npm run check-updates -- -u
+}
+
+function regenerate_package_lock() {
+ rm -rf package-lock.json node_modules
+ npm install
+}
+
+function build_package() {
+ npm run build
+ npm run verify
+}
+
+function commit_changes() {
+ local VERSION=$1
+
+ rm -rf node_modules
+ npm ci --only=production
+ git add CHANGELOG.md package.json package-lock.json node_modules lib
+ git commit -m "version ${VERSION}"
+}
+
+main "$@"