Files
archy/tests/apps/run-terminal-browser.sh
T

38 lines
2.4 KiB
Bash

#!/usr/bin/env bash
# Real xterm and transport, isolated synthetic service; never creates a real shell.
set -euo pipefail
[[ $# == 3 ]] || { echo 'usage: run-terminal-browser.sh EMPTY_OUTPUT_DIRECTORY BROWSER_IMAGE_SHA256 LOCKED_FRONTEND_DIRECTORY' >&2; exit 2; }
out=$(realpath "$1"); image=$2; deps=$(realpath "$3")
[[ "$image" =~ ^sha256:[0-9a-f]{64}$ && -d "$deps/node_modules" ]] || exit 2
[[ -d "$out" && -z "$(ls -A "$out")" ]] || exit 2
root=$(cd "$(dirname "$0")/../.." && pwd)
cmp "$root/neode-ui/package.json" "$deps/package.json"
cmp "$root/neode-ui/package-lock.json" "$deps/package-lock.json"
mkdir -p "$out/input/src/components" "$out/input/src/stores"
cp "$root/neode-ui/src/components/CLIPopup.vue" "$out/input/src/components/"
cp "$root/neode-ui/src/stores/cli.ts" "$out/input/src/stores/"
cp "$root/neode-ui/src/style.css" "$out/input/src/"
cp "$root/neode-ui/"{tailwind.config.js,postcss.config.js,package.json,package-lock.json} "$out/input/"
cp -R "$root/tests/apps/terminal-browser" "$out/input/fixture"
mkdir -p "$out/input/fixture/public/assets/fonts/Montserrat" "$out/input/fixture/public/assets/img"
cp "$root/neode-ui/public/assets/fonts/Montserrat/"{Montserrat-Bold,Montserrat-ExtraBold}.ttf "$out/input/fixture/public/assets/fonts/Montserrat/"
cp "$root/neode-ui/public/assets/img/bg.jpg" "$out/input/fixture/public/assets/img/"
(cd "$out/input" && find . -type f -print0 | sort -z | xargs -0 sha256sum) > "$out/SHA256SUMS"
git -C "$root" rev-parse HEAD > "$out/base-commit"
printf '%s\n' "$image" > "$out/browser-image"
date -u +%FT%TZ > "$out/start"
name="archy-terminal-browser-$(date +%s)-$$"
trap 'podman rm -f "$name" >/dev/null 2>&1 || true' EXIT
set +e
timeout 90 podman run --rm --name "$name" --pull never --user 0:0 --network none --read-only --cap-drop all --security-opt no-new-privileges --memory 1g --memory-swap 1g --cpus 1 --pids-limit 256 --tmpfs /tmp:rw,size=256m --tmpfs /work:rw,size=128m -e HOME=/tmp -e XDG_CONFIG_HOME=/tmp/config -e NODE_PATH=/browser/node_modules -v "$out/input:/input:ro" -v "$out:/out:rw" -v "$deps/node_modules:/deps/node_modules:ro" -w /work --entrypoint /bin/sh "$image" -ec '
cp -R /input/. /work/
mkdir node_modules
for dep in /deps/node_modules/*; do ln -s "$dep" node_modules/; done
node /deps/node_modules/vite/bin/vite.js build --config fixture/vite.config.mjs
node fixture/check.cjs
' > "$out/run.log" 2>&1
result=$?
printf '%s\n' "$result" > "$out/exit"
date -u +%FT%TZ > "$out/end"
exit "$result"