name: branch-out-release description: Create a new RediSearch public release branch from master or prepare branch-out changes. Use when branching a version line such as 8.10 from master, setting initial version.h, copying GitHub branch protection, adapting release-branch CI gates, triggering validation, or documenting follow-up master-to-release sync policy.
Branch Out Release
Use this for RediSearch OSS release branch creation from master.
Workflow
Resolve current state.
- Fetch
origin/masterand the latest release branch used as the template, usually the previous line such as8.8. - Verify the target branch does not already exist:
git ls-remote --heads origin <target-branch>. - Check current
mastervalidation before branch-out. Report the latestNightly Flowstatus and distinguish infra failures from product/test failures. - Use a clean worktree instead of the user's dirty checkout.
- Fetch
Create the official branch.
- Branch from the selected
origin/masterSHA. - Set
src/version.hto the requested initial milestone. For8.10, this was8.9.80. - Commit with a clear message such as
Initial 8.10 branch. - Push the new branch before applying branch protection.
- Branch from the selected
Add branch protection.
- Copy settings from the previous public release branch, not from memory.
- Create a new exact-pattern rule for the new branch, for example
8.10. - Do not modify the source branch rule and do not use a wildcard rule.
- Explicitly set every relevant value, including false/null-like settings, so GitHub does not fall back to new-rule defaults.
- Preserve required status check bindings. In this repo,
pr-validationis bound to the GitHub Actions app andlicense/clais unbound. - Read back both source and target protection rules and compare. Only ids, URLs, pattern, and matching refs should differ.
Enable merge queue.
- For parity with existing release branches, enable the classic branch protection checkbox: Settings -> Branches -> Branch protection rules -> edit the exact target branch rule -> Require merge queue.
- Do not use repository rulesets as the normal copy path. A ruleset
merge_queuerule can makerepository.mergeQueuenon-null, but it is a different surface and does not check the classic branch protection UI box. - Read the previous release branch queue with
repository.mergeQueue(branch: "<source-branch>"). - In the UI, copy every queue value that is exposed from the source branch to the target branch. For
8.8to initial8.10, the effective values weremergeMethod=SQUASH,mergingStrategy=ALLGREEN,maximumEntriesToBuild=5,maximumEntriesToMerge=5,minimumEntriesToMerge=1,minimumEntriesToMergeWaitTime=300, andcheckResponseTimeout=21600. - Read back
repository.mergeQueue(branch: "<target-branch>")and compare. Only ids, URLs, labels/names, target refs, and current queue entries should differ. If GitHub hides some queue fields in the UI, save the visible fields first, then use this readback to detect whether hidden defaults match the source branch. - Do not enqueue release CI PRs until the target branch reports
isMergeQueueEnabled: truefor that PR.
Adapt release-branch CI.
- Do this as a normal PR after protection is enabled.
- Compare the new branch against the previous release branch under
.github/workflows/. - The important release-branch CI invariants are:
- PR flow stays lightweight: Ubuntu quick tests by default. Coverage and sanitize are label-conditioned: they run only when a non-draft PR workflow event sees
enforce:coverageorenforce:sanitize. Adding those labels alone may not start a run; add the label before a push/update or rerun the workflow. - Merge queue is the release gate: full supported platform/architecture matrix, full tests, coverage/sanitize, fail-fast, separate coordinator jobs.
- Nightly is less critical than master: full matrix but
QUICK=1, pinned Redis SHA, not Redisunstable.
- PR flow stays lightweight: Ubuntu quick tests by default. Coverage and sanitize are label-conditioned: they run only when a non-draft PR workflow event sees
- Pin Redis to the current release-branch SHA until there is a better release/pre-release line. For
8.8and the initial8.10branch-out, this SHA was3cd464263b03b425ffae2e23db24df3dc9346871. - Check whether
RedisJSON/RedisJSONhas a matching release branch:git ls-remote --heads git@github.com:RedisJSON/RedisJSON.git <target-branch>. Use the matching branch for PR/MQ only if it exists. Otherwise keepmasterand add a TODO in the workflow. - Preserve newer master CI infrastructure unless it conflicts with the release-branch gating policy.
Validate.
- Inspect diffs for
8.8,master, and the new branch so release-only CI behavior is intentional. - Manually trigger
Nightly Flowon the new branch if needed:gh workflow run event-nightly.yml --repo RediSearch/RediSearch --ref <target-branch>. - Remember that scheduled workflows run from the default branch; use manual dispatch for release branch nightlies unless a dedicated schedule exists.
- Inspect diffs for
Future sync policy.
- Prefer normal merges from
masterinto the release branch while the release branch is still tracking master closely. - Do not force-push or overwrite the official release branch.
- During master-to-release merges, preserve release-only files such as
src/version.hand release-branch CI differences. - Do not merge release branch version changes back into
master.
- Prefer normal merges from
PR Notes
When opening PRs, use .github/PULL_REQUEST_TEMPLATE.md.
- Branch creation/version or release CI changes are user/release-facing enough to require release notes unless the release manager says otherwise.
- Skill-only documentation on
masteris internal-only and normally does not require release notes.