mirror of
https://github.com/SteamFramelyHomebrew/framely.git
synced 2026-10-23 11:01:57 +02:00
57 lines
3.2 KiB
Bash
Executable File
57 lines
3.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
base=$(cd -- "$(dirname -- "$0")/.." && pwd)
|
|
cef=$(realpath "$1")
|
|
cd "$base"
|
|
out=$(mktemp -d "${TMPDIR:-/tmp}/framely-launcher.XXXXXX")
|
|
server_pid=''
|
|
cleanup() { if [[ -n $server_pid ]]; then kill "$server_pid" 2>/dev/null || true; wait "$server_pid" 2>/dev/null || true; fi; }
|
|
trap cleanup EXIT
|
|
export FRAMELY_INSTALL_REVIEW_OUTPUT="$out"
|
|
export FRAMELY_INSTALL_REVIEW_FIXTURE="${2:-tests/launcher_fixture.tsx}"
|
|
node --input-type=module - <<'JS'
|
|
import {build} from 'esbuild';
|
|
import {writeFile} from 'node:fs/promises';
|
|
const out=process.env.FRAMELY_INSTALL_REVIEW_OUTPUT;
|
|
await build({entryPoints:[process.env.FRAMELY_INSTALL_REVIEW_FIXTURE],bundle:true,outfile:`${out}/fixture.js`,define:{'process.env.NODE_ENV':'"production"'}});
|
|
await build({entryPoints:['tests/launcher_action_fixture.ts'],bundle:true,outfile:`${out}/action.js`,define:{'process.env.NODE_ENV':'"production"'}});
|
|
await build({entryPoints:['sdk/src/bootstrap.ts'],bundle:true,outfile:`${out}/bootstrap.js`});
|
|
await writeFile(`${out}/index.html`,'<!doctype html><html lang="zh-CN"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><link rel="stylesheet" href="fixture.css"><div id="root"></div><script src="fixture.js"></script></html>');
|
|
JS
|
|
mkdir -p "$out/assets"
|
|
cp -a assets/branding "$out/assets/branding"
|
|
if [[ -n ${FRAMELY_LAUNCHER_PREVIEW_ASSETS:-} ]]; then cp -a "$FRAMELY_LAUNCHER_PREVIEW_ASSETS" "$out/preview-icons"; fi
|
|
python3 - "$out" > "$out/server.log" 2>&1 <<'PY' &
|
|
import functools,http.server,pathlib,sys
|
|
root=pathlib.Path(sys.argv[1])
|
|
class Handler(http.server.SimpleHTTPRequestHandler):
|
|
def do_GET(self):
|
|
if self.path.startswith('/plugin-assets/'):
|
|
icon='termix' if '/demo.alpha/' in self.path else 'passthrough'
|
|
self.path='/preview-icons/'+icon+'.png'
|
|
return super().do_GET()
|
|
if self.path.startswith('/plugin-action-frame/'):
|
|
data=b"<!doctype html><div id=root></div><script src='/bootstrap.js'></script><script src='/action.js'></script>"
|
|
self.send_response(200);self.send_header('Content-Type','text/html');self.end_headers();self.wfile.write(data)
|
|
else:super().do_GET()
|
|
server=http.server.ThreadingHTTPServer(('127.0.0.1',0),functools.partial(Handler,directory=str(root)))
|
|
(root/'port').write_text(str(server.server_port))
|
|
server.serve_forever()
|
|
PY
|
|
server_pid=$!
|
|
for _ in {1..100}; do [[ ! -f $out/port ]] || break; sleep 0.05; done
|
|
port=$(cat "$out/port")
|
|
cp -a "$cef/Resources/." "$cef/Release/"
|
|
node tools/build-scroll-gestures.mjs "$out"
|
|
g++ -std=c++17 -O2 -I"$out" -I"$cef" tests/browser_probe.cpp -L"$cef/Release" -lcef -pthread '-Wl,-rpath,$ORIGIN' -o "$cef/Release/framely-browser-probe"
|
|
for mode in desktop; do
|
|
mkdir "$out/$mode"
|
|
export FRAMELY_CEF_ROOT="$cef" FRAMELY_LAUNCHER_TEST=1 FRAMELY_INSTALL_REVIEW_TEST=1 FRAMELY_PREVIEW_DIR="$out/$mode" GSETTINGS_BACKEND=memory
|
|
if [[ $mode == desktop ]]; then export FRAMELY_STORE_TEST=1; else unset FRAMELY_STORE_TEST; fi
|
|
if ! "$cef/Release/framely-browser-probe" "http://127.0.0.1:$port" "$out/$mode-runtime" --ozone-platform=headless --disable-gpu > "$out/$mode.log" 2>&1; then
|
|
cat "$out/$mode.log"; exit 1
|
|
fi
|
|
tail -n 1 "$out/$mode.log"
|
|
done
|
|
printf 'Launcher previews: %s\n' "$out"
|