diff --git a/.backportrc.json b/.backportrc.json new file mode 100644 index 000000000..55f9a3215 --- /dev/null +++ b/.backportrc.json @@ -0,0 +1,8 @@ +{ + "branchLabelMapping": { + "^backport-to-(release/.+)$": "$1" + }, + "prTitle": "{commitMessages} (backport to {targetBranch})", + "targetPRLabels": ["backport"], + "autoMerge": false +} diff --git a/.github/BACKPORT.md b/.github/BACKPORT.md new file mode 100644 index 000000000..29d7d7de4 --- /dev/null +++ b/.github/BACKPORT.md @@ -0,0 +1,39 @@ +# Backporting to release branches + +Backports merged `main` changes onto long-term `release/*` branches as PRs. +Config lives in `.backportrc.json` and is shared by both methods below. + +## Immediate (one PR) + +Add a label `backport-to-release/` to the PR (before or after merge), +e.g. `backport-to-release/1.14.x`. On merge, the Backport workflow opens a +backport PR to that branch. Add multiple labels to fan out to several branches. +A clean cherry-pick opens the PR automatically; a conflict instead comments on +the source PR (finish it with the CLI below). + +> The label must exist before you can apply it. When labeling for a new branch +> the first time, create the label (the labels box offers "Create new label"). + +## Batch (many PRs at once) + +One-time local auth: create `~/.backport/config.json` with +`{ "accessToken": "" }`. + +Then gather and select interactively (targets passed at runtime, so any +`release/*` works without editing config): + +```bash +# By query, then arrow-key multi-select the PRs: +npx backport --pr-query "merged:>=2026-05-01 label:backport-pending" \ + --branch release/1.15.0 --branch release/1.14.x +# Or by path / single PR: +npx backport --path en/use-dify --branch release/1.14.x +npx backport --pr 792 --branch release/1.14.x +``` + +## Finishing a conflicting backport + +```bash +npx backport --pr --branch release/ +# resolve the conflict when prompted; the CLI pushes and opens the PR +``` diff --git a/.github/workflows/backport.yml b/.github/workflows/backport.yml new file mode 100644 index 000000000..43749ff81 --- /dev/null +++ b/.github/workflows/backport.yml @@ -0,0 +1,16 @@ +name: Backport merged PR +on: + pull_request_target: + types: [labeled, closed] +permissions: + contents: read + pull-requests: read +jobs: + backport: + if: github.event.pull_request.merged == true + runs-on: depot-ubuntu-24.04 + steps: + - uses: sorenlouv/backport-github-action@v12 + with: + github_token: ${{ secrets.BACKPORT_TOKEN }} + auto_backport_label_prefix: backport-to- diff --git a/.mintignore b/.mintignore index d5aeab16a..2017ebd57 100644 --- a/.mintignore +++ b/.mintignore @@ -13,3 +13,9 @@ # Non-public utility files under public asset directories /assets/migrate_weaviate_collections.py /logo/convertor.html + +# Internal contributor runbooks +/.github/BACKPORT.md + +# Backport tooling config +/.backportrc.json