Skip to content

Commit

Permalink
no message
Browse files Browse the repository at this point in the history
  • Loading branch information
cotes2020 authored and linkliu committed Apr 10, 2022
1 parent 5166928 commit eb8fc35
Show file tree
Hide file tree
Showing 2 changed files with 130 additions and 130 deletions.
151 changes: 21 additions & 130 deletions tools/bump.sh
Original file line number Diff line number Diff line change
@@ -1,34 +1,24 @@
#!/usr/bin/env bash
#
# How does it work:
#
# 1. Cherry pick the latest commit from default branch
# to the target release branch if the target release branch already existed.
# 1. Bump latest version number to the following files:
#
# 2. Bump latest version number to the following files:
#
# - _sass/jekyll-theme-chirpy.scss
# - _javascript/copyright
# - assets/js/dist/*.js (will be built by gulp later)
# - jekyll-theme-chirpy.gemspec
# - package.json
#
# 3. Create a git-tag on release branch
#
# 4. Build a RubyGems package base on the latest git-tag
# - _sass/jekyll-theme-chirpy.scss
# - _javascript/copyright
# - assets/js/dist/*.js (will be built by gulp later)
# - jekyll-theme-chirpy.gemspec
# - package.json
#
# 2. Then create a commit to automatically save the changes.
#
# Usage:
#
# Run on default branch, if run on other branch requires parameter '-m' (manual mode).
# Run on the default branch or hotfix branch
#
#
# Requires: Git, Gulp, RubyGems
# Requires: Git, Gulp

set -eu

opt_manual=false

