Update Installer
Rolling release / release (push) Successful in 8m42s

This commit is contained in:
2026-09-11 21:34:34 -04:00
parent bd34ec49aa
commit 324f0d5e3a
4 changed files with 111 additions and 17 deletions
+92 -14
View File
@@ -7,11 +7,28 @@ EXT_DIR="${XDG_DATA_HOME:-${HOME}/.local/share}/gnome-shell/extensions/jarvis@qv
CONFIG_DIR="${HOME}/.config/jarvis"
CACHE_DIR="${XDG_CACHE_HOME:-${HOME}/.cache}/jarvis/models"
APP_PARENT="$(dirname "${APP_DIR}")"
mkdir -p "${APP_PARENT}" "${CONFIG_DIR}" "${HOME}/.config/systemd/user" "${CACHE_DIR}"
LOG_DIR="${XDG_STATE_HOME:-${HOME}/.local/state}/jarvis"
LOG_FILE="${LOG_DIR}/install.log"
mkdir -p "${APP_PARENT}" "${CONFIG_DIR}" "${HOME}/.config/systemd/user" "${CACHE_DIR}" "${LOG_DIR}"
log() {
local line
line="$(date -Iseconds 2>/dev/null || date '+%Y-%m-%dT%H:%M:%S%z') jarvis-install: $*"
printf '%s\n' "${line}" | tee -a "${LOG_FILE}"
if command -v logger >/dev/null; then
logger --tag jarvis-install -- "$*" 2>/dev/null || logger -t jarvis-install -- "$*" 2>/dev/null || true
fi
}
STAGING=""
EXT_TMP_DIR=""
cleanup_install() { rm -rf "${STAGING}" "${EXT_TMP_DIR}"; }
cleanup_install() {
if [[ -n "${STAGING}" && -e "${STAGING}" ]]; then
log "removing unfinished staging directory ${STAGING}"
rm -rf "${STAGING}"
fi
rm -rf "${EXT_TMP_DIR}"
}
trap cleanup_install EXIT
has_bundled_bare() {
@@ -22,41 +39,82 @@ extract_tree() {
local dest="$1"
mkdir -p "${dest}"
if has_bundled_bare; then
log "staging bundled Bare tree from ${ROOT_DIR} into ${dest}"
tar --exclude='.git' --exclude='./.agents' --exclude='./.codex' --exclude='./dist' --exclude='./vendor/agent-harness/node_modules' --exclude='*/__pycache__' --exclude='*.pyc' -cf - -C "${ROOT_DIR}" . | tar -xf - -C "${dest}"
else
log "staging source tree from ${ROOT_DIR} into ${dest} (excluding node_modules)"
tar --exclude='.git' --exclude='./.agents' --exclude='./.codex' --exclude='./dist' --exclude='./node_modules' --exclude='*/node_modules' --exclude='*/__pycache__' --exclude='*.pyc' -cf - -C "${ROOT_DIR}" . | tar -xf - -C "${dest}"
fi
}
log "starting install from ${ROOT_DIR}"
log "application directory ${APP_DIR}; extension ${EXT_DIR}"
log "preserving config ${CONFIG_DIR}, cache ${CACHE_DIR}, and user data under ${HOME}/.local/share/jarvis"
PREVIOUSLY_ACTIVE=false
if command -v systemctl >/dev/null; then
if systemctl --user is-active --quiet jarvisd.service 2>/dev/null; then
PREVIOUSLY_ACTIVE=true
systemctl --user stop jarvisd.service || true
log "stopping running jarvisd.service before replacing files"
if systemctl --user stop jarvisd.service; then
log "stopped jarvisd.service"
else
log "warning: could not stop jarvisd.service; continuing with replacement"
fi
else
log "jarvisd.service was not running"
fi
else
log "systemctl not found; skipped service stop"
fi
if [[ -e "${APP_DIR}" || -e "${EXT_DIR}" ]]; then
echo "Cleaning the previous JARVIS-QVAC install so this upgrade is a clean replacement."
if [[ -e "${APP_DIR}" ]]; then
log "previous application tree found at ${APP_DIR}"
else
log "no previous application tree at ${APP_DIR}"
fi
if [[ -e "${EXT_DIR}" ]]; then
log "previous GNOME extension found at ${EXT_DIR}"
else
log "no previous GNOME extension at ${EXT_DIR}"
fi
if command -v gnome-extensions >/dev/null; then
gnome-extensions disable [email protected] >/dev/null 2>&1 || true
gnome-extensions uninstall [email protected] >/dev/null 2>&1 || true
if gnome-extensions disable [email protected] >/dev/null 2>&1; then
log "disabled GNOME extension [email protected]"
else
log "GNOME extension [email protected] was not enabled or could not be disabled"
fi
if gnome-extensions uninstall [email protected] >/dev/null 2>&1; then
log "uninstalled GNOME extension [email protected]"
else
log "GNOME extension [email protected] was not registered or could not be uninstalled"
fi
else
log "gnome-extensions not found; removing extension files directly"
fi
if [[ -e "${EXT_DIR}" ]]; then
log "removing leftover extension files at ${EXT_DIR}"
rm -rf "${EXT_DIR}"
fi
rm -rf "${EXT_DIR}"
shopt -s nullglob
for leftover in "${APP_PARENT}"/jarvis-qvac.staging.*; do
log "removing leftover staging directory ${leftover}"
rm -rf "${leftover}"
done
shopt -u nullglob
STAGING="$(mktemp -d "${APP_PARENT}/jarvis-qvac.staging.XXXXXX")"
extract_tree "${STAGING}"
rm -rf "${APP_DIR}"
if [[ -e "${APP_DIR}" ]]; then
log "removing previous application tree ${APP_DIR}"
rm -rf "${APP_DIR}"
fi
log "moving staged tree ${STAGING} into ${APP_DIR}"
mv "${STAGING}" "${APP_DIR}"
STAGING=""
log "application tree replaced at ${APP_DIR}"
case "$(uname -m)" in
x86_64|amd64) BARE_BIN="${APP_DIR}/node_modules/bare-runtime-linux-x64/bin/bare" ;;
@@ -65,40 +123,58 @@ case "$(uname -m)" in
esac
if [[ ! -x "${BARE_BIN}" ]]; then BARE_BIN="$(command -v bare || true)"; fi
if [[ -z "${BARE_BIN}" || ! -x "${BARE_BIN}" ]]; then
log "error: no Bare runtime for $(uname -m) in the installed bundle"
echo "The installed bundle does not contain a Bare runtime for $(uname -m). Install the official rolling bundle or build it with npm run package:bare." >&2
exit 1
fi
chmod 755 "${BARE_BIN}"
log "using Bare runtime ${BARE_BIN}"
EXT_TMP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/jarvis-extension.XXXXXX")"
EXT_ZIP="${EXT_TMP_DIR}/jarvis-extension.zip"
mkdir -p "${EXT_DIR}"
( cd "${ROOT_DIR}/apps/gnome-extension/[email protected]" && zip -q -r "${EXT_ZIP}" . )
if command -v gnome-extensions >/dev/null; then
if ! gnome-extensions install --force "${EXT_ZIP}"; then
if gnome-extensions install --force "${EXT_ZIP}"; then
log "registered GNOME extension from ${EXT_ZIP}"
else
log "warning: GNOME extension registration failed; copying files to ${EXT_DIR}"
echo "GNOME extension registration failed; installing the files directly." >&2
cp -a "${ROOT_DIR}/apps/gnome-extension/[email protected]/." "${EXT_DIR}/"
log "copied GNOME extension files to ${EXT_DIR}"
fi
else
cp -a "${ROOT_DIR}/apps/gnome-extension/[email protected]/." "${EXT_DIR}/"
log "copied GNOME extension files to ${EXT_DIR}"
fi
if command -v glib-compile-schemas >/dev/null && [[ -d "${EXT_DIR}/schemas" ]]; then
glib-compile-schemas "${EXT_DIR}/schemas" >/dev/null
log "compiled GSettings schemas in ${EXT_DIR}/schemas"
fi
sed "s#__JARVIS_BARE__#${BARE_BIN}#" "${ROOT_DIR}/packaging/jarvisd.service" > "${HOME}/.config/systemd/user/jarvisd.service"
log "wrote ${HOME}/.config/systemd/user/jarvisd.service"
if [[ -f "${CONFIG_DIR}/config.json" ]]; then
log "kept existing ${CONFIG_DIR}/config.json"
fi
if [[ ! -f "${CONFIG_DIR}/qvac.config.json" ]]; then
sed "s#__JARVIS_CACHE__#${CACHE_DIR}#g" "${ROOT_DIR}/packaging/qvac.config.template.json" > "${CONFIG_DIR}/qvac.config.json"
log "created ${CONFIG_DIR}/qvac.config.json"
else
log "kept existing ${CONFIG_DIR}/qvac.config.json"
fi
restart_user_service() {
systemctl --user daemon-reload
log "reloaded user systemd units"
if [[ "${1:-}" == "enable" ]]; then
systemctl --user enable jarvisd.service
log "enabled jarvisd.service"
fi
systemctl --user restart jarvisd.service
log "restarted jarvisd.service"
}
if [[ "${1:-}" == "--enable" ]]; then
restart_user_service enable
if command -v gnome-extensions >/dev/null && gnome-extensions enable [email protected] >/dev/null 2>&1; then
echo "GNOME extension enabled."
log "enabled GNOME extension [email protected]"
elif command -v gsettings >/dev/null && gsettings writable org.gnome.shell enabled-extensions >/dev/null 2>&1; then
# A running GNOME Shell keeps its extension catalogue until the next
# session. Persist the enabled state so the extension starts on login.
@@ -110,14 +186,16 @@ if [[ "${1:-}" == "--enable" ]]; then
ENABLED_EXTENSIONS="${ENABLED_EXTENSIONS%]}, '[email protected]']"
fi
gsettings set org.gnome.shell enabled-extensions "${ENABLED_EXTENSIONS}"
log "persisted [email protected] in org.gnome.shell enabled-extensions"
fi
echo "GNOME Shell will enable Jarvis after the next login (the current Shell session has not rescanned extensions)."
log "GNOME Shell will enable Jarvis after the next login (the current Shell session has not rescanned extensions)"
else
echo "GNOME Shell has not rescanned extensions; log out and back in, then run: gnome-extensions enable [email protected]"
log "GNOME Shell has not rescanned extensions; log out and back in, then run: gnome-extensions enable [email protected]"
fi
elif [[ "${PREVIOUSLY_ACTIVE}" == true ]]; then
restart_user_service
echo "Restarted jarvisd.service with the upgraded files."
log "restarted jarvisd.service with the upgraded files"
fi
log "install complete; log file ${LOG_FILE}"
echo "Installed JARVIS-QVAC to ${APP_DIR}"
echo "Run: ${APP_DIR}/packaging/first-run.sh"