Manually Generate Partials

Based on


Under some circumstances, users may be stranded on old releases. In this case, Release Management might ask to generate a partial update from this old release to the most current version (like in bug 1347030).

Assumptions: * the request is for the release channel * all locales are being generated, possibly only some of the platforms (which are win32 and win64 in this tutorial)


1. build/tools changes

export FROM_VERSION='47.0.2'  # Change this
export TO_VERSION='53.0'  # Change this
export TO_BUILD='6'   # Change this
export TO_VERSION_UNDERSCORE = ${TO_VERSION//./_} # Example: 53_0

PERL5LIB=tools/lib/perl perl tools/release/ \
  -c tools/release/patcher-configs/mozRelease-branch-patcher2.cfg \
  -p firefox -r Firefox -v "$TO_VERSION" -a "$TO_VERSION" -o "$FROM_VERSION" -b "$TO_BUILD" \
  -f -d -l shipped-locales --partial-version "$FROM_VERSION" \
  --platform linux --platform linux64 --platform macosx64 --platform win32 --platform win64

python tools/scripts/build-promotion/ \
  --config tools/release/patcher-configs/mozRelease-branch-patcher2.cfg \
  --platform win32 --update-verify-channel release-localtest \
  --output tools/release/updates/release-firefox-win32.cfg \
  --archive-prefix \
  --previous-archive-prefix \
  --product firefox --balrog-url --build-number "$TO_BUILD"

python tools/scripts/build-promotion/ \
  --config tools/release/patcher-configs/mozRelease-branch-patcher2.cfg \
  --platform win64 --update-verify-channel release-localtest \
  --output tools/release/updates/release-firefox-win64.cfg \
  --archive-prefix \
  --previous-archive-prefix \
  --product firefox --balrog-url --build-number "$TO_BUILD"

cd tools/

# Edit release/updates/release-firefox-win32.cfg and release/updates/release-firefox-win64.cfg to only contain the line about $FROM_VERSION

hg commit
hg push -r . review   # Ask for a review

# Once review is passed, retag the following:

hg push -r .^  # Actual changes
hg push -r .    # Tags

2. Update the balrog blobs and generate taskgraph

  1. Clone the current production blob and rename it to *-prod. Make the production rule to this new blob.

  2. Then, you need to make some changes on the blog you just copied, otherwise the update verify tests will fail.

  3. Download the release blob make these changes: ["fileUrls"]["release-localtest"]["partials"].append("Firefox-${FROM_VERSION}-build${FROM_BUILD}": "${TO_VERSION}-candidates/build${TO_BUILD}/update/%OS_FTP%/%LOCALE%/firefox-${FROM_VERSION}-${TO_VERSIONs}.partial.mar")

  4. Upload the new blob and make the release-localtest rule point to this new blob.

sudo su - ctlbld
mkdir bug-xxxxxx && cd bug-xxxxxx
curl --location > partials.tar.gz
tar xvf partials.tar.gz
cd partials
cd partials-47.0.2-50.1.0/

# Modify to point to $TO_VERSION
# Fill the creds in config.yml
source /builds/releaserunner/bin/activate

# If the graph is printed out, uncomment the last line of

3. Update balrog blobs (one more time) and bouncers

  1. Manually add the bouncer entries, which means:

  2. Create a new product called Firefox-${TO_VERSION}-Partial-${FROM_VERSION}. Don’t include the build numbers in the name. Build numbers are for *-cdntest channels, only. For instance:

  3. Create 1 location per platform for this new product. Ask for a review, because typos can happen. (Corrected) example:

  4. Resolve the human decision of the graph.

  5. Wait for to show some products (replace the ID of the product by yours)

  6. Manually test out the bouncer. Change this link\({TO_VERSION}-partial-\){FROM_VERSION}&os=win&lang=fr with your product name and all the locations you created. That’s case insensitive.

  7. On balrog, perform this addition on the release (non *-prod) blob, ["fileUrls"]["*"]["partials"].append("Firefox-${FROM_VERSION}-build${FROM_BUILD}": "${TO_VERSION}-partial-${FROM_VERSION}&os=%OS_BOUNCER%&lang=%LOCALE%"). Manually change the ${VARIABLES}

  8. If you have a what’s new page blob on balrog

  9. Download the regular blob (the one just updated in step 6), which now contains all the partials.

  10. Add the whatsnew bits to it, which is detailed in (Don’t forget to change the name)

  11. Ask for another review.

  12. You can now test out the balrog rule. In order to to so:

  13. Go to the logs of one update verify job.

  14. Copy one of URL, like:

  15. Modify it to now point to release (and to aus5, which has a valid certificate):

  16. See the new partial entry in the XML, for instance: <patch type="partial" URL="" hashFunction="sha512" hashValue="1f8a24ec43002477b21ffdc06cdbb7c885ebf57eecc08e45c31089ceac1a9e57cf9ec2c4becc638ec346335e5d84e9384f2503d61a259232151cb6e173126cce" size="42336047"/>

  17. Copy/paste the URL, just to make sure it’s a valid one.