Add CI_PERMISSION sort hook. (#16200)

This commit is contained in:
Liangsheng Yin
2025-12-31 12:15:15 +08:00
committed by GitHub
parent 8a9ca41fda
commit db6b51a838
3 changed files with 73 additions and 19 deletions
+7 -7
View File
@@ -258,6 +258,13 @@
"reason": "custom override", "reason": "custom override",
"can_rerun_stage": true "can_rerun_stage": true
}, },
"YAMY1234": {
"can_tag_run_ci_label": true,
"can_rerun_failed_ci": true,
"cooldown_interval_minutes": 0,
"reason": "custom override",
"can_rerun_stage": true
},
"Ying1123": { "Ying1123": {
"can_tag_run_ci_label": true, "can_tag_run_ci_label": true,
"can_rerun_failed_ci": true, "can_rerun_failed_ci": true,
@@ -930,13 +937,6 @@
"reason": "custom override", "reason": "custom override",
"can_rerun_stage": true "can_rerun_stage": true
}, },
"YAMY1234": {
"can_tag_run_ci_label": true,
"can_rerun_failed_ci": true,
"cooldown_interval_minutes": 0,
"reason": "custom override",
"can_rerun_stage": true
},
"yanbing-j": { "yanbing-j": {
"can_tag_run_ci_label": true, "can_tag_run_ci_label": true,
"can_rerun_failed_ci": true, "can_rerun_failed_ci": true,
+58 -12
View File
@@ -38,33 +38,40 @@ Permissions are assigned according to the following rules:
Usage: Usage:
export GH_TOKEN="your_github_token" export GH_TOKEN="your_github_token"
python3 update_ci_permission.py python3 update_ci_permission.py
# Sort-only mode (no network calls, no GH_TOKEN required)
python3 update_ci_permission.py --sort-only
""" """
import argparse
import json import json
import os import os
from collections import Counter from collections import Counter
from datetime import datetime, timedelta, timezone from datetime import datetime, timedelta, timezone
import requests try:
import requests
except ImportError:
requests = None # Only needed for non-sort-only runs
# Configuration # Configuration
REPO_OWNER = "sgl-project" REPO_OWNER = "sgl-project"
REPO_NAME = "sglang" REPO_NAME = "sglang"
FILE_NAME = "CI_PERMISSIONS.json" FILE_NAME = os.path.join(os.path.dirname(__file__), "CI_PERMISSIONS.json")
GH_TOKEN = os.getenv("GH_TOKEN") HEADERS = {}
if not GH_TOKEN:
raise ValueError("Error: GH_TOKEN environment variable is not set.")
HEADERS = {
"Authorization": f"Bearer {GH_TOKEN}",
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
}
def github_api_get(endpoint, params=None): def github_api_get(endpoint, params=None):
"""Helper to make paginated GitHub API requests.""" """Helper to make paginated GitHub API requests."""
if requests is None:
raise RuntimeError(
"The requests package is required. Install it or use --sort-only."
)
if not HEADERS:
raise RuntimeError(
"GitHub headers not initialized. Set GH_TOKEN or use --sort-only."
)
results = [] results = []
url = f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/{endpoint}" url = f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/{endpoint}"
@@ -139,7 +146,46 @@ def load_existing_permissions():
return {} return {}
def sort_permissions_file():
"""Sort the existing CI permissions file alphabetically and exit."""
if not os.path.exists(FILE_NAME):
print(f"{FILE_NAME} not found. Nothing to sort.")
return
old_permissions = load_existing_permissions()
sorted_permissions = dict(sorted(old_permissions.items()))
with open(FILE_NAME, "w") as f:
json.dump(sorted_permissions, f, indent=4)
f.write("\n")
print(f"Sorted {FILE_NAME}. Total users: {len(sorted_permissions)}")
def main(): def main():
parser = argparse.ArgumentParser(description="Update or sort CI permissions.")
parser.add_argument(
"--sort-only",
action="store_true",
help="Only sort CI_PERMISSIONS.json alphabetically without fetching data.",
)
args = parser.parse_args()
if args.sort_only:
sort_permissions_file()
return
gh_token = os.getenv("GH_TOKEN")
if not gh_token:
raise ValueError("Error: GH_TOKEN environment variable is not set.")
global HEADERS
HEADERS = {
"Authorization": f"Bearer {gh_token}",
"Accept": "application/vnd.github+json",
"X-GitHub-Api-Version": "2022-11-28",
}
# Gather Data # Gather Data
try: try:
write_access_users = get_write_access_users() write_access_users = get_write_access_users()
+8
View File
@@ -75,3 +75,11 @@ repos:
args: args:
- '--keep-output' - '--keep-output'
- '--extra-keys=metadata.kernelspec metadata.language_info.version' - '--extra-keys=metadata.kernelspec metadata.language_info.version'
- repo: local
hooks:
- id: sort-ci-permissions
name: sort CI_PERMISSIONS.json
entry: python3 .github/update_ci_permission.py --sort-only
language: system
files: ^\.github/CI_PERMISSIONS\.json$
pass_filenames: false