59 lines
1.5 KiB
Bash
Executable File
59 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
repo_root="$(git -C "$(dirname "${BASH_SOURCE[0]}")" rev-parse --show-toplevel)"
|
|
tool_dir="$repo_root/tools/quickshell-preview"
|
|
shell_root="$repo_root/dotfiles/quickshell"
|
|
image="homelab-quickshell-preview:qsmcp-76b1b008"
|
|
|
|
component="${1:-tests/HeadlessSmoke.qml}"
|
|
output="${2:-${TMPDIR:-/tmp}/homelab-quickshell-preview/smoke.png}"
|
|
width="${3:-720}"
|
|
height="${4:-120}"
|
|
|
|
if ! docker info >/dev/null 2>&1; then
|
|
echo "error: Docker-compatible daemon is unavailable" >&2
|
|
exit 69
|
|
fi
|
|
|
|
case "$output" in
|
|
/*) ;;
|
|
*) output="$PWD/$output" ;;
|
|
esac
|
|
|
|
output_dir="$(dirname "$output")"
|
|
output_name="$(basename "$output")"
|
|
mkdir -p "$output_dir"
|
|
|
|
container_id=""
|
|
cleanup() {
|
|
if [[ -n "$container_id" ]]; then
|
|
docker rm --force "$container_id" >/dev/null 2>&1 || true
|
|
fi
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
docker build --tag "$image" --file "$tool_dir/Dockerfile" "$tool_dir"
|
|
|
|
container_id="$(docker create \
|
|
--network none \
|
|
--tmpfs /tmp:rw,noexec,nosuid,size=256m \
|
|
"$image" \
|
|
"$component" \
|
|
--width "$width" \
|
|
--height "$height" \
|
|
--dpr 1 \
|
|
--padding 0 \
|
|
--background solid \
|
|
--bg '#0a0a0a' \
|
|
--out "/output/$output_name")"
|
|
|
|
# docker cp streams files through the API, so this works with rootless and
|
|
# remote daemons whose filesystem cannot see the client's repository path.
|
|
docker cp "$shell_root/." "$container_id:/workspace/quickshell"
|
|
docker start --attach "$container_id"
|
|
docker cp "$container_id:/output/$output_name" "$output"
|
|
|
|
test -s "$output"
|
|
printf 'rendered=%s\n' "$output"
|