Reset state of repo with updated README
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import os
|
||||
import sys
|
||||
import yaml
|
||||
import requests
|
||||
|
||||
def get_existing_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 existing labels: {resp.text}")
|
||||
data = resp.json()
|
||||
if not data:
|
||||
break
|
||||
for label in data:
|
||||
labels[label["name"]] = {
|
||||
"color": label["color"],
|
||||
"description": label.get("description", "")
|
||||
}
|
||||
page += 1
|
||||
return labels
|
||||
|
||||
def create_or_update_label(repo, token, label, existing):
|
||||
headers = {
|
||||
"Authorization": f"token {token}",
|
||||
"Accept": "application/vnd.github+json"
|
||||
}
|
||||
|
||||
if label["name"] not in existing:
|
||||
# Create label
|
||||
print(f"Creating label: {label['name']}")
|
||||
url = f"https://api.github.com/repos/{repo}/labels"
|
||||
resp = requests.post(url, json=label, headers=headers)
|
||||
else:
|
||||
# Update if different
|
||||
current = existing[label["name"]]
|
||||
if (label["color"].lower() != current["color"].lower() or
|
||||
label.get("description", "") != current.get("description", "")):
|
||||
print(f"Updating label: {label['name']}")
|
||||
url = f"https://api.github.com/repos/{repo}/labels/{label['name']}"
|
||||
resp = requests.patch(url, json=label, headers=headers)
|
||||
else:
|
||||
print(f"Label '{label['name']}' already up to date. Skipping.")
|
||||
return
|
||||
|
||||
if not resp.ok:
|
||||
print(f"Failed to apply label {label['name']}: {resp.status_code} {resp.text}")
|
||||
|
||||
def main(label_file):
|
||||
token = os.environ["GH_TOKEN"]
|
||||
repo = os.environ["GITHUB_REPO"]
|
||||
existing = get_existing_labels(repo, token)
|
||||
|
||||
with open(label_file, "r") as f:
|
||||
labels = yaml.safe_load(f)
|
||||
|
||||
for label in labels:
|
||||
create_or_update_label(repo, token, label, existing)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv[1])
|
||||
Reference in New Issue
Block a user