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:
parent
b86688bc0f
commit
8c9d1344cc
2 changed files with 7 additions and 25 deletions
|
|
@ -28,18 +28,6 @@ jobs:
|
||||||
- name: Checkout repo
|
- name: Checkout repo
|
||||||
uses: actions/checkout@v4
|
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
|
- name: Run cleanup script
|
||||||
env:
|
env:
|
||||||
FORGEJO_TOKEN: ${{ secrets.FORGEJO_BOT_QA_TOKEN }}
|
FORGEJO_TOKEN: ${{ secrets.FORGEJO_BOT_QA_TOKEN }}
|
||||||
|
|
@ -47,14 +35,5 @@ jobs:
|
||||||
FORGEJO_REPO: lekss361/gendesign
|
FORGEJO_REPO: lekss361/gendesign
|
||||||
STALE_HOURS: 4
|
STALE_HOURS: 4
|
||||||
run: |
|
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
|
chmod +x scripts/cleanup-stale-claims.sh
|
||||||
bash -x scripts/cleanup-stale-claims.sh
|
./scripts/cleanup-stale-claims.sh
|
||||||
|
|
|
||||||
|
|
@ -65,8 +65,10 @@ for PAGE in 1 2 3 4 5 6 7 8 9 10; do
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
# Парсим JSON
|
# Парсим JSON — читаем файл прямо в Python через env var (не через pipe `cat | python3`).
|
||||||
cat "$ISSUES_TMP" | python3 <<'PYEOF'
|
# При 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
|
import json, os, subprocess, sys, datetime
|
||||||
|
|
||||||
cutoff = int(os.environ.get("CUTOFF", "0"))
|
cutoff = int(os.environ.get("CUTOFF", "0"))
|
||||||
|
|
@ -75,7 +77,8 @@ if cutoff == 0:
|
||||||
sys.exit(1)
|
sys.exit(1)
|
||||||
|
|
||||||
# Read pagination output — multiple JSON arrays separated by "---PAGE_END---"
|
# 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()]
|
pages = [p.strip() for p in raw.split("---PAGE_END---") if p.strip()]
|
||||||
data = []
|
data = []
|
||||||
for p in pages:
|
for p in pages:
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue