From 52a546c2831665f535da07571ea119caddbbda4e Mon Sep 17 00:00:00 2001
From: Benoit Marty <benoit@matrix.org>
Date: Wed, 23 Nov 2022 13:12:13 +0100
Subject: [PATCH] Add new release script.

---
 tools/import_from_element.sh |   3 +
 tools/releaseScript.sh       | 200 +++++++++++++++++++++++++++++++++++
 2 files changed, 203 insertions(+)
 create mode 100755 tools/releaseScript.sh

diff --git a/tools/import_from_element.sh b/tools/import_from_element.sh
index 3a7c221a..cebff08b 100755
--- a/tools/import_from_element.sh
+++ b/tools/import_from_element.sh
@@ -2,6 +2,9 @@
 
 ### This script import SDK code from Element Android
 
+printf "Please run ./tools/releaseScript.sh now!\n"
+exit 1
+
 set -e
 
 elementAndroidPath="../element-android"
diff --git a/tools/releaseScript.sh b/tools/releaseScript.sh
new file mode 100755
index 00000000..087e583c
--- /dev/null
+++ b/tools/releaseScript.sh
@@ -0,0 +1,200 @@
+#!/usr/bin/env bash
+
+#
+# Copyright (c) 2022 New Vector Ltd
+#
+# 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.
+#
+
+# Ignore any error to not stop the script
+set +e
+
+printf "\n"
+printf "================================================================================\n"
+printf "|                    Welcome to the release script!                            |\n"
+printf "================================================================================\n"
+
+# Guessing version to propose a default version
+printf "\nGuessing the version...\n"
+# Get the version from the latest main from Element
+# curl -s  https://raw.githubusercontent.com/vector-im/element-android/main/matrix-sdk-android/build.gradle |grep "SDK_VERSION" |cut -d "\"" -f7|cut -d "\\" -f1
+versionCandidate=`curl -s https://raw.githubusercontent.com/vector-im/element-android/main/matrix-sdk-android/build.gradle | grep SDK_VERSION | cut -d "\"" -f7 | cut -d "\\\\" -f1`
+
+printf "\n"
+read -p "Please enter the release version (example: ${versionCandidate}). Just press enter if ${versionCandidate} is correct. " version
+version=${version:-${versionCandidate}}
+
+printf "\n================================================================================\n"
+printf "Ensuring main and develop branches are up to date...\n"
+
+git checkout main
+git pull
+git checkout develop
+git pull
+
+printf "\n================================================================================\n"
+printf "Starting the release ${version}\n"
+git flow release start ${version}
+
+# Note: in case the release is already started and the script is started again, checkout the release branch again.
+ret=$?
+if [[ $ret -ne 0 ]]; then
+  printf "Mmh, it seems that the release is already started. Checking out the release branch...\n"
+  git checkout "release/${version}"
+fi
+
+printf "\n================================================================================\n"
+printf "Updating version to ${version}\n"
+
+cp ./gradle.properties ./gradle.properties.bak
+sed "s/VERSION_NAME=.*$/VERSION_NAME=${version}/" ./gradle.properties.bak > ./gradle.properties
+rm ./gradle.properties.bak
+git commit -a -m "Setting version for the release ${version}"
+
+printf "\n================================================================================\n"
+printf "Downloading Element Android source ${version}...\n"
+
+curl  https://github.com/vector-im/element-android/archive/refs/tags/v${version}.zip -i -L -o ./tmp/release.zip
+
+printf "\n================================================================================\n"
+printf "Unzipping Element Android source ${version}...\n"
+
+# Delete existing path if any
+if [[ -e "./tmp/element-android-${version}" ]]; then
+  rm -rf ./tmp/element-android-${version}
+fi
+
+unzip -q ./tmp/release.zip -d ./tmp/
+
+printf "\n================================================================================\n"
+printf "Importing the module matrix-sdk-android...\n"
+elementAndroidPath="./tmp/element-android-${version}"
+# Delete existing path
+rm -rf ./matrix-sdk-android
+cp -r ${elementAndroidPath}/matrix-sdk-android .
+
+# Copy other files
+cp -r ${elementAndroidPath}/gradle/wrapper/gradle-wrapper.properties ./gradle/wrapper/gradle-wrapper.properties
+cp -r ${elementAndroidPath}/dependencies.gradle .
+cp -r ${elementAndroidPath}/dependencies_groups.gradle .
+
+# Add all changes to git
+git add -A
+
+## Check the number of diff in the file ./matrix-sdk-android/build.gradle. If 2 we can revert it, else it will have to be done manually
+nbDiff=`git diff --staged ./matrix-sdk-android/build.gradle | grep "@@" | wc -l | cut -d " " -f8`
+if [[ ${nbDiff} -ne 2 ]]; then
+  printf "\n================================================================================\n"
+  read -p "Cannot reset file ./matrix-sdk-android/build.gradle automatically. Please check the diff, and restore some part. Press enter when it's done "
+else
+  git reset ./matrix-sdk-android/build.gradle
+  git restore ./matrix-sdk-android/build.gradle
+fi
+
+# Add all changes to git
+git add -A
+
+printf "\n================================================================================\n"
+printf "Building the library.\n"
+
+# Do not ignore errors
+set -e
+# Build the library
+./gradlew clean assembleRelease --stacktrace
+set +e
+
+printf "\n================================================================================\n"
+read -p "OK, I will commit the changes, press Enter to continue "
+git commit -a -m "Import v${version} from Element Android"
+
+printf "\n================================================================================\n"
+printf "Preparing CHANGES.md file. You can copy this block at the top of the file, and import the part about SDK change from Element Android. Do not commit.\n\n"
+
+date=`date +%Y-%m-%d`
+printf "Changes in Matrix-SDK v${version} (${date})\n"
+printf "=========================================\n"
+printf "\n"
+printf "Imported from Element ${version}. (https://github.com/vector-im/element-android/releases/tag/v${version})\n"
+printf "\n"
+printf "SDK API changes ⚠️\n"
+# TIL
+printf -- "------------------\n"
+printf "TODO COPY PASTE BLOCK FROM ELEMENT AT https://raw.githubusercontent.com/vector-im/element-android/main/CHANGES.md\n"
+printf "\n"
+printf "\n"
+
+read -p "Press Enter when it's done, I will do the commit. "
+
+printf "Committing...\n"
+git commit -a -m "Changelog for version ${version}"
+
+printf "\n================================================================================\n"
+printf "OK, finishing the release...\n"
+git flow release finish "${version}"
+
+printf "\n================================================================================\n"
+read -p "Done, push the branch 'main' and the new tag (yes/no) default to yes? " doPush
+doPush=${doPush:-yes}
+
+if [ ${doPush} == "yes" ]; then
+  printf "Pushing branch 'main' and tag 'v${version}'...\n"
+  git push origin main
+  git push origin "v${version}"
+else
+    printf "Not pushing, do not forget to push manually!\n"
+fi
+
+printf "\n================================================================================\n"
+printf "Checking out develop...\n"
+git checkout develop
+
+printf "\n================================================================================\n"
+read -p "Done, push the branch 'develop' (yes/no) default to yes? (A rebase may be necessary in case develop got new commits)" doPush
+doPush=${doPush:-yes}
+
+if [ ${doPush} == "yes" ]; then
+  printf "Pushing branch 'develop'...\n"
+  git push origin develop
+else
+    printf "Not pushing, do not forget to push manually!\n"
+fi
+
+printf "\n================================================================================\n"
+printf "Going back to main branch to release the library...\n"
+git checkout main
+
+printf "\n================================================================================\n"
+printf "Building and releasing the library...\n"
+./gradlew clean publish --no-daemon --no-parallel
+./gradlew closeAndReleaseRepository
+
+printf "\n================================================================================\n"
+printf "Downloading the aar from MavenCentral (from https://repo1.maven.org/maven2/org/matrix/android/matrix-android-sdk2/)...\n"
+
+aarFile="matrix-android-sdk2-${version}.aar"
+command="curl --fail https://repo1.maven.org/maven2/org/matrix/android/matrix-android-sdk2/${version}/${aarFile} -s -i -L -o ./tmp/${aarFile}"
+${command}
+while [[ $? -ne 0 ]]
+do
+  printf "Not available yet, waiting 30s and retrying...\n"
+  sleep 30
+  ${command}
+done
+
+printf "\n================================================================================\n"
+read -p "Create the release on gitHub from the tag https://github.com/matrix-org/matrix-android-sdk2/tags, copy paste the block from the file CHANGES.md. Press enter when it's done."
+read -p "Add the aar ${aarFile} to the GitHub release. It has been downloaded in the folder ./tmp. Press enter when it's done."
+
+printf "\n================================================================================\n"
+printf "Congratulation! Kudos for using this script! Have a nice day!\n"
+printf "================================================================================\n"
-- 
GitLab