ci: check kafka readiness before fuzz tests (#8461)

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)

Signed-off-by: WenyXu <wenymedia@gmail.com>
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
Weny Xu
2026-07-10 14:40:16 +08:00
committed by GitHub
parent ff2fa71d50
commit 29423f8ad8
2 changed files with 78 additions and 0 deletions
+68
View File
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
set -euo pipefail
GT_KAFKA_NAMESPACE="${GT_KAFKA_NAMESPACE:-kafka-cluster}"
GT_KAFKA_CLIENT_NAMESPACE="${GT_KAFKA_CLIENT_NAMESPACE:-my-greptimedb}"
GT_KAFKA_BOOTSTRAP_SERVERS="${GT_KAFKA_BOOTSTRAP_SERVERS:-kafka.kafka-cluster.svc.cluster.local:9092}"
GT_KAFKA_IMAGE="${GT_KAFKA_IMAGE:-docker.io/greptime/kafka:3.9.0-debian-12-r1}"
GT_KAFKA_READY_TIMEOUT_SECS="${GT_KAFKA_READY_TIMEOUT_SECS:-120}"
GT_KAFKA_READY_INTERVAL_SECS="${GT_KAFKA_READY_INTERVAL_SECS:-5}"
GT_KAFKA_POD_LABEL="${GT_KAFKA_POD_LABEL:-app.kubernetes.io/instance=kafka}"
log() {
printf '[wait-kafka-ready] %s\n' "$*"
}
run_client_probe() {
local pod_name="kafka-readiness-${RANDOM}-${RANDOM}"
kubectl run "${pod_name}" \
--namespace "${GT_KAFKA_CLIENT_NAMESPACE}" \
--image "${GT_KAFKA_IMAGE}" \
--restart=Never \
--rm \
--attach \
--quiet \
--env "GT_KAFKA_BOOTSTRAP_SERVERS=${GT_KAFKA_BOOTSTRAP_SERVERS}" \
--command -- bash -euo pipefail -c '
if command -v kafka-broker-api-versions.sh >/dev/null 2>&1; then
kafka_tool="kafka-broker-api-versions.sh"
elif [ -x /opt/bitnami/kafka/bin/kafka-broker-api-versions.sh ]; then
kafka_tool="/opt/bitnami/kafka/bin/kafka-broker-api-versions.sh"
else
echo "kafka-broker-api-versions.sh not found" >&2
exit 1
fi
"${kafka_tool}" --bootstrap-server "${GT_KAFKA_BOOTSTRAP_SERVERS}" >/tmp/kafka-ready.out
cat /tmp/kafka-ready.out
'
}
log "wait for Kafka pods in namespace ${GT_KAFKA_NAMESPACE}"
kubectl wait \
--for=condition=Ready \
pod -l "${GT_KAFKA_POD_LABEL}" \
--timeout="${GT_KAFKA_READY_TIMEOUT_SECS}s" \
-n "${GT_KAFKA_NAMESPACE}"
deadline=$((SECONDS + GT_KAFKA_READY_TIMEOUT_SECS))
attempt=1
while [ "${SECONDS}" -le "${deadline}" ]; do
log "probe Kafka from namespace ${GT_KAFKA_CLIENT_NAMESPACE}, attempt ${attempt}"
if run_client_probe; then
log "Kafka is ready at ${GT_KAFKA_BOOTSTRAP_SERVERS}"
exit 0
fi
log "Kafka probe failed; retrying in ${GT_KAFKA_READY_INTERVAL_SECS}s"
sleep "${GT_KAFKA_READY_INTERVAL_SECS}"
attempt=$((attempt + 1))
done
log "timed out waiting for Kafka bootstrap ${GT_KAFKA_BOOTSTRAP_SERVERS}"
kubectl get pods -o wide -n "${GT_KAFKA_NAMESPACE}" || true
kubectl get pods -o wide -n "${GT_KAFKA_CLIENT_NAMESPACE}" || true
exit 1
+10
View File
@@ -457,6 +457,11 @@ jobs:
name: Port forward Kafka WAL helper
run: |
kubectl port-forward service/kafka-wal-helper 8080:8080 -n kafka-cluster&
- if: matrix.mode.kafka
name: Check Kafka readiness
shell: bash
run: |
.github/scripts/wait-kafka-ready.sh
- name: Fuzz Test
uses: ./.github/actions/fuzz-test
env:
@@ -648,6 +653,11 @@ jobs:
- name: Port forward (mysql)
run: |
kubectl port-forward service/my-greptimedb-frontend 4002:4002 -n my-greptimedb&
- if: matrix.mode.kafka
name: Check Kafka readiness
shell: bash
run: |
.github/scripts/wait-kafka-ready.sh
- name: Fuzz Test
uses: ./.github/actions/fuzz-test
env: