cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

release/v0.1.0-pins
goq / scripts / tests / bazzite-package-assets.sh
bazzite-package-assets.sh 3.5K executable
1#!/usr/bin/env bash23set -euo pipefail45script_dir="$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"6repo_dir="$(CDPATH='' cd -- "$script_dir/../.." && pwd -P)"7installer="$repo_dir/scripts/install-bazzite-package.sh"8temp_parent="${TMPDIR:-/tmp}"9temp_parent="${temp_parent%/}"10temp_root="$(mktemp -d "$temp_parent/sigil-package-assets.XXXXXX")"11helper_script="$temp_root/managed-assets.sh"1213cleanup() {14 local status=$?15 trap - EXIT INT TERM HUP16 case "$temp_root" in17 "$temp_parent"/sigil-package-assets.??????) rm -rf -- "$temp_root" ;;18 esac19 exit "$status"20}21trap cleanup EXIT INT TERM HUP2223sed -n \24 '/^# BEGIN managed asset helpers /,/^# END managed asset helpers$/p' \25 "$installer" | sed '1d;$d' >"$helper_script"26grep -Fq 'install_managed_links()' "$helper_script"2728# shellcheck source=/dev/null29source "$helper_script"3031die() {32 printf 'test installer rejected: %s\n' "$*" >&233 exit 134}3536# Referenced by the sourced production helper block.37# shellcheck disable=SC203438release_id=0123456789abcdef39# shellcheck disable=SC203440next_managed_links=()4142make_assets() {43 local root="$1"44 local index45 install -d -m 0700 "$root/assets" "$root/links"46 for index in 0 1 2 3; do47 printf 'release asset %s\n' "$index" >"$root/assets/$index"48 done49}5051set_managed_arrays() {52 local root="$1"53 managed_links=(54 "$root/links/0"55 "$root/links/1"56 "$root/links/2"57 "$root/links/3"58 )59 managed_targets=(60 "$root/future/0"61 "$root/future/1"62 "$root/future/2"63 "$root/future/3"64 )65 managed_release_assets=(66 "$root/assets/0"67 "$root/assets/1"68 "$root/assets/2"69 "$root/assets/3"70 )71}7273success_root="$temp_root/success"74make_assets "$success_root"75set_managed_arrays "$success_root"76ln -s "${managed_targets[0]}" "${managed_links[0]}"77cp "${managed_release_assets[2]}" "${managed_links[2]}"78cp "${managed_release_assets[3]}" "${managed_links[3]}"79install_managed_links80for index in 0 1 2 3; do81 [[ -L "${managed_links[$index]}" ]]82 [[ "$(readlink "${managed_links[$index]}")" == "${managed_targets[$index]}" ]]83done8485mismatch_root="$temp_root/mismatch"86make_assets "$mismatch_root"87set_managed_arrays "$mismatch_root"88cp "${managed_release_assets[1]}" "${managed_links[1]}"89ln -s "${managed_targets[2]}" "${managed_links[2]}"90printf 'locally modified\n' >"${managed_links[3]}"91if ( install_managed_links ); then92 printf 'FAIL: mismatched regular asset unexpectedly succeeded\n' >&293 exit 194fi95[[ ! -e "${managed_links[0]}" && ! -L "${managed_links[0]}" ]]96[[ -f "${managed_links[1]}" && ! -L "${managed_links[1]}" ]]97cmp -s "${managed_release_assets[1]}" "${managed_links[1]}"98[[ -L "${managed_links[2]}" ]]99[[ "$(readlink "${managed_links[2]}")" == "${managed_targets[2]}" ]]100[[ -f "${managed_links[3]}" && ! -L "${managed_links[3]}" ]]101grep -Fq 'locally modified' "${managed_links[3]}"102103unsafe_root="$temp_root/unsafe"104make_assets "$unsafe_root"105set_managed_arrays "$unsafe_root"106cp "${managed_release_assets[1]}" "${managed_links[1]}"107ln -s "${managed_targets[2]}" "${managed_links[2]}"108mkfifo "${managed_links[3]}"109if ( install_managed_links ); then110 printf 'FAIL: unsafe managed asset type unexpectedly succeeded\n' >&2111 exit 1112fi113[[ ! -e "${managed_links[0]}" && ! -L "${managed_links[0]}" ]]114[[ -f "${managed_links[1]}" && ! -L "${managed_links[1]}" ]]115[[ -L "${managed_links[2]}" ]]116[[ -p "${managed_links[3]}" ]]117118# Intentional literal verifies the ownership gate in the extracted production helper.119# shellcheck disable=SC2016120grep -Fq '[[ -f "$link" && -O "$link" ]]' "$helper_script"121printf 'bazzite_package_asset_tests=ok\n'