richard pushed to branch main at The Tor Project / Applications / tor-browser-build
Commits:
- 
2854ab80
by Pier Angelo Vendrame at 2023-12-14T13:48:08+00:00
- 
ae04fe1d
by Pier Angelo Vendrame at 2023-12-14T13:48:08+00:00
7 changed files:
- .gitlab/issue_templates/Release Prep - Mullvad Browser Alpha.md
- .gitlab/issue_templates/Release Prep - Mullvad Browser Stable.md
- .gitlab/issue_templates/Release Prep - Tor Browser Alpha.md
- .gitlab/issue_templates/Release Prep - Tor Browser Stable.md
- .gitlab/merge_request_templates/default.md
- + .gitlab/merge_request_templates/relprep.md
- tools/fetch-changelogs.py
Changes:
| ... | ... | @@ -62,26 +62,20 @@ | 
| 62 | 62 |        - [ ] ***(Optional)*** If new version available, update `mullvad-extension` section of `input_files` in `projects/browser/config`
 | 
| 63 | 63 |          - [ ] `URL`
 | 
| 64 | 64 |          - [ ] `sha256sum`
 | 
| 65 | -  - [ ] Update `ChangeLog-MB.txt`
 | |
| 66 | -    - [ ] Ensure ChangeLog-MB.txt is sync'd between alpha and stable branches
 | |
| 67 | -    - [ ] Check the linked issues: ask people to check if any are missing, remove the not fixed ones
 | |
| 68 | -    - [ ] Run `tools/fetch-changelogs.py $(TOR_BROWSER_VERSION)` or `tools/fetch-changelogs.py '#$(ISSUE_NUMBER)'`
 | |
| 69 | -      - Make sure you have `requests` installed (e.g., `apt install python3-requests`)
 | |
| 70 | -      - The first time you run this script you will need to generate an access token; the script will guide you
 | |
| 71 | -    - [ ] Copy the output of the script to the beginning of `ChangeLog-MB.txt` and update its output
 | |
| 72 | -      - [ ] Version
 | |
| 73 | -      - [ ] Browser Name
 | |
| 74 | -      - [ ] Release Date
 | |
| 75 | -    - [ ] Under `All Platforms` include any version updates for:
 | |
| 76 | -      - NoScript
 | |
| 77 | -      - uBlock-origin
 | |
| 78 | -      - Mullvad Browser Extension
 | |
| 79 | -      - Firefox
 | |
| 80 | -  - [ ] Open MR with above changes
 | |
| 81 | -  - [ ] Build the MR after initial review on at least two of:
 | |
| 82 | -    - [ ] Tor Project build machine
 | |
| 83 | -    - [ ] Mullvad build machine
 | |
| 84 | -    - [ ] Local developer machine
 | |
| 65 | +    - [ ] Update `ChangeLog-MB.txt`
 | |
| 66 | +      - [ ] Ensure `ChangeLog-MB.txt` is sync'd between alpha and stable branches
 | |
| 67 | +      - [ ] Check the linked issues: ask people to check if any are missing, remove the not fixed ones
 | |
| 68 | +      - [ ] Run `tools/fetch-changelogs.py $(ISSUE_NUMBER) --date $date $updateArgs`
 | |
| 69 | +        - Make sure you have `requests` installed (e.g., `apt install python3-requests`)
 | |
| 70 | +        - The first time you run this script you will need to generate an access token; the script will guide you
 | |
| 71 | +        - `$updateArgs` should be these arguments, depending on what you actually updated:
 | |
| 72 | +          - [ ] `--firefox`
 | |
| 73 | +          - [ ] `--no-script`
 | |
| 74 | +          - [ ] `--ublock`
 | |
| 75 | +          - E.g., `tools/fetch-changelogs.py 41029 --date 'December 19 2023' --firefox 115.6.0esr --no-script 11.4.29 --ublock 1.54.0`
 | |
| 76 | +        - `--date $date` is optional, if omitted it will be the date on which you run the command
 | |
| 77 | +      - [ ] Copy the output of the script to the beginning of `ChangeLog-MB.txt` and adjust its output
 | |
| 78 | +  - [ ] Open MR with above changes, using the template for release preparations
 | |
| 85 | 79 |    - [ ] Ensure builders have matching builds
 | 
| 86 | 80 |    - [ ] Merge
 | 
| 87 | 81 |    - [ ] Sign+Tag
 | 
| ... | ... | @@ -92,32 +86,11 @@ | 
| 92 | 86 |        - pierov
 | 
| 93 | 87 |        - richard
 | 
| 94 | 88 |      - [ ] Run: `make mullvadbrowser-signtag-alpha`
 | 
| 95 | -    - [ ] Push tag to `origin`
 | |
| 96 | - | |
| 97 | -</details>
 | |
| 98 | - | |
| 99 | -<details>
 | |
| 100 | -  <summary>QA</summary>
 | |
| 101 | - | |
| 102 | -  ### send the build
 | |
| 103 | -  - [ ] Email Mullvad QA: support@xxxxxxxxxxx, rui@xxxxxxxxxxx
 | |
| 104 | -    <details>
 | |
