synOCR/build_spk.sh

340 lines
15 KiB
Bash

#!/bin/bash
#
#######
project="synOCR"
beta_status="" # will be set by script
#######
#----------------------------------------------------------------------------------------
# Folder structure:
#----------------------------------------------------------------------------------------
# ./APP --> Working environment
# ./PKG --> Archive folder for building the SPK (start scripts etc.)
#
#buildversion=
# git fetch --all;git reset --hard origin/DSM_unibuild;git checkout DSM_unibuild
# Usage info
# ---------------------------------------------------------------------
show_help () {
cat << EOF
Without arguments, the script creates the SPK from the current master-branch from the server for DSM7.
Usage: ./${0##*/} -v=<synOCR-Version> --dsm=<target DSM-Version>
Example: ./${0##*/} -v=1.2.0 --dsm=7
-v= --version= specifies which synOCR version is to be built
--DSM= specifies for which DSM version is to be built
-h --help display this help and exit
EOF
exit 1
}
# read arguments:
# ---------------------------------------------------------------------
for i in "$@" ; do
case $i in
-dsm=*|--dsm=*|-DSM=*|--DSM=*)
# ToDo: Test, ob Zahl - derzeit 6 oder 7
TargetDSM="${i#*=}"
shift
;;
-v=*|--version=*)
buildversion="${i#*=}"
shift
;;
-h|--help)
show_help
;;
*)
printf "ERROR - unknown argument ($1)!\n\n"
show_help
;;
esac
done
[ -z $buildversion ] && echo "wrong or empty value for synOCR version - set to \"latest\"" && buildversion="latest"
[[ ! $TargetDSM = 6 ]] && [[ ! $TargetDSM = 7 ]] && echo "wrong or empty value for target DSM version - set to 7" && TargetDSM=7
echo "requested synOCR version: $buildversion"
echo "target DSM version: $TargetDSM"
# preparation:
# ---------------------------------------------------------------------
set -euo pipefail
IFS=$'\n\t'
build_tmp=$(mktemp -d -t tmp.XXXXXXXXXX)
function finish {
git worktree remove --force "$build_tmp"
rm -rf "$build_tmp"
}
trap finish EXIT
if ! [ -x "$(command -v git)" ]; then
echo 'Error: git is not installed.' >&2
exit 1
fi
if ! [ -x "$(command -v fakeroot)" ]; then
if [ $(whoami) != "root" ]; then
echo "ERROR: fakeroot are not installed and you are not root!" >&2
exit 1
else
FAKEROOT=""
fi
else
FAKEROOT=$(command -v fakeroot)
fi
# read working directory and change into it:
# ---------------------------------------------------------------------
APPDIR=$(cd "$(dirname $0)";pwd)
cd "${APPDIR}"
git pull
# buildversion=${1:-latest}
taggedversions=$(git tag)
set_spk_version=""
printf "\n-----------------------------------------------------------------------------------\n"
printf " - INFO: Create the temporary build folder and copy sources into it ..."
printf "\n-----------------------------------------------------------------------------------\n\n"
git worktree add --force "$build_tmp" "$(git rev-parse --abbrev-ref HEAD)"
pushd "$build_tmp"
if echo "$taggedversions" | egrep -q "$buildversion"; then
echo "git checkout to $buildversion"
git checkout "$buildversion"
set_spk_version="$buildversion"
else
echo "ATTENTION: The requested version was not found in the repository!"
echo "The $(git rev-parse --abbrev-ref HEAD)-branch will be used!"
fi
printf "\n - INFO: collect the DSM specific files ...\n"
if [ $TargetDSM -eq 7 ]; then
PKG=PKG_DSM7
mv $build_tmp/APP/ui/config_DSM7 $build_tmp/APP/ui/config
rm -f $build_tmp/APP/ui/config_DSM6
mv $build_tmp/APP/ui/images_DSM7 $build_tmp/APP/ui/images
rm -rf $build_tmp/APP/ui/images_DSM6
else
PKG=PKG_DSM6
mv $build_tmp/APP/ui/config_DSM6 $build_tmp/APP/ui/config
rm -f $build_tmp/APP/ui/config_DSM7
mv $build_tmp/APP/ui/images_DSM6 $build_tmp/APP/ui/images
rm -rf $build_tmp/APP/ui/images_DSM7
fi
create_notify_file() {
{ echo '[app]'
echo 'app_name="synOCR"'
echo 'job_successful="lang_notify_file_job_successful"'
echo 'update_available="lang_notify_file_update_available (https://geimist.eu/synocr)"'
} > "$1"
}
create_install_uifile() {
{ echo '['
echo ' {'
echo ' "step_title" : "lang_wizui_install_title",'
echo ' "items" : ['
echo ' {'
echo ' "desc" : "<p>lang_wizui_install_desc</p>"'
echo ' }'
echo ' ]'
echo ' }'
echo ']'
} > "$1"
}
create_uninstall_uifile() {
{ echo '['
echo ' {'
echo ' "step_title" : "lang_wizui_uninstall_title",'
echo ' "items" : ['
echo ' {'
echo ' "desc" : "<p>lang_wizui_uninstall_desc_1</p><p><br>lang_wizui_uninstall_desc_2</p>"'
echo ' }'
echo ' ]'
echo ' }'
echo ']'
} > "$1"
}
create_upgrade_uifile() {
{ echo '['
echo ' {'
echo ' "step_title" : "lang_wizui_upgrade_title",'
echo ' "items" : ['
echo ' {'
echo ' "desc" : "<p>lang_wizui_upgrade_desc</p>"'
echo ' }'
echo ' ]'
echo ' }'
echo ']'
} > "$1"
}
printf "\n - INFO: create diverse files and insert language strings ...\n"
languages=()
while read line; do
languages+=($line)
done <<<"$(ls -tp "$build_tmp/APP/ui/lang/" | egrep -v '/$' | cut -f 1 -d '.' | cut -f 2 -d '_')"
echo " dedected languages: ${languages[@]}"
defaultSourceLang="$build_tmp/APP/ui/lang/lang_enu.txt"
# PKG_DSMx/INFO
synosetkeyvalue "$build_tmp/$PKG/INFO" description $(get_key_value "$defaultSourceLang" lang_INFO_description)
# install_uifile
install_uifile_lang="$build_tmp/$PKG/WIZARD_UIFILES/install_uifile"
create_install_uifile "$install_uifile_lang"
sed -i "s|lang_wizui_install_title|$(get_key_value "$defaultSourceLang" lang_wizui_install_title)|" "$install_uifile_lang"
sed -i "s|lang_wizui_install_desc|$(get_key_value "$defaultSourceLang" lang_wizui_install_desc)|" "$install_uifile_lang"
# uninstall_uifile
uninstall_uifile_lang="$build_tmp/$PKG/WIZARD_UIFILES/uninstall_uifile"
create_uninstall_uifile "$uninstall_uifile_lang"
sed -i "s|lang_wizui_uninstall_title|$(get_key_value "$defaultSourceLang" lang_wizui_uninstall_title)|" "$uninstall_uifile_lang"
sed -i "s|lang_wizui_uninstall_desc_1|$(get_key_value "$defaultSourceLang" lang_wizui_uninstall_desc_1)|" "$uninstall_uifile_lang"
sed -i "s|lang_wizui_uninstall_desc_2|$(get_key_value "$defaultSourceLang" lang_wizui_uninstall_desc_2)|" "$uninstall_uifile_lang"
# upgrade_uifile
if [ "$TargetDSM" = 6 ]; then
upgrade_uifile_lang="$build_tmp/$PKG/WIZARD_UIFILES/upgrade_uifile"
create_upgrade_uifile "$upgrade_uifile_lang"
sed -i "s|lang_wizui_upgrade_title|$(get_key_value "$defaultSourceLang" lang_wizui_upgrade_title)|" "$upgrade_uifile_lang"
sed -i "s|lang_wizui_upgrade_desc|$(get_key_value "$defaultSourceLang" lang_wizui_upgrade_desc)|" "$upgrade_uifile_lang"
fi
for lang in ${languages[@]}; do
# PKG_DSMx/INFO
synosetkeyvalue "$build_tmp/$PKG/INFO" description_${lang} $(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_INFO_description)
# i18n notification files
langDir="$build_tmp/APP/ui/texts/${lang}"
notifyFileLang="$build_tmp/APP/ui/texts/${lang}/strings"
mkdir -p "$langDir"
create_notify_file "$notifyFileLang"
sed -i "s|lang_notify_file_job_successful|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_notify_file_job_successful)|" "${notifyFileLang}"
sed -i "s|lang_notify_file_update_available|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_notify_file_update_available)|" "${notifyFileLang}"
# PKG_DSMx/scripts/lang/${lang}
scripts_lang_lang="$build_tmp/$PKG/scripts/lang/${lang}"
if [ ! -f "${scripts_lang_lang}" ]; then
# add language variables in script language file:
echo 'PKG_NOINSTALL_ERROR_PART1="lang_PKG_NOINSTALL_ERROR_PART1"' > "${scripts_lang_lang}"
echo 'PKG_NOINSTALL_ERROR_PART2="lang_PKG_NOINSTALL_ERROR_PART2"' >> "${scripts_lang_lang}"
echo 'PKG_NOINSTALL_ERROR_PART3="lang_PKG_NOINSTALL_ERROR_PART3"' >> "${scripts_lang_lang}"
echo 'PKG_NOINSTALL_MISSING_DOCKER_ERROR="lang_PKG_NOINSTALL_MISSING_DOCKER_ERROR"' >> "${scripts_lang_lang}"
echo 'PKG_DELETE_TIMER="lang_PKG_DELETE_TIMER"' >> "${scripts_lang_lang}"
fi
synosetkeyvalue "${scripts_lang_lang}" PKG_NOINSTALL_ERROR_PART1 $(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_PKG_NOINSTALL_ERROR_PART1)
synosetkeyvalue "${scripts_lang_lang}" PKG_NOINSTALL_ERROR_PART2 $(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_PKG_NOINSTALL_ERROR_PART2)
synosetkeyvalue "${scripts_lang_lang}" PKG_NOINSTALL_ERROR_PART3 $(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_PKG_NOINSTALL_ERROR_PART3)
synosetkeyvalue "${scripts_lang_lang}" PKG_NOINSTALL_MISSING_DOCKER_ERROR $(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_PKG_NOINSTALL_MISSING_DOCKER_ERROR)
synosetkeyvalue "${scripts_lang_lang}" PKG_DELETE_TIMER $(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_PKG_DELETE_TIMER)
# install_uifile:
install_uifile_lang="$build_tmp/$PKG/WIZARD_UIFILES/install_uifile_${lang}"
create_install_uifile "${install_uifile_lang}"
sed -i "s|lang_wizui_install_title|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_wizui_install_title)|" "${install_uifile_lang}"
sed -i "s|lang_wizui_install_desc|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_wizui_install_desc)|" "${install_uifile_lang}"
# uninstall_uifile:
uninstall_uifile_lang="$build_tmp/$PKG/WIZARD_UIFILES/uninstall_uifile_${lang}"
create_uninstall_uifile "${uninstall_uifile_lang}"
sed -i "s|lang_wizui_uninstall_title|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_wizui_uninstall_title)|" "${uninstall_uifile_lang}"
sed -i "s|lang_wizui_uninstall_desc_1|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_wizui_uninstall_desc_1)|" "${uninstall_uifile_lang}"
sed -i "s|lang_wizui_uninstall_desc_2|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_wizui_uninstall_desc_2)|" "${uninstall_uifile_lang}"
# upgrade_uifile (only for refresh notify after upgrade):
# (currently without fallback to plain english file)
if [ "$TargetDSM" = 6 ]; then
upgrade_uifile_lang="$build_tmp/$PKG/WIZARD_UIFILES/upgrade_uifile_${lang}"
create_upgrade_uifile "${upgrade_uifile_lang}"
[ -f "$build_tmp/$PKG/WIZARD_UIFILES/upgrade_uifile_${lang}" ] && sed -i "s|lang_wizui_upgrade_title|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_wizui_upgrade_title)|" "${upgrade_uifile_lang}"
[ -f "$build_tmp/$PKG/WIZARD_UIFILES/upgrade_uifile_${lang}" ] && sed -i "s|lang_wizui_upgrade_desc|$(get_key_value "$build_tmp/APP/ui/lang/lang_${lang}.txt" lang_wizui_upgrade_desc)|" "${upgrade_uifile_lang}"
fi
done
build_version=$(grep version "$build_tmp/$PKG/INFO" | awk -F '"' '{print $2}')
if [[ $(grep beta "$build_tmp/$PKG/INFO" | awk -F '"' '{print $2}') == yes ]]; then
beta_status="_BETA"
# write changelog to INFO:
echo "changelog=\"$(cat "$build_tmp/$PKG/CHANGELOG_CURRENT_BETA" | awk -v RS="" '{gsub (/\n/,"<br/>")}1')\"" >> "$build_tmp/$PKG/INFO"
else
# write changelog to INFO:
echo "changelog=\"$(cat "$build_tmp/$PKG/CHANGELOG_CURRENT_RELEASE" | awk -v RS="" '{gsub (/\n/,"<br/>")}1')\"" >> "$build_tmp/$PKG/INFO"
fi
rm -f "$build_tmp/$PKG/CHANGELOG_CURRENT_BETA"
rm -f "$build_tmp/$PKG/CHANGELOG_CURRENT_RELEASE"
printf "\n-----------------------------------------------------------------------------------\n"
printf " SPK will be created ..."
printf "\n-----------------------------------------------------------------------------------\n\n"
printf "\n - INFO: The following version is loaded and built:\n"
if [ -z "$set_spk_version" ]; then
#set_spk_version="latest-$(date +%s)-$(git log -1 --format="%h")"
set_spk_version="$(git branch --show-current)_latest_[$build_version]_($(date +%Y)-$(date +%m)-$(date +%d)_$(date +%H)-$(date +%M))_$(git log -1 --format="%h")"
fi
echo " $set_spk_version - BUILD-Version (INFO-File): $build_version"
# Falls versteckter Ordners /.helptoc vorhanden, diesen nach /helptoc umbenennen
printf "\n - INFO: handle .helptoc files ...\n"
if test -d "${build_tmp}/.helptoc"; then
echo ""
echo " - INFO: Versteckter Ordner /.helptoc wurde lokalisiert und nach /helptoc umbenannt"
mv "${build_tmp}/.helptoc" "${build_tmp}/helptoc"
fi
printf "\n - INFO: create empty dirs ...\n"
[ ! -d "${build_tmp}/APP/cfg" ] && echo " create dir ${build_tmp}/APP/cfg" && mkdir "${build_tmp}/APP/cfg"
[ ! -d "${build_tmp}/APP/log" ] && echo " create dir ${build_tmp}/APP/log" && mkdir "${build_tmp}/APP/log"
[ ! -d "${build_tmp}/APP/ui/etc" ] && echo " create dir ${build_tmp}/APP/ui/etc" && mkdir "${build_tmp}/APP/ui/etc"
# [ ! -d "${build_tmp}/APP/ui/usersettings" ] && echo " create dir ${build_tmp}/APP/ui/usersettings" && mkdir "${build_tmp}/APP/ui/usersettings"
printf "\n - INFO: adjust permissions ...\n"
chmod -R 755 "${build_tmp}/APP/"
chmod -R 755 "${build_tmp}/$PKG/"
chmod -R 755 "${build_tmp}/APP/ui/texts/"
# Packing and dropping the current installation into the appropriate /Pack folder
printf "\n - INFO: The archive package.tgz will be created ...\n"
$FAKEROOT tar -C "${build_tmp}/APP" -czf "${build_tmp}/$PKG"/package.tgz .
# Change to the storage location of package.tgz regarding the structure of the SPKs
cd "${build_tmp}/${PKG}"
# Creating the final SPK
printf "\n - INFO: the SPK will be created ...\n"
TargetName="${project}_DSM${TargetDSM}_${set_spk_version}${beta_status}.spk"
# $build_version
$FAKEROOT tar -cf "$TargetName" *
cp -f "$TargetName" "${APPDIR}"
printf "\n-----------------------------------------------------------------------------------\n"
printf " The SPK was created and can be found at:\n"
printf " ${APPDIR}/$TargetName\n"
printf "\n-----------------------------------------------------------------------------------\n\n"
exit 0