]> juplo.de Git - demos/kafka/training/commitdiff
refactor: $BRANCHES enthält direkt Branch-Namen statt Variablennamen
authorKai Moritz <kai.milan.moritz@googlemail.com>
Fri, 12 Jun 2026 16:46:47 +0000 (16:46 +0000)
committerKai Moritz <kai.milan.moritz@googlemail.com>
Fri, 12 Jun 2026 16:46:47 +0000 (16:46 +0000)
Die Indirektionsebene (Variablenname → Wert über declare -n) wird
entfernt. branches.sh definiert nur noch $BRANCHES mit direkten
Branch-Namen; grundlagen/docker ist jetzt darin enthalten.
lib.sh und copy.sh brauchen keine Namensauflösung mehr.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CLAUDE.md
branches.sh
copy.sh
lib.sh

index 368852a92d02d721c44132855a5c5f3616d18fb2..bd007d5b8bbfd3249c00b066f06859bd33aebab1 100644 (file)
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -216,7 +216,7 @@ Alle Skripte binden `lib.sh` ein, das seinerseits `branches.sh` lädt und gemein
 
 | Skript | Zweck |
 |--------|-------|
-| `branches.sh` | Definiert alle Branch-Namen als Variablen und die Iterationsliste `$BRANCHES` |
+| `branches.sh` | Definiert die Iterationsliste `$BRANCHES` mit allen Branch-Namen als direkte Zeichenketten |
 | `lib.sh` | Shared Library mit `$BRANCH_NAMES`-Array und den Funktionen `find_common_tag_suffixes()` und `reset_branches_to_remote()` |
 | `push.sh` | Force-pusht alle Branches und gemeinsame Tags zu origin; legt bei Bedarf TIMESTAMP-Backup-Tags an |
 | `reset.sh` | Setzt alle Branches zurück — auf `origin/<branch>` oder auf einen Tag-Stand |
@@ -471,4 +471,4 @@ done
 
 - `push.sh` force-pusht — das ist für diesen Schulungsworkflow absichtlich und erwartet.
 - `--vorlage`-Branches werden von `copy.sh` in `vorlagen/` kopiert; das neue `build.sh` in `technik-check` baut nur Musterlösungen aus `spickzettel/` und überspringt diese damit automatisch.
-- Der `grundlagen/docker`-Branch ist nicht in `$BRANCHES`, ist aber in `$BRANCH_NAMES` (aus `lib.sh`) enthalten und wird so automatisch von `push.sh`, `diff.sh`, `reset.sh` und `copy.sh` mitbehandelt.
+- Der `grundlagen/docker`-Branch ist in `$BRANCHES` enthalten und wird von allen Skripten automatisch mitbehandelt.
index f8a6c7128c8724bfedb542595dfd23573cde6501..86d32857c6ee2bff155fa520ca566e47107240ac 100755 (executable)
 #!/bin/bash
 set -e
 
