Skip to content

feat(crossbind)!: choose the runner in the system config - #215

Merged
bugra9 merged 1 commit into
mainfrom
feat/crossbind/choose-the-runner-in-the-system-config
Oct 7, 2026
Merged

bugra9 merged 1 commit into
mainfrom
feat/crossbind/choose-the-runner-in-the-system-config

Conversation

@bugra9

@bugra9 bugra9 commented Oct 7, 2026

Copy link
Copy Markdown
Member

Summary

  • RUNNER in ~/.crossbind.json decides where every toolchain step runs; CROSSBIND_RUNNER overrides it for CI and single builds.
  • REMOTE sends each image's steps to the runner at REMOTE_URL_<IMAGE> (or REMOTE_URL); tokens stay in CROSSBIND_TOKEN[_<IMAGE>].
  • A runner address alone no longer routes anything. Under REMOTE, a step whose image has no address stops with an error naming the setting instead of falling back to the local Docker.
  • utils/selectRunner.js resolves the runner for run.js, cargo and conan; runner start and runner init print crossbind config set commands. ADR-0015 records the decision.

Breaking change

WASI_SDK_PATH and CROSSBIND_WASI_SDK_PATH apply under RUNNER=LOCAL only; the other runners build wasi with the sdk in the image, as CI does. Host build: CROSSBIND_RUNNER=LOCAL crossbind build -p wasi.

Test plan

  • pnpm --filter crossbind test: 1275 passed, 1 skipped; also with CROSSBIND_RUNNER and runner addresses exported
  • pnpm run lint, pnpm check:agents, pnpm test:site, pnpm --filter @crossbind/landing build
  • ports/zlib end to end with a throwaway HOME: an address alone stayed in Docker; a missing address stopped with 0 docker calls; an invalid RUNNER failed the build and crossbind config set repaired it
  • RUNNER=REMOTE against a local runner: 0 docker calls, 37 files byte-identical to local Docker (run before the missing-address change)
  • test core on ubuntu-latest and windows-latest

RUNNER in ~/.crossbind.json decides where every toolchain step runs, and CROSSBIND_RUNNER overrides
it. REMOTE joins DOCKER_RUN, DOCKER_EXEC and LOCAL: each image's steps go to the runner at
REMOTE_URL_<IMAGE>, or REMOTE_URL for every image, keys that CROSSBIND_REMOTE_URL[_<IMAGE>]
override, while tokens stay in the environment. An address alone no longer sends a step anywhere,
a step whose image has no address stops before anything runs instead of falling back to the local
Docker, and each image says once which runner its steps go to.

utils/selectRunner.js resolves the runner for run.js, cargo and conan alike. An invalid RUNNER stops
the first step that needs it, so `crossbind config set` can still repair it. `runner start` and
`runner init` print the config commands that point builds at a runner. ADR-0015 records the
decision.

BREAKING CHANGE: a host wasi-sdk (WASI_SDK_PATH, CROSSBIND_WASI_SDK_PATH) applies under
RUNNER=LOCAL only; with the other runners a wasi build uses the sdk in the image, as CI does. Build
on the host with CROSSBIND_RUNNER=LOCAL.
@bugra9
bugra9 merged commit 0c765de into main Oct 7, 2026
29 of 30 checks passed
@bugra9
bugra9 deleted the feat/crossbind/choose-the-runner-in-the-system-config branch October 7, 2026 20:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant