release: public alpha 0.6.0 baseline

This commit is contained in:
JWeBot Contributors
2026-10-15 03:58:31 +08:00
commit d4242ae07c
238 changed files with 37724 additions and 0 deletions
+151
View File
@@ -0,0 +1,151 @@
#!/bin/sh
set -eu
source_script=/tmp/wechat-local-ocr.py
source_bridge=/tmp/wechat-gui-bridge
source_recorder_unit=/tmp/wechat-local-ocr-recorder.service
source_responder_unit=/tmp/wechat-local-ocr-responder.service
source_defaults=/tmp/wechat-local-ocr.default
runtime_user=${JWEBOT_RUNTIME_USER:-jwebot}
target_script=/usr/local/sbin/wechat-local-ocr
target_bridge=/usr/local/sbin/wechat-gui-bridge
target_recorder_unit=/etc/systemd/system/wechat-local-ocr-recorder.service
target_responder_unit=/etc/systemd/system/wechat-local-ocr-responder.service
target_defaults=/etc/default/wechat-local-ocr
venv_python=${JWEBOT_RUNTIME_PYTHON:-/opt/jwebot/venv/bin/python}
timestamp=$(date +%Y%m%d-%H%M%S)
backup_dir="/root/wechat-local-ocr-backup-${timestamp}"
enable_legacy_ocr=${ENABLE_LEGACY_OCR:-0}
success=0
recorder_enabled=$(systemctl is-enabled wechat-local-ocr-recorder.service 2>/dev/null || true)
recorder_active=$(systemctl is-active wechat-local-ocr-recorder.service 2>/dev/null || true)
responder_enabled=$(systemctl is-enabled wechat-local-ocr-responder.service 2>/dev/null || true)
responder_active=$(systemctl is-active wechat-local-ocr-responder.service 2>/dev/null || true)
restore_file() {
name=$1
target=$2
if [ -f "${backup_dir}/${name}" ]; then
cp -a "${backup_dir}/${name}" "$target"
else
rm -f "$target"
fi
}
restore_service_state() {
systemctl disable --now \
wechat-local-ocr-recorder.service \
wechat-local-ocr-responder.service \
>/dev/null 2>&1 || true
case "$recorder_enabled" in
enabled) systemctl enable wechat-local-ocr-recorder.service >/dev/null 2>&1 || true ;;
masked) systemctl mask wechat-local-ocr-recorder.service >/dev/null 2>&1 || true ;;
esac
case "$responder_enabled" in
enabled) systemctl enable wechat-local-ocr-responder.service >/dev/null 2>&1 || true ;;
masked) systemctl mask wechat-local-ocr-responder.service >/dev/null 2>&1 || true ;;
esac
case "$recorder_active" in
active|activating|reloading)
systemctl start wechat-local-ocr-recorder.service >/dev/null 2>&1 || true
;;
esac
case "$responder_active" in
active|activating|reloading)
systemctl start wechat-local-ocr-responder.service >/dev/null 2>&1 || true
;;
esac
}
rollback() {
status=$?
if [ "$success" -eq 0 ]; then
systemctl disable --now wechat-local-ocr-recorder.service >/dev/null 2>&1 || true
systemctl disable --now wechat-local-ocr-responder.service >/dev/null 2>&1 || true
restore_file wechat-local-ocr "$target_script"
restore_file wechat-gui-bridge "$target_bridge"
restore_file wechat-local-ocr-recorder.service "$target_recorder_unit"
restore_file wechat-local-ocr-responder.service "$target_responder_unit"
restore_file wechat-local-ocr.default "$target_defaults"
systemctl daemon-reload || true
restore_service_state
fi
exit "$status"
}
trap rollback EXIT HUP INT TERM
test -x "$venv_python"
test -f "$source_script"
test -f "$source_bridge"
test -f "$source_recorder_unit"
test -f "$source_responder_unit"
test -f "$source_defaults"
install -d -o root -g root -m 0700 "$backup_dir"
for pair in \
"wechat-local-ocr:$target_script" \
"wechat-gui-bridge:$target_bridge" \
"wechat-local-ocr-recorder.service:$target_recorder_unit" \
"wechat-local-ocr-responder.service:$target_responder_unit" \
"wechat-local-ocr.default:$target_defaults"
do
name=${pair%%:*}
target=${pair#*:}
if [ -f "$target" ]; then
cp -a "$target" "${backup_dir}/${name}"
fi
done
rendered_recorder_unit="${backup_dir}/wechat-local-ocr-recorder.rendered.service"
rendered_responder_unit="${backup_dir}/wechat-local-ocr-responder.rendered.service"
sed \
-e "s/^User=.*/User=$runtime_user/" \
-e "s/^Group=.*/Group=$runtime_user/" \
-e "s#/opt/jwebot/venv/bin/python#$venv_python#g" \
"$source_recorder_unit" >"$rendered_recorder_unit"
sed \
-e "s#/opt/jwebot/venv/bin/python#$venv_python#g" \
"$source_responder_unit" >"$rendered_responder_unit"
install -o root -g root -m 0755 "$source_script" "$target_script"
install -o root -g root -m 0755 "$source_bridge" "$target_bridge"
install -o root -g root -m 0644 "$rendered_recorder_unit" "$target_recorder_unit"
install -o root -g root -m 0644 "$rendered_responder_unit" "$target_responder_unit"
install -o root -g root -m 0644 "$source_defaults" "$target_defaults"
install -d -o "$runtime_user" -g "$runtime_user" -m 0700 \
/var/lib/wechat-local-ocr \
/var/lib/wechat-local-ocr/history \
/var/lib/wechat-local-ocr/queue \
/var/lib/wechat-local-ocr/failed
chown -R "$runtime_user:$runtime_user" /var/lib/wechat-local-ocr
touch /var/lib/wechat-local-ocr/gui-interaction.lock
chown "$runtime_user:$runtime_user" /var/lib/wechat-local-ocr/gui-interaction.lock
chmod 0600 /var/lib/wechat-local-ocr/gui-interaction.lock
"$venv_python" -m py_compile "$target_script"
bash -n "$target_bridge"
systemd-analyze verify "$target_recorder_unit" "$target_responder_unit"
systemctl daemon-reload
systemctl disable --now \
wechat-local-ocr-recorder.service \
wechat-local-ocr-responder.service \
>/dev/null 2>&1 || true
if [ "$enable_legacy_ocr" -eq 1 ]; then
systemctl enable wechat-local-ocr-recorder.service
systemctl start wechat-local-ocr-recorder.service
systemctl is-active --quiet wechat-local-ocr-recorder.service
fi
success=1
trap - EXIT HUP INT TERM
echo "backup_dir=$backup_dir"
sha256sum "$target_script" "$target_bridge" "$target_recorder_unit" "$target_responder_unit" "$target_defaults"
if [ "$enable_legacy_ocr" -eq 1 ]; then
systemctl status wechat-local-ocr-recorder.service --no-pager -l | sed -n '1,28p'
else
echo "legacy_ocr=disabled"
fi