ci: run on github-hosted runners instead of blacksmith - #240
Conversation
This fork has no Blacksmith runner capacity, so every job targeting a blacksmith-* label queues until it times out. On PR #238 the whole set (unit, e2e, typecheck, nix-eval, check-duplicates) sat queued for 24h0m1s and was then reported as failed; only the ubuntu-latest jobs ever executed. CI has effectively been dark on this fork. Repoint every blacksmith label to its github-hosted equivalent: blacksmith-4vcpu-ubuntu-2404 -> ubuntu-latest blacksmith-4vcpu-ubuntu-2404-arm -> ubuntu-24.04-arm blacksmith-4vcpu-windows-2025 -> windows-latest The repo is public, so github-hosted runners are free and include arm64 and Windows. No Blacksmith account, billing, or app install is needed. publish.yml keeps its windows-2025 pin for the aarch64 MSVC cross-compilation toolchain; only the stale comment explaining the pin was updated.
|
Hey! Your PR title Please update it to start with one of:
Where See CONTRIBUTING.md for details. |
|
This PR doesn't fully meet our contributing guidelines and PR template. What needs to be fixed:
Please edit this PR description to address the above within 2 hours, or it will be automatically closed. If you believe this was flagged incorrectly, please let a maintainer know. |
It works — CI is no longer darkJobs that had never once executed on this fork now run and pass:
About the
|
| Test | baseline @763cecdb | this PR |
|---|---|---|
public native OpenCode API > rejects missing and Location-disabled models… |
fail (5s timeout) | fail (5s timeout) |
public native OpenCode API > rejects an unavailable variant… |
fail (7s timeout) | fail (8s timeout) |
LocationServiceMap > isolates location state… |
fail (5s timeout) | fail (5s timeout) |
LocationServiceMap > installs public plugins into a location |
fail (6s timeout) | fail (5s timeout) |
DatabaseMigration > declared schema has no ungenerated migrations |
fail | fail |
Git > clones a remote and reads checkout metadata |
fail (5s timeout) | pass |
| totals | 1025 pass / 6 fail | 1026 pass / 5 fail |
The failing set on this PR is a strict subset of the baseline. Neither this PR nor #239 introduced any of them.
Two distinct causes:
- Five 5s-timeout flakes (
public native OpenCode API,LocationServiceMap,Git > clones a remote) — these do real I/O (plugin installs, git clone) against a 5000ms default.Git > clones a remotefailed on baseline and passed here, which is the signature of a flake, not a regression. - One real bug —
DatabaseMigration > declared schema has no ungenerated migrations:Current database schema is stale. Run bun script/migration.ts from packages/core.The committed schema no longer matches what drizzle generates. Deterministic, reproducible, and worth its own PR.
Merging this makes that breakage visible on every PR instead of invisible forever. I'd rather have an honestly-red unit than a job that silently never runs. Follow-up PR for the stale schema next.
Decision
Repoint
blacksmith-*jobs to GitHub-hosted runners. Not: buy/enable Blacksmith capacity.Why
CI has been effectively dark on this fork. Every job targeting a
blacksmith-*label queues forever because the fork has no Blacksmith runner capacity — those labels are inherited from upstreamanomalyco/opencode, whose runner account we don't have.Evidence, PR #238 (unrelated, earlier):
Every 24h entry is a queue timeout, not a real failure. Only the
ubuntu-latestjobs ever ran. So for months no PR to this fork has had its unit tests, e2e, or typecheck actually execute.The alternative — enabling Blacksmith — costs money, needs an account plus a GitHub App install, and adds a third-party dependency for a fork whose only job is validating its own patches against upstream. This repo is public, so GitHub-hosted runners are free with unlimited minutes, and that now includes arm64 (
ubuntu-24.04-arm) and Windows. There is no upside left for Blacksmith here.Change
34 references across 21 workflow files:
blacksmith-4vcpu-ubuntu-2404ubuntu-latestblacksmith-4vcpu-ubuntu-2404-armubuntu-24.04-armblacksmith-4vcpu-windows-2025windows-latestpublish.ymlkeeps itswindows-2025pin for the aarch64 MSVC cross-compilation toolchain — only the stale comment explaining that pin was reworded.Verification
Matrix-driven hosts (
test.yml,publish.yml,nix-hashes.yml) checked separately — all resolve to github-hosted labels.grep -rn blacksmith .github/→ no matches.This PR validates itself:
pull_requestevents use the workflow definitions from the PR branch, so if the checks below actually execute rather than queueing, the fix is proven.Known trade-off
Upstream syncs from
anomalyco/opencodewill reintroduceblacksmith-*labels whenever these workflow files change upstream. Theupstream-rebaseskill should re-apply this mapping as part of a sync. That is cheaper than paying for runner capacity the fork doesn't otherwise need.