From 29afd6f3197b7b1d9f645b4b37f0fd1c11711eac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rodolphe=20Br=C3=A9ard?= Date: Tue, 1 Aug 2023 22:53:59 +0200 Subject: [PATCH] Add a release script --- release.sh | 126 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 126 insertions(+) create mode 100755 release.sh diff --git a/release.sh b/release.sh new file mode 100755 index 0000000..495752f --- /dev/null +++ b/release.sh @@ -0,0 +1,126 @@ +#!/usr/bin/env bash +# +# This script creates a new release and is therefore not meant to be +# used by anyone but the project manager. It will therefore remain +# undocumented and may assume some specific environment. + +abort_release() +{ + echo "Aborting." + exit 1 +} + +display_app_version() +{ + local app_version + + app_version="$(jq --raw-output '.version' 'package.json')" + echo "Current version for app ${app_name}: ${app_version}" +} + +update_app_version() +{ + local new_version="$1" + local tmp_file="package.json.tmp" + + jq ".version = \"${new_version}\"" "package.json" >"${tmp_file}" + mv "${tmp_file}" "package.json" +} + +check_working_directory() +{ + local status + + status=$(git status --untracked-files="no" --porcelain="2") + if [[ "$status" != "" ]]; then + echo "Unable to create a new release while the working directory is not clean." + abort_release + fi +} + +build_assets() +{ + local new_version="$1" + local asset_dir="sake-app_v${new_version}" + + npm run --silent build >/dev/null + cp -r "dist" "${asset_dir}" + rm -f "${asset_dir}/manifest.webmanifest" "${asset_dir}/sw.js" + + tar czf "${asset_dir}.tar.gz" "${asset_dir}" + zip -q -r "${asset_dir}.zip" "${asset_dir}" + + rm -rf "${asset_dir}" + + echo + echo "Assets created:" + echo " - ${asset_dir}.tar.gz" + echo " - ${asset_dir}.zip" +} + +commit_new_version() +{ + local new_version="$1" + + git add --update + git commit -m "SAKE-app v${new_version}" + git tag -a "v${new_version}" -m "SAKE-app v${new_version}" + + echo + echo "Version ${new_version} has been committed and tagged." + echo "If everything is correct, you can publish if using:" + echo " git push" + echo " git push origin v${new_version}" +} + +release_new_version() +{ + local new_version="$1" + local confirm_git_diff + + update_app_version "${new_version}" + + git diff + + echo + echo -n "Does everything seems ok? [y|N] " + read -r confirm_git_diff + + case "${confirm_git_diff}" in + y|Y) commit_new_version "${new_version}" + build_assets "${new_version}";; + *) + git restore "." + abort_release + ;; + esac +} + +main() +{ + local new_version + local confirm_release + + check_working_directory + + display_app_version + + echo + echo -n "Enter the new version: " + read -r new_version + + export LC_TIME="en_US.UTF-8" + current_date=$(date "+%b %d, %Y") + + echo + echo "You are about to release version ${new_version} on ${current_date}" + echo -n "Are you sure? [y/N] " + read -r confirm_release + + case "${confirm_release}" in + y|Y) release_new_version "${new_version}";; + *) abort_release;; + esac +} + +main