Capstone Automation Project
Task Plan
Bound a Run
A capstone script should make the intended amount of work visible before it runs. This example builds a bounded task plan from a fixed list.
Program
Play the script to choose how many automation steps are planned for the run.
automation_task_plan.sh
Replay: real traced execution (multi-file project)
#!/usr/bin/env bash
task_count=3
completed=0
plan=""
for task in lint test publish docs cleanup; do
if [[ "$completed" -ge "$task_count" ]]; then
break
fi
completed=$((completed + 1))
plan="${plan}${task} "
done
summary="${plan% }"
echo "planned=$completed steps=$summary"
#!/usr/bin/env bash
task_count=5
completed=0
plan=""
for task in lint test publish docs cleanup; do
if [[ "$completed" -ge "$task_count" ]]; then
break
fi
completed=$((completed + 1))
plan="${plan}${task} "
done
summary="${plan% }"
echo "planned=$completed steps=$summary"
task_count ← 3
3task_count=34completed=0values this step3task_countcompleted ← 0
3task_count=34completed=05plan=""values this step0completedplan ← (empty)
4completed=05plan=""6for task in lint test publish docs cleanup; dovalues this step(empty)plancompleted ← 1
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step0 → 1completedlinttaskplan ← lint
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this step(empty) → lint planlinttaskcompleted ← 2
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step1 → 2completedtesttaskplan ← lint test
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this steplint → lint test plantesttaskcompleted ← 3
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step2 → 3completedpublishtaskplan ← lint test publish
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this steplint test → lint test publish planpublishtaskif [[ "$completed" -ge "$task_count" ]]; then
6for task in lint test publish docs cleanup; do7 if [[ "$completed" -ge "$task_count" ]]; then8 breakvalues this stepdocstask3completed3task_countsummary ← lint test publish
12done13summary="${plan% }"14echo "planned=$completed steps=$summary"values this steplint test publishsummarylint test publish planecho "planned=$completed steps=$summary"
13summary="${plan% }"14echo "planned=$completed steps=$summary"outputplanned=3 steps=lint test publishvalues this step3completedlint test publishsummary
task_count ← 5
3task_count=54completed=0values this step5task_countcompleted ← 0
3task_count=54completed=05plan=""values this step0completedplan ← (empty)
4completed=05plan=""6for task in lint test publish docs cleanup; dovalues this step(empty)plancompleted ← 1
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step0 → 1completedlinttaskplan ← lint
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this step(empty) → lint planlinttaskcompleted ← 2
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step1 → 2completedtesttaskplan ← lint test
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this steplint → lint test plantesttaskcompleted ← 3
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step2 → 3completedpublishtaskplan ← lint test publish
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this steplint test → lint test publish planpublishtaskcompleted ← 4
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step3 → 4completeddocstaskplan ← lint test publish docs
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this steplint test publish → lint test publish docs plandocstaskcompleted ← 5
9fi10completed=$((completed + 1))11plan="${plan}${task} "values this step4 → 5completedcleanuptaskplan ← lint test publish docs cleanup
10 completed=$((completed + 1))11 plan="${plan}${task} "12donevalues this steplint test publish docs → lint test publish docs cleanup plancleanuptasksummary ← lint test publish docs cleanup
12done13summary="${plan% }"14echo "planned=$completed steps=$summary"values this steplint test publish docs cleanupsummarylint test publish docs cleanup planecho "planned=$completed steps=$summary"
13summary="${plan% }"14echo "planned=$completed steps=$summary"outputplanned=5 steps=lint test publish docs cleanupvalues this step5completedlint test publish docs cleanupsummary
capstone plan
A capstone automation script should expose the steps it intends to run.
work bound
A numeric bound keeps a script from doing more work than intended.
plan summary
A compact summary makes the selected steps easy to review.