blob: 2a734ac29a42f108ecb97762616d1e2e556d85e8 [file] [log] [blame]
#!/usr/bin/env bash
#
# Copyright 2019 the original author or authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
set -e
export VERSION=$1
export NEXT_VERSION=$2
if [ "${VERSION}x" = "x" ] || [ "${NEXT_VERSION}x" = "x" ]
then
echo "Specify the version: $0 [version] [next-version]"
exit 1
fi
startup_check()
{
# Need to do a git fecth first to download remote changes for us to compare against
git fetch
# Most of this code was taken from the __git_ps1_changes method of https://github.com/markgandolfo/git-bash-completion
local branch_ref
branch_ref=$(git symbolic-ref -q HEAD 2>/dev/null)
if [ -n "$branch_ref" ]
then
local branch_origin
branch_origin=$(git for-each-ref --format='%(upstream:short)' $branch_ref)
if [ -n "$branch_origin" ]
then
local branch
branch=${branch_ref##refs/heads/}
if [ "$branch" != "master" ]
then
echo "Not working on the master - cannot proceed"
exit 1
fi
local unpush
unpush=$(git rev-list $branch_origin..$branch --count)
local unpull
unpull=$(git rev-list $branch..$branch_origin --count)
local staged
staged=$(git diff --staged --name-status | wc -l)
local uncommits
uncommits=$(git status -s -uall --porcelain)
if [[ $unpush -gt 0 ]]; then
echo "There are changes which have not been pushed - cannot proceed. The following commits need to be pushed:"
local unpushed
unpushed=$(git rev-list $branch_origin..$branch)
for commit in $unpushed; do
git --no-pager log --pretty=format:"%H - %an, %ar : %s" -n 1 $commit
done
exit 1
fi
if [[ $unpull -gt 0 ]]; then
echo "There are changes which have not been pulled - cannot proceed. The following commits have been added to master since your last pull:"
local unpulled
unpulled=$(git rev-list $branch..$branch_origin)
for commit in $unpulled; do
git --no-pager log --pretty=format:"%H - %an, %ar : %s" -n 1 $commit
done
exit 1
fi
if [[ $staged -gt 0 ]]; then
local staging
staging=$(git diff --staged --name-status)
echo "There are changes which are staged but have been commited - cannot proceed"
echo $staging
exit 1
fi
local unstaged
unstaged=$(echo "$uncommits" | grep -c "^ [A-Z]") || true
if [[ $unstaged -gt 0 ]]; then
echo "There are unstaged changes - cannot proceed"
echo $(echo "$uncommits" | grep "^ [A-Z]")
exit 1
fi
local untracked
untracked=$(echo "$uncommits" | grep -c "^??") || true
if [[ $untracked -gt 0 ]]; then
echo "There are untracked changes - cannot proceed"
echo $(echo "$uncommits" | grep "^??")
exit 1
fi
fi
else
echo "Working folder isn't a git folder"
exit 1
fi
}
# check
startup_check
# update version
mvn versions:set -DnewVersion=$VERSION
# udpate changelog
docker run -it --rm -v "$(pwd)":/usr/local/src/your-app githubchangeloggenerator/github-changelog-generator \
--user apache --project maven-mvnd --token $GITHUB_TOKEN --future-release $VERSION --exclude-tags early-access
# rebuild native libraries
pushd native
make native-all
popd
# commit
git add -A
git commit -m "[release] Release $VERSION"
# Create and push tag
git tag $VERSION
git push origin $VERSION
# Pushing a tag will trigger the CI to build the release and publish
# the artifacts on https://github.com/apache/maven-mvnd/releases
# update version
mvn versions:set -DnewVersion=$NEXT_VERSION
# commit
git add -A
git commit -m "Next is $NEXT_VERSION"
git push origin master