84 lines
2.4 KiB
Bash
Executable File
84 lines
2.4 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
# Generate dashboard showing milestones with unblocked/blocked issues
|
|
# Usage: ./generate-dashboard.sh [milestone-filter]
|
|
|
|
MILESTONE_FILTER="${1:-}"
|
|
|
|
# Get all milestones
|
|
milestones_json=$(tea milestones -o json)
|
|
|
|
# Parse milestone names
|
|
milestone_names=$(echo "$milestones_json" | jq -r '.[].title')
|
|
|
|
# Process each milestone
|
|
while IFS= read -r milestone; do
|
|
# Skip if filter provided and doesn't match
|
|
if [[ -n "$MILESTONE_FILTER" && ! "$milestone" =~ $MILESTONE_FILTER ]]; then
|
|
continue
|
|
fi
|
|
|
|
echo "## Milestone: $milestone"
|
|
echo ""
|
|
|
|
# Get open issues for this milestone
|
|
issues_json=$(tea issues --milestones "$milestone" --state open -o json 2>/dev/null || echo "[]")
|
|
|
|
# Skip empty milestones or invalid JSON
|
|
issue_count=$(echo "$issues_json" | jq -e 'length' 2>/dev/null || echo "0")
|
|
if [[ "$issue_count" -eq 0 ]]; then
|
|
echo "No open issues"
|
|
echo ""
|
|
continue
|
|
fi
|
|
|
|
# Arrays for categorizing issues
|
|
declare -a unblocked=()
|
|
declare -a blocked=()
|
|
|
|
# Process each issue
|
|
while IFS=$'\t' read -r number title; do
|
|
# Check dependencies (tea returns plain text "Issue #N has no dependencies" when empty)
|
|
deps_output=$(tea issues deps list "$number" -o json 2>/dev/null || echo "")
|
|
|
|
# If output contains "has no dependencies", treat as empty array
|
|
if [[ "$deps_output" == *"has no dependencies"* ]]; then
|
|
deps_json="[]"
|
|
else
|
|
deps_json="$deps_output"
|
|
fi
|
|
|
|
# Count open dependencies
|
|
open_deps=$(echo "$deps_json" | jq -r '[.[] | select(.state == "open")] | length' 2>/dev/null || echo "0")
|
|
|
|
if [[ "$open_deps" -eq 0 ]]; then
|
|
# No open blockers - unblocked
|
|
unblocked+=("#$number $title")
|
|
else
|
|
# Has open blockers - blocked
|
|
blocker_list=$(echo "$deps_json" | jq -r '[.[] | select(.state == "open") | "#\(.index)"] | join(", ")')
|
|
blocked+=("#$number $title (blocked by $blocker_list)")
|
|
fi
|
|
done < <(echo "$issues_json" | jq -r '.[] | [.index, .title] | @tsv')
|
|
|
|
# Display unblocked issues
|
|
echo "✓ Unblocked (${#unblocked[@]}):"
|
|
if [[ ${#unblocked[@]} -eq 0 ]]; then
|
|
echo " (none)"
|
|
else
|
|
printf ' %s\n' "${unblocked[@]}"
|
|
fi
|
|
echo ""
|
|
|
|
# Display blocked issues
|
|
echo "⊘ Blocked (${#blocked[@]}):"
|
|
if [[ ${#blocked[@]} -eq 0 ]]; then
|
|
echo " (none)"
|
|
else
|
|
printf ' %s\n' "${blocked[@]}"
|
|
fi
|
|
echo ""
|
|
|
|
done <<< "$milestone_names"
|