#!/bin/bash set -e mydir="$(dirname "$(realpath "$0")")" source "$mydir/merge_helpers.sh" # https://f-droid.org/en/docs/All_About_Descriptions_Graphics_and_Screenshots/ max_changelog_len=500 should_merge_translations_for_release=0 if [ "$1" = "preview" ]; then preview=1 shift else preview=0 require_clean_git fi if [ "$1" = "test" ]; then release_type="test" previousTestVersionCode="$2" else release_type="normal" fi pushd "$mydir" > /dev/null do_translation_pull=0 if ((should_merge_translations_for_release)); then if [ "$release_type" = "normal" ] && [ "$preview" != 1 ]; then if git remote get-url weblate > /dev/null; then echo "Pulling translations..." translation commit && do_translation_pull=1 || echo "translation tool not found, skipping forced commit" git fetch weblate git merge weblate/sc --no-edit else echo "WARN: remote weblate not found, not updating translations" fi fi fi last_tag=`downstream_latest_tag` # Legacy versioning, based on Element's version codes #calculate_version_code() { # echo "(($versionMajor * 10000 + $versionMinor * 100 + $versionPatch + $scVersion) + 4000000) * 10" | bc #} # # Increase version # versionMajor=`get_prop ext.versionMajor` versionMinor=`get_prop ext.versionMinor` versionPatch=`get_prop ext.versionPatch` scVersion=`get_prop ext.scVersion` previousVersionCode=`grep '^ versionCode ' "$build_gradle" | sed 's|^ versionCode ||'` # Legacy versioning, based on Element's version codes #versionCode=`calculate_version_code` #if [ "$release_type" = "test" ]; then # if [ ! -z "$previousTestVersionCode" ]; then # previousVersionCode=$((previousVersionCode > previousTestVersionCode ? previousVersionCode : previousTestVersionCode)) # fi # versionCode=$((previousVersionCode + 1)) #elif [ "$versionCode" = "$previousVersionCode" ]; then # ((scVersion++)) # echo "Increase downstream version to $scVersion" # versionCode=`calculate_version_code` #else # echo "Upstream version upgrade, no need to change downstream version" #fi # New versioning: versionCode incremented independently of versionName, and always increment scVersion ((scVersion++)) if [ "$release_type" = "test" ]; then if [ ! -z "$previousTestVersionCode" ]; then testVersionCount=$((previousVersionCode > previousTestVersionCode ? 1 : (previousTestVersionCode - previousVersionCode + 1))) previousVersionCode=$((previousVersionCode > previousTestVersionCode ? previousVersionCode : previousTestVersionCode)) else testVersionCount=1 fi versionCode=$((previousVersionCode + 1)) else versionCode=$((previousVersionCode + 10)) # Ensure the new version code is higher than the one of the last test version if [ -f "$HOME/fdroid/sm/data/metadata/de.spiritcroc.riotx.x.yml" ]; then lastTestVersionCode="$(cat "$HOME/fdroid/sm/data/metadata/de.spiritcroc.riotx.x.yml"|grep versionCode|tail -n 1|sed 's|.*: ||')" else read -p "Enter versionCode of last test version: " lastTestVersionCode fi while [ "$lastTestVersionCode" -ge "$versionCode" ]; do versionCode=$((versionCode + 10)) done fi version="$versionMajor.$versionMinor.$versionPatch.sc$scVersion" if [ "$release_type" = "test" ]; then version="$version-test$testVersionCount" fi new_tag="sc_v$version" if ((preview)); then echo "versionCode $versionCode" echo "versionName $version" exit 0 fi set_prop "ext.scVersion" "$scVersion" set_prop "versionCode" "$versionCode" set_prop "versionName" "\"$version\"" # # Generate changelog # git_changelog() { git_args="$1" git log $git_args --pretty=format:"- %s" "$last_tag".. --committer="$(git config user.name)" \ | grep -v 'Automatic revert to unchanged upstream strings' \ | grep -v 'Automatic upstream merge preparation' \ | sed "s|Merge tag '\\(.*\\)' into sc.*|Update codebase to Element \1|" \ | sed "s|Merge tag '\\(.*\\)' into merge.*|Update codebase to Element \1|" \ | grep -v "Merge .*branch" \ | grep -v "Automatic color correction" \ | grep -v "Automatic upstream merge postprocessing" \ | grep -v "Automatic SchildiChat string correction" \ | grep -v 'merge_helpers\|README\|increment_version' \ | grep -v "\\.sh" \ | grep -v "\\.md" \ | grep -v "Update string correction" \ | grep -v "Added translation using Weblate" \ | grep -v "Translated using Weblate" \ | grep -v "weblate/sc" \ | grep -v "\\[.*merge.*\\]" \ | grep -v "Disable Android Auto supports" \ | grep -v "Switch to alternative Schil" \ | grep -v "\\[gplay-release\\]" \ || echo "No significant changes since the last stable release" } changelog_dir=fastlane/metadata/android/en-US/changelogs changelog_file="$changelog_dir/$versionCode.txt" mkdir -p "$changelog_dir" if [ "$release_type" = "test" ]; then git_changelog > "$changelog_file" # Automated changelog is usually too long for F-Droid changelog if [ "$(wc -m "$changelog_file"|sed 's| .*||')" -gt "$max_changelog_len" ]; then current_commit="$(git rev-parse HEAD)" changelog_add="$(echo -e "- ...\n\nAll changes: https://github.com/SchildiChat/SchildiChat-android/commits/$current_commit")" addlen="$(expr length "$changelog_add")" # - 3: probably not necessary, but I don't want to risk a broken link because of some miscalculation allow_len=$((max_changelog_len - addlen - 3)) while [ "$(wc -m "$changelog_file"|sed 's| .*||')" -gt "$allow_len" ]; do content_shortened="$(head -n -1 "$changelog_file")" echo "$content_shortened" > "$changelog_file" done echo "$changelog_add" >> "$changelog_file" fi else git_changelog --reverse > "$changelog_file" fi if [ "$release_type" != "test" ]; then echo "Opening changelog for manual revision..." await_edit "$changelog_file" || true fi while [ "$(wc -m "$changelog_file"|sed 's| .*||')" -gt "$max_changelog_len" ]; do echo "Your changelog is too long, only $max_changelog_len characters allowed!" echo "Currently: $(wc -m "$changelog_file")" read -p "Press enter when changelog is done" done git add -A if [ "$release_type" = "test" ]; then git commit -m "Test version $versionCode" else git commit -m "Increment version" git tag "$new_tag" -m "Version $version ($versionCode) $(cat "$changelog_file")" fi if ((do_translation_pull)); then echo "Updating weblate repo..." translation pull fi popd > /dev/null