chadtmiller.com/knotless
git that lives in your Atmosphere account
1
10
Self-hosted runners: ship knotless-run and document running your own
Closedchadtmiller.com mentioned this in The install script brings the runner, labeller and reviewer
Closing, as what this asked for has landed. install.sh brings knotless-run (The install script brings the runner, labeller and reviewer), and the published knotless-server image holds it and the docker client. The workflows guide's "Start a runner" covers running one from the install alone. Private repositories, --discover and the run limits are in too.
Not done, and not reopened here unless someone needs them:
- a slim image with only the runner
- a systemd unit or standalone compose file
knotless runner addwarning when the account has never filed a check- a check of a real released binary:
installing_a_releaseinstalls an archive the test builds
Running steps on Kubernetes is No way to run a workflow's steps as Kubernetes pods.
Where it stands
The model already supports bring-your-own runners. Any account can run
knotless-run, watch any public repository, and writedev.knotless.checkrecords in its own account. The owner opts in withknotless runners <url> add <handle>and readers only show checks from named runners. Executors (docker, shell), per-runner secrets with ref scoping,--pulls, reruns, caches, cancellation and crash recovery all work, and knotless.dev itself runs this way.What's missing is packaging and a path for someone who isn't running knotless-serve on their own host.
Gaps
deploy/release.shonly buildsknotless,git-remote-knotlessandknotless-mcp, soinstall.shnever installsknotless-run. Theknotless:currentimage is built on the host bydeploy.shand not published. Today the only route is cloning andcargo install --path crates/knotless-run.deploy.shand compose. Nothing for a standalone box, homelab, or laptop (docker run, systemd).deploy/README.md,docs/design.md, and the MCP server's instructions. There's no workflow reference:cache,image,.jsonworkflow files, name rules (1 to 64 of[A-Za-z0-9_-]), defaulton, and theKNOTLESS_RUN_*variables aren't in the README.knotless loginworks as well as an app password; that--pullsneedsKNOTLESS_APPVIEW(e.g.https://knotless.dev); the binary's default Jetstream (jetstream2.us-east) differs from compose's (jetstream.us-east);--state/--workdefaults;--jobs,--cache-max,--imagearen't mentioned.Runner::startfails with "no public repository by that name" for spaces, even if the runner's account is a member.--step-timeout.Plan
Make it happen (P1)
knotless-runto the release tarballs (Linux musl only, or all four targets) and toinstall.sh.runnertarget to the Dockerfile with justknotless-run,gitand the docker CLI.docs/runners.md(outline below) and link it from the README Workflows section.deploy/runner/with a systemd unit and a standalone compose file.Follow-ups (P2)
--repos-filewith reload on SIGHUP, or discover repos whose record names this runner's DID via the appview.--cpus/--memoryflags passed to step containers.knotless runners addwarns when the named account has never written a check for the repo.docs/runners.md outline
knotless login.knotless runners <url> add <handle>, verify withknotless checks <url> --wait 300.refsscoping and log masking.--pulls,KNOTLESS_APPVIEW, docker only, never secrets, separate caches.--step-timeout.workflow.rs, plusKNOTLESS_RUN,KNOTLESS_RUN_REPO,_REF,_SHA,_PULL.Done when
install.shand a Docker host can followdocs/runners.mdto a green check on their own repo without cloning knotless.knotless-runbinary, not just the in-tree build.