返回 Skill 列表
extension
分类: 开发与工程无需 API Key

ctl-release

更新并重建monorepo中的spikectl或ctl包

person作者: jakexiaohubgithub

Option: CTL Release

Initiation (I)

Invoke when:

  • Source code changed in packages/spikectl/ or packages/ctl/
  • Need to rebuild CLI binaries for Nix distribution
  • Updating CLI tools after refactoring

Observation Space (Y)

| Observable | How to Check | |------------|--------------| | Source modified | git status packages/{spikectl,ctl}/src/ | | Binary stale | Compare bin/ mtime vs src/ mtime | | TypeScript valid | bunx tsc --noEmit |

Action Space (U)

| Action | Command | From Directory | |--------|---------|----------------| | compile | bun build --compile --minify src/index.ts --outfile bin/<name> | packages/<pkg>/ | | build-nix | nix build '.?dir=packages/tmnl#<pkg>' | repo root | | test-binary | ./result/bin/<pkg> --version | repo root | | update-lock | nix flake update <pkg> | packages/tmnl/ |

Policy (π)

STATE: source_changed ∧ ¬binary_updated
  → ACTION: compile

STATE: binary_updated ∧ need_nix_build
  → ACTION: build-nix

STATE: flake_deps_changed
  → ACTION: update-lock → build-nix

STATE: build_complete
  → ACTION: test-binary → TERMINATE

Termination (β)

| Condition | Exit | |-----------|------| | ./result/bin/<pkg> --version succeeds | SUCCESS | | TypeScript errors | FAIL: fix errors | | Nix build fails | FAIL: check flake.nix |

Q-Heuristics

| Situation | Guidance | |-----------|----------| | Source-only changes | Skip nix flake update - path: inputs evaluate live | | New dependencies in flake.nix | Must run nix flake update <pkg> | | Binary size changed significantly | Verify correct bundling |

Constraints

  • □(compile_before_nix_build) — Always compile before Nix build
  • □(test_after_build) — Always verify binary works after build
  • ◇(version_incremented) — Eventually bump version for releases

Commands

Quick Rebuild

cd packages/spikectl
bun build --compile --minify src/index.ts --outfile bin/spikectl

Full Release

cd packages/spikectl
bun build --compile --minify src/index.ts --outfile bin/spikectl
git add bin/spikectl
git commit -m "build(spikectl): v0.x.x"

cd ../..
nix build '.?dir=packages/tmnl#spikectl'
./result/bin/spikectl --version

DevShell Access

nix develop '.?dir=packages/tmnl#tmnl-ctl'
# Now spikectl and ctl are in PATH

Why No Flake Update for Source Changes?

The tmnl flake uses path: inputs:

spikectl = { url = "path:../spikectl"; }

No hash lock → changes picked up on rebuild.