Commit 444845b
committed
ci: bind opencode to 0.0.0.0 + curl probe + smoke workflow; restore host e2e gating
Three problems addressed together.
1. **OC host e2e was not really gating releases.**
`continue-on-error: true` was on the OC host job in both ci.yml and
release.yml because the suite was timing out on Linux runners ~50% of
the time. With it on, OC host's failure didn't fail the workflow, so
releases were proceeding even when the deep behavior suite was broken.
That's dishonest gating and removes the value of running the job at
all. Removed `continue-on-error: true` from both workflows so OC host
gates publish/release just like Pi host does.
2. **Diagnosis evidence**: captured stdout/stderr from a real CI failure
shows opencode prints `opencode server listening on http://127.0.0.1:N`
and completes its one-time SQLite migration, but Bun's `fetch()` then
times out for the full 300s polling window. opencode is not crashing,
not hanging — its HTTP server reports as listening but Bun can't
connect via the announced 127.0.0.1 address. We never confirmed
whether the bug is in opencode or Bun, but the symptom is consistent
with a Linux loopback edge case (IPv4-only AF_INET vs IPv4-mapped
IPv6 resolution).
Two mitigations:
- Bind opencode to 0.0.0.0 (all interfaces) instead of 127.0.0.1.
Clients still connect to 127.0.0.1:PORT — only the listen socket
changes. Removes any loopback-specific binding ambiguity.
- When fetch polling stalls, fall back to a `curl --max-time 2`
probe every ~30s. If curl reaches /doc where fetch keeps failing,
proceed treating the server as ready and log a one-line warning
so the asymmetry is attributable. If both fail for the full
timeout, throw an actionable error reporting both probe states.
3. **Independent smoke workflow**: `.github/workflows/smoke-opencode-linux.yml`
spawns opencode on both 127.0.0.1 and 0.0.0.0, probes /doc with both
curl and bun, and writes a probe-matrix table to the GitHub Actions
summary. Runs in 1-3 min — fast enough to give clean diagnostic
signal independent of the longer e2e gauntlet. Lets us tell apart:
- opencode-on-Linux fundamental break (both probes fail)
- Bun's fetch on Linux loopback edge case (curl ok, fetch fails)
- 127.0.0.1-vs-0.0.0.0 binding asymmetry
- opencode failed to even start (no "listening" log)
If 0.0.0.0 binding fixes the host e2e suite consistently in CI, the
curl fallback will essentially never fire. If not, the fallback keeps
the suite working AND the smoke workflow tells us exactly which layer
to blame upstream.1 parent 61fa8fb commit 444845b
4 files changed
Lines changed: 247 additions & 26 deletions
File tree
- .github/workflows
- packages/e2e-tests/src/opencode-runner
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
155 | 155 | | |
156 | 156 | | |
157 | 157 | | |
158 | | - | |
159 | | - | |
160 | | - | |
161 | | - | |
162 | | - | |
163 | | - | |
164 | | - | |
165 | | - | |
166 | | - | |
167 | | - | |
168 | | - | |
169 | | - | |
170 | 158 | | |
171 | 159 | | |
172 | 160 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
199 | 199 | | |
200 | 200 | | |
201 | 201 | | |
202 | | - | |
203 | | - | |
204 | | - | |
205 | | - | |
206 | | - | |
207 | | - | |
208 | | - | |
209 | | - | |
210 | | - | |
211 | | - | |
212 | 202 | | |
213 | 203 | | |
214 | 204 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 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 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 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 | + | |
| 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 | + | |
| 188 | + | |
| 189 | + | |
| 190 | + | |
| 191 | + | |
| 192 | + | |
| 193 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
161 | 161 | | |
162 | 162 | | |
163 | 163 | | |
| 164 | + | |
| 165 | + | |
| 166 | + | |
| 167 | + | |
| 168 | + | |
| 169 | + | |
| 170 | + | |
| 171 | + | |
| 172 | + | |
164 | 173 | | |
165 | 174 | | |
166 | 175 | | |
| |||
170 | 179 | | |
171 | 180 | | |
172 | 181 | | |
173 | | - | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
| 185 | + | |
174 | 186 | | |
175 | 187 | | |
176 | 188 | | |
| |||
179 | 191 | | |
180 | 192 | | |
181 | 193 | | |
182 | | - | |
| 194 | + | |
| 195 | + | |
| 196 | + | |
| 197 | + | |
| 198 | + | |
| 199 | + | |
| 200 | + | |
| 201 | + | |
| 202 | + | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
183 | 220 | | |
184 | 221 | | |
185 | 222 | | |
186 | | - | |
| 223 | + | |
| 224 | + | |
| 225 | + | |
| 226 | + | |
| 227 | + | |
| 228 | + | |
| 229 | + | |
187 | 230 | | |
188 | 231 | | |
189 | 232 | | |
| |||
214 | 257 | | |
215 | 258 | | |
216 | 259 | | |
| 260 | + | |
| 261 | + | |
| 262 | + | |
| 263 | + | |
| 264 | + | |
| 265 | + | |
| 266 | + | |
217 | 267 | | |
218 | 268 | | |
219 | | - | |
| 269 | + | |
220 | 270 | | |
221 | 271 | | |
222 | 272 | | |
| |||
0 commit comments