Adds support for only performing updates if there is a newer version (#7939)
* Re-formatted ./packaging/installer/netdata-updater.sh with shfmt -w -i 2 -ci -sr * Fixed errors/warnings founds with shellcheck for ./packaging/installer/netdata-updater.sh * Fixed logic for removing TMPDIR * Fixed logic for removing TMPDIR proper * Fixed another shellcheck warning that ReviewDog found * Added support for only performing updates if there is a newer version * Fixed exit 1 on bad cd * Fixed expansion of pids in kill * Trigger CI
James Mills committed
Feb 5, 2020 at 15:38 UTC
8a0ca04ac9901f21c5a5d1889df6312bff0e34da
1 file changed
+56
-21
packaging/installer/netdata-updater.sh
+56
-21
@@ -73,14 +73,45 @@ download() {
73
fi
74
}
75
76
-set_tarball_urls() {
77
- local extension="tar.gz"
76
+function parse_version() {
77
+ r="${1}"
78
+ if echo "${r}" | grep -q '^v.*'; then
79
+ # shellcheck disable=SC2001
80
+ # XXX: Need a regex group subsitutation here.
81
+ r="$(echo "${r}" | sed -e 's/^v\(.*\)/\1/')"
82
+ fi
83
79
- if [ -n "${NETDATA_LOCAL_TARBAL_OVERRIDE}" ]; then
80
- info "Not fetching remote tarballs, local override was given"
81
- return
84
+ read -r -a p <<< "$(echo "${r}" | tr '-' ' ')"
85
+
86
+ v="${p[0]}"
87
+ b="${p[1]}"
88
+ _="${p[2]}" # ignore the SHA
89
+
90
+ if [[ ! "${b}" =~ ^[0-9]+$ ]]; then
91
+ b="0"
92
fi
93
94
+ read -r -a pp <<< "$(echo "${v}" | tr '.' ' ')"
95
+ printf "%03d%03d%03d%03d" "${pp[0]}" "${pp[1]}" "${pp[2]}" "${b}"
96
+}
97
+
98
+get_latest_version() {
99
+ shasums="${1}"
100
+
101
+ tarball="$(grep -o 'netdata-v.*\.tar\.gz' "${shasums}")"
102
+ if [ -n "${tarball}" ]; then
103
+ # shellcheck disable=SC2001
104
+ # XXX: Need to use regex group substitution here.
105
+ version="$(echo "${tarball}" | sed -e 's/^netdata-\(.*\)\.tar.gz/\1/')"
106
+ parse_version "${version}"
107
+ else
108
+ echo "000000000000"
109
+ fi
110
+}
111
+
112
+set_tarball_urls() {
113
+ local extension="tar.gz"
114
+
115
if [ "$2" == "yes" ]; then
116
extension="gz.run"
117
fi
@@ -105,23 +136,27 @@ update() {
136
tmpdir=$(create_tmp_directory)
137
cd "$tmpdir" || exit 1
138
108
- if [ -z "${NETDATA_LOCAL_TARBAL_OVERRIDE}" ]; then
109
- download "${NETDATA_TARBALL_CHECKSUM_URL}" "${tmpdir}/sha256sum.txt" >&3 2>&3
110
- if [[ -n "${NETDATA_TARBALL_CHECKSUM}" ]] && grep "${NETDATA_TARBALL_CHECKSUM}" sha256sum.txt >&3 2>&3; then
111
- info "Newest version is already installed"
112
- else
113
- download "${NETDATA_TARBALL_URL}" "${tmpdir}/netdata-latest.tar.gz"
114
- if ! grep netdata-latest.tar.gz sha256sum.txt | safe_sha256sum -c - >&3 2>&3; then
115
- fatal "Tarball checksum validation failed. Stopping netdata upgrade and leaving tarball in ${tmpdir}"
116
- fi
117
- NEW_CHECKSUM="$(safe_sha256sum netdata-latest.tar.gz 2> /dev/null | cut -d' ' -f1)"
118
- tar -xf netdata-latest.tar.gz >&3 2>&3
119
- rm netdata-latest.tar.gz >&3 2>&3
120
- cd netdata-* || exit 1
121
- RUN_INSTALLER=1
122
- fi
139
+ download "${NETDATA_TARBALL_CHECKSUM_URL}" "${tmpdir}/sha256sum.txt" >&3 2>&3
140
+
141
+ current_version="$(command -v netdata > /dev/null && parse_version "$(netdata -v | cut -f 2 -d ' ')")"
142
+ latest_version="$(get_latest_version "${tmpdir}/sha256sum.txt")"
143
+
144
+ info "Current Version: ${current_version}"
145
+ info "Latest Version: ${latest_version}"
146
+
147
+ if [ "${latest_version}" -gt 0 ] && [ "${current_version}" -gt 0 ] && [ "${current_version}" -ge "${current_version}" ]; then
148
+ info "Newest version ${current_version} <= ${latest_version} is already installed"
149
+ elif [ -n "${NETDATA_TARBALL_CHECKSUM}" ] && grep "${NETDATA_TARBALL_CHECKSUM}" sha256sum.txt >&3 2>&3; then
150
+ info "Newest version is already installed"
151
else
124
- info "!!Local tarball override detected!! - Entering directory ${NETDATA_LOCAL_TARBAL_OVERRIDE} for installation, not downloading anything"
152
+ download "${NETDATA_TARBALL_URL}" "${tmpdir}/netdata-latest.tar.gz"
153
+ if ! grep netdata-latest.tar.gz sha256sum.txt | safe_sha256sum -c - >&3 2>&3; then
154
+ fatal "Tarball checksum validation failed. Stopping netdata upgrade and leaving tarball in ${tmpdir}"
155
+ fi
156
+ NEW_CHECKSUM="$(safe_sha256sum netdata-latest.tar.gz 2> /dev/null | cut -d' ' -f1)"
157
+ tar -xf netdata-latest.tar.gz >&3 2>&3
158
+ rm netdata-latest.tar.gz >&3 2>&3
159
+ cd netdata-* || exit 1
160
RUN_INSTALLER=1
161
cd "${NETDATA_LOCAL_TARBAL_OVERRIDE}" || exit 1
162
fi