Skip to content

Commit afbbbd1

Browse files
committed
Address remaining PR comments
- Revert to CronJob example to maintain consistency with existing demos - Make generate-demo.sh flexible to support multiple demo variations - Add support for custom demo names and scripts via CLI parameters - Only update README for default kb-demo, not custom demos - Add usage/help documentation for the script This addresses feedback from camilamacedo86 on PR #5068: 1. Keep the same example (CronJob instead of Guestbook/Busybox) 2. Allow script to generate other demos for future extensibility
1 parent 59e50f0 commit afbbbd1

File tree

3 files changed

+87
-56
lines changed

3 files changed

+87
-56
lines changed

scripts/demo/README.md

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,26 @@ This will:
2929
5. Update the demo file in `docs/gif/kb-demo.${VERSION}.svg`
3030
6. Clean up temporary files
3131

32+
### Generate Custom Demos
33+
34+
The script supports generating multiple demo variations:
35+
36+
```sh
37+
# Generate the default kb-demo
38+
./scripts/demo/generate-demo.sh
39+
40+
# Generate a custom demo with a different name
41+
./scripts/demo/generate-demo.sh my-custom-demo
42+
43+
# Generate a custom demo using a different script
44+
./scripts/demo/generate-demo.sh advanced-demo ./path/to/custom-script.sh
45+
46+
# Show help
47+
./scripts/demo/generate-demo.sh --help
48+
```
49+
50+
Custom demos will be saved to `docs/gif/${DEMO_NAME}.${VERSION}.svg` and won't automatically update the README (you'll need to reference them manually).
51+
3252
## Setup Demo Cluster Only
3353

3454
If you just want to set up the Kind cluster for testing:

scripts/demo/generate-demo.sh

Lines changed: 54 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,10 @@ set -e
1919
SCRIPT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
2020
PROJECT_ROOT="$(cd "${SCRIPT_ROOT}/../.." && pwd)"
2121

22+
# Default demo name
23+
DEMO_NAME="${1:-kb-demo}"
24+
DEMO_SCRIPT="${2:-${SCRIPT_ROOT}/run.sh}"
25+
2226
# Colors for output
2327
RED='\033[0;31m'
2428
GREEN='\033[0;32m'
@@ -38,9 +42,38 @@ error() {
3842
exit 1
3943
}
4044

