mirror of
https://github.com/SchildiChat/schildichat-desktop.git
synced 2025-03-25 17:50:00 +01:00
297 lines
7.9 KiB
Bash
Executable File
297 lines
7.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
if [ -z "$SCHILDI_ROOT" ]; then
|
|
SCHILDI_ROOT="$(dirname "$(realpath "$0")")"
|
|
fi
|
|
|
|
branch=${BRANCH:-"lite"}
|
|
|
|
i18n_helper_path="$SCHILDI_ROOT/i18n-helper/index.js"
|
|
i18n_path="src/i18n/strings"
|
|
i18n_overlay_path="$SCHILDI_ROOT/i18n-overlays"
|
|
|
|
yarn=yarnpkg
|
|
|
|
add_upstream() {
|
|
if git remote | grep -q upstream; then
|
|
echo "Remote named upstream already exists, deleting..."
|
|
git remote remove upstream
|
|
fi
|
|
local sc_remote="$(git remote -v|grep origin|grep fetch|sed 's|.*\t\(.*\) (fetch)|\1|;s|git@github.com:|https://github.com/|')"
|
|
if echo "$sc_remote" | grep -q matrix-js-sdk; then
|
|
# matrix.org repo
|
|
local upstream_remote="$(echo "$sc_remote" | sed 's|SchildiChat|matrix-org|')"
|
|
elif echo "$sc_remote" | grep -q "element\\|compound-web"; then
|
|
# vector-im repo
|
|
local upstream_remote="$(echo "$sc_remote" | sed 's|SchildiChat|element-hq|')"
|
|
else
|
|
echo "Don't know upstream repo for $sc_remote"
|
|
return 1
|
|
fi
|
|
echo "Adding upstream $upstream_remote"
|
|
git remote add upstream "$upstream_remote"
|
|
git fetch upstream
|
|
}
|
|
|
|
forall_repos() {
|
|
for repo in "matrix-js-sdk" "element-web" "element-desktop" "compound-web"; do
|
|
pushd "$SCHILDI_ROOT/$repo" > /dev/null
|
|
"$@"
|
|
popd > /dev/null
|
|
done
|
|
}
|
|
|
|
forelement_repos() {
|
|
for repo in "element-web" "element-desktop"; do
|
|
pushd "$SCHILDI_ROOT/$repo" > /dev/null
|
|
"$@"
|
|
popd > /dev/null
|
|
done
|
|
}
|
|
|
|
for_main_repos() {
|
|
for repo in "matrix-js-sdk" "element-web" "element-desktop"; do
|
|
pushd "$SCHILDI_ROOT/$repo" > /dev/null
|
|
"$@"
|
|
popd > /dev/null
|
|
done
|
|
}
|
|
|
|
ensure_yes() {
|
|
read -e -p "$1 [y/N] " choice
|
|
|
|
if [[ "$choice" != [Yy]* ]]; then
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
check_branch() {
|
|
if [[ $(git branch --show-current) != "$1" ]]; then
|
|
repo_name=$(basename `git rev-parse --show-toplevel`)
|
|
ensure_yes "$repo_name not in branch $1. Continue?"
|
|
fi
|
|
}
|
|
|
|
check_clean_git() {
|
|
# Require clean git state
|
|
uncommitted=`git status --porcelain`
|
|
if [ ! -z "$uncommitted" ]; then
|
|
echo "Uncommitted changes are present, please commit first!"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
revert_i18n_changes() {
|
|
local i18n_path="$1"
|
|
local revision="$2"
|
|
local skip_commit="$3"
|
|
|
|
git checkout "$revision" -- "$i18n_path"
|
|
|
|
if [[ "$skip_commit" != [Yy]* ]]; then
|
|
git commit -m "Automatic i18n reversion" || true
|
|
fi
|
|
}
|
|
|
|
apply_i18n_changes() {
|
|
local i18n_path="$1"
|
|
|
|
git add "$i18n_path"
|
|
git commit -m "Automatic i18n adjustment" || true
|
|
}
|
|
|
|
automatic_i18n_reversion() {
|
|
local skip_commit="$1"
|
|
|
|
local current_upstream_tag
|
|
get_current_upstream_tag
|
|
|
|
local current_mxjssdk_tag
|
|
get_current_mxsdk_tags
|
|
|
|
pushd "$SCHILDI_ROOT/element-web" > /dev/null
|
|
revert_i18n_changes "$i18n_path" "$current_upstream_tag" "$skip_commit"
|
|
popd > /dev/null
|
|
|
|
pushd "$SCHILDI_ROOT/element-desktop" > /dev/null
|
|
revert_i18n_changes "$i18n_path" "$current_upstream_tag" "$skip_commit"
|
|
popd > /dev/null
|
|
}
|
|
|
|
automatic_i18n_adjustment() {
|
|
# element-web
|
|
pushd "$SCHILDI_ROOT/element-web" > /dev/null
|
|
$yarn i18n
|
|
node "$i18n_helper_path" "$SCHILDI_ROOT/element-web/$i18n_path" "$i18n_overlay_path/element-web"
|
|
apply_i18n_changes "$i18n_path"
|
|
popd > /dev/null
|
|
|
|
# element-desktop
|
|
pushd "$SCHILDI_ROOT/element-desktop" > /dev/null
|
|
$yarn i18n
|
|
node "$i18n_helper_path" "$SCHILDI_ROOT/element-desktop/$i18n_path" "$i18n_overlay_path/element-desktop"
|
|
apply_i18n_changes "$i18n_path"
|
|
popd > /dev/null
|
|
}
|
|
|
|
get_current_versions() {
|
|
local version=`cat "$SCHILDI_ROOT/element-web/package.json" | jq .version -r`
|
|
if [[ "$version" =~ ([0-9\.]*)(-sc\.([0-9]+)(\.test.([0-9]+))?)? ]]; then
|
|
upstream="${BASH_REMATCH[1]}"
|
|
release="${BASH_REMATCH[3]}"
|
|
test="${BASH_REMATCH[5]}"
|
|
fi
|
|
|
|
versions=("${upstream:-"0.0.1"}" "${release:-"0"}" "${test:-"0"}")
|
|
}
|
|
|
|
get_versions_string() {
|
|
versions_string="${versions[0]}-sc.${versions[1]}"
|
|
|
|
# both zero means the initial version after a merge
|
|
if [[ ${versions[1]} -eq 0 || ${versions[2]} -gt 0 ]]; then
|
|
versions_string+=".test.${versions[2]}"
|
|
fi
|
|
}
|
|
|
|
write_version() {
|
|
local file="$1"
|
|
local versions_string
|
|
get_versions_string
|
|
|
|
new_content=`jq --arg version "$versions_string" '.version = $version' "$file"`
|
|
echo "$new_content" > "$file"
|
|
|
|
git add "$file"
|
|
git commit -m "Update version to $versions_string" || true
|
|
}
|
|
|
|
bump_test_version() {
|
|
local versions
|
|
get_current_versions
|
|
|
|
# increment test version
|
|
versions[2]=$((versions[2] + 1))
|
|
|
|
forelement_repos write_version "package.json"
|
|
}
|
|
|
|
bump_release_version() {
|
|
local versions
|
|
get_current_versions
|
|
|
|
# increment release version
|
|
versions[1]=$((versions[1] + 1))
|
|
|
|
# set test version to 0
|
|
versions[2]=0
|
|
|
|
forelement_repos write_version "package.json"
|
|
}
|
|
|
|
revert_packagejson_changes() {
|
|
local path="$1"
|
|
local revision="$2"
|
|
local skip_commit="$3"
|
|
|
|
git checkout "$revision" -- "$path"
|
|
|
|
if [[ "$skip_commit" != [Yy]* ]]; then
|
|
git commit -m "Automatic package.json reversion" || true
|
|
fi
|
|
}
|
|
|
|
apply_packagejson_overlay() {
|
|
local orig_path="$1"
|
|
local overlay_path="../overlay/$(basename "$PWD")/package.json"
|
|
|
|
# see: https://stackoverflow.com/a/24904276
|
|
new_content=`jq -s '.[0] * .[1]' "$orig_path" "$overlay_path" | sed 's| | |g'`
|
|
|
|
echo "$new_content" > "$orig_path"
|
|
git add "$orig_path"
|
|
git commit -m "Automatic package.json adjustment" || true
|
|
}
|
|
|
|
automatic_packagejson_reversion() {
|
|
local skip_commit="$1"
|
|
|
|
local current_upstream_tag
|
|
get_current_upstream_tag
|
|
|
|
forelement_repos revert_packagejson_changes "package.json" "$current_upstream_tag" "$skip_commit"
|
|
}
|
|
|
|
automatic_packagejson_adjustment() {
|
|
local versions
|
|
get_current_versions
|
|
|
|
forelement_repos apply_packagejson_overlay "package.json"
|
|
forelement_repos write_version "package.json"
|
|
}
|
|
|
|
get_latest_upstream_tag() {
|
|
pushd "$SCHILDI_ROOT/element-web" > /dev/null
|
|
git fetch upstream
|
|
latest_upstream_tag=`git for-each-ref --sort=creatordate --format '%(refname) %(creatordate)' refs/tags | sed -nr 's|refs/tags/(v[0-9]+(\.[0-9]+(\.[0-9]+)?)?) .*|\1|p' | tail -n 1`
|
|
popd > /dev/null
|
|
}
|
|
|
|
get_current_upstream_tag() {
|
|
local versions
|
|
get_current_versions
|
|
current_upstream_tag="v${versions[0]}"
|
|
}
|
|
|
|
get_current_mxsdk_tags() {
|
|
current_mxjssdk_tag="v$(cat "$SCHILDI_ROOT/element-web/package.json" | jq '.dependencies["matrix-js-sdk"]' -r)"
|
|
}
|
|
|
|
apply_patches() {
|
|
local repo="$(realpath "$1")"
|
|
local patch_dir="$SCHILDI_ROOT/patches/$(basename "$1")"
|
|
if [ ! -d "$repo" ]; then
|
|
echo "Unknown repo: $repo"
|
|
return 1
|
|
fi
|
|
if [ ! -d "$patch_dir" ]; then
|
|
echo "No patches found at $patch_dir"
|
|
return 1
|
|
fi
|
|
pushd "$repo"
|
|
for patch in "$patch_dir"/*; do
|
|
echo "Applying $patch to $repo..."
|
|
git am "$patch" || on_apply_patch_fail_try_original_commit "$patch" "$repo"
|
|
done
|
|
popd
|
|
}
|
|
|
|
on_apply_patch_fail_try_original_commit() {
|
|
local patch="$1"
|
|
local repo="$2"
|
|
local orig_commit="$(head -n 1 "$patch"|sed 's|From ||;s| .*||')"
|
|
echo "Applying $patch failed, trying with original commit $orig_commit..."
|
|
git am --abort
|
|
git cherry-pick "$orig_commit" || on_apply_patch_fail "$patch" "$repo" "$orig_commit"
|
|
}
|
|
|
|
on_apply_patch_fail() {
|
|
local patch="$1"
|
|
local repo="$2"
|
|
local orig_commit="$3"
|
|
echo "----------------------------------"
|
|
echo "Applying patch failed, please commit manually!"
|
|
echo "Patch: $patch"
|
|
echo "Repo: $repo"
|
|
echo "Original commit: $(head -n 1 "$patch"|sed 's|From ||;s| .*||')"
|
|
echo "----------------------------------"
|
|
read -p "Press enter after committing resolved conflicts: "
|
|
}
|
|
|
|
commit_if_dirty() {
|
|
local message="$1"
|
|
# see: https://devops.stackexchange.com/a/5443
|
|
git add -A
|
|
git diff-index --quiet HEAD || git commit -m "$message"
|
|
}
|