igneum/packaging/ota/TEST.md

6.8 KiB

Testing the over-the-air update on Windows (PC 2, machine id 1ccfe586)

The Windows apply path could not be run from the Mac. It was reviewed against packaging/windows/Igneum-Miner.iss, stop-igneum.ps1 and app/windows/host.cpp; these steps run it for real. Allow 20 minutes.

0.3.3 (after the 4 October incident): what changed and what to check first

The installer is per-user (%LOCALAPPDATA%\Programs\Igneum Miner, no administrator prompt) and the updater runs the installer BEFORE it stops anything. On a PC still on 0.3.2 (installed in Program Files) the 0.3.2 engine's old helper stops the miners and raises the prompt once more for the 0.3.3 installer: click Yes when it appears, or run Igneum-Miner-Setup-0.3.3.exe by hand (it stops the old app, installs per user, offers to remove the Program Files copy with one administrator prompt, starts the new app). After that no update ever asks again.

Check on the first 0.3.3 start: Settings shows 0.3.3; the log has update slot: minute 58 of every hour (PC 2) and firewall: asking once for administrator approval ... (answer Yes once, or ignore: mining does not wait); %LOCALAPPDATA%\igneum\app\firewall-rule.json exists afterwards. The Start Menu entry opens the new copy.

What is untested on Windows

  • ota-apply.ps1 end to end: the wait for the engine, Start-Process -Verb RunAs of the installer, the UAC prompt, the exit code, the relaunch through the [Run] entry on /IGNOTA=1.
  • CloseApplications=yes with the window host: the host hides on WM_CLOSE instead of quitting, so the Restart Manager cannot close it; PrepareToInstall (stop-igneum.ps1, Stop-Process -Force on "Igneum Miner") is what ends it. Watch for an installer dialog about files in use.
  • The rollback: the previous installer is kept in updates/ only from the second OTA on; a first update has none.
  • The deferral path end to end: Start-Process without -Verb RunAs on an administrator installer, the exception on a declined or timed-out prompt, deferred:true in update-result.json, the engine's "OTA: administrator approval not given" line and the banner, the 6-hour retry. (Only reachable while an install is still in Program Files; a per-user install never prompts.)
  • The per-user installer over a Program Files install: the stop script from the old folder, the "remove the older copy?" question, the HKCU Run entry rewritten, two Start Menu entries until the old copy goes.
  • The first-run firewall prompt and firewall-rule.json.
  • powershell 5.1 parsing of the helper (tools/ci/windows/check-ps51.ps1 cannot see it: it is a string in src/ota.rs). The helper avoids "$x: y" and uses nothing newer than 5.1.

Before

PC 2 runs Igneum Miner 0.3.0, which has no updater at all. Step 0 is therefore a hand install of the first OTA-capable build; from then on every update is automatic.

  1. On the Mac: push master, wait for the green windows-ci run, then packaging/windows/fetch-ci-artifacts.sh --deploy (writes the Windows entry into the manifest and deploys). Note the version in the installer name (0.3.1 or later). On PC 2: download that installer from https://dl.igneum.network/dl/<token>/Igneum-Miner-Setup-<v>.exe, run it over the running 0.3.0 (it stops the old app itself), let it start the app.

The test

  1. Settings (gear) shows "Igneum Miner ", "Check now", "Install now" (hidden until a download exists), the "Install updates by itself at a safe moment" switch ON, and a note. Click Check now: within 10 s the note says "This is the latest version (checked ...)" and the log drawer (Logs) has update check: <v> is current. If it says no manifest at the update URL yet the deploy did not land; if manifest signature does not verify the installer was built from a tree with a different OTA_PUBLIC_KEY_HEX than the key that signed.
  2. On the Mac, publish a test version: bump version in app/igneum-app/Cargo.toml, app/windows/version.h and app/igneum-app/resources/igneum-app.rc (patch level only), push, wait for CI, fetch-ci-artifacts.sh --deploy with OTA_NOTES="OTA test". (The Mac entry is carried over only when it has the same version; without a Mac build the manifest carries the Windows entry alone, which is fine.)
  3. On PC 2: Settings > Check now. Expected within a minute: the banner "Igneum Miner <v+1> is available. Downloading it." then "Downloading ... 43%" then "Igneum Miner <v+1> is ready. Installs at the next safe moment." with Install now and Later. Events: is available: downloading (44 MB), is ready; it installs at the next safe moment. %LOCALAPPDATA%\igneum\app\updates\ holds Igneum-Miner-Setup-<v+1>.exe (and manifest.json).
  4. Wait. The node is synced and a worker is mining, so the only wait is an hourly boundary within 3 minutes (the "next program" tile). Expected: the banner changes to "Installing Igneum Miner <v+1>: the miners stop, then the node, then the app opens again", the footer says stopping, then ONE UAC prompt "Igneum-Miner-Setup-<v+1>.exe". Click Yes. The window closes (stop-igneum.ps1 ends it), about 20 s later the app opens again on its own. Check: Settings shows the new version and "Updated from ."; the event feed starts with updated to Igneum Miner <v+1> from <v>; the node and the miner are back (same chain data, same address). Files: %LOCALAPPDATA%\igneum\app\ota-apply.log (the helper), ota-setup.log (Inno), no update-pending.json after 90 s.
  5. The declined prompt: repeat 2 and 3 with another patch bump, and click No on the UAC prompt. Expected: the app comes back by itself on the OLD version within 15 s with the banner "Update: Windows did not let the installer run: ..." and Install now; clicking it brings the prompt again, Yes installs.
  6. Install now: with automatic off (the switch), the banner waits "waiting for Install now"; Install now installs at once, ignoring the boundary wait.
  7. The red bar (consensus): publish with --activation-height <node daa + 1000> (the node tile shows the DAA score): the banner turns solid ember "Consensus upgrade at height ...: the node is N blocks away. Installing ... now." and the apply skips the safe-moment wait.

If something goes wrong

  • The app does not come back: Start Menu > Igneum Miner. ota-apply.log says which step failed. The old files are still in place when the installer did not run; when it ran and the new app fails, reinstall from the download page.
  • A UAC prompt every hour: the installer failed or was declined and the retry loop runs at the next check; Settings shows the error. Switch automatic off to stop it, or install by hand.
  • "update-pending.json" stays and the app keeps restarting: the new version dies early; on the third start the helper reinstalls the previous installer when one is in updates/, else reinstall by hand.