@@ -69,6 +69,7 @@ For important repositories (templates, core libs, product repos), enable:
6969- Require status checks to pass
7070- Restrict who can push (optional)
7171- Require linear history (optional)
72+ - Do not allow admin bypass on protected branch rules
7273
7374If using an organization, prefer organization rulesets over per-repo configuration.
7475
@@ -245,25 +246,45 @@ This section applies only to this Doctrine repository.
245246
246247### Branch model
247248
249+ - ` master ` -> stable release branch
248250- ` develop ` -> integration branch for ongoing changes
249- - ` master ` -> stable branch for promoted releases
250- - ` feature/* ` -> short-lived heavy refactor branches
251+ - ` feature/* ` -> short-lived implementation branches merged into ` develop `
252+ - ` fix/* ` -> short-lived bugfix branches merged into ` develop `
253+ - ` release/* ` -> short-lived release stabilization branches cut from ` develop `
251254
252255### Release process
253256
254- 1 . Ensure release-ready work is merged into ` develop ` .
255- 2 . Promote ` develop ` to ` master ` using a PR with base ` master ` and head ` develop ` .
256- 3 . Merge only after required checks pass.
257- 4 . Create signed tag on ` master ` :
258- - ` git tag -s vX.Y -m "Release vX.Y" `
259- 5 . Push ` master ` and tag:
257+ 1 . Ensure release-ready work is merged into ` develop ` via PRs from feature/fix branches.
258+ 2 . Create release branch from ` develop ` :
259+ - ` git checkout -b release/vX.Y.Z develop `
260+ 3 . Apply final stabilization updates on ` release/* ` (final fixes, docs, changelog/release notes, version touches).
261+ 4 . Promote release to stable via PR with base ` master ` and head ` release/* ` .
262+ 5 . After merge to ` master ` , back-propagate identical release changes via PR with base ` develop ` and head ` release/* ` .
263+ 6 . Merge only after required checks pass on both PRs.
264+ 7 . Create signed tag on ` master ` :
265+ - ` git tag -s vX.Y.Z -m "Release vX.Y.Z" `
266+ 8 . Push ` master ` and tag:
260267 - ` git push origin master `
261- - ` git push origin vX.Y `
262- 6 . If tag was created unsigned by mistake, recreate it as signed on the same commit and force-push:
268+ - ` git push origin vX.Y.Z `
269+ 9 . Delete the short-lived release branch after both merges complete.
270+ 10 . If tag was created unsigned by mistake, recreate it as signed on the same commit and force-push:
263271 - ` git tag -d vX.Y `
264272 - ` git tag -s vX.Y -m "Release vX.Y" <release-commit> `
265273 - ` git push --force origin vX.Y `
266274
275+ ### Protected branch behavior
276+
277+ - No direct pushes to ` master ` or ` develop ` .
278+ - All changes to protected branches must arrive through pull requests.
279+ - Protected branch rules apply to admins and automation identities as well (no bypass).
280+ - PRs targeting ` master ` must come from ` release/* ` branches.
281+
282+ ### Emergency hotfix rule
283+
284+ - If an emergency requires immediate stabilization, use ` release/hotfix-* ` branch naming.
285+ - Merge ` release/hotfix-* ` to ` master ` first, then merge the same branch to ` develop ` .
286+ - Keep the same signed-commit and signed-tag requirements.
287+
267288### Document status model
268289
269290Each file must contain:
0 commit comments