feat: forward RunicNPC's profiles and placements; the egg installs RunicNPC (runicnpc stage 4) #21
@@ -138,6 +138,21 @@ rg_install() {
|
||||
fetch '.sidecar.assets["linux-x86_64"]' rust-link-sidecar
|
||||
fetch '.sidecar.launcher' with-sidecar.sh
|
||||
fetch '.payload.asset' plugin.tar.gz
|
||||
# RunicNPC (docs/runicnpc/PLAN.md D224), when the bundle carries it: a third
|
||||
# file beside the bridge, checked the same way before anything is placed.
|
||||
local npc=""
|
||||
if jq -e '.npc != null' "${work}/bundle.json" >/dev/null; then
|
||||
npc="$(jq -r '.npc.tag' "${work}/bundle.json")"
|
||||
fetch '.npc.asset' runicnpc.tar.gz
|
||||
tar -xzf "${work}/runicnpc.tar.gz" -C "${work}"
|
||||
local npc_manifest="${work}/runicnpc/manifest.json"
|
||||
[ -f "${npc_manifest}" ] || { echo "Runic Gateway: the RunicNPC tarball has no manifest.json"; return 1; }
|
||||
[ "$(jq -r '.api' "${npc_manifest}")" = "$(jq -r '.npc.api' "${work}/bundle.json")" ] \
|
||||
|| { echo "Runic Gateway: RunicNPC answers API $(jq -r '.api' "${npc_manifest}"), the bundle says $(jq -r '.npc.api' "${work}/bundle.json") - refusing it"; return 1; }
|
||||
[ -f "${work}/runicnpc/RunicNPC.cs" ] || { echo "Runic Gateway: the RunicNPC tarball has no RunicNPC.cs"; return 1; }
|
||||
echo "$(jq -r '.files["RunicNPC.cs"]' "${npc_manifest}") ${work}/runicnpc/RunicNPC.cs" | sha256sum -c --quiet - \
|
||||
|| { echo "Runic Gateway: RunicNPC.cs does not match its manifest's sha256 - refusing it"; return 1; }
|
||||
fi
|
||||
|
||||
tar -xzf "${work}/plugin.tar.gz" -C "${work}"
|
||||
local manifest="${work}/runicgateway-rust-plugin/manifest.json"
|
||||
@@ -164,15 +179,22 @@ rg_install() {
|
||||
|| { echo "Runic Gateway: ${file} does not match the plugin manifest's sha256 - refusing it"; return 1; }
|
||||
done
|
||||
[ -f "${work}/runicgateway-rust-plugin/RunicGateway.cs" ] || { echo "Runic Gateway: the plugin tarball has no RunicGateway.cs"; return 1; }
|
||||
# RunicNPC before the bridge: the bridge reports it at hello. Its data directory
|
||||
# is NOT made here - one made from outside the game is not writable by it
|
||||
# (runicnpc PLAN.md §1.5); RunicNPC makes its own on first load.
|
||||
if [ -n "${npc}" ]; then
|
||||
install -m 644 "${work}/runicnpc/RunicNPC.cs" "${plugins}/RunicNPC.cs"
|
||||
fi
|
||||
for file in $(jq -r '.files | keys[]' "${manifest}"); do
|
||||
install -m 644 "${work}/runicgateway-rust-plugin/${file}" "${plugins}/${file}"
|
||||
done
|
||||
# What is installed, readable from the panel's file manager.
|
||||
jq --arg framework "${FRAMEWORK}" --arg installed "$(date -u +%Y-%m-%dT%H:%M:%SZ)" \
|
||||
'{ bundle, protocol, framework: $framework, installed: $installed,
|
||||
sidecar: { tag: .sidecar.tag }, plugin: { tag: .payload.tag, commit: .payload.commit } }' \
|
||||
sidecar: { tag: .sidecar.tag }, plugin: { tag: .payload.tag, commit: .payload.commit } }
|
||||
+ (if .npc == null then {} else { runicnpc: { tag: .npc.tag, api: .npc.api } } end)' \
|
||||
"${work}/bundle.json" > /mnt/server/rust-link/bundle.json
|
||||
echo "Runic Gateway: installed sidecar $(jq -r '.sidecar.tag' "${work}/bundle.json") and plugin $(jq -r '.payload.tag' "${work}/bundle.json") (${FRAMEWORK})"
|
||||
echo "Runic Gateway: installed sidecar $(jq -r '.sidecar.tag' "${work}/bundle.json") and plugin $(jq -r '.payload.tag' "${work}/bundle.json")${npc:+ and RunicNPC ${npc}} (${FRAMEWORK})"
|
||||
echo "Runic Gateway: add this server under Admin -> Rust -> Servers; the console prints its URL and, on first boot, its token."
|
||||
}
|
||||
# In a subshell so `set -e` inside cannot leak into the rest of this script, and
|
||||
|
||||
Reference in New Issue
Block a user