Skip to content

Commit ce29594

Browse files
committed
wip: cicd
1 parent 194f750 commit ce29594

2 files changed

Lines changed: 53 additions & 11 deletions

File tree

.github/workflows/solana-unit-tests.yaml

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,22 +52,34 @@ jobs:
5252
5353
# Start port-forward and keep this step alive while tests run
5454
if [ -n "${NS}" ]; then
55+
echo "Starting port-forward process..."
5556
PORTS_ENV_FILE="networks/solana/starship/.pf-env" NS="$NS" bash networks/solana/starship/port-forward.sh &
5657
PF_SUPERVISOR_PID=$!
5758
# Clean up on exit
5859
trap 'echo "Stopping port-forward"; kill -9 ${PF_SUPERVISOR_PID} >/dev/null 2>&1 || true; pkill -f "kubectl -n ${NS} port-forward" || true' EXIT
60+
61+
# Give port-forward script time to start
62+
echo "Allowing port-forward script time to initialize..."
63+
sleep 5
5964
else
6065
echo "Could not determine namespace for port-forward" >&2
66+
exit 1
6167
fi
6268
6369
# Load dynamic ports from port-forward script if provided
6470
PF_ENV="networks/solana/starship/.pf-env"
65-
for i in $(seq 1 50); do
71+
echo "Waiting for port-forward setup to complete..."
72+
for i in $(seq 1 100); do
6673
if [ -f "$PF_ENV" ]; then
6774
# shellcheck disable=SC1090
6875
. "$PF_ENV" || true
76+
echo "Port-forward environment loaded from $PF_ENV"
77+
cat "$PF_ENV" || true
6978
break
7079
fi
80+
if [ $((i % 25)) -eq 0 ]; then
81+
echo "Still waiting for port-forward setup... (${i}/100)"
82+
fi
7183
sleep 0.2
7284
done
7385
@@ -106,11 +118,25 @@ jobs:
106118
done
107119
if [ "$ws_ok" -ne 1 ]; then
108120
echo "WebSocket port ${WS_PORT} not reachable; dumping diagnostics" >&2
121+
echo "=== Current listening ports ==="
109122
if command -v ss >/dev/null 2>&1; then ss -ltnp || true; fi
110123
if command -v lsof >/dev/null 2>&1; then lsof -iTCP -sTCP:LISTEN || true; fi
124+
echo "=== Port-forward environment file ==="
125+
if [ -f "$PF_ENV" ]; then cat "$PF_ENV" || true; else echo "No $PF_ENV file found"; fi
126+
echo "=== Port-forward log files ==="
127+
ls -la networks/solana/starship/pf_*.log 2>/dev/null || echo "No port-forward log files found"
128+
for log in networks/solana/starship/pf_*.log; do
129+
if [ -f "$log" ]; then
130+
echo "=== Contents of $log ==="
131+
cat "$log" || true
132+
fi
133+
done
134+
echo "=== Kubernetes services ==="
111135
kubectl get svc -A -o wide || true
112136
if [ -n "${NS}" ]; then
137+
echo "=== Pods in namespace $NS ==="
113138
kubectl get pods -n "$NS" -o wide || true
139+
echo "=== Pod descriptions ==="
114140
(kubectl describe pods -l app=solana-genesis -n "$NS" || \
115141
kubectl describe pods -l app.kubernetes.io/name=solana-genesis -n "$NS") || true
116142
fi

networks/solana/starship/port-forward.sh

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ NS="${NS:-default}" # Override with --ns
66
POD_NAME="" # Override with --pod
77
SLEEP_BETWEEN=0.2
88
CHECK_RETRIES=25 # 25 * 0.2s = 5s
9+
WS_CHECK_RETRIES=50 # 50 * 0.2s = 10s (WebSocket may take longer)
910
PORTS_ENV_FILE="${PORTS_ENV_FILE:-$(dirname "$0")/.pf-env}"
1011

