Skip to content

Instantly share code, notes, and snippets.

@Judas
Created August 1, 2016 15:46
Show Gist options
  • Save Judas/2f235fc482c5e8cae33e20f8f112f115 to your computer and use it in GitHub Desktop.
Save Judas/2f235fc482c5e8cae33e20f8f112f115 to your computer and use it in GitHub Desktop.
Release script for Android module (git-flow, semver, dependencies...)
#!/bin/sh
function printHelp {
echo ""
echo "USAGE: release <command>"
echo " help Shows this help message."
echo " major Releases a major version"
echo " minor Releases a minor version"
echo " patch Releases a patch version"
}
TYPE_MAJOR=0
TYPE_MINOR=1
TYPE_PATCH=2
type=${TYPE_PATCH}
case $1 in
"major")
type=${TYPE_MAJOR}
;;
"minor")
type=${TYPE_MINOR}
;;
"patch")
type=${TYPE_PATCH}
;;
"help")
printHelp
exit 0
;;
*)
echo "Unknown argument"
printHelp
exit 0
;;
esac
echo "WARNING - This will remove all your current uncommited/unstashed modifications."
echo "Proceed anyway ? [y/n]"
read -s -n 1 key
case $key in
y) ;;
*) exit 0
esac
echo "=> Cleaning repository..."
git clean -fxdq
git checkout . -q
echo "=> Updating develop..."
git checkout develop -q
git pull origin develop -q
echo "=> Updating master..."
git checkout master -q
git pull origin master -q
echo "=> Computing new semver..."
lastVersion=`git tag -l v* --sort -v:refname | sed -n 1p`
lastVersion="${lastVersion:1}"
versionArray=( ${lastVersion//./ } )
if [ ${type} = ${TYPE_MAJOR} ]
then
((versionArray[0]++))
versionArray[1]=0
versionArray[2]=0
fi
if [ ${type} = ${TYPE_MINOR} ]
then
((versionArray[1]++))
versionArray[2]=0
fi
if [ ${type} = ${TYPE_PATCH} ]
then
((versionArray[2]++))
fi
newVersion="${versionArray[0]}.${versionArray[1]}.${versionArray[2]}"
echo "${lastVersion} => ${newVersion}"
echo "=> Starting release..."
git flow release start v${newVersion}
echo "=> Updating build number..."
module=${PWD##*/}
sed -i '' "s/versionName '${lastVersion}'/versionName '${newVersion}'/" ${module}/build.gradle
code=`cat ${module}/build.gradle | sed -e '/versionCode/!d' | sed -e "s/\(.*\)versionCode \([0-9]\{1,\}\)\(.*\)/\2/g"`
((code++))
sed -i '' "s/versionCode \([0-9]\{1,\}\)/versionCode ${code}/g" ${module}/build.gradle
echo "=> Updating to latest dependencies..."
cp ${module}/build.gradle ${module}/build.gradle.tmp
while read line ; do
if [[ ${line} == *"'com.iadvize.android."* ]] ; then
# Get dependency module name
depName=`echo "${line}" | sed "s/\(.*\)'com.iadvize.android.\(.*\):\(.*\):\(.*\)@aar'\(.*\)/\3/g"`
# Get latest dependency version
curl -s -u user:password -X GET "https://...path to artifactory.../com/iadvize/android/release/${depName}/maven-metadata.xml" > data
while read dataLine ; do
if [[ ${dataLine} == *"latest"* ]] ; then
depVersion=`echo "${dataLine}" | sed -e "s/<latest>//g" | sed -e "s/<\/latest>//g"`
break
fi
done < data
rm data
# Update dependency version into build.gradle
sed -i '' "s/\(.*\)'com.iadvize.android.\(.*\):${depName}:\(.*\)@aar'\(.*\)/\1'com.iadvize.android.\2:${depName}:${depVersion}@aar'\4/" ${module}/build.gradle
fi
done < ${module}/build.gradle.tmp
rm ${module}/build.gradle.tmp
echo "=> Committing..."
git add ${module}/build.gradle
git commit -m 'misc(build): Updating dependencies & build number' --quiet
echo "Finishing release..."
git flow release finish v${newVersion}
echo "Pushing..."
git push origin develop
git push origin master
git push --tags
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment