34 lines
1.2 KiB
Bash
34 lines
1.2 KiB
Bash
#!/usr/bin/env bash
|
|
# GitHub Notification Checker
|
|
# Returns JSON array of important notifications (mentions, assignments, review requests)
|
|
|
|
# 1. State management
|
|
STATE_FILE="$HOME/clawd/skills/github-watcher/.last_check"
|
|
if [ ! -f "$STATE_FILE" ]; then
|
|
date -u -v-1H +%Y-%m-%dT%H:%M:%SZ > "$STATE_FILE" # Default to 1 hour ago
|
|
fi
|
|
LAST_CHECK=$(cat "$STATE_FILE")
|
|
CURRENT_TIME=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
|
|
|
# 2. Fetch notifications
|
|
# Filter reasons: mention, review_requested, author, assign, manual (skip subscribed noise)
|
|
NOTIFICATIONS=$(gh api notifications \
|
|
--method GET \
|
|
-f since="$LAST_CHECK" \
|
|
-f all=false \
|
|
--jq '[.[] | select(.reason == "mention" or .reason == "review_requested" or .reason == "assign" or .reason == "author")]')
|
|
|
|
# 3. Output logic
|
|
COUNT=$(echo "$NOTIFICATIONS" | jq 'length')
|
|
|
|
if [ "$COUNT" -gt 0 ]; then
|
|
echo "$NOTIFICATIONS"
|
|
# Update state only if we found something (to ensure we processed them)
|
|
# Actually, agent logic will handle processing. We update time here to avoid loop if agent fails?
|
|
# No, let's update time AFTER successful fetch.
|
|
echo "$CURRENT_TIME" > "$STATE_FILE"
|
|
else
|
|
echo "[]"
|
|
echo "$CURRENT_TIME" > "$STATE_FILE"
|
|
fi
|