Commit 69f2a73
authored
fix: repair rb update on Windows and wire the background update check (#37)
* fix: extract rb update archive to temp dir, not over the running binary
rb update extracted the release archive straight into the binary's own
directory. The payload (rb / rb.exe) shares the running executable's name,
so Expand-Archive -Force tried to overwrite the live, locked exe. On Windows
its internal Remove-Item fails with "Access to the path is denied", aborting
the update. The extractedPath !== binPath guard was then false (both resolved
to the same rb.exe), so the .new staging rename was skipped and the run died
with "extracted binary not found at expected location".
Extract into an isolated .rb-update-<ts> temp dir instead, then stage the
result as .new and rename-swap into place. Renaming a running binary is
permitted on Windows; deleting it is not. The existing .bak rollback and
post-swap --version verification are unchanged. The temp dir is always
removed via finally.
Verified end-to-end on Windows: a pinned 1.2.0 standalone self-replaced to
the live 1.3.0 release, kept rb.exe.bak for rollback, left no temp dirs, and
re-ran as a clean no-op.
* fix: wire the background update check so the update notice works
The "Update available" notice on the welcome screen read a cache that nothing
ever populated: checkForUpdate() was only ever called from tests, so the cache
stayed empty and getPendingNotification() always returned null. The notice
could never fire on its own.
A naive inline call cannot fix this — short-lived commands (the welcome screen
exits immediately) terminate long before the GitHub round-trip completes, so
the fetch would be killed mid-flight. Instead spawn a detached, unref'd
`rb __update-check` process on launch that outlives the command and warms the
cache for the next run (the same approach gh and update-notifier use).
- add isRefreshDue(): cheap sync gate (honors skip rules + 24h TTL) so a fresh
cache costs zero subprocesses
- add the hidden __update-check entrypoint in main.ts; gate it before routing
- spawn the detached refresh only in standalone builds (IS_BIN); dev mode's
execPath is bun, not rb
- skip entirely in CI and under --quiet/--json/--url-only (existing shouldSkip)
Verified end-to-end on Windows: a pinned 1.2.0 standalone spawned the detached
check, the cache filled with 1.3.0, and the next run rendered
"Update available: 1.2.0 -> 1.3.0". --quiet produced no output and no spawn.1 parent 637ee44 commit 69f2a73
4 files changed
Lines changed: 168 additions & 72 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
151 | 151 | | |
152 | 152 | | |
153 | 153 | | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
| 186 | + | |
| 187 | + | |
154 | 188 | | |
155 | 189 | | |
156 | 190 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| |||
139 | 139 | | |
140 | 140 | | |
141 | 141 | | |
142 | | - | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
143 | 149 | | |
144 | 150 | | |
145 | 151 | | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
146 | 155 | | |
147 | | - | |
148 | | - | |
149 | | - | |
150 | | - | |
151 | | - | |
152 | | - | |
153 | | - | |
154 | | - | |
155 | | - | |
156 | | - | |
157 | | - | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
| 156 | + | |
| 157 | + | |
163 | 158 | | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | | - | |
171 | | - | |
172 | | - | |
173 | | - | |
174 | | - | |
175 | | - | |
176 | | - | |
177 | | - | |
178 | | - | |
179 | | - | |
180 | | - | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
| 162 | + | |
| 163 | + | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
181 | 174 | | |
182 | | - | |
183 | 175 | | |
184 | | - | |
185 | | - | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
186 | 186 | | |
187 | 187 | | |
188 | 188 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
77 | 77 | | |
78 | 78 | | |
79 | 79 | | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
80 | 94 | | |
81 | 95 | | |
82 | 96 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| 7 | + | |
7 | 8 | | |
8 | 9 | | |
9 | 10 | | |
10 | 11 | | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
11 | 18 | | |
12 | 19 | | |
13 | 20 | | |
14 | 21 | | |
15 | 22 | | |
16 | 23 | | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
17 | 50 | | |
18 | 51 | | |
19 | 52 | | |
| |||
87 | 120 | | |
88 | 121 | | |
89 | 122 | | |
90 | | - | |
91 | | - | |
92 | | - | |
93 | | - | |
94 | | - | |
| 123 | + | |
| 124 | + | |
95 | 125 | | |
96 | 126 | | |
97 | | - | |
98 | | - | |
99 | | - | |
100 | | - | |
101 | | - | |
102 | | - | |
103 | | - | |
104 | | - | |
105 | | - | |
106 | | - | |
107 | | - | |
108 | | - | |
109 | | - | |
110 | | - | |
111 | | - | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
| 130 | + | |
| 131 | + | |
| 132 | + | |
| 133 | + | |
| 134 | + | |
| 135 | + | |
| 136 | + | |
| 137 | + | |
| 138 | + | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| 145 | + | |
| 146 | + | |
| 147 | + | |
| 148 | + | |
| 149 | + | |
| 150 | + | |
| 151 | + | |
| 152 | + | |
| 153 | + | |
| 154 | + | |
| 155 | + | |
| 156 | + | |
| 157 | + | |
| 158 | + | |
| 159 | + | |
| 160 | + | |
| 161 | + | |
112 | 162 | | |
113 | 163 | | |
114 | | - | |
115 | | - | |
116 | 164 | | |
117 | | - | |
118 | 165 | | |
119 | | - | |
120 | | - | |
121 | | - | |
122 | | - | |
123 | | - | |
124 | | - | |
125 | | - | |
126 | | - | |
127 | | - | |
128 | | - | |
129 | | - | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
0 commit comments