64
64
echo "is_rc=false" >> $GITHUB_OUTPUT
65
65
fi
66
66
67
+ branch_protection_rename :
68
+ needs : [safety_check]
69
+ runs-on : ubuntu-latest
70
+ environment : release
71
+ env :
72
+ GH_TOKEN : ${{ secrets.ADMIN_GITHUB_TOKEN }}
73
+ outputs :
74
+ master_rule_id : ${{ steps.get_rule_ids.outputs.master_rule_id }}
75
+ master_pattern : ${{ steps.get_rule_ids.outputs.master_pattern }}
76
+ v_rule_id : ${{ steps.get_rule_ids.outputs.v_rule_id }}
77
+ v_pattern : ${{ steps.get_rule_ids.outputs.v_pattern }}
78
+ steps :
79
+ - name : Get branch protection rule IDs
80
+ id : get_rule_ids
81
+ run : |
82
+ gh api repos/${{ github.repository }}/branch-protection-rules > rules.json
83
+ MASTER_ID=$(jq -r '.[] | select(.pattern == "master") | .id' rules.json)
84
+ MASTER_PATTERN=$(jq -r '.[] | select(.pattern == "master") | .pattern' rules.json)
85
+ V_ID=$(jq -r '.[] | select(.pattern | test("^v[0-9]+\\.[0-9]+\\.x$")) | .id' rules.json)
86
+ V_PATTERN=$(jq -r '.[] | select(.pattern | test("^v[0-9]+\\.[0-9]+\\.x$")) | .pattern' rules.json)
87
+ echo "master_rule_id=$MASTER_ID" >> $GITHUB_OUTPUT
88
+ echo "master_pattern=$MASTER_PATTERN" >> $GITHUB_OUTPUT
89
+ echo "v_rule_id=$V_ID" >> $GITHUB_OUTPUT
90
+ echo "v_pattern=$V_PATTERN" >> $GITHUB_OUTPUT
91
+ - name : Rename master protection to temp-master
92
+ if : ${{ steps.get_rule_ids.outputs.master_rule_id != '' }}
93
+ run : |
94
+ gh api repos/${{ github.repository }}/branch-protection-rules/${{ steps.get_rule_ids.outputs.master_rule_id }} \
95
+ -X PATCH -F pattern="temp-master"
96
+ - name : Rename v*.* protection to temp-v
97
+ if : ${{ steps.get_rule_ids.outputs.v_rule_id != '' }}
98
+ run : |
99
+ gh api repos/${{ github.repository }}/branch-protection-rules/${{ steps.get_rule_ids.outputs.v_rule_id }} \
100
+ -X PATCH -F pattern="temp-v"
101
+
67
102
lib_release :
68
- needs : [safety_check,pre_config]
103
+ needs : [safety_check, pre_config, branch_protection_rename ]
69
104
runs-on : ubuntu-latest
70
105
environment : release
71
106
env :
@@ -193,14 +228,15 @@ jobs:
193
228
attestations : false
194
229
verify-metadata : false
195
230
196
-
197
231
- name : " Echo release url"
198
232
run : echo "${{ steps.gh-release.outputs.url }}"
199
233
200
234
docs_release :
201
235
runs-on : ubuntu-latest
202
- needs : [lib_release,pre_config]
203
- if : ${{ needs.pre_config.outputs.is_rc == 'false' || (needs.pre_config.outputs.is_rc == 'true' && endsWith(needs.pre_config.outputs.version, '0rc1')) }}
236
+ needs : [lib_release, pre_config, branch_protection_rename, safety_check]
237
+ if :
238
+ ${{ needs.pre_config.outputs.is_rc == 'false' || (needs.pre_config.outputs.is_rc
239
+ == 'true' && endsWith(needs.pre_config.outputs.version, '0rc1')) }}
204
240
environment : release
205
241
steps :
206
242
- name : " Sync Versions on Read the Docs"
@@ -228,7 +264,8 @@ jobs:
228
264
229
265
inform_discord :
230
266
runs-on : ubuntu-latest
231
- needs : [lib_release,docs_release,pre_config]
267
+ needs :
268
+ [lib_release, docs_release, pre_config, branch_protection_rename, safety_check]
232
269
environment : release
233
270
steps :
234
271
- name : " Notify Discord"
@@ -264,7 +301,7 @@ jobs:
264
301
265
302
determine_milestone_id :
266
303
runs-on : ubuntu-latest
267
- needs : [lib_release,pre_config]
304
+ needs : [lib_release, pre_config, branch_protection_rename, safety_check ]
268
305
if : ${{ !contains(needs.pre_config.outputs.version, '-') }}
269
306
outputs :
270
307
old_milestone_version : ${{ steps.extract_version.outputs.old_milestone_version }}
@@ -286,8 +323,10 @@ jobs:
286
323
287
324
close_milestone :
288
325
runs-on : ubuntu-latest
289
- needs : [determine_milestone_id,pre_config]
290
- if : ${{ !contains(needs.pre_config.outputs.version, 'rc') && endsWith(needs.pre_config.outputs.version, '.0') }}
326
+ needs : [determine_milestone_id, pre_config, branch_protection_rename, safety_check]
327
+ if :
328
+ ${{ !contains(needs.pre_config.outputs.version, 'rc') &&
329
+ endsWith(needs.pre_config.outputs.version, '.0') }}
291
330
environment : release
292
331
env :
293
332
GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
@@ -308,3 +347,30 @@ jobs:
308
347
run : |
309
348
gh extension install valeriobelli/gh-milestone
310
349
gh milestone create "${{ needs.determine_milestone_id.outputs.new_milestone_version }}"
350
+
351
+ branch_protection_restore :
352
+ runs-on : ubuntu-latest
353
+ needs :
354
+ [
355
+ branch_protection_rename,
356
+ lib_release,
357
+ docs_release,
358
+ inform_discord,
359
+ determine_milestone_id,
360
+ close_milestone,
361
+ ]
362
+ environment : release
363
+ if : always()
364
+ env :
365
+ GH_TOKEN : ${{ secrets.ADMIN_GITHUB_TOKEN }}
366
+ steps :
367
+ - name : Restore master protection pattern
368
+ if : ${{ needs.branch_protection_rename.outputs.master_rule_id != '' }}
369
+ run : |
370
+ gh api repos/${{ github.repository }}/branch-protection-rules/${{ needs.branch_protection_rename.outputs.master_rule_id }} \
371
+ -X PATCH -F pattern="${{ needs.branch_protection_rename.outputs.master_pattern }}"
372
+ - name : Restore v*.* protection pattern
373
+ if : ${{ needs.branch_protection_rename.outputs.v_rule_id != '' }}
374
+ run : |
375
+ gh api repos/${{ github.repository }}/branch-protection-rules/${{ needs.branch_protection_rename.outputs.v_rule_id }} \
376
+ -X PATCH -F pattern="${{ needs.branch_protection_rename.outputs.v_pattern }}"
0 commit comments