knotless-fork-infra
Our knotless fork (branch runner-atlibs-composition), deployed:
| https://knotless.socialweb.computer | knotless-serve + pages |
| https://knotless-runner.socialweb.computer | knotless-run --executor composition: CI on an atlibs composition |
Sign in
Log in → your handle → Log in.

Authorize on your PDS.

Set up CI on a composition
+ → name → Create repository.

Settings › Actions › Runners: aliceoa.bsky.social (new repositories here name it already).

Settings › Executor: bobvmbuilder.bsky.social/socialweb-computer-cicd → Look it up → bidders → Bind it.
Runner: https://knotless-runner.socialweb.computer → follow the sign-in link.
["did:plc:4vcig7s43z3nyqrnepmcfzqt", "did:plc:7q5lnitxv4meizdon5fmhzrq"]

Authorize the composition at the runner: its own client, only its modules' scopes.

Push
export KNOTLESS_APPVIEW=https://knotless.socialweb.computer
knotless login you.bsky.social
git init -q -b main kc-ci-demo && cd kc-ci-demo
echo 42 > answer.txt && git add . && git commit -q -m answer
git remote add origin knotless://you.bsky.social/kc-ci-demo
git push -u origin main

A workflow: each push to main rents a VM, runs the steps, releases it.
mkdir -p .knotless/workflows && cat > .knotless/workflows/ci.yml <<'EOF'
on:
push:
refs: [refs/heads/main]
steps:
- name: where
run: uname -a && id -un && pwd && git log --oneline -1
- name: test
run: test "$(cat answer.txt)" = 42 && echo "answer ok"
EOF
git add . && git commit -q -m ci && git push
Deploy
Build on hat-8, ship to the socialweb.computer gateway, run as systemd-managed docker containers behind its Caddy.
git clone https://knotless.dev/johnandersen777.bsky.social/knotless-fork-infra && cd knotless-fork-infra
scripts/build.sh
scripts/deploy.sh
scripts/deploy.sh rollback # back to the image the last deploy replaced
| File | |
|---|---|
versions.env | fork commit, base images by digest |
scripts/build.sh | knotless-fork:<commit> on hat-8 |
Dockerfile | the fork's image + dumbpipe and ssh (atlibs-iroh reaches a rented machine with them) |
scripts/deploy.sh | docker save | docker load to the gateway, units, Caddy (backup, validate, reload), restart |
host/systemd/ | serve 127.0.0.1:2590, pages (network only), runner 127.0.0.1:8796 |
host/caddy/ | /etc/caddy/sites/knotless*.caddy |
host/knotless-fork.env | /etc/knotless-fork/knotless-fork.env: domains, DIDs; no secrets |
Caps (4 vCPU / 8 GB host): serve 1.5 CPU 1.5 GB, pages 1 CPU 512 MB, runner 1 CPU 512 MB; --cpu-shares 256 each, so the gateway wins contention.
Once, after the first deploy: the runner's account logs in at
https://knotless.socialweb.computer/oauth/bot?account=aliceoa.bsky.social.
State: /var/lib/knotless-fork/{serve,runner} on the gateway.
Unlicense.
