Create close_old_issues.py
This commit is contained in:
1 parent
45c9b16045
commit
f09db4e8d6
1 file changed
+70
@@ -0,0 +1,70 @@
|
||||
"""
|
||||
Close Old Issues
|
||||
|
||||
This script automatically closes issues that have been open for longer than
|
||||
a specified number of days. It ignores pull requests even if they appear in
|
||||
the issues list.
|
||||
|
||||
Usage:
|
||||
1. Set your Personal Access Token (PAT) with 'repo' scope permission
|
||||
2. Configure the repository owner, repository name, and age threshold
|
||||
3. Run the script: python close_old_issues.py
|
||||
|
||||
Requirements:
|
||||
- requests library: pip install requests
|
||||
"""
|
||||
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
import requests
|
||||
|
||||
# Configuration - Replace these values with your own
|
||||
TOKEN = "YOUR_PAT" # Personal Access Token with 'repo' scope
|
||||
OWNER = "your-username" # GitHub username or organization name
|
||||
REPO = "your-repo" # Repository name
|
||||
DAYS_OLD = 90 # Close issues older than this many days
|
||||
|
||||
# Set up request headers with authentication
|
||||
headers = {"Authorization": f"Bearer {TOKEN}", "Accept": "application/vnd.github+json"}
|
||||
|
||||
# Get all open issues
|
||||
url = f"https://api.github.com/repos/{OWNER}/{REPO}/issues?state=open"
|
||||
response = requests.get(url, headers=headers)
|
||||
|
||||
# Check for successful API response
|
||||
if response.status_code != 200:
|
||||
print(f"Error fetching issues: {response.status_code}")
|
||||
print(response.json().get("message", "No error message provided"))
|
||||
exit(1)
|
||||
|
||||
issues = response.json()
|
||||
|
||||
# Calculate the cutoff date for closing issues
|
||||
cutoff_date = datetime.now() - timedelta(days=DAYS_OLD)
|
||||
|
||||
# Process each issue
|
||||
for issue in issues:
|
||||
# Skip pull requests which appear in the issues list but should not be auto-closed
|
||||
if "pull_request" not in issue:
|
||||
issue_date = datetime.strptime(issue["created_at"], "%Y-%m-%dT%H:%M:%SZ")
|
||||
|
||||
# Check if the issue is older than the cutoff date
|
||||
if issue_date < cutoff_date:
|
||||
issue_number = issue["number"]
|
||||
close_url = (
|
||||
f"https://api.github.com/repos/{OWNER}/{REPO}/issues/{issue_number}"
|
||||
)
|
||||
payload = {"state": "closed"}
|
||||
|
||||
# Send the request to close the issue
|
||||
close_response = requests.patch(close_url, headers=headers, json=payload)
|
||||
|
||||
if close_response.status_code == 200:
|
||||
print(
|
||||
f"Closed issue #{issue_number} (Created: {issue_date.strftime('%Y-%m-%d')})"
|
||||
)
|
||||
else:
|
||||
print(
|
||||
f"Failed to close issue #{issue_number}: {close_response.status_code}"
|
||||
)
|
||||
print(close_response.json().get("message", "No error message provided"))
|
||||
Reference in new issue
Block a user