Skip to content

Commit b97ece5

Browse files
committed
chore(scripts): add GitHub issue management automation
- Add scripts for assigning issues to contributors - Add script for closing low-quality/spam issues - Include documentation and assignment summary
1 parent c548731 commit b97ece5

18 files changed

Lines changed: 2777 additions & 0 deletions

scripts/ASSIGNMENT_SUMMARY.md

Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
# Issue Assignment Session Summary
2+
**Date:** July 20, 2026
3+
**Repository:** utksh1/SecuScan
4+
5+
## Mission Accomplished ✅
6+
7+
Successfully managed GitHub issue assignments while respecting the 5-issue limit per contributor.
8+
9+
## Results
10+
11+
### Issues Assigned: 52 Total
12+
13+
**Batch 1** (Automated - 3 issues)
14+
- akira-616: #2027
15+
- shravanithouta108: #1997, #1996
16+
17+
**Batch 2** (Active Commenters - 14 issues)
18+
- akira-616: #1995
19+
- aarushlohit: #1979
20+
- widjajs: #1969
21+
- diksha78dev: #1971
22+
- YUVRAJ-SINGH-3178: #1967
23+
- ishitaajain22-tech: #1869
24+
- ANU-2524: #1868
25+
- amna-sehgal: #1859, #1858
26+
- Yogender-verma: #1866
27+
- Khanvilkarshravani27: #1862
28+
- ask-z4ch: #1860
29+
- Harsh2865: #1853
30+
- Parth-kulkarni300: #1849
31+
32+
**Batch 3** (Second Wave - 17 issues)
33+
- shravanithouta108: #1879, #1852, #1832
34+
- HitanshiThakar: #1848
35+
- Avnithakur731-a: #1843
36+
- Archit-d300: #1841
37+
- siddiqui7864: #1836
38+
- shivanshanand: #1833
39+
- arpit2006: #1831
40+
- vedasingh00-rgb: #1820
41+
- SaumyaT-21: #1817
42+
- Harini-2811: #1809
43+
- Rakshak05: #1808
44+
- gyana07op: #1771
45+
- trivikramkalagi91-commits: #1770
46+
- Pragati5-DEBUG: #1766
47+
- sahare77: #1763
48+
49+
**Batch 4** (Final Wave - 18 issues)
50+
- PrishaNagpal: #1815
51+
- Somil450: #1805
52+
- NaitikVerma6776: #1756
53+
- Midoriya-w: #1755
54+
- Nissy-niveditha21: #1751
55+
- S0412-2007: #1748
56+
- omnipotentchaos: #1747
57+
- SathvikaSingoti: #1727
58+
- riddhimagupta2: #1726
59+
- Srejoye: #1708
60+
- Julliet-Mohanta: #1706
61+
- Sharmadotcom: #1704
62+
- SYEDABRAR037: #1648
63+
- ciphershade7: #1757, #1761
64+
- HitanshiThakar: #1753
65+
- diksha78dev: #1707
66+
- Khanvilkarshravani27: #1658
67+
- ask-z4ch: #1657
68+
- Parth-kulkarni300: #1641
69+
- Avnithakur731-a: #1597
70+
71+
### Current State
72+
73+
**Contributors at 5-issue limit:** 10 users
74+
- tmdeveloper007
75+
- shravanithouta108
76+
- karrisanthoshigayatri
77+
- ionfwsrijan
78+
- anshikaagr
79+
- advikdivekar
80+
- aaniya22
81+
- Somil450
82+
- Shikhar-404exe
83+
- Rakshak05
84+
85+
**Remaining:**
86+
- 77 unassigned issues with comments (mostly from users already at limit)
87+
- 35 unique contributors received assignments in this session
88+
89+
## Tools Created
90+
91+
### 1. `assign_issues.sh`
92+
Automated assignment script that:
93+
- Finds issues with recent assignment requests (last 5 days)
94+
- Checks current assignment counts
95+
- Respects 5-issue limit per contributor
96+
- Provides review before assigning
97+
98+
### 2. `close_low_quality_issues.sh`
99+
Quality control script that:
100+
- Detects spam and low-quality issues
101+
- Allows individual review
102+
- Supports batch operations
103+
104+
### 3. `manage_issues.sh` (Master Script)
105+
Interactive menu system providing:
106+
1. Auto-assign issues
107+
2. Check assignment statistics
108+
3. Find unassigned issues with activity
109+
4. Close low-quality/spam issues
110+
5. Check users at 5-issue limit
111+
6. Bulk check contributor availability
112+
113+
### 4. Documentation
114+
- `scripts/README.md` - Complete guide for all scripts
115+
- `scripts/ASSIGNMENT_SUMMARY.md` - This summary document
116+
117+
## Usage for Future Sessions
118+
119+
Simply run:
120+
```bash
121+
cd /Users/Utkarsh/Desktop/Projects/SecuScan
122+
./scripts/manage_issues.sh
123+
```
124+
125+
Or individual scripts:
126+
```bash
127+
./scripts/assign_issues.sh # Auto-assign
128+
./scripts/close_low_quality_issues.sh # Clean up spam
129+
```
130+
131+
## Key Success Factors
132+
133+
✅ Used `gh` CLI and `jq` for reliability (as requested, not Python)
134+
✅ Respected 5-issue limit per contributor
135+
✅ Only assigned to users who explicitly requested via comments
136+
✅ Matched commenters with their requested issues
137+
✅ Created reusable, maintainable scripts for future use
138+
139+
## Next Steps
140+
141+
When contributors complete their assigned issues:
142+
1. Run `manage_issues.sh` option #2 to see who has availability
143+
2. Run `manage_issues.sh` option #1 to auto-assign new issues
144+
3. The system will automatically find new contributors with free slots

scripts/README.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
# GitHub Issue Management Scripts
2+
3+
This directory contains scripts to help manage GitHub issues for the SecuScan repository.
4+
5+
## Scripts
6+
7+
### 1. `assign_issues.sh`
8+
Automatically assigns issues to contributors based on recent comments requesting assignment.
9+
10+
**Features:**
11+
- Respects the 5-issue limit per contributor
12+
- Only assigns issues where users have requested assignment
13+
- Filters issues with recent activity (last 5 days)
14+
- Provides a review before making assignments
15+
16+
**Usage:**
17+
```bash
18+
./scripts/assign_issues.sh
19+
```
20+
21+
### 2. `close_low_quality_issues.sh`
22+
Identifies and helps close low-quality or spam issues.
23+
24+
**Features:**
25+
- Detects very short/empty bodies
26+
- Identifies spam keywords (hiring, crypto scams, etc.)
27+
- Allows review before closing
28+
- Supports individual or batch closing
29+
30+
**Usage:**
31+
```bash
32+
./scripts/close_low_quality_issues.sh
33+
```
34+
35+
## Assignment Summary (2026-07-20)
36+
37+
**Total Issues Assigned: 52**
38+
39+
Successfully assigned issues to contributors who had shown interest by commenting, while respecting the 5-issue limit for each contributor.
40+
41+
### Distribution:
42+
- **35 unique contributors** received assignments
43+
- **10 contributors** now at the 5-issue limit
44+
- **77 issues** still have comments but are unassigned (mostly from users already at limit)
45+
46+
### Contributors at 5-issue limit:
47+
- tmdeveloper007
48+
- shravanithouta108
49+
- karrisanthoshigayatri
50+
- ionfwsrijan
51+
- anshikaagr
52+
- advikdivekar
53+
- aaniya22
54+
- Somil450
55+
- Shikhar-404exe
56+
- Rakshak05
57+
58+
## Tips
59+
60+
1. Run `assign_issues.sh` regularly (daily or after batch PR merges) to assign new issues
61+
2. Contributors who complete their assigned issues will automatically become available for new assignments
62+
3. The scripts use `gh` CLI and `jq` for reliability and performance
63+
4. All assignments are logged and can be reviewed before confirmation
64+
65+
## Prerequisites
66+
67+
- GitHub CLI (`gh`) installed and authenticated
68+
- `jq` for JSON processing
69+
- Bash 3.2+ (macOS compatible)

scripts/analyze_bugs.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
#!/usr/bin/env python3
2+
"""
3+
Generate a visual summary of discovered bugs.
4+
"""
5+
6+
import sys
7+
from pathlib import Path
8+
from collections import Counter
9+
10+
sys.path.insert(0, str(Path(__file__).parent))
11+
from issues_data import ISSUES
12+
13+
14+
def analyze_bugs():
15+
"""Analyze and display bug statistics."""
16+
17+
# Count by category
18+
by_type = Counter()
19+
by_area = Counter()
20+
by_priority = Counter()
21+
by_level = Counter()
22+
23+
security_issues = []
24+
good_first_issues = []
25+
26+
for idx, issue in enumerate(ISSUES):
27+
by_type[issue['type']] += 1
28+
by_area[issue['area']] += 1
29+
by_priority[issue['priority']] += 1
30+
by_level[issue.get('level', 'level:intermediate')] += 1
31+
32+
if 'security' in issue['type']:
33+
security_issues.append((idx, issue['title']))
34+
35+
if issue.get('gfi'):
36+
good_first_issues.append((idx, issue['title']))
37+
38+
print("=" * 80)
39+
print("SecuScan Bug Analysis Summary".center(80))
40+
print("=" * 80)
41+
print()
42+
43+
print(f"📊 TOTAL ISSUES DISCOVERED: {len(ISSUES)}")
44+
print()
45+
46+
# By Type
47+
print("🔍 BY TYPE:")
48+
for bug_type, count in sorted(by_type.items(), key=lambda x: -x[1]):
49+
bar = "█" * (count // 2)
50+
print(f" {bug_type:25} {count:3} {bar}")
51+
print()
52+
53+
# By Area
54+
print("📁 BY AREA:")
55+
for area, count in sorted(by_area.items(), key=lambda x: -x[1]):
56+
bar = "█" * (count // 2)
57+
print(f" {area:25} {count:3} {bar}")
58+
print()
59+
60+
# By Priority
61+
print("⚠️ BY PRIORITY:")
62+
priority_order = ['priority:high', 'priority:medium', 'priority:low']
63+
for priority in priority_order:
64+
count = by_priority[priority]
65+
if count > 0:
66+
bar = "█" * (count // 2)
67+
emoji = "🔴" if "high" in priority else "🟡" if "medium" in priority else "🟢"
68+
print(f" {emoji} {priority:25} {count:3} {bar}")
69+
print()
70+
71+
# By Level
72+
print("🎯 BY DIFFICULTY LEVEL:")
73+
level_order = ['level:beginner', 'level:intermediate', 'level:advanced']
74+
for level in level_order:
75+
count = by_level.get(level, 0)
76+
if count > 0:
77+
bar = "█" * (count // 2)
78+
print(f" {level:25} {count:3} {bar}")
79+
print()
80+
81+
# Security Issues
82+
print(f"🔒 SECURITY ISSUES ({len(security_issues)} total):")
83+
for idx, title in security_issues[:10]:
84+
print(f" #{idx:3} {title[:70]}")
85+
if len(security_issues) > 10:
86+
print(f" ... and {len(security_issues) - 10} more")
87+
print()
88+
89+
# Good First Issues
90+
print(f"🌟 GOOD FIRST ISSUES ({len(good_first_issues)} total):")
91+
for idx, title in good_first_issues[:10]:
92+
print(f" #{idx:3} {title[:70]}")
93+
if len(good_first_issues) > 10:
94+
print(f" ... and {len(good_first_issues) - 10} more")
95+
print()
96+
97+
# Top 10 Critical
98+
print("🚨 TOP 10 CRITICAL ISSUES:")
99+
critical_indices = [0, 1, 2, 4, 6, 7, 10, 14, 15, 16]
100+
for idx in critical_indices:
101+
if idx < len(ISSUES):
102+
issue = ISSUES[idx]
103+
print(f" #{idx:3} {issue['title'][:70]}")
104+
print()
105+
106+
print("=" * 80)
107+
print("📄 Full report: DISCOVERED_BUGS_REPORT.md")
108+
print("🚀 Create issues: python scripts/create_github_issues.py --help")
109+
print("📋 Quick start: BUG_REPORT_QUICKSTART.md")
110+
print("=" * 80)
111+
112+
113+
if __name__ == "__main__":
114+
analyze_bugs()

0 commit comments

Comments
 (0)