Implementation:Sgl project Sglang CI Permissions Config
| Knowledge Sources | |
|---|---|
| Domains | CI/CD, Access Control |
| Last Updated | 2026-02-10 00:00 GMT |
Overview
A JSON configuration file that defines per-user CI permissions for the SGLang repository, controlling who can trigger, rerun, and manage CI workflows.
Description
CI_PERMISSIONS.json is a flat JSON dictionary mapping GitHub usernames to permission objects. Each user entry contains the following boolean and numeric fields:
- can_tag_run_ci_label: Whether the user can add the "run CI" label to trigger CI runs.
- can_rerun_failed_ci: Whether the user can rerun failed CI jobs.
- can_rerun_stage: Whether the user can rerun individual CI stages via the /rerun-stage command.
- cooldown_interval_minutes: Minimum minutes between consecutive CI triggers (0 means no cooldown).
- reason: Either "top contributor" (automatically granted based on commit count) or "custom override" (manually granted by maintainers).
The file is managed by the update_ci_permission.py script, which automatically adds users from the top 50 contributors by commit count. A pre-commit hook ensures entries remain alphabetically sorted. The file currently contains over 140 authorized users, with cooldown intervals varying from 0 to 60 minutes depending on the user's trust level.
Usage
This file is consumed by the CI workflow infrastructure (pr-test.yml, pr-gate.yml, and related bot scripts) to determine whether a given GitHub user has permission to trigger or rerun CI jobs. It is referenced during pull request events and workflow dispatch operations.
Code Reference
Source Location
- Repository: Sgl_project_Sglang
- File: .github/CI_PERMISSIONS.json
- Lines: 1-1143
Schema Structure
{
"<github_username>": {
"can_tag_run_ci_label": true,
"can_rerun_failed_ci": true,
"cooldown_interval_minutes": 0,
"reason": "top contributor",
"can_rerun_stage": true
}
}
Import
N/A -- This is a JSON configuration file consumed by CI workflow scripts.
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| github_username | string (JSON key) | Yes | The GitHub username of the contributor |
| can_tag_run_ci_label | boolean | Yes | Permission to tag PRs with the run-CI label |
| can_rerun_failed_ci | boolean | Yes | Permission to rerun failed CI jobs |
| can_rerun_stage | boolean | Yes | Permission to rerun individual CI stages |
| cooldown_interval_minutes | integer | Yes | Minimum cooldown between CI triggers (0 or 60) |
| reason | string | Yes | Either "top contributor" or "custom override" |
Outputs
| Name | Type | Description |
|---|---|---|
| Permission decision | boolean | Whether the requesting user has the specified CI permission |
Usage Examples
Top Contributor Entry (No Cooldown)
{
"merrymercy": {
"can_tag_run_ci_label": true,
"can_rerun_failed_ci": true,
"cooldown_interval_minutes": 0,
"reason": "top contributor",
"can_rerun_stage": true
}
}
Custom Override Entry (With Cooldown)
{
"BHZ-BER": {
"can_tag_run_ci_label": true,
"can_rerun_failed_ci": true,
"cooldown_interval_minutes": 60,
"reason": "custom override",
"can_rerun_stage": true
}
}