49 خطوط
1.5 KiB
Python
49 خطوط
1.5 KiB
Python
import json
|
|
import os
|
|
import sys
|
|
import requests
|
|
import yaml
|
|
|
|
def get_labels(repo, token):
|
|
headers = {"Authorization": f"token {token}"}
|
|
labels = []
|
|
page = 1
|
|
while True:
|
|
url = f"https://api.github.com/repos/{repo}/labels?page={page}&per_page=100"
|
|
resp = requests.get(url, headers=headers)
|
|
if resp.status_code != 200:
|
|
raise Exception(f"Failed to fetch labels from {repo}: {resp.text}")
|
|
data = resp.json()
|
|
if not data:
|
|
break
|
|
labels.extend(data)
|
|
page += 1
|
|
return labels
|
|
|
|
def main(file_path):
|
|
with open(file_path, "r") as f:
|
|
repos_data = json.load(f)["repositories"]
|
|
|
|
token = os.environ["GH_TOKEN"]
|
|
all_labels = {}
|
|
|
|
for repo_entry in repos_data:
|
|
repo_url = repo_entry["url"]
|
|
print(f"Collecting labels from {repo_url}")
|
|
for label in get_labels(repo_url, token):
|
|
name = label["name"]
|
|
if name not in all_labels:
|
|
all_labels[name] = {
|
|
"name": name,
|
|
"color": label["color"],
|
|
"description": label.get("description", "")
|
|
}
|
|
|
|
sorted_labels = sorted(all_labels.values(), key=lambda l: l["name"].lower())
|
|
os.makedirs(".github", exist_ok=True) # Ensure the .github directory exists
|
|
with open(".github/labels.yml", "w") as out:
|
|
yaml.dump(sorted_labels, out, sort_keys=False)
|
|
|
|
if __name__ == "__main__":
|
|
main(sys.argv[1])
|