69 lines
2.3 KiB
Bash
Executable File
69 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
GIT_STATUS_PATH="${1:?git status file required}"
|
|
BACKLOG_ROWS_PATH="${2:?backlog rows file required}"
|
|
|
|
DIRTY_WORKTREE=0
|
|
if [[ -s "$GIT_STATUS_PATH" ]]; then
|
|
DIRTY_WORKTREE=1
|
|
fi
|
|
|
|
OPEN_ISSUES=$(grep -c '^|' "$BACKLOG_ROWS_PATH" || true)
|
|
NO_DELTA=true
|
|
FOCUS="risk_aging,unverified,backlog"
|
|
AGING_FOCUS="$(python3 - <<'PY' "$BACKLOG_ROWS_PATH"
|
|
from pathlib import Path
|
|
import sys
|
|
rows=[]
|
|
for line in Path(sys.argv[1]).read_text(encoding='utf-8').splitlines():
|
|
if not line.startswith('|'):
|
|
continue
|
|
parts=[p.strip() for p in line.strip('|').split('|')]
|
|
if len(parts) < 6:
|
|
continue
|
|
issue_id=parts[0]
|
|
priority=parts[2]
|
|
first_exposed=parts[3]
|
|
impact=parts[5].replace('次','').strip()
|
|
try:
|
|
impact_num=int(''.join(ch for ch in impact if ch.isdigit()) or '0')
|
|
except ValueError:
|
|
impact_num=0
|
|
rows.append((priority, first_exposed, -impact_num, issue_id, impact_num))
|
|
priority_rank={'P0':0,'P1':1,'P2':2}
|
|
rows.sort(key=lambda x:(priority_rank.get(x[0],9), x[1], x[2], x[3]))
|
|
focus=[]
|
|
for priority, first_exposed, neg_impact, issue_id, impact_num in rows[:3]:
|
|
focus.append(f"{issue_id}:{priority}:{impact_num}")
|
|
print(','.join(focus))
|
|
PY
|
|
)"
|
|
SAME_DAY_NO_DECISION_FOCUS="$(python3 - <<'PY' "$BACKLOG_ROWS_PATH"
|
|
from pathlib import Path
|
|
import sys
|
|
rows=[]
|
|
for line in Path(sys.argv[1]).read_text(encoding='utf-8').splitlines():
|
|
if not line.startswith('|'):
|
|
continue
|
|
parts=[p.strip() for p in line.strip('|').split('|')]
|
|
if len(parts) < 6:
|
|
continue
|
|
issue_id=parts[0]
|
|
priority=parts[2]
|
|
impact=parts[5].replace('次','').strip()
|
|
try:
|
|
impact_num=int(''.join(ch for ch in impact if ch.isdigit()) or '0')
|
|
except ValueError:
|
|
impact_num=0
|
|
rows.append((priority, -impact_num, issue_id, impact_num))
|
|
priority_rank={'P0':0,'P1':1,'P2':2}
|
|
rows.sort(key=lambda x:(priority_rank.get(x[0],9), x[1], x[2]))
|
|
focus=[]
|
|
for priority, neg_impact, issue_id, impact_num in rows[:2]:
|
|
focus.append(f"{issue_id}:{priority}:{impact_num}")
|
|
print(','.join(focus))
|
|
PY
|
|
)"
|
|
|
|
printf 'REVIEW_STATUS no_delta=%s dirty_worktree=%d open_issues=%d focus=%s aging_focus=%s same_day_no_decision_focus=%s\n' "$NO_DELTA" "$DIRTY_WORKTREE" "$OPEN_ISSUES" "$FOCUS" "$AGING_FOCUS" "$SAME_DAY_NO_DECISION_FOCUS" |