mirror of
https://github.com/philmmanjaro/alma.git
synced 2025-12-06 19:29:21 +01:00
[presets] add steamos files
This commit is contained in:
170
presets/steam/steamos/bin/steamos-update
Executable file
170
presets/steam/steamos/bin/steamos-update
Executable file
@@ -0,0 +1,170 @@
|
||||
#!/bin/bash
|
||||
|
||||
set -eu
|
||||
|
||||
##
|
||||
## This script must match the API the temporary Steam UI updater wants of us, including this file
|
||||
##
|
||||
|
||||
unset tmpdir
|
||||
cleanup() { rm -rf /tmp/steamos-update.pid; [[ -z ${tmpdir-} ]] || rm -rf --one-file-system -- "$tmpdir"; }
|
||||
trap cleanup EXIT
|
||||
touch /tmp/steamos-update.pid
|
||||
info() { echo >&2 "$*"; }
|
||||
die() { info "!! $*"; exit 1; }
|
||||
|
||||
|
||||
checkmode=""
|
||||
error=""
|
||||
beta=""
|
||||
debug=""
|
||||
|
||||
while [[ $# -ge 1 ]]; do
|
||||
case "$1" in
|
||||
"check") checkmode=1 ;;
|
||||
"--beta") beta=1 ;;
|
||||
"-d") debug=1 ;;
|
||||
*)
|
||||
error=1
|
||||
info "Unknown option \"$1\""
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if [[ -n $error ]]; then
|
||||
echo >&2 "!! Usage: $0 [check]"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
atomupd_args=(--manifest "/usr/share/steamos-update/manifest-0.json")
|
||||
[[ -n $debug ]] && atomupd_args+=(-d)
|
||||
|
||||
# Determine which branches to check.
|
||||
check_rel=0
|
||||
check_rc=0
|
||||
check_beta=0
|
||||
check_bc=0
|
||||
check_main=0
|
||||
|
||||
if [[ -n $beta ]]; then
|
||||
info "'--beta' is deprecated; use 'steamos-select-branch beta' then 'steamos-update'"
|
||||
check_beta=1
|
||||
else
|
||||
branch_path="/var/lib/steamos-branch"
|
||||
branch=$(cat "$branch_path" 2> /dev/null || echo "rel")
|
||||
case "$branch" in
|
||||
"rel")
|
||||
check_rel=1
|
||||
;;
|
||||
"rc")
|
||||
check_rel=1
|
||||
check_rc=1
|
||||
;;
|
||||
"beta")
|
||||
check_beta=1
|
||||
;;
|
||||
"bc")
|
||||
check_beta=1
|
||||
check_bc=1
|
||||
;;
|
||||
"main")
|
||||
check_main=1
|
||||
;;
|
||||
*)
|
||||
echo "unknown branch name in $branch_path: $branch" 1>&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Get the buildid for each variant.
|
||||
get_buildid () {
|
||||
if [[ $1 = 0 ]]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
query="$(sudo steamos-atomupd-client "${atomupd_args[@]}" --variant="$2" --query-only)"
|
||||
if [[ -z $query ]]; then
|
||||
info "Failed to check for updates"
|
||||
exit 1 # Unknown failure
|
||||
fi
|
||||
|
||||
jq -r '.minor.candidates[0].image.buildid | select(type == "string")' <<< "$query"
|
||||
}
|
||||
|
||||
buildid_rel="$(get_buildid $check_rel steamdeck)"
|
||||
buildid_rc="$(get_buildid $check_rc steamdeck-rc)"
|
||||
buildid_beta="$(get_buildid $check_beta steamdeck-beta)"
|
||||
buildid_bc="$(get_buildid $check_bc steamdeck-bc)"
|
||||
buildid_main="$(get_buildid $check_main steamdeck-main)"
|
||||
|
||||
if [[ -n $debug ]]; then
|
||||
info "buildid_rel=$buildid_rel"
|
||||
info "buildid_rc=$buildid_rc"
|
||||
info "buildid_beta=$buildid_beta"
|
||||
info "buildid_bc=$buildid_bc"
|
||||
info "buildid_main=$buildid_main"
|
||||
fi
|
||||
|
||||
# Choose the variant with the newest buildid.
|
||||
chosen_buildid=""
|
||||
chosen_variant=""
|
||||
|
||||
if [[ "$buildid_rel" > "$chosen_buildid" ]]; then
|
||||
chosen_buildid="$buildid_rel"
|
||||
chosen_variant="steamdeck"
|
||||
fi
|
||||
if [[ "$buildid_rc" > "$chosen_buildid" ]]; then
|
||||
chosen_buildid="$buildid_rc"
|
||||
chosen_variant="steamdeck-rc"
|
||||
fi
|
||||
if [[ "$buildid_beta" > "$chosen_buildid" ]]; then
|
||||
chosen_buildid="$buildid_beta"
|
||||
chosen_variant="steamdeck-beta"
|
||||
fi
|
||||
if [[ "$buildid_bc" > "$chosen_buildid" ]]; then
|
||||
chosen_buildid="$buildid_bc"
|
||||
chosen_variant="steamdeck-bc"
|
||||
fi
|
||||
if [[ "$buildid_main" > "$chosen_buildid" ]]; then
|
||||
chosen_buildid="$buildid_main"
|
||||
chosen_variant="steamdeck-main"
|
||||
fi
|
||||
|
||||
if [[ -z "$chosen_variant" ]]; then
|
||||
info "No update available"
|
||||
exit 7
|
||||
fi
|
||||
|
||||
manifest_path="/etc/steamos-atomupd/manifest.json"
|
||||
current_buildid=$(jq -r .buildid < "$manifest_path")
|
||||
if [[ "$current_buildid" = "$chosen_buildid" ]]; then
|
||||
info "No update available"
|
||||
exit 7
|
||||
fi
|
||||
|
||||
if [[ -n $debug ]]; then
|
||||
info "chosen_buildid=$chosen_buildid"
|
||||
info "chosen_variant=$chosen_variant"
|
||||
fi
|
||||
|
||||
# Update is available
|
||||
info "Update available"
|
||||
|
||||
# Check mode, return success for update available
|
||||
if [[ -n ${checkmode-} ]]; then
|
||||
echo "$chosen_buildid"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Not check mode. Update!
|
||||
do_atomupd() { sudo steamos-atomupd-client "${atomupd_args[@]}" --variant="$chosen_variant" "$@"; }
|
||||
|
||||
if do_atomupd; then
|
||||
info "Applied an update"
|
||||
exit 0
|
||||
else
|
||||
info "Update failed"
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user