fix(stale-claims): avoid SIGPIPE 141 — pass file path не pipe

Root cause: `cat $ISSUES_TMP | python3 <<EOF ... sys.exit(0)` — Python exits
0 early, cat получает SIGPIPE, set -o pipefail → script exits 141 = failure.

Fix: передача file path через env var вместо stdin pipe. Python читает файл
напрямую. No pipe → no SIGPIPE.

Verified локально на VPS с bot-qa token: exit 0, '[OK] 0 wip issues —
nothing to do'.

Also remove diagnostic steps from workflow (added в PR #611, нужно для
поиска root cause, теперь убираем).

Refs: PR #611 (diagnostic), runs #1514-1520 failures.
This commit is contained in:
lekss361 2026-05-28 01:05:56 +03:00
parent b86688bc0f
commit 8c9d1344cc
2 changed files with 7 additions and 25 deletions

View file

@ -28,18 +28,6 @@ jobs:
- name: Checkout repo
uses: actions/checkout@v4
- name: Diagnostic — runner environment
run: |
echo "=== runner environment ==="
echo "shell: $SHELL"
echo "bash: $(bash --version | head -1)"
echo "python3: $(python3 --version 2>&1 || echo 'NOT INSTALLED')"
echo "curl: $(curl --version | head -1)"
echo "mktemp: $(mktemp --version | head -1 2>&1 || echo 'no --version')"
echo "pwd: $(pwd)"
echo "ls scripts/: $(ls scripts/ 2>&1)"
echo "script exists: $(test -f scripts/cleanup-stale-claims.sh && echo yes || echo no)"
- name: Run cleanup script
env:
FORGEJO_TOKEN: ${{ secrets.FORGEJO_BOT_QA_TOKEN }}
@ -47,14 +35,5 @@ jobs:
FORGEJO_REPO: lekss361/gendesign
STALE_HOURS: 4
run: |
echo "=== env check ==="
echo "FORGEJO_TOKEN length: ${#FORGEJO_TOKEN}"
echo "FORGEJO_URL: $FORGEJO_URL"
echo "FORGEJO_REPO: $FORGEJO_REPO"
echo "STALE_HOURS: $STALE_HOURS"
echo "=== check token works ==="
curl -sS -H "Authorization: token $FORGEJO_TOKEN" "$FORGEJO_URL/api/v1/user" | head -c 200
echo ""
echo "=== run script with -x trace ==="
chmod +x scripts/cleanup-stale-claims.sh
bash -x scripts/cleanup-stale-claims.sh
./scripts/cleanup-stale-claims.sh

View file

@ -65,8 +65,10 @@ for PAGE in 1 2 3 4 5 6 7 8 9 10; do
fi
done
# Парсим JSON
cat "$ISSUES_TMP" | python3 <<'PYEOF'
# Парсим JSON — читаем файл прямо в Python через env var (не через pipe `cat | python3`).
# При pipe + sys.exit(0) после print, cat получает SIGPIPE → script exits 141 под
# set -o pipefail. Передача path через env var не использует pipe → no SIGPIPE.
ISSUES_FILE="$ISSUES_TMP" python3 <<'PYEOF'
import json, os, subprocess, sys, datetime
cutoff = int(os.environ.get("CUTOFF", "0"))
@ -75,7 +77,8 @@ if cutoff == 0:
sys.exit(1)
# Read pagination output — multiple JSON arrays separated by "---PAGE_END---"
raw = sys.stdin.read()
with open(os.environ["ISSUES_FILE"]) as f:
raw = f.read()
pages = [p.strip() for p in raw.split("---PAGE_END---") if p.strip()]
data = []
for p in pages: