1
1
mirror of https://github.com/qvacua/vimr.git synced 2024-12-25 06:43:24 +03:00
vimr/bin/build_release.sh
2022-03-22 18:03:48 +01:00

113 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
set -Eeuo pipefail
readonly is_snapshot=${is_snapshot:?"true or false"}
readonly bundle_version=${bundle_version:?"date '+%Y%m%d.%H%M%S'"}
readonly tag=${tag:?"snapshot/xyz or v0.35.0"}
readonly marketing_version=${marketing_version:?"SNAPSHOT-xyz or v0.35.0 (mind the v-prefix when not snapshot"}
readonly upload=${upload:?"true or false"}
readonly update_appcast=${update_appcast:?"true or false"}
readonly build_folder_path="./build/Build/Products/Release"
readonly vimr_artifact_path="${build_folder_path}/VimR-${marketing_version}.tar.bz2"
declare -r -x GH_REPO="qvacua/vimr"
prepare_bin() {
pushd ./bin >/dev/null
if ! pyenv which python | grep -q "com.qvacua.VimR.bin"; then
echo "com.qvacua.VimR.bin virtualenv not set up!"
exit 1;
fi
pip install -r requirements.txt
popd >/dev/null
}
check_version() {
if [[ "${is_snapshot}" == true && ! "${marketing_version}" =~ ^SNAPSHOT.* ]]; then
echo "When snapshot, marketing_version should be SNAPSHOT-xyz"
exit 1
fi
if [[ "${is_snapshot}" == false && ! "${marketing_version}" =~ ^v.* ]]; then
echo "When no snapshot, marketing_version should be like v0.35.0"
exit 1
fi
}
check_upload() {
if [[ "${upload}" == true ]]; then
if gh release list | grep "${tag}"; then
echo "Release with tag ${tag} found"
else
echo "Release with tag ${tag} does not exist!"
exit 1
fi
fi
}
build_release() {
echo "### Building release"
code_sign=true use_carthage_cache=false download_deps=true ./bin/build_vimr.sh
vimr_app_path="${build_folder_path}/VimR.app" ./bin/notarize_vimr.sh
pushd "${build_folder_path}" >/dev/null
tar cjf "VimR-${marketing_version}.tar.bz2" VimR.app
popd >/dev/null
echo "### Built (signed and notarized) release: ${vimr_artifact_path}"
}
upload_artifact() {
local -x GH_TOKEN
GH_TOKEN=$(cat ~/.local/secrets/github.qvacua.release.token)
readonly GH_TOKEN
echo "### Uploading artifact"
gh release upload "${tag}" "${vimr_artifact_path}"
echo "### Uploaded artifact"
}
update_appcast_file() {
./bin/set_appcast.py \
"${vimr_artifact_path}" \
"${bundle_version}" \
"${marketing_version}" \
"${tag}" \
"${is_snapshot}"
local app_cast_file_name="appcast.xml"
if [[ "${is_snapshot}" == true ]]; then
app_cast_file_name="appcast_snapshot.xml"
fi
readonly app_cast_file_name
cp "${build_folder_path}/${app_cast_file_name}" .
echo "### ${app_cast_file_name} updated. Commit and push"
}
main() {
echo "is_snapshot=${is_snapshot} bundle_version=${bundle_version}" \
"tag=${tag} marketing_version=${marketing_version}" \
"upload=${upload} update_appcast=${update_appcast}" \
"vimr_artifact_path=${vimr_artifact_path}"
pushd "$(dirname "${BASH_SOURCE[0]}")/.." >/dev/null
check_version
check_upload
prepare_bin
build_release
if [[ "${upload}" == true ]]; then
upload_artifact
fi
if [[ "${update_appcast}" == true ]]; then
# Sometimes GitHub is not yet up-to-date with the uploaded asset.
sleep 5
update_appcast_file
fi
popd >/dev/null
}
main