| 105 | -      <summary>email template</summary>
 | |
| 106 | - | |
| 107 | -        Subject:
 | |
| 108 | -        New build: Mullvad Browser $(MULLVAD_BROWSER_VERION) (unsigned)
 | |
| 109 | - | |
| 110 | -        Body:
 | |
| 111 | -        unsigned builds: https://tb-build-05.torproject.org/~$(BUILDER)/builds/mullvadbrowser/alpha/unsigned/$(MB_BUILD_TAG)
 | |
| 112 | - | |
| 113 | -        changelog:
 | |
| 114 | -        ...
 | |
| 115 | - | |
| 116 | -    </details>
 | |
| 117 | - | |
| 118 | -    - ***(Optional)*** Add additional information:
 | |
| 119 | -      - [ ] Note any new functionality which needs testing
 | |
| 120 | -      - [ ] Link to any known issues
 | |
| 89 | +  - [ ] Push tag to `upstream`
 | |
| 90 | +  - [ ] Build the tag on at least two of:
 | |
| 91 | +    - [ ] Tor Project build machine
 | |
| 92 | +    - [ ] Mullvad build machine
 | |
| 93 | +    - [ ] Local developer machine
 | |
| 121 | 94 | |
| 122 | 95 |  </details>
 | 
| 123 | 96 | 
| ... | ... | @@ -60,7 +60,20 @@ Mullvad Browser Stable lives in the various `maint-$(MULLVAD_BROWSER_MAJOR).$(MU | 
| 60 | 60 |      - [ ] ***(Optional)*** If new version available, update `mullvad-extension` section of `input_files` in `projects/browser/config`
 | 
| 61 | 61 |        - [ ] `URL`
 | 
| 62 | 62 |        - [ ] `sha256sum`
 | 
| 63 | -- [ ] Open MR with above changes
 | |
| 63 | +- [ ] Update `ChangeLog-MB.txt`
 | |
| 64 | +  - [ ] Ensure `ChangeLog-MB.txt` is sync'd between alpha and stable branches
 | |
| 65 | +  - [ ] Check the linked issues: ask people to check if any are missing, remove the not fixed ones
 | |
| 66 | +  - [ ] Run `tools/fetch-changelogs.py $(ISSUE_NUMBER) --date $date $updateArgs`
 | |
| 67 | +    - Make sure you have `requests` installed (e.g., `apt install python3-requests`)
 | |
| 68 | +    - The first time you run this script you will need to generate an access token; the script will guide you
 | |
| 69 | +    - `$updateArgs` should be these arguments, depending on what you actually updated:
 | |
| 70 | +      - [ ] `--firefox`
 | |
| 71 | +      - [ ] `--no-script`
 | |
| 72 | +      - [ ] `--ublock`
 | |
| 73 | +      - E.g., `tools/fetch-changelogs.py 41029 --date 'December 19 2023' --firefox 115.6.0esr --no-script 11.4.29 --ublock 1.54.0`
 | |
| 74 | +    - `--date $date` is optional, if omitted it will be the date on which you run the command
 | |
| 75 | +  - [ ] Copy the output of the script to the beginning of `ChangeLog-MB.txt` and adjust its output
 | |
| 76 | +- [ ] Open MR with above changes, using the template for release preparations
 | |
| 64 | 77 |  - [ ] Merge
 | 
| 65 | 78 |  - [ ] Sign/Tag commit: `make mullvadbrowser-signtag-release`
 | 
| 66 | 79 |  - [ ] Push tag to `origin`
 | 
| ... | ... | @@ -70,32 +83,6 @@ Mullvad Browser Stable lives in the various `maint-$(MULLVAD_BROWSER_MAJOR).$(MU | 
| 70 | 83 | |
| 71 | 84 |  </details>
 | 
| 72 | 85 | |
| 73 | -<details>
 | |
| 74 | -  <summary>QA</summary>
 | |
| 75 | - | |
| 76 | -### send the build
 | |
| 77 | - | |
| 78 | -  - [ ] Email Mullvad QA: support@xxxxxxxxxxx, rui@xxxxxxxxxxx
 | |
| 79 | -    <details>
 | |
| 80 | -      <summary>email template</summary>
 | |
| 81 | - | |
| 82 | -        Subject:
 | |
| 83 | -        New build: Mullvad Browser $(MULLVAD_BROWSER_VERION) (unsigned)
 | |
| 84 | - | |
| 85 | -        Body:
 | |
| 86 | -        unsigned builds: https://tb-build-05.torproject.org/~$(BUILDER)/builds/mullvadbrowser/release/unsigned/$(MB_BUILD_TAG)
 | |
| 87 | - | |
| 88 | -        changelog:
 | |
| 89 | -        ...
 | |
| 90 | - | |
| 91 | -    </details>
 | |
| 92 | - | |
| 93 | -    - ***(Optional)*** Add additional information:
 | |
| 94 | -      - [ ] Note any new functionality which needs testing
 | |
| 95 | -      - [ ] Link to any known issues
 | |
| 96 | - | |
| 97 | -</details>
 | |
| 98 | - | |
| 99 | 86 |  <details>
 | 
| 100 | 87 |    <summary>Signing</summary>
 | 
| 101 | 88 | |
| ... | ... | @@ -192,4 +179,4 @@ Mullvad Browser Stable lives in the various `maint-$(MULLVAD_BROWSER_MAJOR).$(MU | 
| 192 | 179 | |
| 193 | 180 |  </details>
 | 
| 194 | 181 | |
| 195 | -/label ~"Release Prep" | |
| 182 | +/label ~"Release Prep" ~"Sponsor 131" | 
| ... | ... | @@ -93,30 +93,22 @@ | 
| 93 | 93 |            - [ ] Change the `version` to `$PIPELINEID`
 | 
| 94 | 94 |            - [ ] Update `sha256sum` in the `input_files` section
 | 
| 95 | 95 |    - [ ] Update `ChangeLog-TBB.txt`
 | 
| 96 | -    - [ ] Ensure ChangeLog-TBB.txt is sync'd between alpha and stable branches
 | |
| 96 | +    - [ ] Ensure `ChangeLog-TBB.txt` is sync'd between alpha and stable branches
 | |
| 97 | 97 |      - [ ] Check the linked issues: ask people to check if any are missing, remove the not fixed ones
 | 
| 98 | -    - [ ] Run `tools/fetch-changelogs.py $(TOR_BROWSER_VERSION)` or `tools/fetch-changelogs.py '#$(ISSUE_NUMBER)'`
 | |
| 98 | +    - [ ] Run `tools/fetch-changelogs.py $(ISSUE_NUMBER) --date $date $updateArgs`
 | |
| 99 | 99 |        - Make sure you have `requests` installed (e.g., `apt install python3-requests`)
 | 
| 100 | 100 |        - The first time you run this script you will need to generate an access token; the script will guide you
 | 
| 101 | -    - [ ] Copy the output of the script to the beginning of `ChangeLog-TBB.txt` and update its output
 | |
| 102 | -      - [ ] Version
 | |
| 103 | -      - [ ] Browser Name
 | |
| 104 | -      - [ ] Release Date
 | |
| 105 | -    - [ ] Under `All Platforms` include any version updates for:
 | |
| 106 | -      - NoScript
 | |
| 107 | -      - tor
 | |
| 108 | -      - OpenSSL
 | |
| 109 | -      - lyrebird
 | |
| 110 | -      - Snowflake
 | |
| 111 | -    - [ ] Under `Windows + macOS + Linux` include any version updates for:
 | |
| 112 | -      - Firefox
 | |
| 113 | -    - [ ] Under `Android` include any version updates for:
 | |
| 114 | -      - Geckoview
 | |
| 115 | -    - [ ] Under `Windows + Android` include any version updates for:
 | |
| 116 | -      - zlib
 | |
| 117 | -    - [ ] Under `Build System/All Platforms` include any version updates for:
 | |
| 118 | -      - Go
 | |
| 119 | -  - [ ] Open MR with above changes
 | |
| 101 | +      - `$updateArgs` should be these arguments, depending on what you actually updated:
 | |
| 102 | +          - [ ] `--firefox` (be sure to include esr at the end if needed, which is usually the case)
 | |
| 103 | +          - [ ] `--tor`
 | |
| 104 | +          - [ ] `--no-script`
 | |
| 105 | +          - [ ] `--openssl`
 | |
| 106 | +          - [ ] `--zlib`
 | |
| 107 | +          - [ ] `--go`
 | |
| 108 | +          - E.g., `tools/fetch-changelogs.py 41028 --date 'December 19 2023' --firefox 115.6.0esr --tor 0.4.8.10 --no-script 11.4.29 --zlib 1.3 --go 1.21.5 --openssl 3.0.12`
 | |
| 109 | +        - `--date $date` is optional, if omitted it will be the date on which you run the command
 | |
| 110 | +      - [ ] Copy the output of the script to the beginning of `ChangeLog-TBB.txt` and adjust its output
 | |
| 111 | +  - [ ] Open MR with above changes, using the template for release preparations
 | |
| 120 | 112 |    - [ ] Build the MR after initial review on at least two of:
 | 
| 121 | 113 |      - [ ] Tor Project build machine
 | 
| 122 | 114 |      - [ ] Mullvad build machine
 | 
| ... | ... | @@ -45,10 +45,11 @@ Tor Browser Stable lives in the various `maint-$(TOR_BROWSER_MAJOR).$(TOR_BROWSE | 
| 45 | 45 |      - [ ] ***(Optional)*** `var/firefox_platform_version` : update to latest `$(ESR_VERSION)` if rebased
 | 
| 46 | 46 |    - [ ] Update `projects/translation/config`:
 | 
| 47 | 47 |      - [ ] run `make list_translation_updates-release` to get updated hashes
 | 
| 48 | -    - [ ] `steps/base-browser/git_hash` : update with `HEAD` commit of project's `base-browser` branch
 | |
| 49 | -    - [ ] `steps/base-browser-fluent/git_hash` : update with `HEAD` commit of project's `basebrowser-newidentityftl` branch
 | |
| 50 | -    - [ ] `steps/tor-browser/git_hash` : update with `HEAD` commit of project's `tor-browser` branch
 | |
| 51 | -    - [ ] `steps/fenix/git_hash` : update with `HEAD` commit of project's `fenix-torbrowserstringsxml` branch
 | |
| 48 | +    - [ ] Update `projects/translation/config`:
 | |
| 49 | +      - [ ] run `make list_translation_updates-alpha` to get updated hashes
 | |
| 50 | +      - [ ] `steps/base-browser/git_hash` : update with `HEAD` commit of project's `base-browser` branch
 | |
| 51 | +      - [ ] `steps/tor-browser/git_hash` : update with `HEAD` commit of project's `tor-browser` branch
 | |
| 52 | +      - [ ] `steps/fenix/git_hash` : update with `HEAD` commit of project's `fenix-torbrowserstringsxml` branch
 | |
| 52 | 53 |  - [ ] Update Android-specific build configs
 | 
| 53 | 54 |    - [ ] Update `projects/geckoview/config`
 | 
| 54 | 55 |      - [ ] `browser_build` : update to match `tor-browser` tag
 | 
| ... | ... | @@ -58,10 +59,9 @@ Tor Browser Stable lives in the various `maint-$(TOR_BROWSER_MAJOR).$(TOR_BROWSE | 
| 58 | 59 |    - [ ] ***(Optional)*** Update `projects/application-services/config`:
 | 
| 59 | 60 |      **NOTE** we don't currently have any of our own patches for this project
 | 
| 60 | 61 |      - [ ] `git_hash` : update to appropriate git commit associated with `$(ESR_VERSION)`
 | 
| 61 | -  - [ ] ***(Optional)*** Update `projects/android-components/config`:
 | |
| 62 | -    - [ ] `android_components_build` : update to match stable android-components tag
 | |
| 63 | -  - [ ] ***(Optional)*** Update `projects/fenix/config`
 | |
| 64 | -    - [ ] `fenix_build` : update to match fenix tag
 | |
| 62 | +  - [ ] ***(Optional)*** Update `projects/firefox-android/config`:
 | |
| 63 | +      - [ ] `fenix_version` : update to match alpha `firefox-android` build tag
 | |
| 64 | +      - [ ] `browser_branch` : update to match alpha `firefox-android` build tag
 | |
| 65 | 65 |    - [ ] Update allowed_addons.json by running (from `tor-browser-build` root):
 | 
| 66 | 66 |      - `./tools/fetch_allowed_addons.py > projects/browser/allowed_addons.json`
 | 
| 67 | 67 |  - [ ] Update common build configs
 | 
| ... | ... | @@ -79,43 +79,39 @@ Tor Browser Stable lives in the various `maint-$(TOR_BROWSER_MAJOR).$(TOR_BROWSE | 
| 79 | 79 |    - [ ] Check for tor updates here : https://gitlab.torproject.org/tpo/core/tor/-/tags
 | 
| 80 | 80 |      - [ ] ***(Optional)*** Update `projects/tor/config` 
 | 
| 81 | 81 |        - [ ] `version` : update to latest non `-alpha` tag (ping dgoulet or ahf if unsure)
 | 
| 82 | -  - [ ] Check for go updates here : https://golang.org/dl
 | |
| 82 | +  - [ ] Check for go updates here : https://go.dev/dl
 | |
| 83 | 83 |      - **NOTE** : Tor Browser Stable uses the latest of the *previous* Stable major series go version (apart from the transition phase from Tor Browser Alpha to Stable, in which case Tor Browser Stable may use the latest major series go version)
 | 
| 84 | 84 |      - [ ] ***(Optional)*** Update `projects/go/config`
 | 
| 85 | 85 |        - [ ] `version` : update go version
 | 
| 86 | 86 |        - [ ] `input_files/sha256sum` for `go` : update sha256sum of archive (sha256 sums are displayed on the go download page)
 | 
| 87 | -    - [ ] Check for manual updates by running (from `tor-browser-build` root): `./tools/fetch-manual.py`
 | |
| 88 | -      - [ ] ***(Optional)*** If new version is available:
 | |
| 89 | -        - [ ] Upload the downloaded `manual_$PIPELINEID.zip` file to `tb-build-02.torproject.org`
 | |
| 90 | -        - [ ] Deploy to `tb-builder`'s `public_html` directory:
 | |
| 91 | -          - `sudo -u tb-builder cp manual_$PIPELINEID.zip ~/../tb-builder/public_html/.`
 | |
| 92 | -        - [ ] Update `projects/manual/config`:
 | |
| 93 | -          - [ ] Change the `version` to `$PIPELINEID`
 | |
| 94 | -          - [ ] Update `sha256sum` in the `input_files` section
 | |
| 95 | -- [ ] Update `ChangeLog.txt`
 | |
| 96 | -  - [ ] Ensure ChangeLog.txt is sync'd between alpha and stable branches
 | |
| 87 | +  - [ ] Check for manual updates by running (from `tor-browser-build` root): `./tools/fetch-manual.py`
 | |
| 88 | +    - [ ] ***(Optional)*** If new version is available:
 | |
| 89 | +      - [ ] Upload the downloaded `manual_$PIPELINEID.zip` file to `tb-build-02.torproject.org`
 | |
| 90 | +      - [ ] Deploy to `tb-builder`'s `public_html` directory:
 | |
| 91 | +        - `sudo -u tb-builder cp manual_$PIPELINEID.zip ~/../tb-builder/public_html/.`
 | |
| 92 | +      - [ ] Update `projects/manual/config`:
 | |
| 93 | +        - [ ] Change the `version` to `$PIPELINEID`
 | |
| 94 | +        - [ ] Update `sha256sum` in the `input_files` section
 | |
| 95 | +- [ ] Update `ChangeLog-TBB.txt`
 | |
| 96 | +  - [ ] Ensure `ChangeLog-TBB.txt` is sync'd between alpha and stable branches
 | |
| 97 | 97 |    - [ ] Check the linked issues: ask people to check if any are missing, remove the not fixed ones
 | 
| 98 | -  - [ ] Run `tools/fetch-changelogs.py $(TOR_BROWSER_VERSION)` or `tools/fetch-changelogs.py '#$(ISSUE_NUMBER)'`
 | |
| 98 | +  - [ ] Run `tools/fetch-changelogs.py $(ISSUE_NUMBER) --date $date $updateArgs`
 | |
| 99 | 99 |      - Make sure you have `requests` installed (e.g., `apt install python3-requests`)
 | 
| 100 | 100 |      - The first time you run this script you will need to generate an access token; the script will guide you
 | 
| 101 | -  - [ ] Copy the output of the script to the beginning of `ChangeLog.txt` and adjust its output
 | |
| 102 | -    - **NOTE** : If you used the issue number, you will need to write the Tor Browser version manually
 | |
| 103 | -  - [ ] ***(Optional)*** Under `All Platforms` include any version updates for:
 | |
| 104 | -    - [ ] Translations
 | |
| 105 | -    - [ ] OpenSSL
 | |
| 106 | -    - [ ] NoScript
 | |
| 107 | -    - [ ] zlib
 | |
| 108 | -    - [ ] tor daemon
 | |
| 109 | -  - [ ] ***(Optional)*** Under `Windows + macOS + Linux` include updates for:
 | |
| 110 | -    - [ ] Firefox
 | |
| 111 | -  - [ ] ***(Optional)*** Under `Android`, include updates for:
 | |
| 112 | -    - [ ] Geckoview
 | |
| 113 | -  - [ ] ***(Optional)*** Under `Build System/All Platforms` include updates for:
 | |
| 114 | -    - [ ] Go
 | |
| 115 | -- [ ] Open MR with above changes
 | |
| 101 | +    - `$updateArgs` should be these arguments, depending on what you actually updated:
 | |
| 102 | +      - [ ] `--firefox` (be sure to include esr at the end if needed, which is usually the case)
 | |
| 103 | +      - [ ] `--tor`
 | |
| 104 | +      - [ ] `--no-script`
 | |
| 105 | +      - [ ] `--openssl`
 | |
| 106 | +      - [ ] `--zlib`
 | |
| 107 | +      - [ ] `--go`
 | |
| 108 | +      - E.g., `tools/fetch-changelogs.py 41028 --date 'December 19 2023' --firefox 115.6.0esr --tor 0.4.8.10 --no-script 11.4.29 --zlib 1.3 --go 1.21.5 --openssl 3.0.12`
 | |
| 109 | +    - `--date $date` is optional, if omitted it will be the date on which you run the command
 | |
| 110 | +  - [ ] Copy the output of the script to the beginning of `ChangeLog-TBB.txt` and adjust its output
 | |
| 111 | +- [ ] Open MR with above changes, using the template for release preparations
 | |
| 116 | 112 |  - [ ] Merge
 | 
| 117 | 113 |  - [ ] Sign/Tag commit: `make torbrowser-signtag-release`
 | 
| 118 | -- [ ] Push tag to `origin`
 | |
| 114 | +- [ ] Push tag to `upstream`
 | |
| 119 | 115 |  - [ ] Begin build on `$(BUILD_SERVER)` (fix any issues in subsequent MRs)
 | 
| 120 | 116 |  - [ ] **TODO** Submit build-tag to Mullvad build infra
 | 
| 121 | 117 |  - [ ] Ensure builders have matching builds
 | 
| ... | ... | @@ -43,16 +43,16 @@ | 
| 43 | 43 |    - **localization** : henry, pierov
 | 
| 44 | 44 |    - **macos** : clairehurst, dan
 | 
| 45 | 45 |    - **nightly builds** : boklm
 | 
| 46 | -  - **rebases/release-prep** : dan, ma1, pierov, richard
 | |
| 46 | +  - **rebases/release-prep** : boklm, dan, ma1, pierov, richard
 | |
| 47 | 47 |    - **security** : ma1
 | 
| 48 | 48 |    - **signing** : boklm, richard
 | 
| 49 | 49 |    - **updater** : pierov
 | 
| 50 | 50 |    - **misc/other** : pierov, richard
 | 
| 51 | 51 | |
| 52 | -#### Change Description
 | |
| 52 | +### Change Description
 | |
| 53 | 53 | |
| 54 | 54 |  <!-- Whatever context the reviewer needs to effectively review the patchset; if the patch includes UX updates be sure to include screenshots/video of how any new behaviour -->
 | 
| 55 | 55 | |
| 56 | 56 |  #### How Tested
 | 
| 57 | 57 | |
| 58 | -<!-- Description of steps taken to verify the change --> | |
| \ No newline at end of file | ||
| 58 | +<!-- Description of steps taken to verify the change --> | 
| 1 | +## Merge Info
 | |
| 2 | + | |
| 3 | +### Related Issues
 | |
| 4 | + | |
| 5 | +- tor-browser-build#xxxxx
 | |
| 6 | +- tor-browser-build#xxxxx
 | |
| 7 | + | |
| 8 | +## Review
 | |
| 9 | + | |
| 10 | +### Request Reviewer
 | |
| 11 | + | |
| 12 | +- [ ] Request review from a release engineer: boklm, dan, ma1, pierov, richard
 | |
| 13 | + | |
| 14 | +### Change Description
 | |
| 15 | + | 
| 1 | 1 |  #!/usr/bin/env python3
 | 
| 2 | +import argparse
 | |
| 2 | 3 |  from datetime import datetime
 | 
| 3 | 4 |  import enum
 | 
| 4 | 5 |  from pathlib import Path
 | 
| ... | ... | @@ -23,6 +24,11 @@ project_order = { | 
| 23 | 24 |  }
 | 
| 24 | 25 | |
| 25 | 26 | |
| 27 | +class EntryType(enum.IntFlag):
 | |
| 28 | +    UPDATE = 0
 | |
| 29 | +    ISSUE = 1
 | |
| 30 | + | |
| 31 | + | |
| 26 | 32 |  class Platform(enum.IntFlag):
 | 
| 27 | 33 |      WINDOWS = 8
 | 
| 28 | 34 |      MACOS = 4
 | 
| ... | ... | @@ -32,40 +38,12 @@ class Platform(enum.IntFlag): | 
| 32 | 38 |      ALL_PLATFORMS = 8 | 4 | 2 | 1
 | 
| 33 | 39 | |
| 34 | 40 | |
| 35 | -class Issue:
 | |
| 36 | -    def __init__(self, j):
 | |
| 37 | -        self.title = j["title"]
 | |
| 38 | -        self.project, self.number = (
 | |
| 39 | -            j["references"]["full"].rsplit("/", 2)[-1].split("#")
 | |
| 40 | -        )
 | |
| 41 | -        self.number = int(self.number)
 | |
| 42 | -        self.platform = 0
 | |
| 43 | -        self.num_platforms = 0
 | |
| 44 | -        if "Desktop" in j["labels"]:
 | |
| 45 | -            self.platform = Platform.DESKTOP
 | |
| 46 | -            self.num_platforms += 3
 | |
| 47 | -        else:
 | |
| 48 | -            if "Windows" in j["labels"]:
 | |
| 49 | -                self.platform |= Platform.WINDOWS
 | |
| 50 | -                self.num_platforms += 1
 | |
| 51 | -            if "MacOS" in j["labels"]:
 | |
| 52 | -                self.platform |= Platform.MACOS
 | |
| 53 | -                self.num_platforms += 1
 | |
| 54 | -            if "Linux" in j["labels"]:
 | |
| 55 | -                self.platform |= Platform.LINUX
 | |
| 56 | -                self.num_platforms += 1
 | |
| 57 | -        if "Android" in j["labels"]:
 | |
| 58 | -            if is_mb and self.num_platforms == 0:
 | |
| 59 | -                raise Exception(
 | |
| 60 | -                    f"Android-only issue on Mullvad Browser: {j['references']['full']}!"
 | |
| 61 | -                )
 | |
| 62 | -            elif not is_mb:
 | |
| 63 | -                self.platform |= Platform.ANDROID
 | |
| 64 | -                self.num_platforms += 1
 | |
| 65 | -        if not self.platform or (is_mb and self.platform == Platform.DESKTOP):
 | |
| 66 | -            self.platform = Platform.ALL_PLATFORMS
 | |
| 67 | -            self.num_platforms = 4
 | |
| 68 | -        self.is_build = "Build System" in j["labels"]
 | |
| 41 | +class ChangelogEntry:
 | |
| 42 | +    def __init__(self, type_, platform, num_platforms, is_build):
 | |
| 43 | +        self.type = type_
 | |
| 44 | +        self.platform = platform
 | |
| 45 | +        self.num_platforms = num_platforms
 | |
| 46 | +        self.is_build = is_build
 | |
| 69 | 47 | |
| 70 | 48 |      def get_platforms(self):
 | 
| 71 | 49 |          if self.platform == Platform.ALL_PLATFORMS:
 | 
| ... | ... | @@ -81,15 +59,78 @@ class Issue: | 
| 81 | 59 |              platforms.append("Android")
 | 
| 82 | 60 |          return " + ".join(platforms)
 | 
| 83 | 61 | |
| 84 | -    def __str__(self):
 | |
| 85 | -        return f"Bug {self.number}: {self.title} [{self.project}]"
 | |
| 86 | - | |
| 87 | 62 |      def __lt__(self, other):
 | 
| 63 | +        if self.type != other.type:
 | |
| 64 | +            return self.type < other.type
 | |
| 65 | +        if self.type == EntryType.UPDATE:
 | |
| 66 | +            # Rely on sorting being stable on Python
 | |
| 67 | +            return False
 | |
| 88 | 68 |          if self.project == other.project:
 | 
| 89 | 69 |              return self.number < other.number
 | 
| 90 | 70 |          return project_order[self.project] < project_order[other.project]
 | 
| 91 | 71 | |
| 92 | 72 | |
| 73 | +class UpdateEntry(ChangelogEntry):
 | |
| 74 | +    def __init__(self, name, version):
 | |
| 75 | +        if name == "Firefox" and not is_mb:
 | |
| 76 | +            platform = Platform.DESKTOP
 | |
| 77 | +            num_platforms = 3
 | |
| 78 | +        elif name == "GeckoView":
 | |
| 79 | +            platform = Platform.ANDROID
 | |
| 80 | +            num_platforms = 3
 | |
| 81 | +        else:
 | |
| 82 | +            platform = Platform.ALL_PLATFORMS
 | |
| 83 | +            num_platforms = 4
 | |
| 84 | +        super().__init__(
 | |
| 85 | +            EntryType.UPDATE, platform, num_platforms, name == "Go"
 | |
| 86 | +        )
 | |
| 87 | +        self.name = name
 | |
| 88 | +        self.version = version
 | |
| 89 | + | |
| 90 | +    def __str__(self):
 | |
| 91 | +        return f"Updated {self.name} to {self.version}"
 | |
| 92 | + | |
| 93 | + | |
| 94 | +class Issue(ChangelogEntry):
 | |
| 95 | +    def __init__(self, j):
 | |
| 96 | +        self.title = j["title"]
 | |
| 97 | +        self.project, self.number = (
 | |
| 98 | +            j["references"]["full"].rsplit("/", 2)[-1].split("#")
 | |
| 99 | +        )
 | |
| 100 | +        self.number = int(self.number)
 | |
| 101 | +        platform = 0
 | |
| 102 | +        num_platforms = 0
 | |
| 103 | +        if "Desktop" in j["labels"]:
 | |
| 104 | +            platform = Platform.DESKTOP
 | |
| 105 | +            num_platforms += 3
 | |
| 106 | +        else:
 | |
| 107 | +            if "Windows" in j["labels"]:
 | |
| 108 | +                platform |= Platform.WINDOWS
 | |
| 109 | +                num_platforms += 1
 | |
| 110 | +            if "MacOS" in j["labels"]:
 | |
| 111 | +                platform |= Platform.MACOS
 | |
| 112 | +                num_platforms += 1
 | |
| 113 | +            if "Linux" in j["labels"]:
 | |
| 114 | +                platform |= Platform.LINUX
 | |
| 115 | +                num_platforms += 1
 | |
| 116 | +        if "Android" in j["labels"]:
 | |
| 117 | +            if is_mb and num_platforms == 0:
 | |
| 118 | +                raise Exception(
 | |
| 119 | +                    f"Android-only issue on Mullvad Browser: {j['references']['full']}!"
 | |
| 120 | +                )
 | |
| 121 | +            elif not is_mb:
 | |
| 122 | +                platform |= Platform.ANDROID
 | |
| 123 | +                num_platforms += 1
 | |
| 124 | +        if not platform or (is_mb and platform == Platform.DESKTOP):
 | |
| 125 | +            platform = Platform.ALL_PLATFORMS
 | |
| 126 | +            num_platforms = 4
 | |
| 127 | +        is_build = "Build System" in j["labels"]
 | |
| 128 | +        super().__init__(EntryType.ISSUE, platform, num_platforms, is_build)
 | |
| 129 | + | |
| 130 | +    def __str__(self):
 | |
| 131 | +        return f"Bug {self.number}: {self.title} [{self.project}]"
 | |
| 132 | + | |
| 133 | + | |
| 93 | 134 |  def sorted_issues(issues):
 | 
| 94 | 135 |      issues = [sorted(v) for v in issues.values()]
 | 
| 95 | 136 |      return sorted(
 | 
| ... | ... | @@ -99,8 +140,20 @@ def sorted_issues(issues): | 
| 99 | 140 |      )
 | 
| 100 | 141 | |
| 101 | 142 | |
| 102 | -if len(sys.argv) < 2:
 | |
| 103 | -    print(f"Usage: {sys.argv[0]} version-to-release or #issue-id")
 | |
| 143 | +parser = argparse.ArgumentParser()
 | |
| 144 | +parser.add_argument("issue_version")
 | |
| 145 | +parser.add_argument("--date", help="The date of the release")
 | |
| 146 | +parser.add_argument("--firefox", help="New Firefox version (if we rebased)")
 | |
| 147 | +parser.add_argument("--tor", help="New Tor version (if updated)")
 | |
| 148 | +parser.add_argument("--no-script", help="New NoScript version (if updated)")
 | |
| 149 | +parser.add_argument("--openssl", help="New OpenSSL version (if updated)")
 | |
| 150 | +parser.add_argument("--ublock", help="New uBlock version (if updated)")
 | |
| 151 | +parser.add_argument("--zlib", help="New zlib version (if updated)")
 | |
| 152 | +parser.add_argument("--go", help="New Go version (if updated)")
 | |
| 153 | +args = parser.parse_args()
 | |
| 154 | + | |
| 155 | +if not args.issue_version:
 | |
| 156 | +    parser.print_help()
 | |
| 104 | 157 |      sys.exit(1)
 | 
| 105 | 158 | |
| 106 | 159 |  token_file = Path(__file__).parent / ".changelogs_token"
 | 
| ... | ... | @@ -121,7 +174,7 @@ with token_file.open() as f: | 
| 121 | 174 |      token = f.read().strip()
 | 
| 122 | 175 |  headers = {"PRIVATE-TOKEN": token}
 | 
| 123 | 176 | |
| 124 | -version = sys.argv[1]
 | |
| 177 | +version = args.issue_version
 | |
| 125 | 178 |  r = requests.get(
 | 
| 126 | 179 |      f"{API_URL}/projects/{PROJECT_ID}/issues?labels=Release Prep",
 | 
| 127 | 180 |      headers=headers,
 | 
| ... | ... | @@ -132,7 +185,7 @@ if r.status_code == 401: | 
| 132 | 185 |  issue = None
 | 
| 133 | 186 |  issues = []
 | 
| 134 | 187 |  for i in r.json():
 | 
| 135 | -    if i["title"].find(sys.argv[1]) != -1:
 | |
| 188 | +    if i["title"].find(version) != -1:
 | |
| 136 | 189 |          issues.append(i)
 | 
| 137 | 190 |  if len(issues) == 1:
 | 
| 138 | 191 |      issue = issues[0]
 | 
| ... | ... | @@ -172,20 +225,44 @@ iid = issue["iid"] | 
| 172 | 225 | |
| 173 | 226 |  linked = {}
 | 
| 174 | 227 |  linked_build = {}
 | 
| 228 | + | |
| 229 | + | |
| 230 | +def add_entry(entry):
 | |
| 231 | +    target = linked_build if entry.is_build else linked
 | |
| 232 | +    if entry.platform not in target:
 | |
| 233 | +        target[entry.platform] = []
 | |
| 234 | +    target[entry.platform].append(entry)
 | |
| 235 | + | |
| 236 | + | |
| 237 | +if args.firefox:
 | |
| 238 | +    add_entry(UpdateEntry("Firefox", args.firefox))
 | |
| 239 | +    if not is_mb:
 | |
| 240 | +        add_entry(UpdateEntry("GeckoView", args.firefox))
 | |
| 241 | +if args.tor and not is_mb:
 | |
| 242 | +    add_entry(UpdateEntry("Tor", args.tor))
 | |
| 243 | +if args.no_script:
 | |
| 244 | +    add_entry(UpdateEntry("NoScript", args.no_script))
 | |
| 245 | +if not is_mb:
 | |
| 246 | +    if args.openssl:
 | |
| 247 | +        add_entry(UpdateEntry("OpenSSL", args.openssl))
 | |
| 248 | +    if args.zlib:
 | |
| 249 | +        add_entry(UpdateEntry("zlib", args.zlib))
 | |
| 250 | +    if args.go:
 | |
| 251 | +        add_entry(UpdateEntry("Go", args.go))
 | |
| 252 | +elif args.ublock:
 | |
| 253 | +    add_entry(UpdateEntry("uBlock Origin", args.ublock))
 | |
| 254 | + | |
| 175 | 255 |  r = requests.get(
 | 
| 176 | 256 |      f"{API_URL}/projects/{PROJECT_ID}/issues/{iid}/links", headers=headers
 | 
| 177 | 257 |  )
 | 
| 178 | 258 |  for i in r.json():
 | 
| 179 | -    i = Issue(i)
 | |
| 180 | -    target = linked_build if i.is_build else linked
 | |
| 181 | -    if i.platform not in target:
 | |
| 182 | -        target[i.platform] = []
 | |
| 183 | -    target[i.platform].append(i)
 | |
| 259 | +    add_entry(Issue(i))
 | |
| 260 | + | |
| 184 | 261 |  linked = sorted_issues(linked)
 | 
| 185 | 262 |  linked_build = sorted_issues(linked_build)
 | 
| 186 | 263 | |
| 187 | 264 |  name = "Mullvad" if is_mb else "Tor"
 | 
| 188 | -date = datetime.now().strftime("%B %d %Y")
 | |
| 265 | +date = args.date if args.date else datetime.now().strftime("%B %d %Y")
 | |
| 189 | 266 |  print(f"{name} Browser {version} - {date}")
 | 
| 190 | 267 |  for issues in linked:
 | 
| 191 | 268 |      print(f" * {issues[0].get_platforms()}")
 |