Skip to content

Commit fff4c78

Browse files
committed
Add GitHub ruleset configuration for branch protection
- Protect main, release/net8, and release/net9 branches - Require PR with 1 approval before merging - Require CI status checks to pass - Block force pushes and branch deletion - Include README with setup instructions
1 parent 091ed6b commit fff4c78

2 files changed

Lines changed: 122 additions & 0 deletions

File tree

.github/rulesets/README.md

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# GitHub Rulesets
2+
3+
This directory contains ruleset configurations for branch protection.
4+
5+
## Applying the Ruleset
6+
7+
### Option 1: Import via GitHub UI
8+
9+
1. Go to **Repository Settings****Rules****Rulesets**
10+
2. Click **New ruleset****Import a ruleset**
11+
3. Upload `branch-protection.json`
12+
4. Review and click **Create**
13+
14+
### Option 2: Create Manually via GitHub UI
15+
16+
1. Go to **Repository Settings****Rules****Rulesets**
17+
2. Click **New ruleset****New branch ruleset**
18+
3. Configure as follows:
19+
20+
#### General Settings
21+
- **Ruleset name**: `Protected Branches`
22+
- **Enforcement status**: `Active`
23+
24+
#### Target Branches
25+
Add these branch patterns:
26+
- `main`
27+
- `release/net8`
28+
- `release/net9`
29+
30+
#### Branch Rules
31+
Enable the following rules:
32+
33+
| Rule | Setting |
34+
|------|---------|
35+
| **Restrict deletions** | ✅ Enabled |
36+
| **Block force pushes** | ✅ Enabled |
37+
| **Require a pull request before merging** | ✅ Enabled |
38+
| ↳ Required approvals | `1` |
39+
| ↳ Dismiss stale reviews | ✅ Enabled |
40+
| ↳ Require review from code owners | ❌ Disabled |
41+
| ↳ Require conversation resolution | ✅ Enabled |
42+
| **Require status checks to pass** | ✅ Enabled |
43+
| ↳ Require branches to be up to date | ✅ Enabled |
44+
| ↳ Status checks: | `build` |
45+
46+
#### Bypass List (Optional)
47+
- Repository admins can bypass (for emergency fixes)
48+
49+
### Option 3: GitHub CLI
50+
51+
```bash
52+
gh api repos/{owner}/{repo}/rulesets \
53+
--method POST \
54+
--input .github/rulesets/branch-protection.json
55+
```
56+
57+
## Ruleset Summary
58+
59+
This ruleset protects the following branches:
60+
- `main` (.NET 10 LTS)
61+
- `release/net8` (.NET 8 LTS)
62+
- `release/net9` (.NET 9 STS)
63+
64+
**Protection includes:**
65+
- No direct pushes (PRs required)
66+
- At least 1 approval required
67+
- CI must pass before merging
68+
- No force pushes
69+
- No branch deletion
70+
- Stale reviews dismissed on new commits
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
{
2+
"name": "Protected Branches",
3+
"target": "branch",
4+
"enforcement": "active",
5+
"conditions": {
6+
"ref_name": {
7+
"include": [
8+
"refs/heads/main",
9+
"refs/heads/release/net8",
10+
"refs/heads/release/net9"
11+
],
12+
"exclude": []
13+
}
14+
},
15+
"rules": [
16+
{
17+
"type": "deletion"
18+
},
19+
{
20+
"type": "non_fast_forward"
21+
},
22+
{
23+
"type": "pull_request",
24+
"parameters": {
25+
"required_approving_review_count": 1,
26+
"dismiss_stale_reviews_on_push": true,
27+
"require_code_owner_review": false,
28+
"require_last_push_approval": false,
29+
"required_review_thread_resolution": true
30+
}
31+
},
32+
{
33+
"type": "required_status_checks",
34+
"parameters": {
35+
"strict_required_status_checks_policy": true,
36+
"required_status_checks": [
37+
{
38+
"context": "build",
39+
"integration_id": null
40+
}
41+
]
42+
}
43+
}
44+
],
45+
"bypass_actors": [
46+
{
47+
"actor_id": 5,
48+
"actor_type": "RepositoryRole",
49+
"bypass_mode": "always"
50+
}
51+
]
52+
}

0 commit comments

Comments
 (0)