26809df720
- Add workshop-schedule crate (petgraph-based DAG scheduling) - Implement all bake decorators with combinator chain execution - Refactor notify module: extract handler, rule, template, util, queue - Add NotificationQueue with priority/drain semantics - Enhance finalize plugin system with internal plugin registration - Update ExecutionContext and event types - Add per-crate AGENTS.md knowledge base files - Remove inline AGENTS.md files (consolidated into per-crate docs)
6.9 KiB
6.9 KiB
PROJECT KNOWLEDGE BASE
Generated: 2026-06-12T16:08:15Z
Commit: 3629c33
Branch: feat/bake-dag-tester
OVERVIEW
HoneyBiscuitWorkshop (蜜饼工坊) — Rust-based CI/CD system inspired by Concourse CI. Pipeline: prebake.yml → bake.sh → finalize.yml. Multi-builder (Docker, Firecracker, bare metal). Plugin system.
STRUCTURE
./
├── workshop-baker/ # Main binary + lib — orchestrator, CLI, plugins
├── workshop-engine/ # Core execution engine — process mgmt, package managers
├── workshop-schedule/ # DAG scheduling library (petgraph-based)
├── workshop-getterurl/ # URL fetching with hash verification
├── workshop-baker-params/ # Config/parameter type definitions
├── docs/ # mdBook documentation (Chinese, 3 volumes)
├── templates/ # Pipeline config templates (prebake/bake/finalize)
└── .github/workflows/ # CI (tests workshop-baker + workshop-engine)
No root Cargo workspace — crates linked by path deps. Build per-crate.
WHERE TO LOOK
| Task | Location | Notes |
|---|---|---|
| CLI definition | workshop-baker/src/lib.rs |
Clap Cli/Commands/BareCommands |
| Pipeline orchestration | workshop-baker/src/main.rs |
prebake→bake→finalize→notify flow |
| Decorator parsing | workshop-baker/src/bake/decorator.rs |
# @decorator(args) syntax |
| Build execution | workshop-baker/src/bake/execute.rs |
Script execution with timeout/retry |
| Docker integration | workshop-baker/src/prebake/env/container.rs |
Bollard-based |
| Package managers | workshop-engine/src/pm/ |
apt, pacman, dnf, apk |
| User package managers | workshop-engine/src/upm/ |
rustup, uv, go |
| Notification system | workshop-baker/src/notify/ |
Email, webhook, IM |
| Plugin system | workshop-baker/src/finalize/plugin/ |
shell, dylib, rhai, internal |
| Error types | workshop-baker/src/error.rs |
CliError + HasExitCode |
| Exit codes | workshop-engine/src/error.rs |
EXITCODE_* constants |
| DAG scheduling | workshop-schedule/src/dag.rs |
Topological sort, batch picking |
| Pipeline templates | templates/ |
Reference config DSL |
ENTRY POINTS
| Entry | Type | Path | Role |
|---|---|---|---|
workshop-baker |
Rust bin | workshop-baker/src/main.rs |
Primary CLI — dispatch: default (full pipeline), bare (single stage), daemon (unimplemented) |
workshop_baker |
Rust lib | workshop-baker/src/lib.rs |
Baker library + CLI structs |
workshop_engine |
Rust lib | workshop-engine/src/lib.rs |
Core engine — ExecutionContext, EventSender, Executor |
workshop_schedule |
Rust lib | workshop-schedule/src/lib.rs |
Dag, DagNode, EdgeKind |
workshop_baker_params |
Rust lib | workshop-baker-params/src/lib.rs |
Layered config: defaults → base → courier |
workshop_getterurl |
Rust lib | workshop-getterurl/src/lib.rs |
GetterUrl, fetch() — http/git/file |
| docs | mdBook | docs/book.toml |
Project documentation site |
CODE MAP
Crate Dependency Graph
workshop-baker (bin)
├── workshop-engine
├── workshop-schedule
├── workshop-baker-params
└── workshop-getterurl
workshop-baker Module Map
| Module | Submodules | Role |
|---|---|---|
bake |
decorator, execute, parser, schedule, builder, trivial, util, constant, error | Script parsing + execution |
prebake |
config, stage (bootstrap, depssystem, depsuser, environment, hook), env (container, firecracker, baremetal, custom), security, event, types, constant, error | Environment setup |
finalize |
plugin (shell, dylib, rhai, internal), stage, template, types, config, constant, error, event | Post-build hooks |
notify |
handler, queue, rule, template, types, util, error | Async notification dispatch |
bare |
— | Standalone single-stage CLI mode |
types |
resource, buildstatus | Shared type definitions |
utils |
— | Cross-cutting utilities |
CONVENTIONS
- Edition: Rust 2024 (requires Rust 1.85+)
- Formatting: Default
rustfmt— norustfmt.toml/.editorconfig - Lint overrides (workshop-baker only):
dead_code = "allow",unreachable_code = "allow",inherent_to_string = "allow",non_canonical_partial_ord_impl = "allow" - Import order:
std→ external crates →crate::(blank line between groups) - Error handling:
thiserrorfor libraries,anyhowfor binaries. ImplementHasExitCodefor exit code mapping. - Type system: Newtype pattern preferred (e.g.,
MemSize(u64)). Shared types intypes/module.types/must NOT depend onbake/,engine/,prebake/,finalize/. - Tests: Inline
#[cfg(test)] mod testsat bottom of source files. Async:#[tokio::test]. CI runscargo test --all-features. - Commits:
type(scope): description—feat|fix|docs|test|refactor|style - AI annotation:
// Code in this module PARTIALLY or FULLY utilized AI Coding Agent— never delete if present - Docs language: Chinese (zh-CN), mdBook
- No
no_std: Explicitly unsupported
ANTI-PATTERNS (THIS PROJECT)
- Do NOT derive production behavior from bare mode — bare mode is dev-only, ctx.privileged is fake
- Do NOT use
detect()/adopt()PM methods in production — PM selection must come from env config drop_after < DepsUseris FORBIDDEN — will break system dependency installation (needs root)- Do NOT add magic URL inference — URL is URL, behavior bound explicitly via
getter::prefix - Do NOT use
@for version locking in URLs — it's an auth delimiter; use?ref= - Do NOT duplicate type definitions across modules — single source of truth in
types/ - Careful with
unimplemented!()— Daemon mode, Rhai/Dylib plugins, and Custom builder are stubs - Security: PIPELINE_CONTAINER_PRIVILEGED, PIPELINE_BAREMETAL_ELEVATE, PIPELINE_UNCOVER_SECRET require explicit approval + audit
COMMANDS
# Build (per crate, no workspace)
cd workshop-baker && cargo build --all-features
# Test (per crate)
cd workshop-baker && cargo test --all-features
cd workshop-engine && cargo test --all-features
# Lint (CI gate)
cargo fmt -- --check
cargo clippy --all-features -- -D warnings
# Docs
cd docs && mdbook build # output in docs/book/
cd docs && mdbook serve # local preview at localhost:3000
NOTES
- No workspace Cargo.toml at root — each crate has its own
Cargo.lock. Build individually. - CI only tests
workshop-bakerandworkshop-engine; smaller crates tested transitively. quicktest.shin workshop-baker/ is a dev smoke-test script (Docker-based, not CI).- Git submodules:
rust-tongsuo,RustyVault(crypto — not yet integrated into build). .secret/contains real credentials — never commit, never read into context.- See
docs/src/zh-CN/vol3_dev/for full developer documentation (architecture, design decisions, code style).