summaryrefslogtreecommitdiffstats
path: root/tools/update-verify/release/common/check_updates.sh
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--tools/update-verify/release/common/check_updates.sh80
1 files changed, 61 insertions, 19 deletions
diff --git a/tools/update-verify/release/common/check_updates.sh b/tools/update-verify/release/common/check_updates.sh
index acf06d8b4e..f03d8a069d 100644
--- a/tools/update-verify/release/common/check_updates.sh
+++ b/tools/update-verify/release/common/check_updates.sh
@@ -1,3 +1,5 @@
+#!/bin/bash
+
check_updates () {
# called with 10 args - platform, source package, target package, update package, old updater boolean,
# a path to the updater binary to use for the tests, a file to write diffs to, the update channel,
@@ -6,24 +8,34 @@ check_updates () {
source_package=$2
target_package=$3
locale=$4
- use_old_updater=$5
- updater=$6
- diff_file=$7
- channel=$8
- mar_channel_IDs=$9
- update_to_dep=${10}
+ updater=$5
+ diff_file=$6
+ channel=$7
+ mar_channel_IDs=$8
+ update_to_dep=$9
+ local mac_update_settings_dir_override
+ mac_update_settings_dir_override=${10}
+ local product
+ product=${11}
# cleanup
rm -rf source/*
rm -rf target/*
- unpack_build $update_platform source "$source_package" $locale '' $mar_channel_IDs
- if [ "$?" != "0" ]; then
+ # $mac_update_settings_dir_override allows unpack_build to find a host platform appropriate
+ # `update-settings.ini` file, which is needed to successfully run the updater later in this
+ # function.
+ if ! unpack_build "$update_platform" source "$source_package" "$locale" '' "$mar_channel_IDs" "$mac_update_settings_dir_override" "$product"; then
echo "FAILED: cannot unpack_build $update_platform source $source_package"
return 1
fi
- unpack_build $update_platform target "$target_package" $locale
- if [ "$?" != "0" ]; then
+ # Unlike unpacking the `source` build, we don't actually _need_ $mac_update_settings_dir_override
+ # here to succesfully apply the update, but its usage in `source` causes an `update-settings.ini`
+ # file to be present in the directory we diff, which means we either also need it present in the
+ # `target` directory, or to remove it after the update is applied. The latter was chosen
+ # because it keeps the workaround close together (as opposed to just above this, and then much
+ # further down).
+ if ! unpack_build "$update_platform" target "$target_package" "$locale" '' '' "$mac_update_settings_dir_override" "$product"; then
echo "FAILED: cannot unpack_build $update_platform target $target_package"
return 1
fi
@@ -36,30 +48,35 @@ check_updates () {
platform_dirname="bin"
;;
Linux_x86-gcc | Linux_x86-gcc3 | Linux_x86_64-gcc3)
- platform_dirname=`echo $product | tr '[A-Z]' '[a-z]'`
+ platform_dirname=$(echo "$product" | tr '[:upper:]' '[:lower:]')
;;
esac
if [ -f update/update.status ]; then rm update/update.status; fi
if [ -f update/update.log ]; then rm update/update.log; fi
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
if [ -d source/$platform_dirname ]; then
- if [ `uname | cut -c-5` == "MINGW" ]; then
+ if [ "$(uname | cut -c-5)" == "MINGW" ]; then
# windows
# change /c/path/to/pwd to c:\\path\\to\\pwd
- four_backslash_pwd=$(echo $PWD | sed -e 's,^/\([a-zA-Z]\)/,\1:/,' | sed -e 's,/,\\\\,g')
- two_backslash_pwd=$(echo $PWD | sed -e 's,^/\([a-zA-Z]\)/,\1:/,' | sed -e 's,/,\\,g')
+ two_backslash_pwd=$(echo "$PWD" | sed -e 's,^/\([a-zA-Z]\)/,\1:/,' | sed -e 's,/,\\,g')
cwd="$two_backslash_pwd\\source\\$platform_dirname"
update_abspath="$two_backslash_pwd\\update"
else
# not windows
# use ls here, because mac uses *.app, and we need to expand it
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
cwd=$(ls -d $PWD/source/$platform_dirname)
update_abspath="$PWD/update"
fi
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
cd_dir=$(ls -d ${PWD}/source/${platform_dirname})
- cd "${cd_dir}"
+ cd "${cd_dir}" || (echo "TEST-UNEXPECTED-FAIL: couldn't cd to ${cd_dir}" && return 1)
set -x
"$updater" "$update_abspath" "$cwd" "$cwd" 0
set +x
@@ -70,7 +87,7 @@ check_updates () {
fi
cat update/update.log
- update_status=`cat update/update.status`
+ update_status=$(cat update/update.status)
if [ "$update_status" != "succeeded" ]
then
@@ -87,13 +104,17 @@ check_updates () {
# positive from failing the tests, we simply remove it before diffing.
# The precomplete file in Contents/Resources is still diffed, so we
# don't lose any coverage by doing this.
- cd `echo "source/$platform_dirname"`
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
+ cd source/$platform_dirname || (echo "TEST-UNEXPECTED-FAIL: couldn't cd to source/${platform_dirname}" && exit 1)
if [[ -f "Contents/Resources/precomplete" && -f "precomplete" ]]
then
rm "precomplete"
fi
cd ../..
- cd `echo "target/$platform_dirname"`
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
+ cd target/$platform_dirname || (echo "TEST-UNEXPECTED-FAIL: couldn't cd to target/${platform_dirname}" && exit 1)
if [[ -f "Contents/Resources/precomplete" && -f "precomplete" ]]
then
rm "precomplete"
@@ -110,7 +131,28 @@ check_updates () {
ignore_coderesources=
fi
- ../compare-directories.py source/${platform_dirname} target/${platform_dirname} ${channel} ${ignore_coderesources} > "${diff_file}"
+ # On Mac, there are two Frameworks that are not included with updates, and
+ # which change with every build. Because of this, we ignore differences in
+ # them in `compare-directories.py`. The best verification we can do for them
+ # is that they still exist.
+ if [[ $update_platform == Darwin_* ]]; then
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
+ if ! compgen -G source/${platform_dirname}/Contents/MacOS/updater.app/Contents/Frameworks/UpdateSettings.framework >/dev/null; then
+ echo "TEST-UNEXPECTED-FAIL: UpdateSettings.framework doesn't exist after update"
+ return 4
+ fi
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
+ if ! compgen -G source/${platform_dirname}/Contents/Frameworks/ChannelPrefs.framework >/dev/null; then
+ echo "TEST-UNEXPECTED-FAIL: ChannelPrefs.framework doesn't exist after update"
+ return 5
+ fi
+ fi
+
+ # This check is disabled because we rely on glob expansion here
+ # shellcheck disable=SC2086
+ ../compare-directories.py source/${platform_dirname} target/${platform_dirname} "${channel}" ${ignore_coderesources} > "${diff_file}"
diffErr=$?
cat "${diff_file}"
if [ $diffErr == 2 ]