ASSETS=(
"_sass/jekyll-theme-chirpy.scss"
"_javascript/copyright"
Expand All @@ -38,10 +28,6 @@ GEM_SPEC="jekyll-theme-chirpy.gemspec"

NODE_META="package.json"

DEFAULT_BRANCH="master"

_working_branch="$(git branch --show-current)"

_check_src() {
if [[ ! -f $1 && ! -d $1 ]]; then
echo -e "Error: Missing file \"$1\"!\n"
Expand All @@ -55,12 +41,6 @@ check() {
exit -1
fi

# ensure working on default branch or running in 'manual' mode
if [[ $_working_branch != $DEFAULT_BRANCH && $opt_manual == "false" ]]; then
echo "Error: This operation must be performed on the 'master' branch or '--manual' mode!"
exit -1
fi

for i in "${!ASSETS[@]}"; do
_check_src "${ASSETS[$i]}"
done
Expand Down Expand Up @@ -98,118 +78,29 @@ bump() {
fi
}

build_gem() {
rm -f ./*.gem
gem build "$GEM_SPEC"
}

release() {
_version="$1"
_major=""
_minor=""
_new_release_branch=false

IFS='.' read -r -a array <<< "$_version"

for elem in "${array[@]}"; do
if [[ -z $_major ]]; then
_major="$elem"
elif [[ -z $_minor ]]; then
_minor="$elem"
else
break
fi
done

_release_branch="$_major-$_minor-stable"

if $opt_manual; then
echo -e "Bump version to $_version (manual release)\n"
bump "$_version"
exit 0
fi

if [[ -z $(git branch -v | grep "$_release_branch") ]]; then
git checkout -b "$_release_branch"
_new_release_branch=true
else
git checkout "$_release_branch"
# cherry-pick the latest commit from master branch to release branch
git cherry-pick "$(git rev-parse $DEFAULT_BRANCH)"
fi

echo -e "Bump version to $_version\n"
bump "$_version"

echo -e "Create tag v$_version\n"
git tag "v$_version"

echo -e "Build the gem pakcage for v$_version\n"
build_gem

# head back to working branch
git checkout "$_working_branch"

if [[ $_working_branch == $DEFAULT_BRANCH ]]; then
if $_new_release_branch; then
git merge "$_release_branch"
fi
fi

}

help() {
echo "Bump new version to Chirpy project"
echo "Usage:"
echo
echo " bash /path/to/bump.sh [options]"
echo
echo "Options:"
echo " -m, --manual Manual relase, bump version only."
echo " -h, --help Print this help information."
}

main() {
check

_latest_tag="$(git describe --tags $(git rev-list --tags --max-count=1))"

echo "Input a version number (hint: latest version is ${_latest_tag:1})"

read _version

if [[ $_version =~ ^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]$ ]]; then

if git tag --list | egrep -q "^v$_version$"; then
echo "Error: version '$_version' already exists"
exit -1
fi
read -p "> " _version

release "$_version"

else
[[ $_version =~ ^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]$ ]] ||
(
echo "Error: Illegal version number: '$_version'"
exit 1
)

echo "Error: Illegal version number: '$_version'"
if git tag --list | egrep -q "^v$_version$"; then
echo "Error: version '$_version' already exists"
exit 1
fi

}
echo -e "Bump version to $_version\n"
bump "$_version"

while (($#)); do
opt="$1"
case $opt in
-m | --manual)
opt_manual=true
shift
;;
-h | --help)
help
exit 0
;;
*)
echo "unknown option '$opt'!"
exit 1
;;
esac
done
}

main
109 changes: 109 additions & 0 deletions tools/release.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#!/usr/bin/env bash
#
# According to the GitLab flow release branching model,
# cherry-pick the last commit on the main branch to the release branch,
# and then create a tag and gem package on the release branch (naming format: 'release/<X.Y>').
#
#
# Usage:
#
# It can be run on main branch, and it should be used after just finishing the last feature in the version plan,
# or just after merging the hotfix to the main branch.
#
# Requires: Git, Gulp

set -eu

GEM_SPEC="jekyll-theme-chirpy.gemspec"

opt_pre=false

help() {
echo "A tool to release new version Chirpy gem"
echo
echo "Usage:"
echo
echo " bash ./tools/release.sh [options]"
echo
echo "Options:"
echo " -p, --preview Enable preview mode, only pakcage, and will not modify the branches"
echo " -h, --help Print this information."
}

check() {
if [[ -n $(git status . -s) ]]; then
echo "Error: Commit unstaged files first, and then run this tool againt."
exit -1
fi

if [[ ! -f $GEM_SPEC ]]; then
echo -e "Error: Missing file \"$GEM_SPEC\"!\n"
exit -1
fi
}

## Remove unnecessary theme settings
cleanup_config() {
cp _config.yml _config.yml.bak
sed -i "s/^img_cdn:.*/img_cdn:/;s/^avatar:.*/avatar:/" _config.yml
}

resume_config() {
mv _config.yml.bak _config.yml
}

release() {
_default_branch="$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')"
_version="$(grep "spec.version" jekyll-theme-chirpy.gemspec | sed 's/.*= "//;s/".*//')" # X.Y.Z
_release_branch="release/${_version%.*}"

if [[ $opt_pre = "false" ]]; then
# Modify the GitLab release branches
if [[ -z $(git branch -v | grep "$_release_branch") ]]; then
# create a new release branch
git checkout -b "$_release_branch"
else
# cherry-pick the latest commit from default branch to release branch
_last_commit="$(git rev-parse "$_default_branch")"
git checkout "$_release_branch"
git cherry-pick "$_last_commit" -m 1
fi

# Create a new tag
echo -e "Create tag v$_version\n"
git tag "v$_version"
fi

# build a gem package
echo -e "Build the gem pakcage for v$_version\n"
cleanup_config
rm -f ./*.gem
gem build "$GEM_SPEC"
resume_config
}

main() {
check
release
}

while (($#)); do
opt="$1"
case $opt in
-p | --preview)
opt_pre=true
shift
;;
-h | --help)
help
exit 0
;;
*)
# unknown option
help
exit 1
;;
esac
done

main

0 comments on commit eb8fc35

Please sign in to comment.