Bimba.git

commit f1350174289a4a8e30886432f68347d82728c3ed

Author: Adam <git@apiote.xyz>

add release script

 release.sh | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++


diff --git a/release.sh b/release.sh
new file mode 100755
index 0000000000000000000000000000000000000000..325a44dc2886323de3d7aac05fe3740d0defff98
--- /dev/null
+++ b/release.sh
@@ -0,0 +1,103 @@
+#!/bin/sh
+
+. ci.token
+
+releaseType=""
+phase=0
+case "$1" in
+	major|minor|patch) releaseType=$1 ;;
+	-c) phase=1 ;;
+	*)
+		echo "no release type given or -c given"
+		exit 1
+		;;
+esac
+
+if [ $phase -eq 0 ]
+then
+	if [ "$(git status -s | wc -l)" -ne 0 ]
+	then
+		echo "uncommited changes"
+		git status -s
+		echo "continue? [y/N]"
+		read -r decision
+		if [ "$decision" != 'y' ]
+		then
+			echo 'aborting'
+			exit 0
+		fi
+	fi
+
+	if [ "$(git log '@{u}..' | wc -l)" -ne 0 ]
+	then
+		echo "unpushed changes"
+		git status -s
+		echo "continue? [y/N/p]"
+		read -r decision
+		if [ "$decision" != 'y' ]
+		then
+			echo 'aborting'
+			exit 0
+		elif [ "$decision" = 'p' ]
+		then
+			git push
+			sleep 5
+		fi
+	fi
+
+	retry="1"
+	latestCI=$(curl https://ci.apiote.xyz/toys/czwek-commitly/latest 2>/dev/null)
+	latestCIstatus=$(echo "$latestCI" | grep '<h2' | sed 's/<h2[^>]*>//' | sed 's|</h2>||' | grep -oE '[A-Z]+')
+	latestCIstarted=$(echo "$latestCI" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}\.[0-9]+\+[0-9]{2}:[0-9]{2}' | head -n1)
+	while [ "$latestCIstatus" != 'OK' ] && [ "$retry" = "1" ]
+	do
+		echo "latest CI started at $latestCIstarted result is $latestCIstatus, not OK"
+		echo "retry? [y/N]"
+		read -r decision
+		if [ "$decision" != 'y' ]
+		then
+			retry="0"
+			exit 1
+		fi
+	done
+
+	currentVersionName=$(grep 'versionName' app/build.gradle | tr -s ' ' | cut -d ' ' -f3 | tr -d '"')
+	major=$(echo "$currentVersionName" | cut -d '.' -f1)
+	minor=$(echo "$currentVersionName" | cut -d '.' -f2)
+	patch=$(echo "$currentVersionName" | cut -d '.' -f3)
+	currentVersionCode=$(grep 'versionCode' app/build.gradle | tr -s ' ' | cut -d ' ' -f3)
+
+	case $releaseType in
+		major) newVersionName="$((major + 1)).0.0" ;;
+		minor) newVersionName="${major}.$((minor + 1)).0" ;;
+		patch) newVersionName="${major}.${minor}.$((patch + 1))" ;;
+		*) echo "wrong release type given"; exit 1 ;;
+	esac
+	newVersionCode=$((currentVersionCode + 1))
+
+	sed -i "s/versionName \"$currentVersionName\"/versionName \"$newVersionName\"/" app/build.gradle
+	sed -i "s/versionCode $currentVersionCode/versionCode $newVersionCode/" app/build.gradle
+
+	git shortlog "${currentVersionName}..HEAD" >> "metadata/en-US/changelogs/$newVersionCode.txt"
+
+	echo "time to update changelogs"
+elif [ $phase -eq 1 ]
+then
+	newVersionName=$(grep 'versionName' app/build.gradle | tr -s ' ' | cut -d ' ' -f3 | tr -d '"')
+	newVersionCode=$(grep 'versionCode' app/build.gradle | tr -s ' ' | cut -d ' ' -f3)
+	if ! find metadata -type d -name changelogs -print0 | xargs -0 -I{} [ -f "{}/$newVersionCode.txt" ]
+	then
+		echo "not all languages have changelog"
+		exit 1
+	fi
+	git add app/build.gradle
+	git add metadata/
+	git commit -S -m "release version $newVersionName ($newVersionCode)"
+	git push
+	git switch master
+	git merge -S --no-ff -m "merge develop into master for version $newVersionName" develop
+	git tag -s -m "v${newVersionName}"
+	git push origin --tags
+	git switch develop
+	git merge master
+fi