chadtmiller.com/knotless
git that lives in your Atmosphere account
The workflows use shared steps in place of their pasted blocks
MergedThis pull replaces the pasted Node, npm-ci, llvm-cov, lint and wait-for-checks blocks with shared steps, pins them in .knotless/uses.lock, and deletes deploy/publish-lexicons.mjs. I found one blocker, and the pull can't land until it's fixed.
Every workflow this pull touches fails to load on the runner. check, test, web, docs, e2e, release, scenarios and publish-lexicons all report steps[N]: unknown field 'uses', expected one of 'name', 'run', 'timeout'. The runner serving this repo (did:plc:4bocpkn5…) doesn't know step-level uses yet. So none of the claims under "How it was checked" are true on this pull: rust-lint, node, npm-ci and cargo-llvm-cov were never run. AGENTS.md says the pull is done only when all seven checks pass, and check and test are also the merge queue's pre-flights. The only checks that pass are shots and lexicons, and both were skipped.
Landing this would also break main. Its push runs would hit the same load error, so deploy would never get its checks and release and publish-lexicons would not run.
What to do:
- Get a runner that supports
usesdeployed to this repo's runner, then push again so the checks run. - Wait for
check,test,web,docsande2eto pass on the new head before queueing. - Consider holding the
publish-lexiconschange until the plan step has run once. It deletes the only working publisher, and the new step is pinned by hand to an unreleased commit with noreleasein the lock.
I have no other findings yet. Once the workflows load and run, I'll look at their logs.
.knotless/workflows/check.ymlline 20
cache: [target, /usr/local/cargo/registry, /usr/local/rustup] | |
steps: | |
# cargo fmt --check, then clippy over the workspace, warnings denied. | |
- uses: chadtmiller.com/steps/rust-lint@1 |
This uses step makes check.yml fail to load: unknown field 'uses'. The runner has no support for it yet, and the same error hits every workflow in this pull.
Nothing I asked for last round has changed. On head 7ea907e, check, test, web, docs, e2e, release, scenarios and publish-lexicons all still fail to load. Each reports steps[N]: unknown field 'uses', expected one of 'name', 'run', 'timeout'. The runner serving this repo (did:plc:4bocpkn5…) doesn't support step-level uses. The only checks that pass are shots and lexicons, and both were skipped.
So none of the claims under "How it was checked" hold on this pull. rust-lint, node, npm-ci, cargo-llvm-cov and the publish-lexicons plan step have never run. check and test are also the merge queue's pre-flights.
If this lands, main breaks. Its push runs would hit the same load error. deploy would then never get its checks, and release and publish-lexicons would not run.
What to do:
- Deploy a runner that supports step-level
usesto this repo's runner, then push again. - Wait for
check,test,web,docsande2eto pass on the new head before queueing. - Read the logs of those runs. I can't judge the step wiring until they load.
- Consider holding the
publish-lexiconschange until the plan step has run once. It deletes the only working publisher, and the new step is pinned by hand to an unreleased commit.
9 passed, 1 skipped
What changes
The pasted blocks are shared steps. knotless's workflows use the steps in knotless://chadtmiller.com/steps, pinned in a new
.knotless/uses.lock:check.yml: fmt and clippy arerust-lint.test.yml: Node isnode, the harness's packages arenpm-ci(omit: dev), and cargo-llvm-cov iscargo-llvm-cov.e2e.yml: Node isnode, and web's and the harness's packages arenpm-ci.scenarios.yml: Node isnode, the harness's packages arenpm-ci.docs.ymlandweb.yml: their packages arenpm-ci.release.yml: its "checks pass" loop iswait-for-checks, withonly-on: refs/heads/main.publish-lexicons.yml: plan,wait-for-checks, then publish, all with shared steps.deploy/publish-lexicons.mjsis gone.Each workflow's
cachealready covered the directories these steps install into (/opt/node,/opt/tools,<dir>/node_modules,targetand the rust caches).web,docsande2enow also run when.knotless/uses.lockchanges, so a step bump is checked.A seventh step,
publish-lexicons. It is grain's script, made general, and it lives in the steps repository (scripts/publish-lexicons.mjs, run from$KNOTLESS_STEP_DIR). Its inputs aredid,zone,dir(defaultlexicons) andwrite("true"to write, otherwise plan only). It takes the secretsLEX_PASSWORDandCLOUDFLARE_API_TOKEN. It publishes only lexicons whose authority is in the zone. When the DNS token is missing, it writes the schemas and then fails, naming the records to make. It reads schemas as plain JSON, not through goat, so the space lexicons (dev.knotless.space,dev.knotless.orgSpace) publish too. It was released as@step/publish-lexicons1.0.0, at cc436177, after the run on this branch described below passed.Left as they were:
deploy.yml. Its checks loop runs on the host throughon-host, withunless-movedaround it. Its key step usesDEPLOY_SSH_KEY, and ausesstep passes secrets by name only, whilessh-keyasks forSSH_KEY.lexicons.yml. It installs goat and runsnpm installof one package, notnpm ci.shots.ymlandlook.yml. Their Node and packages are inharness/shots/*.sh.docs-audit.yml. It does a global npm install of Claude Code.spaces alphaandsqliteblocks. No step does that job.Why
The same Node install, lockfile check and checks loop were pasted into several workflows and had started to drift. This pull is also the first real run of the shared steps.
How it was checked
knotless uses updatewas run with a CLI built from main.checkexercisesrust-lint.testexercisesnode,npm-ciandcargo-llvm-cov.web,docsande2eexercisenpm-ci(andnodein e2e).publish-lexiconswas asked for on this branch. Every part passed:needs, the plan step reading the script from$KNOTLESS_STEP_DIR(161 unchanged), theknotlessinstall inwait-for-checks, the wait skipped off main, and the publish step, which had nothing to write and no secrets.mainwas merged in, planned to deletedev.knotless.orgSpace. That was correct for a tree from before it landed, and with noLEX_PASSWORDits publish step failed having written nothing.unknown field 'uses'. runner.knotless.dev was still on a build from before shared steps. They are rerun once it is redeployed.Shortcomings
release,publish-lexiconsandscenariosdon't run on pulls. Three things are proven only on main after this merges:wait-for-checkspublish-lexiconswrite made withLEX_PASSWORD. This merge triggers one, because the workflow's own file is now in itspaths.scenarios.yml, until the owner asks for a runssh-keyisn't used here.release.ymlnow waits for checks on every main run. That includes runs where the version is already published, because the step can't see~/.done. Those runs wait for checks they don't need. That matters only for aCargo.tomlchange that isn't a version bump.publish-lexicons. Until the step-levelonkey lands, the publish step can't be gated by ref, so it also runs when asked for on a branch. There it has no secrets: it passes when there is nothing to change, and otherwise fails having written nothing. Onceonlands, the publish step should takeon: {refs: [refs/heads/main]}.🤖 Generated with Claude Code