fixup! TB 41649: Create rebase and security backport gitlab issue templates
- TB 43298: add rebase template for nightly-based Tor Browser Alpha and Bugzilla Triage Issue generation
- TB 43341: Create Firefox Nightly Rebase Issue Template
-**NOTE**: All examples in this template reference the rebase from Firefox 129.0a1 to 130.0a1
-**TODO**:
- Documentation step for any difficulties or noteworthy things for each rapid rebase
<details>
<summary>Explanation of Channels</summary>
There are unfortunately some collisions between how we and Mozilla name our release channels which can make things confusing:
-**Firefox**:
-**Nightly**: \_START and \_END tags, version in the format `$(MAJOR).$(MINOR)a1`
-**Example**: Firefox Nightly 130 was `130.0a1`
-**Note**: Nightly is 2 major versions ahead of the current Release
-**Beta**: tagged each Monday, Wednesday, and Friday until release, version in the format `$(MAJOR).$(MINOR)b$(PATCH)`
-**Example**: the first Firefox Beta 130 was `130.0b1`
-**Note**: Beta is 1 major version ahead of the current Release, should be irrelevant to us
-**Release**: tagged monthly, version in the format `$(MAJOR).$(MINOR)` or `$(MAJOR).$(MINOR).$(PATCH)`
-**Example** Firefox Release 130 was `130.0`
-**ESR**: tagged monthly, version in the format `$(ESR_MAJOR).$(ESR_MINOR).$(ESR_PATCH)esr`
-**Example**: Firefox ESR 128.1 is `128.1.0esr`
-**Tor+Mullvad Browser**:
-**Rapid**: tagged monthly, based on the latest Firefox Nightly
-**Nightly**: not tagged, built nightly from our current Alpha branch's `HEAD`
-**Alpha**: tagged monthly, based on the latest Firefox ESR
-**Stable**: tagged monthly, based on oldest supported Firefox ESR
</details>
<details>
<summary>Branching Overview</summary>
Rebasing Tor Browser Rapid onto the current Firefox Nightly is a bit more confusing/involved than rebasing Tor Browser Alpha or Stable from one minor ESR to the next minor ESR.
The general process basically involves rebasing the previous Firefox Nightly-based Tor Browser Rapid onto the latest Firefox Nightly, and then cherry-picking all of the commits from the previous Firefox ESR-based Tor Browser Alpha after that channel's `build1` tag. This process presumes that the previous Tor Browser Alpha branch is locked and receiving no more changes.
This diagram provides a high-level view of the overall code-flow for rebasing/cherry-picking commits from Tor Browser Alpha based on Firefox 128.1.0esr and Tor Browser Rapid based on Firefox 129.0a1 onto Firefox 130.0a1:
In this concrete example, the rebaser performs the following steps:
- create new `tor-browser-130.0a1-15.0-1`, and `tor-browser-130.0a1-15.0-2` branches from the `FIREFOX_NIGHTLY_130_END` tag.
- these will be the rebase review branches
- onto `tor-browser-130.0a1-15.0-1`, cherry-pick the range `FIREFOX_NIGHTLY_129_END..tor-browser-129.0a1-15.0-2-build1` (i.e. the Firefox Nightly 129-based Tor Browser Rapid commits)
- this updates the previous Tor Browser Rapid onto Firefox Nightly 130
- cherry-pick the new alpha patches onto `tor-browser-130.0a1-15.0-1` (i.e. cherry-pick `tor-browser-128.1.0esr-14.5-1-build2..origin/tor-browser-128.1.0esr-14.5-1`)
- onto `tor-browser-130.0a1-15.0-2`, rebase and autosquash the `FIREFOX_NIGHTLY_130_END..tor-browser-130.0a1-15.0-2-build1` commit range
- onto `tor-browser-130.0a1-15.0-2`, cherry-pick the remaining commit range `tor-browser-130.0a1-15.0-2-build1..origin/tor-browser-130.0a1-15.0-2`
- re-order any remaining fixup! commits to be adjacent to their parents (i.e. the same rebase command queue as one would get from `git rebase --autosquash`, but with the `fixup!` commands replaced with `pick!` commands).
- this re-organises the branch in a nicely-bisectable way, and will ensure the rebase+autosquash step for the next release *should* succeed without any additional effort
</details>
<details>
<summary>Explanation of Variables</summary>
-`$(NIGHTLY_VERSION)`: the Mozilla defined nightly version, used in various places for building tor-browser tags, labels, etc
-**Example**: `130.0a1`
-`$(NIGHTLY_TAG)`: the Mozilla defined hg (Mercurial) tag associated with `$(NIGHTLY_VERSION)`
-**Example**: `FIREFOX_NIGHTLY_130_END`
-`$(NIGHTLY_TAG_PREV)`: the Mozilla defined hg (Mercurial) tag associated with the previous nightly version when rebasing (ie, the nightly version we are rebasing from)
-**Example**: `FIREFOX_NIGHTLY_129_END`
-`$(BROWSER_VERSION)`: the browser version which will first be based on the next major ESR version this *Firefox* Nightly series is leading up to
-**Example**: `15`
-`$(TOR_BROWSER_BRANCH)`: the full name of the current `tor-browser` branch based off of the Firefox Nightly channel
-**Example**: `tor-browser-130.0a1-15.0-1`
-`$(TOR_BROWSER_BRANCH_PREV)`: the full name of the previous `tor-browser` branch based off of the Firefox Nightly channel
-**Example**: `tor-browser-129.0a1-15.0-1`
</details>
### Update Branch Protection Rules
-[ ] In [Repository Settings](https://gitlab.torproject.org/tpo/applications/tor-browser/-/settings/repository):
- [ ] Remove previous nightly `tor-browser` branch protection rules (this will prevent pushing new changes to the branches being rebased)
- [ ] Create new `tor-browser` branch protection rule:
git diff origin/tor-browser-130.0a1-15.0-1 HEAD > 130.diff
# A two-column diff tool is suggested rather than plain-diff, e.g., meld on Linux.
meld 128.1.0esr.diff 130.diff
```
-**Note**: Only differences should be due to resolving merge conflicts with upstream changes from Firefox Nightly
- [ ] Open MR
- [ ] Merge
- [ ] Sign/Tag `HEAD` of the merged `tor-browser` branch:
- In **tor-browser.git**, checkout the `-1` rapid `tor-browser` branch
- In **tor-browser-build.git**, run signing script:
```bash
./tools/browser/sign-tag.torbrowser rapid build2
```
- [ ] Push tag to `upstream`
### **Squash and Reorder tor-browser `-1` branch to new `-2` branch**
-**Desired outcome**:
- The rapid branch from the previous step prepared for the next nightly
-**Rationale**:
- We squash a lot of commits. We want to keep them a little bit longer rather than squashing them immediately for troubleshooting and documentation purposes.
- Doing this as a separate pass helps to separate errors due to upstream changes from errors due to processes created by our workflow.
-**Expected difficulties**:
- our patches aren't disjoint, therefore we might have conflicts when shuffling them around.
- [ ] Checkout a new local branch for the `-2` rebase, aligned to -1-build1
- You do not need to publish this, and you can delete it at the end of the process (`git branch -D rapid-rebase-part3-review`)
- When you are a reviewer, it might be useful to repeat these steps locally. They should not involve mental overhead (and PieroV has a script to automate this)
- [ ] Rebase and reorder commits (i.e. replace `fixup `, `fixup -C ` and `squash ` with `pick ` commands)
- Notice the space at the end, to avoid replacing `fixup!` with `pick!` in the commit subject, even though git will probably not care of such changes
- [ ] Rebase Verification
- [ ] Clean range-diff between the temporary review branch and the final branch