Fix shellcheck issue on release.sh

This commit is contained in:
Benoit Marty 2025-06-30 12:04:25 +02:00 committed by Benoit Marty
parent 6bec767808
commit dc5aae831f

View file

@ -68,7 +68,7 @@ buildToolsVersion="35.0.0"
buildToolsPath="${androidHome}/build-tools/${buildToolsVersion}" buildToolsPath="${androidHome}/build-tools/${buildToolsVersion}"
if [[ ! -d ${buildToolsPath} ]]; then if [[ ! -d ${buildToolsPath} ]]; then
printf "Fatal: ${buildToolsPath} folder not found, ensure that you have installed the SDK version ${buildToolsVersion}.\n" printf "Fatal: %s folder not found, ensure that you have installed the SDK version %s.\n" "${buildToolsPath}" "${buildToolsVersion}"
exit 1 exit 1
fi fi
@ -100,7 +100,7 @@ versionYearCandidate=$(date +%y)
currentVersionMonth=$(grep "val versionMonth" ${versionsFile} | cut -d " " -f6) currentVersionMonth=$(grep "val versionMonth" ${versionsFile} | cut -d " " -f6)
# Get current month on 2 digits # Get current month on 2 digits
versionMonthCandidate=$(date +%m) versionMonthCandidate=$(date +%m)
versionMonthCandidateNoLeadingZero=$(echo ${versionMonthCandidate} | sed 's/^0//') versionMonthCandidateNoLeadingZero=${versionMonthCandidate/#0/}
currentVersionReleaseNumber=$(grep "val versionReleaseNumber" ${versionsFile} | cut -d " " -f6) currentVersionReleaseNumber=$(grep "val versionReleaseNumber" ${versionsFile} | cut -d " " -f6)
# if the current month is the same as the current version, we increment the release number, else we reset it to 0 # if the current month is the same as the current version, we increment the release number, else we reset it to 0
if [[ ${currentVersionMonth} -eq ${versionMonthCandidateNoLeadingZero} ]]; then if [[ ${currentVersionMonth} -eq ${versionMonthCandidateNoLeadingZero} ]]; then
@ -110,17 +110,17 @@ else
fi fi
versionCandidate="${versionYearCandidate}.${versionMonthCandidate}.${versionReleaseNumberCandidate}" versionCandidate="${versionYearCandidate}.${versionMonthCandidate}.${versionReleaseNumberCandidate}"
read -p "Please enter the release version (example: ${versionCandidate}). Format must be 'YY.MM.x' or 'YY.MM.xy'. Just press enter if ${versionCandidate} is correct. " version read -r -p "Please enter the release version (example: ${versionCandidate}). Format must be 'YY.MM.x' or 'YY.MM.xy'. Just press enter if ${versionCandidate} is correct. " version
version=${version:-${versionCandidate}} version=${version:-${versionCandidate}}
# extract year, month and release number for future use # extract year, month and release number for future use
versionYear=$(echo "${version}" | cut -d "." -f1) versionYear=$(echo "${version}" | cut -d "." -f1)
versionMonth=$(echo "${version}" | cut -d "." -f2) versionMonth=$(echo "${version}" | cut -d "." -f2)
versionMonthNoLeadingZero=$(echo ${versionMonth} | sed 's/^0//') versionMonthNoLeadingZero=${versionMonth/#0/}
versionReleaseNumber=$(echo "${version}" | cut -d "." -f3) versionReleaseNumber=$(echo "${version}" | cut -d "." -f3)
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "Starting the release ${version}\n" printf "Starting the release %s\n" "${version}"
git flow release start "${version}" git flow release start "${version}"
# Note: in case the release is already started and the script is started again, checkout the release branch again. # Note: in case the release is already started and the script is started again, checkout the release branch again.
@ -147,7 +147,7 @@ fastlaneFile="20${versionYear}${versionMonth}${versionReleaseNumber2Digits}0.txt
fastlanePathFile="./fastlane/metadata/android/en-US/changelogs/${fastlaneFile}" fastlanePathFile="./fastlane/metadata/android/en-US/changelogs/${fastlaneFile}"
printf "Main changes in this version: TODO.\nFull changelog: https://github.com/element-hq/element-x-android/releases" > "${fastlanePathFile}" printf "Main changes in this version: TODO.\nFull changelog: https://github.com/element-hq/element-x-android/releases" > "${fastlanePathFile}"
read -p "I have created the file ${fastlanePathFile}, please edit it and press enter to continue. " read -r -p "I have created the file ${fastlanePathFile}, please edit it and press enter to continue. "
git add "${fastlanePathFile}" git add "${fastlanePathFile}"
git commit -a -m "Adding fastlane file for version ${version}" git commit -a -m "Adding fastlane file for version ${version}"
@ -156,11 +156,11 @@ printf "OK, finishing the release...\n"
git flow release finish "${version}" git flow release finish "${version}"
printf "\n================================================================================\n" printf "\n================================================================================\n"
read -p "Done, push the branch 'main' and the new tag (yes/no) default to yes? " doPush read -r -p "Done, push the branch 'main' and the new tag (yes/no) default to yes? " doPush
doPush=${doPush:-yes} doPush=${doPush:-yes}
if [ "${doPush}" == "yes" ]; then if [ "${doPush}" == "yes" ]; then
printf "Pushing branch 'main' and tag 'v${version}'...\n" printf "Pushing branch 'main' and tag 'v%s'...\n" "${version}"
git push origin main git push origin main
git push origin "v${version}" git push origin "v${version}"
else else
@ -173,7 +173,7 @@ git checkout develop
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "The GitHub action https://github.com/element-hq/element-x-android/actions/workflows/release.yml?query=branch%%3Amain should have start a new run.\n" printf "The GitHub action https://github.com/element-hq/element-x-android/actions/workflows/release.yml?query=branch%%3Amain should have start a new run.\n"
read -p "Please enter the url of the run, no need to wait for it to complete (example: https://github.com/element-hq/element-x-android/actions/runs/9065756777): " runUrl read -r -p "Please enter the url of the run, no need to wait for it to complete (example: https://github.com/element-hq/element-x-android/actions/runs/9065756777): " runUrl
targetPath="./tmp/Element/${version}" targetPath="./tmp/Element/${version}"
@ -190,7 +190,7 @@ while [[ $ret -ne 0 ]]; do
ret=$? ret=$?
if [[ $ret -ne 0 ]]; then if [[ $ret -ne 0 ]]; then
read -p "Error while downloading the artifacts. You may want to fix the issue and retry. Retry (yes/no) default to yes? " doRetry read -r -p "Error while downloading the artifacts. You may want to fix the issue and retry. Retry (yes/no) default to yes? " doRetry
doRetry=${doRetry:-yes} doRetry=${doRetry:-yes}
if [ "${doRetry}" == "no" ]; then if [ "${doRetry}" == "no" ]; then
exit 1 exit 1
@ -225,7 +225,7 @@ cp "${fdroidTargetPath}"/app-fdroid-arm64-v8a-release.apk \
--ks-pass pass:"${keyStorePassword}" \ --ks-pass pass:"${keyStorePassword}" \
--ks-key-alias elementx \ --ks-key-alias elementx \
--key-pass pass:"${keyPassword}" \ --key-pass pass:"${keyPassword}" \
--min-sdk-version ${minSdkVersion} \ --min-sdk-version "${minSdkVersion}" \
"${fdroidTargetPath}"/app-fdroid-arm64-v8a-release-signed.apk "${fdroidTargetPath}"/app-fdroid-arm64-v8a-release-signed.apk
cp "${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release.apk \ cp "${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release.apk \
@ -237,7 +237,7 @@ cp "${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release.apk \
--ks-pass pass:"${keyStorePassword}" \ --ks-pass pass:"${keyStorePassword}" \
--ks-key-alias elementx \ --ks-key-alias elementx \
--key-pass pass:"${keyPassword}" \ --key-pass pass:"${keyPassword}" \
--min-sdk-version ${minSdkVersion} \ --min-sdk-version "${minSdkVersion}" \
"${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release-signed.apk "${fdroidTargetPath}"/app-fdroid-armeabi-v7a-release-signed.apk
cp "${fdroidTargetPath}"/app-fdroid-x86-release.apk \ cp "${fdroidTargetPath}"/app-fdroid-x86-release.apk \
@ -249,7 +249,7 @@ cp "${fdroidTargetPath}"/app-fdroid-x86-release.apk \
--ks-pass pass:"${keyStorePassword}" \ --ks-pass pass:"${keyStorePassword}" \
--ks-key-alias elementx \ --ks-key-alias elementx \
--key-pass pass:"${keyPassword}" \ --key-pass pass:"${keyPassword}" \
--min-sdk-version ${minSdkVersion} \ --min-sdk-version "${minSdkVersion}" \
"${fdroidTargetPath}"/app-fdroid-x86-release-signed.apk "${fdroidTargetPath}"/app-fdroid-x86-release-signed.apk
cp "${fdroidTargetPath}"/app-fdroid-x86_64-release.apk \ cp "${fdroidTargetPath}"/app-fdroid-x86_64-release.apk \
@ -261,7 +261,7 @@ cp "${fdroidTargetPath}"/app-fdroid-x86_64-release.apk \
--ks-pass pass:"${keyStorePassword}" \ --ks-pass pass:"${keyStorePassword}" \
--ks-key-alias elementx \ --ks-key-alias elementx \
--key-pass pass:"${keyPassword}" \ --key-pass pass:"${keyPassword}" \
--min-sdk-version ${minSdkVersion} \ --min-sdk-version "${minSdkVersion}" \
"${fdroidTargetPath}"/app-fdroid-x86_64-release-signed.apk "${fdroidTargetPath}"/app-fdroid-x86_64-release-signed.apk
printf "\n================================================================================\n" printf "\n================================================================================\n"
@ -277,10 +277,10 @@ printf "File app-fdroid-x86_64-release-signed.apk:\n"
"${buildToolsPath}"/aapt dump badging "${fdroidTargetPath}"/app-fdroid-x86_64-release-signed.apk | grep package "${buildToolsPath}"/aapt dump badging "${fdroidTargetPath}"/app-fdroid-x86_64-release-signed.apk | grep package
printf "\n" printf "\n"
read -p "Does it look correct? Press enter when it's done. " read -r -p "Does it look correct? Press enter when it's done. "
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "The APKs in ${fdroidTargetPath} have been signed!\n" printf "The APKs in %s have been signed!\n" "${fdroidTargetPath}"
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "Unzipping the Gplay artifact...\n" printf "Unzipping the Gplay artifact...\n"
@ -292,7 +292,7 @@ unsignedBundlePath="${gplayTargetPath}/app-gplay-release.aab"
signedBundlePath="${gplayTargetPath}/app-gplay-release-signed.aab" signedBundlePath="${gplayTargetPath}/app-gplay-release-signed.aab"
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "Signing file ${unsignedBundlePath} with build-tools version ${buildToolsVersion} for min SDK version ${minSdkVersion}...\n" printf "Signing file %s with build-tools version %s for min SDK version %s...\n" "${unsignedBundlePath}" "${buildToolsVersion}" "${minSdkVersion}"
cp "${unsignedBundlePath}" "${signedBundlePath}" cp "${unsignedBundlePath}" "${signedBundlePath}"
@ -302,7 +302,7 @@ cp "${unsignedBundlePath}" "${signedBundlePath}"
--ks-pass pass:"${keyStorePassword}" \ --ks-pass pass:"${keyStorePassword}" \
--ks-key-alias elementx \ --ks-key-alias elementx \
--key-pass pass:"${keyPassword}" \ --key-pass pass:"${keyPassword}" \
--min-sdk-version ${minSdkVersion} \ --min-sdk-version "${minSdkVersion}" \
"${signedBundlePath}" "${signedBundlePath}"
printf "\n================================================================================\n" printf "\n================================================================================\n"
@ -314,13 +314,13 @@ printf "Version name: "
bundletool dump manifest --bundle="${signedBundlePath}" --xpath=/manifest/@android:versionName bundletool dump manifest --bundle="${signedBundlePath}" --xpath=/manifest/@android:versionName
printf "\n" printf "\n"
read -p "Does it look correct? Press enter to continue. " read -r -p "Does it look correct? Press enter to continue. "
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "The file ${signedBundlePath} has been signed and can be uploaded to the PlayStore!\n" printf "The file %s has been signed and can be uploaded to the PlayStore!\n" "${signedBundlePath}"
printf "\n================================================================================\n" printf "\n================================================================================\n"
read -p "Do you want to build the APKs from the app bundle? You need to do this step if you want to install the application to your device. (yes/no) default to no " doBuildApks read -r -p "Do you want to build the APKs from the app bundle? You need to do this step if you want to install the application to your device. (yes/no) default to no " doBuildApks
doBuildApks=${doBuildApks:-no} doBuildApks=${doBuildApks:-no}
if [ "${doBuildApks}" == "yes" ]; then if [ "${doBuildApks}" == "yes" ]; then
@ -329,12 +329,12 @@ if [ "${doBuildApks}" == "yes" ]; then
--ks=./app/signature/debug.keystore --ks-pass=pass:android --ks-key-alias=androiddebugkey --key-pass=pass:android \ --ks=./app/signature/debug.keystore --ks-pass=pass:android --ks-key-alias=androiddebugkey --key-pass=pass:android \
--overwrite --overwrite
read -p "Do you want to install the application to your device? Make sure there is one (and only one!) connected device first. (yes/no) default to yes " doDeploy read -r -p "Do you want to install the application to your device? Make sure there is one (and only one!) connected device first. (yes/no) default to yes " doDeploy
doDeploy=${doDeploy:-yes} doDeploy=${doDeploy:-yes}
if [ "${doDeploy}" == "yes" ]; then if [ "${doDeploy}" == "yes" ]; then
printf "Installing apk for your device...\n" printf "Installing apk for your device...\n"
bundletool install-apks --apks="${gplayTargetPath}"/elementx.apks bundletool install-apks --apks="${gplayTargetPath}"/elementx.apks
read -p "Please run the application on your phone to check that the upgrade went well. Press enter to continue. " read -r -p "Please run the application on your phone to check that the upgrade went well. Press enter to continue. "
else else
printf "APK will not be deployed!\n" printf "APK will not be deployed!\n"
fi fi
@ -346,14 +346,14 @@ printf "\n======================================================================
printf "Create the open testing release on GooglePlay.\n" printf "Create the open testing release on GooglePlay.\n"
printf "On GooglePlay console, go the the open testing section and click on \"Create new release\" button, then:\n" printf "On GooglePlay console, go the the open testing section and click on \"Create new release\" button, then:\n"
printf " - upload the file ${signedBundlePath}.\n" printf " - upload the file %s.\n" "${signedBundlePath}"
printf " - copy the release note from the fastlane file.\n" printf " - copy the release note from the fastlane file.\n"
printf " - download the universal APK, to be able to provide it to the GitHub release: click on the right arrow next to the \"App bundle\", then click on the \"Download\" tab, and download the \"Signed, universal APK\".\n" printf " - download the universal APK, to be able to provide it to the GitHub release: click on the right arrow next to the \"App bundle\", then click on the \"Download\" tab, and download the \"Signed, universal APK\".\n"
printf " - submit the release.\n" printf " - submit the release.\n"
read -p "Press enter to continue. " read -r -p "Press enter to continue. "
printf "You can then go to \"Publishing overview\" and send the new release for a review by Google.\n" printf "You can then go to \"Publishing overview\" and send the new release for a review by Google.\n"
read -p "Press enter to continue. " read -r -p "Press enter to continue. "
printf "\n================================================================================\n" printf "\n================================================================================\n"
githubCreateReleaseLink="https://github.com/element-hq/element-x-android/releases/new?tag=v${version}&title=Element%20X%20Android%20v${version}" githubCreateReleaseLink="https://github.com/element-hq/element-x-android/releases/new?tag=v${version}&title=Element%20X%20Android%20v${version}"
@ -362,22 +362,22 @@ printf -- "Open this link: %s\n" "${githubCreateReleaseLink}"
printf "Then\n" printf "Then\n"
printf " - Click on the 'Generate releases notes' button.\n" printf " - Click on the 'Generate releases notes' button.\n"
printf " - Optionally reorder items and fix typos.\n" printf " - Optionally reorder items and fix typos.\n"
printf " - Add the file ${signedBundlePath} to the GitHub release.\n" printf " - Add the file %s to the GitHub release.\n" "${signedBundlePath}"
printf " - Add the universal APK, downloaded from the GooglePlay console to the GitHub release.\n" printf " - Add the universal APK, downloaded from the GooglePlay console to the GitHub release.\n"
printf " - Add the 4 signed APKs for F-Droid, located at ${fdroidTargetPath} to the GitHub release.\n" printf " - Add the 4 signed APKs for F-Droid, located at %s to the GitHub release.\n" "${fdroidTargetPath}"
read -p ". Press enter to continue. " read -r -p ". Press enter to continue. "
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "Update the project release notes:\n\n" printf "Update the project release notes:\n\n"
read -p "Copy the content of the release note generated by GitHub to the file CHANGES.md and press enter to commit the change. " read -r -p "Copy the content of the release note generated by GitHub to the file CHANGES.md and press enter to commit the change. "
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "Committing...\n" printf "Committing...\n"
git commit -a -m "Changelog for version ${version}" git commit -a -m "Changelog for version ${version}"
printf "\n================================================================================\n" 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 read -r -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} doPush=${doPush:-yes}
if [ "${doPush}" == "yes" ]; then if [ "${doPush}" == "yes" ]; then
@ -390,12 +390,12 @@ fi
printf "\n================================================================================\n" printf "\n================================================================================\n"
printf "Message for the Android internal room:\n\n" printf "Message for the Android internal room:\n\n"
message="@room Element X Android ${version} is ready to be tested. You can get it from https://github.com/element-hq/element-x-android/releases/tag/v${version}. You can install the universal APK. If you want to install the application from the app bundle, you can follow instructions [here](https://github.com/element-hq/element-x-android/blob/develop/docs/install_from_github_release.md). Please report any feedback. Thanks!" message="@room Element X Android ${version} is ready to be tested. You can get it from https://github.com/element-hq/element-x-android/releases/tag/v${version}. You can install the universal APK. If you want to install the application from the app bundle, you can follow instructions [here](https://github.com/element-hq/element-x-android/blob/develop/docs/install_from_github_release.md). Please report any feedback. Thanks!"
printf "${message}\n\n" printf "%s\n\n" "${message}"
if [[ -z "${elementBotToken}" ]]; then if [[ -z "${elementBotToken}" ]]; then
read -p "ELEMENT_BOT_MATRIX_TOKEN is not defined in the environment. Cannot send the message for you. Please send it manually, and press enter to continue. " read -r -p "ELEMENT_BOT_MATRIX_TOKEN is not defined in the environment. Cannot send the message for you. Please send it manually, and press enter to continue. "
else else
read -p "Send this message to the room (yes/no) default to yes? " doSend read -r -p "Send this message to the room (yes/no) default to yes? " doSend
doSend=${doSend:-yes} doSend=${doSend:-yes}
if [ "${doSend}" == "yes" ]; then if [ "${doSend}" == "yes" ]; then
printf "Sending message...\n" printf "Sending message...\n"