95 lines
1.8 KiB
Bash
Executable file
95 lines
1.8 KiB
Bash
Executable file
#!/usr/bin/env bash
|
|
|
|
burrow_require_cmd() {
|
|
if ! command -v "$1" >/dev/null 2>&1; then
|
|
echo "missing required command: $1" >&2
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
burrow_cleanup_flake_tmpdirs() {
|
|
if [[ "${#BURROW_FLAKE_TMPDIRS[@]}" -eq 0 ]]; then
|
|
return
|
|
fi
|
|
rm -rf "${BURROW_FLAKE_TMPDIRS[@]}"
|
|
}
|
|
|
|
burrow_prepare_flake_ref() {
|
|
local input="${1:-.}"
|
|
|
|
case "${input}" in
|
|
path:*|git+*|github:*|tarball+*|http://*|https://*)
|
|
printf '%s\n' "${input}"
|
|
return 0
|
|
;;
|
|
esac
|
|
|
|
local resolved
|
|
resolved="$(cd "${input}" && pwd)"
|
|
|
|
local cache_root="${HOME}/.cache/burrow"
|
|
mkdir -p "${cache_root}"
|
|
|
|
local copy_root
|
|
copy_root="$(mktemp -d "${cache_root}/flake-XXXXXX")"
|
|
mkdir -p "${copy_root}/repo"
|
|
|
|
rsync -a \
|
|
--delete \
|
|
--exclude '.git' \
|
|
--exclude '.direnv' \
|
|
--exclude 'result' \
|
|
--exclude 'burrow.sock' \
|
|
--exclude 'node_modules' \
|
|
--exclude 'target' \
|
|
--exclude 'build' \
|
|
"${resolved}/" "${copy_root}/repo/"
|
|
|
|
BURROW_FLAKE_TMPDIRS+=("${copy_root}")
|
|
printf 'path:%s/repo\n' "${copy_root}"
|
|
}
|
|
|
|
burrow_resolve_image_artifact() {
|
|
local store_path="$1"
|
|
|
|
if [[ -f "${store_path}" ]]; then
|
|
printf '%s\n' "${store_path}"
|
|
return 0
|
|
fi
|
|
|
|
if [[ -d "${store_path}" ]]; then
|
|
local candidate
|
|
candidate="$(
|
|
find "${store_path}" -type f \
|
|
\( -name '*.raw' -o -name '*.raw.*' -o -name '*.img' -o -name '*.img.*' \) \
|
|
| sort \
|
|
| head -n1
|
|
)"
|
|
if [[ -n "${candidate}" ]]; then
|
|
printf '%s\n' "${candidate}"
|
|
return 0
|
|
fi
|
|
fi
|
|
|
|
echo "unable to locate disk image artifact under ${store_path}" >&2
|
|
exit 1
|
|
}
|
|
|
|
burrow_detect_compression() {
|
|
local artifact="$1"
|
|
|
|
case "${artifact}" in
|
|
*.bz2)
|
|
printf 'bz2\n'
|
|
;;
|
|
*.xz)
|
|
printf 'xz\n'
|
|
;;
|
|
*.zst|*.zstd)
|
|
printf 'zstd\n'
|
|
;;
|
|
*)
|
|
printf '\n'
|
|
;;
|
|
esac
|
|
}
|