1112
usage() {
@@ -41,6 +42,7 @@ start_pf() {
4142
local mapping="$2" # <local>:<remote>
4243
local local_port="${mapping%%:*}"
4344
local remote_port="${mapping##*:}"
45+
local retries="${3:-$CHECK_RETRIES}" # Optional custom retry count
4446

4547
free_port "$local_port"
4648

@@ -53,7 +55,7 @@ start_pf() {
5355

5456
# Health check: wait for local port to open
5557
local ok=0
56-
for _ in $(seq 1 $CHECK_RETRIES); do
58+
for _ in $(seq 1 "$retries"); do
5759
# Prefer nc if available; otherwise use bash's /dev/tcp
5860
if command -v nc >/dev/null 2>&1; then
5961
if nc -z 127.0.0.1 "$local_port" >/dev/null 2>&1; then
@@ -73,7 +75,7 @@ start_pf() {
7375
done
7476

7577
if [[ $ok -eq 1 ]]; then
76-
log "Forwarded $target (local $mapping)"
78+
log "Forwarded $target → 127.0.0.1:$mapping"
7779
# Record ports to env file for consumers (e.g., CI step/tests)
7880
case "$remote_port" in
7981
8899)
@@ -87,7 +89,7 @@ start_pf() {
8789
esac
8890
return 0
8991
else
90-
err "Failed to forward $target (local $mapping); killing pid $pf_pid"
92+
err "Failed to forward $target → 127.0.0.1:$mapping after ${retries} retries; killing pid $pf_pid"
9193
kill -9 "$pf_pid" >/dev/null 2>&1 || true
9294
# Surface port-forward logs to help debugging
9395
if [[ -f "$log_file" ]]; then
@@ -99,12 +101,18 @@ start_pf() {
99101
fi
100102
}
101103

104+
# Start WebSocket port-forward with longer timeout
105+
start_ws_pf() {
106+
start_pf "$1" "$2" "$WS_CHECK_RETRIES"
107+
}
108+
102109
# Try a list of local ports for a given remote port and record the first success
103110
start_pf_any() {
104111
local target="$1"
105112
local remote_port="$2"
106113
shift 2
107114
local candidate
115+
log "Trying alternate ports for $target:$remote_port$*"
108116
for candidate in "$@"; do
109117
if start_pf "$target" "${candidate}:${remote_port}"; then
110118
return 0
@@ -154,15 +162,23 @@ success=0
154162
# Try pod first; if it fails, fall back to service/solana-genesis
155163
( start_pf "pods/$POD_NAME" "8899:8899" || start_pf "service/solana-genesis" "8899:8899" ) && ((success++)) # Solana RPC
156164

157-
# WebSocket: try default 8900 locally; if bind fails, try alternates and record selected port
158-
if start_pf "pods/$POD_NAME" "8900:8900" || start_pf "service/solana-genesis" "8900:8900"; then
165+
# WebSocket: prefer pod over service for headless services
166+
# Try pod first, then try alternates if it fails
167+
log "Setting up WebSocket port-forward (8900) with extended timeout..."
168+
if start_ws_pf "pods/$POD_NAME" "8900:8900"; then
169+
log "✓ WebSocket port-forward established on default port 8900"
170+
((success++))
171+
elif start_pf_any "pods/$POD_NAME" 8900 8910 18900 19000 29000; then
172+
log "✓ WebSocket port-forward established on alternate port"
173+
((success++))
174+
elif start_ws_pf "service/solana-genesis" "8900:8900"; then
175+
log "✓ WebSocket port-forward established via service on port 8900"
176+
((success++))
177+
elif start_pf_any "service/solana-genesis" 8900 8910 18900 19000 29000; then
178+
log "✓ WebSocket port-forward established via service on alternate port"
159179
((success++))
160180
else
161-
# Try alternate local ports mapping to remote 8900
162-
if start_pf_any "pods/$POD_NAME" 8900 8910 18900 19000 29000 || \
163-
start_pf_any "service/solana-genesis" 8900 8910 18900 19000 29000; then
164-
((success++))
165-
fi
181+
err "✗ Failed to establish WebSocket port-forward on any port"
166182
fi
167183
start_pf "pods/$POD_NAME" "8001:8001" && ((success++)) # Exposer
168184
start_pf "pods/$POD_NAME" "9900:9900" && ((success++)) # Faucet

0 commit comments

Comments
 (0)