From bc75b3e5c4cfc7a0d1dc52b398653a35e56dbc9c Mon Sep 17 00:00:00 2001 From: brockdarnold Date: Sun, 14 Jun 2026 07:17:53 +0000 Subject: [PATCH] publish update.py --- update.py | 95 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 update.py diff --git a/update.py b/update.py new file mode 100644 index 0000000..e006788 --- /dev/null +++ b/update.py @@ -0,0 +1,95 @@ +#!/usr/bin/env python3 +"""One command to set up AND update the Eve watchers — `python update.py`. + +This folder is a clone of the public repo + https://git.armoredarmadillo.com/brockdarnold/eve-watcher.git +so updates are just a `git pull`. Run this any time to: + + 1. create config.ini from the example on first run (your webhook is prefilled; + config.ini is gitignored so your edits + OCR snip survive every update), + 2. pull the latest watcher code, + 3. install/upgrade python deps, + 4. (re)start the headless watchers. + +First time on a new PC: + git clone https://git.armoredarmadillo.com/brockdarnold/eve-watcher.git + cd eve-watcher + python update.py + python eve_orehold_watcher.py --snip # one-time: aim OCR at the ore-hold bar + +After that, to get my latest changes, just: python update.py +""" +import configparser +import os +import shutil +import subprocess +import sys + +HERE = os.path.dirname(os.path.abspath(__file__)) +WIN = os.name == "nt" + + +def run(cmd, **kw): + print(f" $ {' '.join(cmd)}") + return subprocess.run(cmd, cwd=HERE, **kw) + + +def ensure_config(): + cfg = os.path.join(HERE, "config.ini") + ex = os.path.join(HERE, "config.ini.example") + if not os.path.exists(cfg): + shutil.copyfile(ex, cfg) + print("• created config.ini from config.ini.example (webhook prefilled).") + else: + print("• config.ini already exists — leaving your settings + snip untouched.") + return cfg + + +def git_pull(): + if not os.path.isdir(os.path.join(HERE, ".git")): + print("• not a git clone — skipping pull. To get updates in future, install " + "via:\n git clone https://git.armoredarmadillo.com/brockdarnold/" + "eve-watcher.git") + return + if run(["git", "pull", "--ff-only"]).returncode != 0: + print("! git pull failed (local edits to tracked files?). Stash or commit " + "them, then re-run. Your config.ini is safe (gitignored).") + + +def deps(): + req = os.path.join(HERE, "requirements.txt") + if os.path.exists(req): + run([sys.executable, "-m", "pip", "install", "--quiet", "-r", req]) + + +def restart_watchers(cfg_path): + if not WIN: + print("• non-Windows — start watchers manually (this is a Goliath/Windows tool).") + return + # stop any running watchers, then relaunch via start-all.ps1 + subprocess.run(["powershell", "-NoProfile", "-Command", + "Get-Process pythonw -ErrorAction SilentlyContinue | Stop-Process -Force"], + cwd=HERE) + run(["powershell", "-ExecutionPolicy", "Bypass", "-File", + os.path.join(HERE, "start-all.ps1")]) + # nudge if OCR region not snipped yet + cp = configparser.ConfigParser() + cp.read(cfg_path) + if cp.get("watcher", "mode", fallback="ocr") == "ocr" and \ + not cp.get("ocr", "region", fallback="").strip(): + print("\n >> ONE-TIME STEP: the OCR hold/compress/stall watcher needs its " + "region.\n Run: python eve_orehold_watcher.py --snip\n" + " (drag a box around the Ore Hold fill bar; it persists after that.)") + + +def main(): + print("=== Eve watcher setup / update ===") + cfg = ensure_config() + git_pull() + deps() + restart_watchers(cfg) + print("\nDone. Watchers running. Stop them with: Get-Process pythonw | Stop-Process") + + +if __name__ == "__main__": + main()