mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-07-29 22:26:31 +00:00
fwupdate: add support for indicating latest version
This commit is contained in:
parent
e108599081
commit
fc4236ee3f
@ -211,7 +211,7 @@ function show_versions() {
|
|||||||
show_json=$1
|
show_json=$1
|
||||||
|
|
||||||
# the /usr/libexec/list-versions-* helpers return a table with the following format:
|
# the /usr/libexec/list-versions-* helpers return a table with the following format:
|
||||||
# <version>|<prerelease>|<board>|<url>|<date>
|
# <version>|<prerelease>|<board>|<url>|<date|latest>
|
||||||
versions=$(FW_USERNAME=${OS_FIRMWARE_USERNAME} FW_PASSWORD=${OS_FIRMWARE_PASSWORD} \
|
versions=$(FW_USERNAME=${OS_FIRMWARE_USERNAME} FW_PASSWORD=${OS_FIRMWARE_PASSWORD} \
|
||||||
/usr/libexec/list-versions-${OS_FIRMWARE_METHOD} ${OS_FIRMWARE_REPO})
|
/usr/libexec/list-versions-${OS_FIRMWARE_METHOD} ${OS_FIRMWARE_REPO})
|
||||||
|
|
||||||
@ -230,9 +230,9 @@ function show_versions() {
|
|||||||
if [[ "${show_json}" == "true" ]]; then
|
if [[ "${show_json}" == "true" ]]; then
|
||||||
echo "{\"version\": \"${varr[0]}\"," \
|
echo "{\"version\": \"${varr[0]}\"," \
|
||||||
"\"url\": \"${varr[3]}\"," \
|
"\"url\": \"${varr[3]}\"," \
|
||||||
"\"board\": \"${varr[2]}\"," \
|
"\"prerelease\": ${varr[1]:-false}," \
|
||||||
"\"prerelease\": ${varr[1]}," \
|
"\"date\": \"${varr[4]}\"," \
|
||||||
"\"date\": \"${varr[4]}\"}"
|
"\"latest\": ${varr[5]:-false}}"
|
||||||
else
|
else
|
||||||
echo ${varr[0]}
|
echo ${varr[0]}
|
||||||
fi
|
fi
|
||||||
|
@ -14,6 +14,26 @@ function check_prerelease() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function add_latest_flag() {
|
||||||
|
declare -A latest_stable_by_board
|
||||||
|
declare -A latest_prerelease_by_board
|
||||||
|
while read line; do
|
||||||
|
_IFS=${IFS} IFS="|" line_arr=(${line}) IFS=${_IFS}
|
||||||
|
latest="false"
|
||||||
|
prerelease=${line_arr[1]}
|
||||||
|
board=${line_arr[2]}
|
||||||
|
if [[ "${prerelease}" == "true" && -z "${latest_prerelease_by_board[${board}]}" ]]; then
|
||||||
|
latest="true"
|
||||||
|
latest_prerelease_by_board[${board}]="true"
|
||||||
|
elif [[ "${prerelease}" == "false" && -z "${latest_stable_by_board[${board}]}" ]]; then
|
||||||
|
latest="true"
|
||||||
|
latest_stable_by_board[${board}]="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${line}|${latest}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
extensions=".img.gz .img.xz .img"
|
extensions=".img.gz .img.xz .img"
|
||||||
opts="-s -S -f"
|
opts="-s -S -f"
|
||||||
test -n "${FW_USERNAME}" && opts+=" --user ${FW_USERNAME}:${FW_PASSWORD}"
|
test -n "${FW_USERNAME}" && opts+=" --user ${FW_USERNAME}:${FW_PASSWORD}"
|
||||||
@ -23,6 +43,5 @@ rtrimstr=$(for e in ${extensions}; do echo -n " | rtrimstr(\"${e}\")"; done)
|
|||||||
jq_expr=".values[] | [{a: .name | split(\"-\"), url: .links.self.href, date: .created_on | split(\"T\")[0]}] |
|
jq_expr=".values[] | [{a: .name | split(\"-\"), url: .links.self.href, date: .created_on | split(\"T\")[0]}] |
|
||||||
map((.a[2] ${rtrimstr}), \"false\", .a[1], .url, .date) | join(\"|\")"
|
map((.a[2] ${rtrimstr}), \"false\", .a[1], .url, .date) | join(\"|\")"
|
||||||
|
|
||||||
curl ${opts} ${url} | jq --raw-output "${jq_expr}" | while read line; do echo "${line}" | check_prerelease; done
|
curl ${opts} ${url} | jq --raw-output "${jq_expr}" | while read line; do echo "${line}" | check_prerelease | add_latest_flag; done
|
||||||
exit ${PIPESTATUS[0]}
|
exit ${PIPESTATUS[0]}
|
||||||
|
|
||||||
|
@ -7,12 +7,23 @@ fi
|
|||||||
|
|
||||||
opts="-s -S -f"
|
opts="-s -S -f"
|
||||||
test -n "${FW_USERNAME}" && opts+=" --user ${FW_USERNAME}:${FW_PASSWORD}"
|
test -n "${FW_USERNAME}" && opts+=" --user ${FW_USERNAME}:${FW_PASSWORD}"
|
||||||
url=https://api.github.com/repos/$1/releases
|
releases_url=https://api.github.com/repos/$1/releases
|
||||||
|
latest_url=https://api.github.com/repos/$1/releases/latest
|
||||||
|
|
||||||
|
# Get release info via GitHub API
|
||||||
|
latest_version=$(curl ${opts} ${latest_url} | jq --raw-output ".name")
|
||||||
|
releases=$(curl ${opts} ${releases_url})
|
||||||
|
test $? == 0 || exit 1
|
||||||
|
|
||||||
|
# Latest pre-release is the first one
|
||||||
|
latest_prerelease=$(jq --raw-output | '[.[] | select(.prerelease)] | first | .name' <<< ${releases})
|
||||||
|
|
||||||
|
# Format release lines
|
||||||
jq_expr='.[] | {version: .name, prerelease: .prerelease | tostring} +
|
jq_expr='.[] | {version: .name, prerelease: .prerelease | tostring} +
|
||||||
(.assets[] | {name: .name | split("-")[1], url: .browser_download_url}) +
|
(.assets[] | {name: .name | split("-")[1], url: .browser_download_url}) +
|
||||||
({date: .created_at | split("T")[0]}) | flatten | join("|")'
|
({date: .created_at | split("T")[0]}) +
|
||||||
|
({latest: (.name=="'${latest_version}'")})
|
||||||
curl ${opts} ${url} | jq --raw-output "${jq_expr}"
|
| flatten | join("|")'
|
||||||
exit ${PIPESTATUS[0]}
|
|
||||||
|
|
||||||
|
jq --raw-output "${jq_expr}" <<< ${releases}
|
||||||
|
exit $?
|
||||||
|
@ -22,13 +22,33 @@ dates=$(echo "${xml_result}" | grep -oE '<LastModified>[^<]+<\/LastModified>' |
|
|||||||
dates=(${dates})
|
dates=(${dates})
|
||||||
files=(${keys})
|
files=(${keys})
|
||||||
|
|
||||||
|
function add_latest_flag() {
|
||||||
|
declare -A latest_stable_by_board
|
||||||
|
declare -A latest_prerelease_by_board
|
||||||
|
while read line; do
|
||||||
|
_IFS=${IFS} IFS="|" line_arr=(${line}) IFS=${_IFS}
|
||||||
|
latest="false"
|
||||||
|
prerelease=${line_arr[1]}
|
||||||
|
board=${line_arr[2]}
|
||||||
|
if [[ "${prerelease}" == "true" && -z "${latest_prerelease_by_board[${board}]}" ]]; then
|
||||||
|
latest="true"
|
||||||
|
latest_prerelease_by_board[${board}]="true"
|
||||||
|
elif [[ "${prerelease}" == "false" && -z "${latest_stable_by_board[${board}]}" ]]; then
|
||||||
|
latest="true"
|
||||||
|
latest_stable_by_board[${board}]="true"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "${line}|${latest}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
i=0
|
i=0
|
||||||
for file in ${files[*]}; do
|
for file in ${files[*]}; do
|
||||||
[[ "${file}" =~ ^${path}/(.+)/(.+)$ ]] || continue
|
[[ "${file}" =~ ^${path}/(.+)/(.+)$ ]] || continue
|
||||||
version="${BASH_REMATCH[1]}"
|
version="${BASH_REMATCH[1]}"
|
||||||
fname="${BASH_REMATCH[2]}"
|
fname="${BASH_REMATCH[2]}"
|
||||||
|
|
||||||
prerelease=false
|
prerelease=false
|
||||||
|
|
||||||
if [[ "${version}" =~ ^.*[abc]\.?[0-9]+$ ]] || # e.g. 0.4.1b2, 0.4.1b.2, 0.4.1-b.2
|
if [[ "${version}" =~ ^.*[abc]\.?[0-9]+$ ]] || # e.g. 0.4.1b2, 0.4.1b.2, 0.4.1-b.2
|
||||||
[[ "${version}" =~ ^.*(alpha|beta|rc)\.?[0-9]+$ ]] || # e.g. 0.4.1beta2, 0.4.1beta.2, 0.4.1-beta.2
|
[[ "${version}" =~ ^.*(alpha|beta|rc)\.?[0-9]+$ ]] || # e.g. 0.4.1beta2, 0.4.1beta.2, 0.4.1-beta.2
|
||||||
[[ "${version}" =~ ^(dev|nightly).*$ ]]; then # e.g. dev20180314, nightly20180314
|
[[ "${version}" =~ ^(dev|nightly).*$ ]]; then # e.g. dev20180314, nightly20180314
|
||||||
@ -42,4 +62,4 @@ for file in ${files[*]}; do
|
|||||||
|
|
||||||
echo "${version}|${prerelease}|${board}|${final_url}|${date}"
|
echo "${version}|${prerelease}|${board}|${final_url}|${date}"
|
||||||
i=$((i + 1))
|
i=$((i + 1))
|
||||||
done | semver-sort -r -t '|' -k 1
|
done | semver-sort -r -t '|' -k 1 | add_latest_flag
|
||||||
|
Loading…
x
Reference in New Issue
Block a user