-grundlagen__docker=grundlagen/docker
-producer__batch_size__vorlage=producer/batch-size--vorlage
-grundlagen__simple_producer=grundlagen/simple-producer
-grundlagen__simple_producer__vorlage=grundlagen/simple-producer--vorlage
-grundlagen__simple_producer__livecoding=grundlagen/simple-producer--livecoding
-grundlagen__simple_producer__livecoding__schritte=grundlagen/simple-producer--livecoding--schritte
-grundlagen__simple_producer__image__vorlage=grundlagen/simple-producer--image--vorlage
-grundlagen__simple_producer__fire_forget__vorlage=grundlagen/simple-producer--fire+forget--vorlage
-grundlagen__simple_producer__completablefuture=grundlagen/simple-producer--completablefuture
-producer__simple_producer__auditheaders=producer/simple-producer--auditheaders
-producer__simple_producer__delivery_timeout=producer/simple-producer--delivery-timeout
-producer__spring_producer=producer/spring-producer
-producer__spring_producer__vorlage=producer/spring-producer--vorlage
-producer__spring_producer__fixedsharding=producer/spring-producer--fixedsharding
-producer__spring_producer__fixedsharding__vorlage=producer/spring-producer--fixedsharding--vorlage
-producer__spring_producer__delivery_timeout=producer/spring-producer--delivery-timeout
-producer__spring_producer__delivery_timeout__vorlage=producer/spring-producer--delivery-timeout--vorlage
-producer__spring_producer__backpressure=producer/spring-producer--backpressure
-producer__spring_producer__backpressure__vorlage=producer/spring-producer--backpressure--vorlage
-producer__spring_producer__auditheaders=producer/spring-producer--auditheaders
-producer__spring_producer__auditheaders__vorlage=producer/spring-producer--auditheaders--vorlage
-producer__spring_producer__generics=producer/spring-producer--generics
-producer__rest_producer=producer/rest-producer
-springkafka__spring_producer__livecoding=springkafka/spring-producer--livecoding
-springkafka__spring_producer__livecoding__schritte=springkafka/spring-producer--livecoding--schritte
-springkafka__spring_producer=springkafka/spring-producer
-springkafka__spring_producer__vorlage=springkafka/spring-producer--vorlage
-springkafka__spring_producer__json=springkafka/spring-producer--json
-springkafka__spring_producer__json__vorlage=springkafka/spring-producer--json--vorlage
-springkafka__spring_producer__json__messages=springkafka/spring-producer--json--messages
-springkafka__spring_producer__json__messages__vorlage=springkafka/spring-producer--json--messages--vorlage
-springkafka__spring_producer__messageconverter=springkafka/spring-producer--messageconverter
-springkafka__spring_producer__kafkatemplate=springkafka/spring-producer--kafkatemplate
-springkafka__spring_producer__kafkatemplate__vorlage=springkafka/spring-producer--kafkatemplate--vorlage
-springkafka__technik_check=springkafka/technik-check
-springkafka__supersimple_producer=springkafka/supersimple-producer
-springkafka__supersimple_producer__vorlage=springkafka/supersimple-producer--vorlage
-grundlagen__simple_consumer=grundlagen/simple-consumer
-grundlagen__simple_consumer__vorlage=grundlagen/simple-consumer--vorlage
-grundlagen__simple_consumer__livecoding=grundlagen/simple-consumer--livecoding
-grundlagen__simple_consumer__livecoding__schritte=grundlagen/simple-consumer--livecoding--schritte
-grundlagen__simple_consumer__image__vorlage=grundlagen/simple-consumer--image--vorlage
-consumer__simple_consumer__megagroup__vorlage=consumer/simple-consumer--megagroup--vorlage
-consumer__simple_consumer__max_poll_interval_ms=consumer/simple-consumer--max-poll-interval-ms
-consumer__simple_consumer__retention_ms__vorlage=consumer/simple-consumer--retention-ms--vorlage
-consumer__spring_consumer__livecoding=consumer/spring-consumer--livecoding
-consumer__spring_consumer__livecoding__schritte=consumer/spring-consumer--livecoding--schritte
-consumer__spring_consumer=consumer/spring-consumer
-consumer__spring_consumer__vorlage=consumer/spring-consumer--vorlage
-consumer__nodlt=consumer/nodlt
-consumer__spring_consumer__logic_error=consumer/spring-consumer--logic-error
-consumer__spring_consumer__logic_error__vorlage=consumer/spring-consumer--logic-error--vorlage
-consumer__spring_consumer__long=consumer/spring-consumer--long
-consumer__spring_consumer__deserialization_error=consumer/spring-consumer--deserialization-error
-consumer__spring_consumer__deserialization_error__vorlage=consumer/spring-consumer--deserialization-error--vorlage
-consumer__spring_consumer__seek=consumer/spring-consumer--seek
-consumer__spring_consumer__seek__vorlage=consumer/spring-consumer--seek--vorlage
-consumer__spring_consumer__assign=consumer/spring-consumer--assign
-consumer__spring_consumer__assign__vorlage=consumer/spring-consumer--assign--vorlage
-consumer__spring_consumer__rebalance_listener=consumer/spring-consumer--rebalance-listener
-consumer__spring_consumer__rebalance_listener__vorlage=consumer/spring-consumer--rebalance-listener--vorlage
-consumer__spring_consumer__log_compaction=consumer/spring-consumer--log-compaction
-consumer__spring_consumer__generics=consumer/spring-consumer--generics
-consumer__spring_consumer__record_handler=consumer/spring-consumer--record-handler
-consumer__spring_consumer__health_indicator=consumer/spring-consumer--health-indicator
-consumer__spring_consumer__error_handling=consumer/spring-consumer--error-handling
-springkafka__spring_consumer__vorlage=springkafka/spring-consumer--vorlage
-springkafka__spring_consumer__json=springkafka/spring-consumer--json
-springkafka__spring_consumer__json__vorlage=springkafka/spring-consumer--json--vorlage
-springkafka__sumup_messages__vorlage=springkafka/sumup-messages--vorlage
-springkafka__spring_consumer__json__messages=springkafka/spring-consumer--json--messages
-springkafka__spring_consumer__json__messages__vorlage=springkafka/spring-consumer--json--messages--vorlage
-springkafka__spring_consumer__kafkahandler=springkafka/spring-consumer--kafkahandler
-springkafka__spring_consumer__messageconverter=springkafka/spring-consumer--messageconverter
-springkafka__spring_consumer__messageconverter__dlt=springkafka/spring-consumer--messageconverter--dlt
-springkafka__supersimple_consumer=springkafka/supersimple-consumer
-springkafka__supersimple_consumer__vorlage=springkafka/supersimple-consumer--vorlage
-springkafka__spring_consumer__kafkalistener=springkafka/spring-consumer--kafkalistener
-springkafka__spring_consumer__kafkalistener__concurrency=springkafka/spring-consumer--kafkalistener--concurrency
-springkafka__spring_consumer__kafkalistener__logic_error=springkafka/spring-consumer--kafkalistener--logic-error
-springkafka__spring_consumer__kafkalistener__long=springkafka/spring-consumer--kafkalistener--long
-springkafka__spring_consumer__kafkalistener__long__deserialization_error=springkafka/spring-consumer--kafkalistener--long--deserialization-error
-springkafka__spring_consumer__kafkalistener__long__dlt=springkafka/spring-consumer--kafkalistener--long--dlt
-springkafka__spring_producer__long=springkafka/spring-producer--long
-springkafka__spring_producer__long__vorlage=springkafka/spring-producer--long--vorlage
-
 BRANCHES="\
-  producer__batch_size__vorlage \
-  grundlagen__simple_producer \
-  grundlagen__simple_producer__vorlage \
-  grundlagen__simple_producer__livecoding \
-  grundlagen__simple_producer__livecoding__schritte \
-  grundlagen__simple_producer__image__vorlage \
-  grundlagen__simple_producer__fire_forget__vorlage \
-  grundlagen__simple_producer__completablefuture \
-  producer__simple_producer__auditheaders \
-  producer__simple_producer__delivery_timeout \
-  producer__spring_producer \
-  producer__spring_producer__vorlage \
-  producer__spring_producer__fixedsharding \
-  producer__spring_producer__fixedsharding__vorlage \
-  producer__spring_producer__delivery_timeout \
-  producer__spring_producer__delivery_timeout__vorlage \
-  producer__spring_producer__backpressure \
-  producer__spring_producer__backpressure__vorlage \
-  producer__spring_producer__auditheaders \
-  producer__spring_producer__auditheaders__vorlage \
-  producer__spring_producer__generics \
-  producer__rest_producer \
-  springkafka__spring_producer__livecoding \
-  springkafka__spring_producer__livecoding__schritte \
-  springkafka__spring_producer \
-  springkafka__spring_producer__vorlage \
-  springkafka__spring_producer__json \
-  springkafka__spring_producer__json__vorlage \
-  springkafka__spring_producer__json__messages \
-  springkafka__spring_producer__json__messages__vorlage \
-  springkafka__spring_producer__messageconverter \
-  springkafka__spring_producer__kafkatemplate \
-  springkafka__spring_producer__kafkatemplate__vorlage \
-  springkafka__technik_check \
-  springkafka__supersimple_producer \
-  springkafka__supersimple_producer__vorlage \
-  grundlagen__simple_consumer \
-  grundlagen__simple_consumer__vorlage \
-  grundlagen__simple_consumer__livecoding \
-  grundlagen__simple_consumer__livecoding__schritte \
-  grundlagen__simple_consumer__image__vorlage \
-  consumer__simple_consumer__megagroup__vorlage \
-  consumer__simple_consumer__max_poll_interval_ms \
-  consumer__simple_consumer__retention_ms__vorlage \
-  consumer__spring_consumer__livecoding \
-  consumer__spring_consumer__livecoding__schritte \
-  consumer__spring_consumer \
-  consumer__spring_consumer__vorlage \
-  consumer__nodlt \
-  consumer__spring_consumer__logic_error \
-  consumer__spring_consumer__logic_error__vorlage \
-  consumer__spring_consumer__long \
-  consumer__spring_consumer__deserialization_error \
-  consumer__spring_consumer__deserialization_error__vorlage \
-  consumer__spring_consumer__seek \
-  consumer__spring_consumer__seek__vorlage \
-  consumer__spring_consumer__assign \
-  consumer__spring_consumer__assign__vorlage \
-  consumer__spring_consumer__rebalance_listener \
-  consumer__spring_consumer__rebalance_listener__vorlage \
-  consumer__spring_consumer__log_compaction \
-  consumer__spring_consumer__generics \
-  consumer__spring_consumer__record_handler \
-  consumer__spring_consumer__health_indicator \
-  consumer__spring_consumer__error_handling \
-  springkafka__spring_consumer__vorlage \
-  springkafka__spring_consumer__json \
-  springkafka__spring_consumer__json__vorlage \
-  springkafka__sumup_messages__vorlage \
-  springkafka__spring_consumer__json__messages \
-  springkafka__spring_consumer__json__messages__vorlage \
-  springkafka__spring_consumer__kafkahandler \
-  springkafka__spring_consumer__messageconverter \
-  springkafka__spring_consumer__messageconverter__dlt \
-  springkafka__supersimple_consumer \
-  springkafka__supersimple_consumer__vorlage \
-  springkafka__spring_consumer__kafkalistener \
-  springkafka__spring_consumer__kafkalistener__concurrency \
-  springkafka__spring_consumer__kafkalistener__logic_error \
-  springkafka__spring_consumer__kafkalistener__long \
-  springkafka__spring_consumer__kafkalistener__long__deserialization_error \
-  springkafka__spring_consumer__kafkalistener__long__dlt \
-  springkafka__spring_producer__long \
-  springkafka__spring_producer__long__vorlage \
+  grundlagen/docker \
+  producer/batch-size--vorlage \
+  grundlagen/simple-producer \
+  grundlagen/simple-producer--vorlage \
+  grundlagen/simple-producer--livecoding \
+  grundlagen/simple-producer--livecoding--schritte \
+  grundlagen/simple-producer--image--vorlage \
+  grundlagen/simple-producer--fire+forget--vorlage \
+  grundlagen/simple-producer--completablefuture \
+  producer/simple-producer--auditheaders \
+  producer/simple-producer--delivery-timeout \
+  producer/spring-producer \
+  producer/spring-producer--vorlage \
+  producer/spring-producer--fixedsharding \
+  producer/spring-producer--fixedsharding--vorlage \
+  producer/spring-producer--delivery-timeout \
+  producer/spring-producer--delivery-timeout--vorlage \
+  producer/spring-producer--backpressure \
+  producer/spring-producer--backpressure--vorlage \
+  producer/spring-producer--auditheaders \
+  producer/spring-producer--auditheaders--vorlage \
+  producer/spring-producer--generics \
+  producer/rest-producer \
+  springkafka/spring-producer--livecoding \
+  springkafka/spring-producer--livecoding--schritte \
+  springkafka/spring-producer \
+  springkafka/spring-producer--vorlage \
+  springkafka/spring-producer--json \
+  springkafka/spring-producer--json--vorlage \
+  springkafka/spring-producer--json--messages \
+  springkafka/spring-producer--json--messages--vorlage \
+  springkafka/spring-producer--messageconverter \
+  springkafka/spring-producer--kafkatemplate \
+  springkafka/spring-producer--kafkatemplate--vorlage \
+  springkafka/technik-check \
+  springkafka/supersimple-producer \
+  springkafka/supersimple-producer--vorlage \
+  grundlagen/simple-consumer \
+  grundlagen/simple-consumer--vorlage \
+  grundlagen/simple-consumer--livecoding \
+  grundlagen/simple-consumer--livecoding--schritte \
+  grundlagen/simple-consumer--image--vorlage \
+  consumer/simple-consumer--megagroup--vorlage \
+  consumer/simple-consumer--max-poll-interval-ms \
+  consumer/simple-consumer--retention-ms--vorlage \
+  consumer/spring-consumer--livecoding \
+  consumer/spring-consumer--livecoding--schritte \
+  consumer/spring-consumer \
+  consumer/spring-consumer--vorlage \
+  consumer/nodlt \
+  consumer/spring-consumer--logic-error \
+  consumer/spring-consumer--logic-error--vorlage \
+  consumer/spring-consumer--long \
+  consumer/spring-consumer--deserialization-error \
+  consumer/spring-consumer--deserialization-error--vorlage \
+  consumer/spring-consumer--seek \
+  consumer/spring-consumer--seek--vorlage \
+  consumer/spring-consumer--assign \
+  consumer/spring-consumer--assign--vorlage \
+  consumer/spring-consumer--rebalance-listener \
+  consumer/spring-consumer--rebalance-listener--vorlage \
+  consumer/spring-consumer--log-compaction \
+  consumer/spring-consumer--generics \
+  consumer/spring-consumer--record-handler \
+  consumer/spring-consumer--health-indicator \
+  consumer/spring-consumer--error-handling \
+  springkafka/spring-consumer--vorlage \
+  springkafka/spring-consumer--json \
+  springkafka/spring-consumer--json--vorlage \
+  springkafka/sumup-messages--vorlage \
+  springkafka/spring-consumer--json--messages \
+  springkafka/spring-consumer--json--messages--vorlage \
+  springkafka/spring-consumer--kafkahandler \
+  springkafka/spring-consumer--messageconverter \
+  springkafka/spring-consumer--messageconverter--dlt \
+  springkafka/supersimple-consumer \
+  springkafka/supersimple-consumer--vorlage \
+  springkafka/spring-consumer--kafkalistener \
+  springkafka/spring-consumer--kafkalistener--concurrency \
+  springkafka/spring-consumer--kafkalistener--logic-error \
+  springkafka/spring-consumer--kafkalistener--long \
+  springkafka/spring-consumer--kafkalistener--long--deserialization-error \
+  springkafka/spring-consumer--kafkalistener--long--dlt \
+  springkafka/spring-producer--long \
+  springkafka/spring-producer--long--vorlage \
   "
