diff --git a/.gitea/workflows/stale-issues.yml b/.gitea/workflows/stale-issues.yml index 52b7583..b3e5708 100644 --- a/.gitea/workflows/stale-issues.yml +++ b/.gitea/workflows/stale-issues.yml @@ -16,15 +16,35 @@ jobs: steps: - name: Mark stale issues run: | - # Issues with no activity for 30 days - THIRTY_DAYS_AGO=$(date -u -d '30 days ago' '+%Y-%m-%dT%H:%M:%SZ') + # Calculate timestamp for 30 days ago (seconds since epoch for comparison) + THIRTY_DAYS_AGO_SEC=$(date -d '30 days ago' '+%s') - # Get all open issues updated before 30 days ago - ISSUES=$(curl -s -H "Authorization: token $API_TOKEN" "$API_BASE_URL/repos/$REPO/issues?state=open&since=$THIRTY_DAYS_AGO&sort=updated&order=asc" | jq -c '.[]') + # Get all open issues sorted by oldest update first + # REMOVED 'since' because it filters for NEWER issues + ISSUES=$(curl -s -H "Authorization: token $API_TOKEN" "$API_BASE_URL/repos/$REPO/issues?state=open&sort=updated&order=asc" | jq -c '.[]') + + # Check if we have issues to process + if [ -z "$ISSUES" ]; then + echo "No open issues found." + exit 0 + fi echo "$ISSUES" | while IFS= read -r issue; do + # Prevent processing empty lines + if [ -z "$issue" ]; then continue; fi + ISSUE_NUMBER=$(echo "$issue" | jq -r '.number') UPDATED_AT=$(echo "$issue" | jq -r '.updated_at') + + # Convert issue update time to seconds + UPDATED_AT_SEC=$(date -d "$UPDATED_AT" '+%s') + + # LOGIC CHECK: If the issue is newer than 30 days, stop (since list is sorted asc) + if [ "$UPDATED_AT_SEC" -gt "$THIRTY_DAYS_AGO_SEC" ]; then + # Found an issue updated recently, so we are done with the old ones + continue + fi + HAS_STALE_LABEL=$(echo "$issue" | jq -r '.labels[] | select(.name == "status: stale") | .name') # Skip if already has stale label