2 Commits
Author SHA1 Message Date
jklein ad573406a5 probe: cyberchef only, to separate resource contention from the rest
Validate Helm Charts / Detect changed charts (pull_request) Successful in 3s
Validate Helm Charts / Resource quantities (pull_request) Successful in 7s
Validate Helm Charts / Build ${{ fromJSON(needs.detect-changed-charts.outputs.charts) }} (pull_request) Successful in 4s
Validate Helm Charts / Trivy config ${{ fromJSON(needs.detect-changed-charts.outputs.scan-charts) }} (pull_request) Successful in 10s
Validate Helm Charts / Install-test ${{ fromJSON(needs.detect-changed-charts.outputs.install-charts) }} (pull_request) Failing after 5m30s
The two-leg run on Gitea left the cyberchef pod Pending with no node and
no scheduling event, while its k3s node logged a Starting event 17s
after the deployment was created - the node restarted under it. Two k3s
clusters share one runner container there (6 CPU / 12Gi per #227),
where on GitHub two legs are two VMs. A single leg, repeated, tells
contention apart from a real fault.
2026-09-17 00:39:05 +02:00
jklein eaaad24b98 probe: both charts (GitHub host path, with the race fixed) 2026-09-17 00:39:01 +02:00
+6 -20
View File
@@ -462,30 +462,16 @@ jobs:
# it produces exactly the sporadic red this job must not have. The # it produces exactly the sporadic red this job must not have. The
# loop asks for the node list, which is the thing that has to work # loop asks for the node list, which is the thing that has to work
# and exercises discovery on the way. # and exercises discovery on the way.
# It waits for a READY NODE, not for the API server to answer. The for ATTEMPT in $(seq 1 60); do
# difference is not pedantry, it is the second bug this check had: kubectl get nodes >/dev/null 2>&1 && break
# `kubectl get nodes` exits 0 on an EMPTY list, so the first version if [ "$ATTEMPT" -eq 60 ]; then
# passed against a cluster whose server was up and whose node had echo "::error::the k3d cluster '$CLUSTER' was created but never became reachable"
# not registered - the log said "No resources found" and the step kubectl get nodes || true
# went green, and the failure surfaced five minutes later as a pod
# stuck in Pending with no node and no scheduling event. A check
# that a broken cluster passes is worse than none. `kubectl wait
# --for=condition=Ready nodes --all` has the same hole: with zero
# nodes it succeeds vacuously.
for ATTEMPT in $(seq 1 90); do
READY_NODES="$(kubectl get nodes --no-headers 2>/dev/null | awk '$2 == "Ready"' | wc -l | tr -d ' ')"
[ "$READY_NODES" -ge 1 ] && break
if [ "$ATTEMPT" -eq 90 ]; then
echo "::error::the k3d cluster '$CLUSTER' answers but has no Ready node after 180s"
kubectl get nodes -o wide || true
kubectl describe nodes || true
echo "--- k3s server log ---"
docker logs "k3d-$CLUSTER-server-0" 2>&1 | tail -80 || true
exit 1 exit 1
fi fi
sleep 2 sleep 2
done done
kubectl get nodes -o wide kubectl get nodes
# Every chart reaching this step is one the exclusion filter let through, # Every chart reaching this step is one the exclusion filter let through,
# so the script's SKIP branch is never taken here - it exists for local # so the script's SKIP branch is never taken here - it exists for local
# runs. The variables below are empty for every chart but the one that # runs. The variables below are empty for every chart but the one that