45+
usage() {
46+
cat << EOF
47+
Usage: $0 [DEMO_NAME] [DEMO_SCRIPT]
48+
49+
Generate an asciinema demo recording and convert it to SVG.
50+
51+
Arguments:
52+
DEMO_NAME Name of the demo (default: kb-demo)
53+
DEMO_SCRIPT Path to the demo script to run (default: ${SCRIPT_ROOT}/run.sh)
54+
55+
Examples:
56+
$0 # Generate default kb-demo
57+
$0 my-custom-demo # Generate custom demo with default script
58+
$0 advanced-demo ./my-demo.sh # Generate custom demo with custom script
59+
60+
EOF
61+
exit 0
62+
}
63+
4164
check_prerequisites() {
4265
log "Checking prerequisites..."
4366

67+
# Check for help flag
68+
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
69+
usage
70+
fi
71+
72+
# Validate demo script exists
73+
if [[ ! -f "$DEMO_SCRIPT" ]]; then
74+
error "Demo script not found: $DEMO_SCRIPT"
75+
fi
76+
4477
local missing_tools=()
4578

4679
if ! command -v asciinema &> /dev/null; then
@@ -82,38 +115,44 @@ record_demo() {
82115
rm -rf "$recording_dir"
83116
mkdir -p "$recording_dir"
84117

85-
log "Starting demo recording in 3 seconds..."
118+
log "Starting demo recording for '${DEMO_NAME}' in 3 seconds..."
86119
sleep 3
87120

88121
cd "$recording_dir"
89122
asciinema rec \
90-
--command "${SCRIPT_ROOT}/run.sh" \
123+
--command "$DEMO_SCRIPT" \
91124
--env "DEMO_AUTO_RUN=1" \
92-
--title "Kubebuilder Demo" \
125+
--title "Kubebuilder Demo: ${DEMO_NAME}" \
93126
--idle-time-limit 2 \
94-
kb-demo.cast
127+
"${DEMO_NAME}.cast"
95128
}
96129

97130
convert_to_svg() {
98131
local recording_dir="/tmp/kb-demo-recording"
99132
local version="$1"
100-
local svg_file="${PROJECT_ROOT}/docs/gif/kb-demo.${version}.svg"
133+
local svg_file="${PROJECT_ROOT}/docs/gif/${DEMO_NAME}.${version}.svg"
101134

102135
log "Converting recording to SVG..."
103136
svg-term \
104-
--in="${recording_dir}/kb-demo.cast" \
137+
--in="${recording_dir}/${DEMO_NAME}.cast" \
105138
--out="$svg_file" \
106139
--window \
107140
--width=120 \
108141
--height=30
109142

110-
log "Demo updated! New file: docs/gif/kb-demo.${version}.svg"
143+
log "Demo updated! New file: docs/gif/${DEMO_NAME}.${version}.svg"
111144
return 0
112145
}
113146

114147
update_readme() {
115148
local version="$1"
116149

150+
# Only update README for the default kb-demo
151+
if [[ "$DEMO_NAME" != "kb-demo" ]]; then
152+
log "Skipping README update for custom demo '${DEMO_NAME}'"
153+
return 0
154+
fi
155+
117156
log "Updating README.md with new demo..."
118157
if [[ "$OSTYPE" == "darwin"* ]]; then
119158
# macOS
@@ -133,7 +172,13 @@ cleanup() {
133172
}
134173

135174
main() {
136-
log "Starting Kubebuilder demo generation..."
175+
# Check for help flag first
176+
if [[ "$1" == "-h" || "$1" == "--help" ]]; then
177+
usage
178+
fi
179+
180+
log "Starting Kubebuilder demo generation for '${DEMO_NAME}'..."
181+
log "Using demo script: ${DEMO_SCRIPT}"
137182

138183
# Extract version once to avoid duplication
139184
local version
@@ -147,6 +192,7 @@ main() {
147192
cleanup
148193

149194
log "Demo generation completed successfully! 🎉"
195+
log "Generated: docs/gif/${DEMO_NAME}.${version}.svg"
150196
}
151197

152198
main "$@"

scripts/demo/run.sh

Lines changed: 13 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -22,63 +22,28 @@ cd kubebuilder-demo-project
2222
clear
2323
. $(dirname ${BASH_SOURCE})/util.sh
2424

25-
desc "Check if Kubebuilder is installed"
26-
run "kubebuilder version"
25+
desc "Initialize Go modules"
26+
run "go mod init demo.kubebuilder.io"
2727

28-
desc "Initialize Go modules for our project"
29-
run "go mod init demo.kubebuilder.io/webapp-operator"
30-
31-
desc "Initialize a new Kubebuilder project with custom domain"
32-
run "kubebuilder init --domain demo.kubebuilder.io --repo demo.kubebuilder.io/webapp-operator"
33-
clear
34-
35-
desc "Examine the scaffolded project structure"
36-
run "tree -L 2 ."
37-
clear
38-
39-
desc "Create our first API - a Guestbook with validation markers"
40-
run "kubebuilder create api --group webapp --version v1 --kind Guestbook"
41-
clear
42-
43-
desc "Let's explore the generated files structure"
44-
run "tree api/ internal/controller/"
28+
desc "Let's initialize the project"
29+
run "kubebuilder init --domain tutorial.kubebuilder.io"
4530
clear
4631

47-
desc "Look at the API definition - notice the validation markers"
48-
run "cat api/v1/guestbook_types.go"
32+
desc "Examine scaffolded files..."
33+
run "tree ."
4934
clear
5035

51-
desc "Now let's create a second API using the modern deploy-image plugin"
52-
run "kubebuilder create api --group webapp --version v1alpha1 --kind Busybox --image=busybox:1.36.1 --plugins=deploy-image/v1-alpha"
36+
desc "Create our custom cronjob api"
37+
run "kubebuilder create api --group batch --version v1 --kind CronJob"
5338
clear
5439

55-
desc "Generate manifests including CRDs with OpenAPI validation schemas"
56-
run "make manifests"
57-
58-
desc "Examine the generated CRD with validation rules"
59-
run "head -60 config/crd/bases/webapp.demo.kubebuilder.io_guestbooks.yaml"
40+
desc "Let's take a look at the API and Controller files"
41+
run "tree ./api ./internal/controller"
6042
clear
6143

62-
desc "Install our Custom Resource Definitions into the cluster"
44+
desc "Install CRDs in Kubernetes cluster"
6345
run "make install"
64-
65-
desc "Verify our CRDs are installed"
66-
run "kubectl get crd --context kind-kubebuilder-demo"
67-
clear
68-
69-
desc "Look at the sample resources that were generated"
70-
run "ls config/samples/"
71-
72-
desc "Show a sample resource"
73-
run "cat config/samples/webapp_v1_guestbook.yaml"
74-
clear
75-
76-
desc "Apply the sample resources to test our APIs"
77-
run "kubectl apply -f config/samples/webapp_v1alpha1_busybox.yaml --context kind-kubebuilder-demo"
78-
79-
desc "Check the created custom resources in the cluster"
80-
run "kubectl get guestbooks,busyboxes -A --context kind-kubebuilder-demo"
8146
clear
8247

83-
desc "Demo completed! The controller can be run with 'make run'"
84-
run "echo 'To run the controller: make run'"
48+
desc "Run controller manager locally"
49+
run "make run"

0 commit comments

Comments
 (0)