iBrowe Pull Request Uplift System Guide

A developer-friendly reference for managing pull request uplifts across iBrowe release channels (Nightly → Beta → Release). Below is a restructured and rewritten overview with helpful command-line automation tips and implementation insights.


📌 Table of Contents

  • What Are Uplifts?
  • Automation with uplift.py
  • Using Jenkins
  • Running Locally
  • Getting Started
  • Uplift Workflow Summary
  • Example Commands
  • Advanced CLI Usage
  • Getting Help
  • Command-Line Reference
  • Helpful Notes
  • Internal Implementation Notes
  • Known Issues & Improvements
  • Related Docs

🚀 What Are Uplifts?

In iBrowe, development happens on the main branch (Nightly). When a pull request (PR) is approved and merged there, it may also need to be ported (“uplifted”) to other channels like beta or release.

  • PR authors are responsible for submitting uplifts.
  • CI must pass before merging.
  • The PR author must confirm the fix works in Nightly before uplifting.
  • Stalled uplifts should be nudged by the requester.
  • Anyone may merge, but uplift owners are responsible by default.

🤖 Automating Uplifts with uplift.py

Use the provided ./script/uplift.py to automatically generate uplift PRs for Beta/Release branches.

Note: Only works for clean cherry-picks. Merge conflicts must be resolved manually.

GitHub Token Required:


IBROWE\_GITHUB\_TOKEN=your\_token\_here

Or pass it inline:


IBROWE\_GITHUB\_TOKEN=... ./script/uplift.py --options


🛠️ Jenkins-Based Uplifts (Preferred Method)

  1. Visit: https://ci.ibrowe.com/job/ibrowe-core-create-uplift-prs/
  2. Click Build with Parameters
  3. Enter the merged PR number
  4. Select target channels: beta, release, or both
  5. Hit Build

✨ Jenkins will auto-create the required PRs, no CLI needed.


💻 Running Locally

If Jenkins isn’t your flavor, run the script yourself:

./script/uplift.py --uplift-to=release --uplift-using-pr=1632

This will:

  • Cherry-pick commits
  • Push new branches
  • Create new PRs via GitHub API
  • Open them in your browser

📋 Uplift Workflow Summary

  1. Diff local branch against master
  2. Create uplift branches
  3. Cherry-pick commits
  4. Push to remote
  5. Create GitHub PRs for each channel
  6. Open PRs in browser

🧪 Example Commands

Basic uplift to Release:

./script/uplift.py --uplift-to=release --uplift-using-pr=1632

Dry run (no PRs created):

./script/uplift.py --uplift-to=beta --uplift-using-pr=1632 --dry-run

Verbose output (GitHub API responses):

./script/uplift.py --verbose --uplift-to=beta --uplift-using-pr=1632

With owners:

./script/uplift.py --owners=dev1,dev2 --uplift-to=release --uplift-using-pr=1632

Custom title:

./script/uplift.py --title="Fix crash on startup" --uplift-to=release --uplift-using-pr=1632

Apply labels:

./script/uplift.py --labels=bug,ui --uplift-to=release --uplift-using-pr=1632

🆘 Getting Help

  • Ask in Slack: #ibrowe-core, #ci-support
  • Ping: @clifton (Slack handle)

📌 Command-Line Reference

./script/uplift.py --help

Key flags:

  • --uplift-to: Target branch (beta, release)
  • --uplift-using-pr: Required PR number
  • --owners: GitHub usernames
  • --labels: Comma-separated list
  • --dry-run: Simulate without creating PRs
  • --verbose: Print full GitHub API output
  • --start-from: Specify base (e.g., beta)
  • --title: Custom PR title

📝 Helpful Notes

  • Version is inferred from package.json
  • Milestone assignment is automatic
  • Labels and titles can be customized
  • GitHub token validation ensures correct usernames
  • Dry runs are ideal for previewing results

🔧 Internal Implementation


⚠️ Known Issues & Enhancements

  • Should replicate “skip labels” from original PR
  • Should support unmerged source PRs
  • Should restore deleted branches automatically
  • Unicode handling is limited

📚 Related Documentation

  • [Triage Guidelines]
  • [CI / PR Builder Overview]
  • [iBrowe Release Schedule]
  • [Protocol Schemes in iBrowe]
  • [Android Release Checklist]
  • [Components System]

Adapted and rebranded from the original Brave documentation: https://github.com/brave/brave-browser.wiki.git Source: uplift.py