Hands-on: 22 isolated namespaces (20 participants + 2 instructors), each with a workshop pod (oc, helm, go, Node, Helmet @ composable_bundles).
| Directory | Audience | Purpose |
|---|---|---|
rewards-demo |
Instructor (default pod cwd for demo) | Complete reference installer — demo the end state first |
rewards-workshop |
Participants (default pod cwd) | Stripped installer; checklist on coordinator page → Lab activities |
Three composable bundles in both projects:
| Bundle | Purpose |
|---|---|
| data | PostgreSQL + RabbitMQ |
| producer | Manager rewards portal (publishes orders) |
| consumer | Store fulfillment portal (processes orders) |
helmet-workshop/
├── apps/ # Node.js producer & consumer (reference impl)
├── coordinator/ # FIFO web app: hands out console credentials
├── container/ # Workshop pod + coordinator image builds
├── docs/
│ ├── workshop-activities.md # Pointer → rewards-workshop/workshop-activities.md
│ ├── workshop-guide.md
│ └── architecture.md
├── hack/ # setup-workshop.sh, cleanup-workshop.sh
├── rewards-demo/ # Full solution (instructor reference)
└── rewards-workshop/ # Participant lab + workshop-activities.md
Copy and edit env once, then source it for build and setup:
cp hack/workshop.env.example hack/workshop.env # gitignored
# edit hack/workshop.env
set -a && source hack/workshop.env && set +aExample hack/workshop.env:
export WORKSHOP_IMAGE=quay.io/tsscdavp/helmet-workshop:dev
export PLATFORM=linux/amd64
export PARTICIPANT_COUNT=20
export INSTRUCTOR_COUNT=2-
Build & push both images (requires
podman login quay.io):./container/build.sh
-
Provision namespaces (requires
oc loginas cluster-admin):./hack/setup-workshop.sh
Setup writes
out/coordinator-links.txt: OpenShift Route URL, optional TinyURL short link, and QR image URL. Custom slug:WORKSHOP_SHORTURL_SLUG+TINYURL_API_TOKENinhack/workshop.env. -
Capacity test (optional — parallel build/config/deploy in all workshop pods):
./hack/capacity-test.sh # all participants, max parallel ./hack/capacity-test.sh --parallel 5 # throttle concurrency
Uses
rewards-demoinside each pod. Logs + before/after worker CPU/mem snapshots underout/capacity-test-*. -
Teardown:
./hack/cleanup-workshop.sh
- Instructor demo from the instructor pod (default cwd:
rewards-demo). - Participants open the coordinator page, log in to the console, then expand Lab activities when instructed (pod terminal already in
rewards-workshop).
Instructor demo:
# instructor pod — already in rewards-demo
export KUBECONFIG=""
make build
./rewards-demo config --create
./rewards-demo topology
./rewards-demo deployAfter the demo, instructors cd ../rewards-workshop to follow along with participants.
Helmet is a normal Go module (pinned in rewards-*/go.mod to a commit on
main). No sibling
Helmet checkout is required:
cd rewards-demo && make deps && make build
./container/build.sh --no-pushTo bump Helmet: cd rewards-demo && go get github.com/redhat-appstudio/helmet@main && go mod tidy
(and the same in rewards-workshop).
Validate that completing all activities yields the same bundles as rewards-demo:
./hack/validate-activities.shArchitecture details: docs/architecture.md.