diff --git a/copy.sh b/copy.sh
index 92b856cd818868353372776842cfa21ca952904c..59311f5d5bdf7dba82aad686ee5918faa26a4198 100755 (executable)
--- a/copy.sh
+++ b/copy.sh
@@ -108,6 +108,7 @@ load_schulung_config() {
 
 is_selected() {
   local branch="$1" b
+  [[ "$branch" == "grundlagen/docker" ]] && return 0
   [[ "$branch" == "springkafka/technik-check" ]] && return 0
   [[ "$branch" == *--livecoding ]] && return 0
   [ ${#SELECTED_BRANCHES[@]} -eq 0 ] && return 0
@@ -143,13 +144,7 @@ fi
 EXPECTED=$(mktemp)
 trap 'rm -f "$EXPECTED"' EXIT
 
-sync_header "grundlagen/docker" "$VORLAGEN/grundlagen/docker"
-checkout_branch "grundlagen/docker"
-echo "$VORLAGEN/grundlagen/docker" >> "$EXPECTED"
-sync_to "$VORLAGEN/grundlagen/docker/"
-
-for i in $BRANCHES; do
-  declare -n branch=${i}
+for branch in $BRANCHES; do
   case "$branch" in
   *--livecoding--schritte)
     echo -e "\nÜberspringe $branch"
@@ -160,6 +155,9 @@ for i in $BRANCHES; do
     continue
   fi
   case "$branch" in
+  grundlagen/docker)
+    dest="$VORLAGEN/grundlagen/docker"
+    ;;
   springkafka/technik-check)
     dest="$TECHNIKCHECK"
     ;;
diff --git a/lib.sh b/lib.sh
index 31bd8472198d8dae5683a73b6af5b5b8b9e316e9..34a3d5ec39b98fd7b0fecd68ca6741330c8e9725 100755 (executable)
--- a/lib.sh
+++ b/lib.sh
@@ -4,13 +4,8 @@
 
 source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/branches.sh"
 
-# Array aller Branch-Namen als Strings (inkl. grundlagen/docker)
-BRANCH_NAMES=()
-for _i in grundlagen__docker $BRANCHES; do
-  declare -n _b=$_i
-  BRANCH_NAMES+=("$_b")
-  unset -n _b
-done
+# Array aller Branch-Namen als Strings
+BRANCH_NAMES=($BRANCHES)
 
 # Gibt gemeinsame Tag-Suffixe aller Branches auf stdout aus (einen pro Zeile).
 # Schlägt mit Fehler fehl, wenn ein Branch keine Tags hat.