-
Notifications
You must be signed in to change notification settings - Fork 0
Artifact Patterns
Step cache uses input, output, and mutate glob patterns to know what a step reads and writes.
step({
name = "compile",
phase = "build",
scope = "default",
input = { "src/**/*.cpp", "CMakeLists.txt" },
output = { "build/app" },
mutate = { "build/**/*.o" },
run = "...",
})| Field | Meaning | Used for |
|---|---|---|
input |
Files read | Content hash in cache key; input stamps in index |
output |
Files created or replaced | Output existence check; output list after run |
mutate |
Files changed in place | Treated as inputs for hashing; also ordering conflicts |
All fields are optional tables of strings (glob patterns). Omit a field with {} or leave it unset.
Patterns are relative to the project root. Beez uses its built-in glob matcher (supports **, *, ?).
Examples:
"src/**/*.cpp"
"include/**/*.hpp"
"build/app"
"CMakeLists.txt"A step is step-cacheable if any of the three fields is non-empty.
Steps with only a shell run and no patterns never skip via step cache.
For cache keys and index stamps, Beez expands input and mutate patterns and fingerprints matched files:
- Cache key: content hash of each file
- Index fast path: path, size, modification time (no full re-hash on hot path)
If a matched path is not a regular file, it is skipped for stamps.
| Declared | Recorded outputs |
|---|---|
output non-empty |
All paths matching output globs |
mutate only |
All paths matching mutate globs |
No output or mutate
|
Files changed under watched directories (default includes build/) |
When output and mutate are both empty, Beez snapshots files under directories inferred from output patterns, or build/ by default, and records files that changed (size or mtime).
Prefer explicit output or mutate for reliable caching.
Steps in the same phase+scope with overlapping mutate patterns cannot run in parallel. Beez infers ordering to avoid concurrent writes to the same files.
Use explicit order() when overlap is not obvious. See Order Declaration.
ctx:spawn() accepts optional inputs and outputs arrays with the same glob string format. Workers with either field set can participate in worker-level step caching.
Compile (read sources, write binary):
input = { "src/**/*.cpp" },
output = { "build/myapp" },Format in place:
mutate = { "src/**/*.cpp" },Code generation:
input = { "schema/*.json" },
output = { "generated/**/*.h" },No artifacts (always runs):
step({
name = "deploy",
phase = "deploy",
scope = "default",
run = "kubectl apply -f k8s/",
})- Step Cache - how patterns affect skip logic
- Cache Keys and Invalidation
- Step Declaration
Quick Reference · Glossary · FAQ
- Fundamentals
- Core Concepts
- Project Layout
- First Pipeline
- Phases and Scopes
- How Phases and Scopes Work
- Selecting with Phases and Scopes
- Designing Phases and Scopes
- Parallel Execution and Dependencies
- Configuration
- Configuration Overview
- Global User Config
- Project Config
- Environment Variables
- Performance Settings
- Cache Settings
- Config Reference
- CLI
- CLI Overview
- Running Targets
- Filtering by Phase
- Running a Single Step
- Listing Entities
- Output and Logging Flags
- Cache and Maintenance Flags
- Meta and Utility Commands
-
Project Scaffolding —
beez --init(embedded Tempify) - CLI Flag Reference
- Lua DSL
- DSL Overview
- Plugin System — Plugins, Config DSL, Standard-Workflows
- Step Declaration
- Task Declaration
- Workflow Declaration
- Order Declaration
- Configure Step
- ReqPack Declaration
- Beez API
- Step Context
- DSL Patterns
- Caching
- Caching Overview
- Step Cache
- Success Cache
- Glob Metadata Cache
- Artifact Patterns
- Cache Keys and Invalidation
- Cache Storage and Maintenance
- Caching Troubleshooting
- UI and Output
- Output Modes
- Progress and Animation
- Colors and Themes
- Run Summaries
- Logging and Log Files
- Development and Contribution
- Building and Setup
- Repository Layout
- Testing
- Code Quality
- Feature Development Workflow
- Submitting Changes