[tor-commits] [tor-messenger-build/master] Start documenting some of the rebase procedure

arlo at torproject.org arlo at torproject.org
Thu Mar 9 17:46:14 UTC 2017


commit 2f3b77d2e397b9b839ac9d414c5bd4fa943281b1
Author: Arlo Breault <arlolra at gmail.com>
Date:   Thu Mar 9 08:37:04 2017 -0800

    Start documenting some of the rebase procedure
---
 README           |  77 ---------------
 README.RELEASE   | 274 -----------------------------------------------------
 README.md        |  81 ++++++++++++++++
 docs/rebasing.md | 102 ++++++++++++++++++++
 docs/release.md  | 284 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 5 files changed, 467 insertions(+), 351 deletions(-)

diff --git a/README b/README
deleted file mode 100644
index 7af597b..0000000
--- a/README
+++ /dev/null
@@ -1,77 +0,0 @@
-Tor Messenger Build
-===================
-
-Installing build dependencies
------------------------------
-
-To build Tor Messenger, you need a Linux distribution that has support
-for Docker (such as Debian jessie, Ubuntu 14.04, Fedora 20, etc ...).
-The Docker package is usually named docker.io or docker-io.
-On Debian jessie, the docker.io package is available in backports.
-
-Your user account should have access to the docker command without using
-sudo, so it should be in the docker group. The docker daemon should
-also be running.
-
-The sources are downloaded using git and mercurial which need to be
-installed.
-
-You also need a few perl modules installed:
-- YAML::XS
-- File::Basename
-- Getopt::Long
-- Template
-- IO::Handle
-- IO::CaptureOutput
-- File::Temp
-- File::Slurp
-- File::Path
-- String::ShellQuote
-- Sort::Versions
-- Digest::SHA
-- Data::UUID
-- Data::Dump
-
-If you are running Debian or Ubuntu, you can install them with:
-
-# apt-get install libyaml-libyaml-perl libtemplate-perl \
-                  libio-handle-util-perl libio-all-perl \
-                  libio-captureoutput-perl libfile-slurp-perl \
-                  libstring-shellquote-perl libsort-versions-perl \
-                  libdigest-sha-perl libdata-uuid-perl libdata-dump-perl \
-                  git mercurial
-
-
-Starting a build
-----------------
-
-To start a build, simply run "make all" in the directory to build all
-currently supported architectures.
-
-If you want to build only one architecture, you can run something like
-"make tor-messenger-linux-x86_64".
-
-The resulting builds are stored in the out/tor-messenger directory.
-
-You can also run "make tor-messenger-release" to build it for all
-architectures, rename files to their final name and generate an
-sha256sums.txt file in the directory release/$version.
-
-
-Updating git and hg sources
----------------------------
-
-You can run "make fetch" to fetch the latest sources from git and
-mercurial for all components included in Tor Messenger.
-
-
-Cleaning obsolete files and containers images
----------------------------------------------
-
-To clean obsolete files and containers images, you can run "make clean-old".
-
-This command will remove any intermediate build files and containers
-that are no longer used in the current builds. Because it needs to
-compute the filename of all current files, this command takes a lot of
-time to run.
-
diff --git a/README.RELEASE b/README.RELEASE
deleted file mode 100644
index 1170207..0000000
--- a/README.RELEASE
+++ /dev/null
@@ -1,274 +0,0 @@
-Release Process for Tor Messenger
-=================================
-
-You are ready to release Tor Messenger when you have performed a substantial
-development effort, or you have to patch a security issue.
-
-The release process is divided into two parts: building Tor Messenger, and
-then signing the MAR files for secure automatic updates; follow this guide
-step by step to complete both the steps.
-
-Building
-========
-
-- If not already done, bump the version number in `ChangeLog', `rbm.conf',
-  `tools/update-responses/config.yml'
-
-- Ensure `HEAD' on the build machines matches the `master' of
-  `tor-messenger-build.git' repository.
-
-- Run `make fetch' before the next step.
-
-- Run `make tor-messenger-release'. The builds will be in the
-  `release/$VERSION' directory, along with the MAR files. This will also
-  output the `sha256sum' of the files.
-
-- Compare the Linux builds with at least one other person -- preferably
-  building on another machine -- to check if they are reproducible.
-
-- Test the builds on all platforms:
-
-    - Create an XMPP account and IRC account
-
-        - Ensure that the corresponding OTR keys have been generated (Tools >
-          OTR Preferences > Private Keys) 
-
-        - Initiate an OTR conversation with another instance. Verify the
-          various authentication mechanisms.
-
-- If everything is fine, send the Windows and macOS builds (EXE and DMG) to
-  the Tor Browser team for code signing.
-
-! Wait to get the signed EXE and DMG back before proceeding to the next step !
-
-Making Update MARs
-==================
-
-This step only works if you want to do an update build and have a base version
-to diff against. So if you are upgrading from A to B, follow these steps; this
-assumes that A is the older version and B is the newer one.  
-
-    ! These steps are not required if you are doing a build for just A or B !
-
-- Navigate to the build directory on the build machine
-
-- `cd tor-messenger-build/release/ && mkdir -p tor-messenger/signed/$VERSION'
-  (where $VERSION is the version of the release, same as in rbm.conf).
-
-- You are now in the tor-messenger/signed/$VERSION/ directory
-
-- Copy all the release files from tor-messenger-release into this directory
-
-        cp -r ../../../$VERSION/* .
-
-  ! If this is the first time you are doing an update, make sure the older
-  version is also present in the signed/ directory. For example if you are
-  building B for the first time, you should have A/ in the signed/ directory.
-  Repeat the above steps for A (if not already done):
-   mkdir -p tor-messenger/signed/A
-   cd A/
-   cp -r ../../../A/* .
-  The `gen_incrementals' script will complain about this.
-
-- Now copy the SIGNED Windows and macOS EXE and DMG files which the Tor
-  Browser team has uploaded.
-    - Check this step again to ensure you have the signed binaries. Compare
-      the checksums!
-
-- At this stage, you have the code signed binaries and the unsigned complete
-  MARs.
-
-- Now go to `tor-messenger-build/tools/update-responses'.
-
-- Edit `config.yml':
-    - Check and update the version in the `channel' section
-    - In `version', add a new section (see existing sections for help)
-      corresponding to the release version
-    - Assume you are updating from A to B. Your `config.yml' should look like:
-
-            channels:
-                release: B
-            B:
-                platformVersion: 45.6.0
-                detailsURL: https://blog.torproject.org/blog/tor-messenger-B-released
-                incremental_from:
-                  - A
-
-    ! Increment platformVersion if it has changed
-    ! Update detailsURL which will point to the blog post detailing the release
-
-- Now run `./gen_incrementals'. In the `signed/$VERSION' directory, you should
-  see incremental MARs from A->B along with the existing complete MARs.
-
-- This completes the MAR generation step. The next step is signing, which
-  takes place offline.
-
-Signing Update MARs
-===================
-
-This step has to be performed offline and assumes you have the MAR signing
-certificates and the private keys.
-
-        ! DO NOT copy the certificate directory to ANY remote machine !
-
-! This step works only on a Linux machine (32-bit or 64-bit)
-
-# Offline Steps Start #
-
-- Create a new local directory
-
-- Copy `signmars.py' from the build repository (`tor-messenger/tools/update-responses/')
-
-- Copy the following files from the signed/ directory in the previous section
-  to the current local directory:
-
-        mar-tools-linux*.zip
-        *.mar
-
-    scp tor-messenger-build/release/tor-messenger/signed/$VERSION/{*.mar,mar-tools-linux*.zip} .
-
-- Set `NSS_DB_DIR' to point to the directory with the certificate files. You
-  should point to the directory with the `cert8.db' file.
-
-- Run `signmars.py' and follow the steps. The signed MARs will be in the
-  signed/ directory.
-
-- cd signed/
-
-- Upload the signed MARs back to the directory you copied them from.
-
-    scp *.mar tor-messenger-build/release/tor-messenger/signed/$VERSION/
-
-# Offline Steps End #
-
-- Back to the build machine: navigate to tools/update-responses/. Run
-  `./update_responses' to generate the update manifest.
-
-- Generate the checksums for the builds:
-
-        sha256sum `ls -I "*.zip" -I "*.txt"` > sha256sums-signed-build.txt
-
-- GPG sign the sha256sums-signed-build.txt file:
-
-    - Copy the sha256sums-signed-build.txt to a local machine
-
-        gpg -abs sha256sums-signed-build.txt
-
-    - Upload the signature (*.asc) back to build machine signed/ directory.
-
-- At this stage, you have the code signed DMG and EXE, Linux builds, signed
-  MAR files, the update information, and the signed sha256sum of all files.
-
-Testing Updates
-===============
-
-Before we push the update to users, we should test them first to make sure
-that incremental (or complete updates) are working as intended. We do this by
-pushing the updates to the `update_2.test' directory instead of `update_2'.
-
-- Copy the `htdocs/release' directory from the last section to `aus2.torproject.org'
-       staticiforme.torproject.org:/srv/aus2-master.torproject.org/htdocs/tormessenger/update_2.test/release 
-
-  ! Make sure the .htaccess file is copied as well.
-
-- ssh to `staticiforme.torproject.org:/srv/dist-master.torproject.org/htdocs/tormessenger'
-  `mkdir $VERSION` to create the directory for the new version.
-
-- Copy the contents* of the signed/ directory (MAR files) to dist.tormessenger.org/tormessenger/$VERSION
-       staticiforme.torproject.org:/srv/dist-master.torproject.org/htdocs/tormessenger/$VERSION
-
-  * - You can skip sha256sums-unsigned-build.txt since we don't use it.
-
-- ssh to `staticiforme.torproject.org:/srv/dist-master.torproject.org/htdocs/tormessenger'
-    - Run `ln -sfn $VERSION current'
-        This helps us ensure that the `current' directory always refers to the
-        latest release of Tor Messenger
-    - Exit
-
-- We need to finalize the changes. Run:
-   ssh staticiforme.torproject.org static-update-component dist.torproject.org && ssh staticiforme.torproject.org static-update-component aus2.torproject.org 
-
-- Now test the updates on ALL platforms as it is possbile that updates may
-  work on one but fail on the other.
-
-    - Start Tor Messenger
-
-    - Open the preferences editor and copy the value for preference `app.update.url'
-
-    - Create a new string preference (Right click -> New -> String) and set
-      the name to `app.update.url.override'. Set the value copied from the
-      previous step REPLACING `update_2' with `update_2.test'. Your string
-      should be:
-
-            https://aus2.torproject.org/tormessenger/update_2.test/%CHANNEL%/%BUILD_TARGET%/%VERSION%/%LOCALE% 
-
-    - Create a new boolean preference `app.update.log' and set it to `true'
-
-    - Force an update by going to the about screen
-
-    - Tor Messenger should update (incrementally) and then restart
-
-    - The update should be applied on restart. If not, it should complain and
-      that means something is broken. Since we set `app.update.log' to `true',
-      it's a good time to look at the error console
-
-If everything went on fine with the testing, move on to the next step.
-
-Finalizing Updates and Releasing
-================================
-
-- Publish the blog post on blog.torproject.org. The URL should follow the same
-  format as described in the `config.yml' file for $VERSION
-
-- ssh to `staticiforme.torproject.org:/srv/aus2-master.torproject.org/htdocs/tormessenger/update_2/release`
-
-- Delete the existing files and then copy the changes from the `test' directory:
-
-    cp -R ../../update_2.test/release/. .
-
-- The update is still not live. To finalize it, exit, and then run:
-
-    ssh staticiforme.torproject.org static-update-component aus2.torproject.org 
-
-- The update is now live. Now is a good time to again test if the updates are
-  being properly pushed to the users! It may be a good idea to repeat the Tor
-  Messenger tests in the previous section. (Install older version, force
-  update, check.)
-
-- Finalize the release process by tagging the version in
-  `tor-messenger-build.git' (run the code below). Make sure that HEAD is the
-  commit which adds the release date to the ChangeLog.
-
-    VERSION=`awk '/tormessenger_version/ {print $2}' rbm.conf | cut -d "'" -f2` 
-    git tag -s v$VERSION -m "version $VERSION"
-    git push --tags
-
-- This completes the release process.
-
-After a Release
-===============
-
-- Bump up the version number in ChangeLog, rbm.conf,
-  tools/update-responses/config.yml for the next release
-
-- Increment the version number and update the links on
-  https://trac.torproject.org/projects/tor/wiki/doc/TorMessenger
-
-- Administer the comments on the blog and reply to them. Open relevant tickets
-  wherever necessary.
-
-Troubleshooting
-===============
-
-- If you want to update add-ons like ctypes-otr or tor-launcher, make sure to
-  bump the version number in their `install.rdf' file. Add-ons are only
-  updated if the version number is incremented.
-
-- Any changes you make on staticiforme.torproject.org have to be finalized
-  with the `static-update-component $DIR' command. So if you have made changes
-  to `dist.torproject.org', you have to run:
-
-   ssh staticiforme.torproject.org static-update-component dist.torproject.org 
-
-- Make sure `app.update.log' is set to `true' before testing updates since you
-  will get logging information as the update is applied, and if it fails.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..a45ef70
--- /dev/null
+++ b/README.md
@@ -0,0 +1,81 @@
+Tor Messenger Build
+===================
+
+Installing build dependencies
+-----------------------------
+
+To build Tor Messenger, you need a Linux distribution that has support
+for Docker (such as Debian jessie, Ubuntu 14.04, Fedora 20, etc ...).
+The Docker package is usually named docker.io or docker-io.
+On Debian jessie, the docker.io package is available in backports.
+
+Your user account should have access to the docker command without using
+sudo, so it should be in the docker group. The docker daemon should
+also be running.
+
+The sources are downloaded using git and mercurial which need to be
+installed.
+
+You also need a few perl modules installed:
+
+```
+- YAML::XS
+- File::Basename
+- Getopt::Long
+- Template
+- IO::Handle
+- IO::CaptureOutput
+- File::Temp
+- File::Slurp
+- File::Path
+- String::ShellQuote
+- Sort::Versions
+- Digest::SHA
+- Data::UUID
+- Data::Dump
+```
+
+If you are running Debian or Ubuntu, you can install them with:
+
+```
+# apt-get install libyaml-libyaml-perl libtemplate-perl \
+                  libio-handle-util-perl libio-all-perl \
+                  libio-captureoutput-perl libfile-slurp-perl \
+                  libstring-shellquote-perl libsort-versions-perl \
+                  libdigest-sha-perl libdata-uuid-perl libdata-dump-perl \
+                  git mercurial
+```
+
+Starting a build
+----------------
+
+To start a build, simply run `make all` in the directory to build all
+currently supported architectures.
+
+If you want to build only one architecture, you can run something like
+`make tor-messenger-linux-x86_64`.
+
+The resulting builds are stored in the out/tor-messenger directory.
+
+You can also run `make tor-messenger-release` to build it for all
+architectures, rename files to their final name and generate an
+sha256sums.txt file in the directory release/$version.
+
+
+Updating git and hg sources
+---------------------------
+
+You can run `make fetch` to fetch the latest sources from git and
+mercurial for all components included in Tor Messenger.
+
+
+Cleaning obsolete files and containers images
+---------------------------------------------
+
+To clean obsolete files and containers images, you can run `make clean-old`.
+
+This command will remove any intermediate build files and containers
+that are no longer used in the current builds. Because it needs to
+compute the filename of all current files, this command takes a lot of
+time to run.
+
diff --git a/docs/rebasing.md b/docs/rebasing.md
new file mode 100644
index 0000000..98101f2
--- /dev/null
+++ b/docs/rebasing.md
@@ -0,0 +1,102 @@
+Rebasing
+========
+
+When a new version of Tor Browser or Thunderbird is tagged, we need to
+rebase our patchsets.  This doc will help the unacquainted.
+
+Maintaining a fork
+------------------
+
+This might be another approach. We're kind of waiting on,
+https://bugzilla.mozilla.org/show_bug.cgi?id=1309045
+
+so we can sync that here,
+https://gitweb.torproject.org/tor-messenger.git/
+
+Sync'ing mercurial to git
+-------------------------
+
+This isn't strictly necessary but the author of this document prefers working
+in git.  You'll need to install [fast-export](https://github.com/frej/fast-export)
+
+```
+hg clone https://hg.mozilla.org/releases/comm-esr45/
+mkdir tor-messenger
+cd tor-messenger
+git init
+hg-fast-export -r ../comm-esr45
+```
+
+Note, this is going to complain about detached heads in mercurial.
+Just `--force` it.
+
+Now you have a git repo sync'd w/ hg
+
+You can rerun that as new commits come in (`hg pull && hg update`),
+but ignore that for now.
+
+Applying the Tor Messenger patches to a tag
+-------------------------------------------
+
+Let's checkout the right Thunderbird tag in git.  The specific tag below is
+from the time this document was originally written.  Obviously, update it as
+necessary.
+
+```
+export TAG=THUNDERBIRD_45_8_0_RELEASE
+
+# We're still in "tor-messenger" from above
+git checkout -b tm-base $TAG
+git checkout -b tm
+```
+
+We created `tm-base` to ease rebasing and formatting patches below.  Now go
+over to the `tor-messenger-build` repo and get our patches,
+
+```
+cd projects/instantbird
+cp 00* ~/tor-messenger  # Assuming the above repo you created was in ~
+```
+
+And apply them,
+
+```
+cd ~/tor-messenger
+git branch  # Should say "tm" from above
+git am 00*.patch
+rm 00*
+```
+
+Now you have a nice `tm` branch based on `$TAG` with all our patches.
+
+Adding or updating a patch
+--------------------------
+
+Generally, you'll want just want to do some work and `git commit` it on top.
+Occasionally though, you'll need to make some changes to the patches we're
+already maintaining.  A good example of that is when Tor Browser updates,
+you'll want to sync the preferences from `browser/app/profile/000-tor-browser.js`
+
+```
+git rebase -i tm-base
+# Pick the first commit for editing, "Set Tor Messenger preferences"
+```
+
+Now copy the contents from the new `000-tor-browser.js` to `im/app/profile/all-instantbird.js`
+being sure to lineup sections to produce a nice diff.  Mark any new changes
+where we deviate with `// TM`.  (Note: This description is a little opaque
+and can use some clarifying statements.)
+
+```
+git rebase --continue
+```
+
+Now, we're ready to export those changes and copy them back over to the
+`tor-messenger-build` repo.
+
+```
+git format-patch tm-base
+mv 00* ~/tor-messenger-build/projects/instantbird/
+```
+
+Be sure to add / update any modified `-filename:` in the `config`.
diff --git a/docs/release.md b/docs/release.md
new file mode 100644
index 0000000..7f07fc1
--- /dev/null
+++ b/docs/release.md
@@ -0,0 +1,284 @@
+Release Process for Tor Messenger
+=================================
+
+You are ready to release Tor Messenger when you have performed a substantial
+development effort, or you have to patch a security issue.
+
+The release process is divided into two parts: building Tor Messenger, and
+then signing the MAR files for secure automatic updates; follow this guide
+step by step to complete both the steps.
+
+Building
+========
+
+- If not already done, bump the version number in `ChangeLog`, `rbm.conf`,
+  `tools/update-responses/config.yml`
+
+- Ensure `HEAD` on the build machines matches the `master` of
+  `tor-messenger-build.git` repository.
+
+- Run `make fetch` before the next step.
+
+- Run `make tor-messenger-release`. The builds will be in the
+  `release/$VERSION` directory, along with the MAR files. This will also
+  output the `sha256sum` of the files.
+
+- Compare the Linux builds with at least one other person -- preferably
+  building on another machine -- to check if they are reproducible.
+
+- Test the builds on all platforms:
+
+    - Create an XMPP account and IRC account
+
+        - Ensure that the corresponding OTR keys have been generated (Tools >
+          OTR Preferences > Private Keys) 
+
+        - Initiate an OTR conversation with another instance. Verify the
+          various authentication mechanisms.
+
+- If everything is fine, send the Windows and macOS builds (EXE and DMG) to
+  the Tor Browser team for code signing.
+
+**Wait to get the signed EXE and DMG back before proceeding to the next step**
+
+Making Update MARs
+==================
+
+This step only works if you want to do an update build and have a base version
+to diff against. So if you are upgrading from A to B, follow these steps; this
+assumes that A is the older version and B is the newer one.
+
+**These steps are not required if you are doing a build for just A or B**
+
+- Navigate to the build directory on the build machine
+
+- `cd tor-messenger-build/release/ && mkdir -p tor-messenger/signed/$VERSION`
+  (where $VERSION is the version of the release, same as in rbm.conf).
+
+- You are now in the tor-messenger/signed/$VERSION/ directory
+
+- Copy all the release files from tor-messenger-release into this directory
+
+        cp -r ../../../$VERSION/* .
+
+  **If this is the first time you are doing an update, make sure the older
+  version is also present in the signed/ directory. For example if you are
+  building B for the first time, you should have A/ in the signed/ directory.
+  Repeat the above steps for A (if not already done):**
+
+        mkdir -p tor-messenger/signed/A
+        cd A/
+        cp -r ../../../A/* .
+
+  **The `gen_incrementals' script will complain about this.**
+
+- Now copy the SIGNED Windows and macOS EXE and DMG files which the Tor
+  Browser team has uploaded.
+
+    - Check this step again to ensure you have the signed binaries. Compare
+      the checksums!
+
+- At this stage, you have the code signed binaries and the unsigned complete
+  MARs.
+
+- Now go to `tor-messenger-build/tools/update-responses`.
+
+- Edit `config.yml`:
+    - Check and update the version in the `channel` section
+    - In `version`, add a new section (see existing sections for help)
+      corresponding to the release version
+    - Assume you are updating from A to B. Your `config.yml` should look like:
+
+            channels:
+                release: B
+            B:
+                platformVersion: 45.6.0
+                detailsURL: https://blog.torproject.org/blog/tor-messenger-B-released
+                incremental_from:
+                  - A
+
+    **Increment platformVersion if it has changed
+    Update detailsURL which will point to the blog post detailing the release**
+
+- Now run `./gen_incrementals`. In the `signed/$VERSION` directory, you should
+  see incremental MARs from A->B along with the existing complete MARs.
+
+- This completes the MAR generation step. The next step is signing, which
+  takes place offline.
+
+Signing Update MARs
+===================
+
+This step has to be performed offline and assumes you have the MAR signing
+certificates and the private keys.
+
+**DO NOT copy the certificate directory to ANY remote machine**
+
+**This step works only on a Linux machine (32-bit or 64-bit)**
+
+Offline Steps Start
+-------------------
+
+- Create a new local directory
+
+- Copy `signmars.py` from the build repository (`tor-messenger/tools/update-responses/`)
+
+- Copy the following files from the signed/ directory in the previous section
+  to the current local directory:
+
+        mar-tools-linux*.zip
+        *.mar
+
+        scp tor-messenger-build/release/tor-messenger/signed/$VERSION/{*.mar,mar-tools-linux*.zip} .
+
+- Set `NSS_DB_DIR` to point to the directory with the certificate files. You
+  should point to the directory with the `cert8.db` file.
+
+- Run `signmars.py` and follow the steps. The signed MARs will be in the
+  signed/ directory.
+
+- `cd signed/`
+
+- Upload the signed MARs back to the directory you copied them from.
+
+        scp *.mar tor-messenger-build/release/tor-messenger/signed/$VERSION/
+
+Offline Steps End
+-----------------
+
+- Back to the build machine: navigate to tools/update-responses/. Run
+  `./update_responses` to generate the update manifest.
+
+- Generate the checksums for the builds:
+
+        sha256sum `ls -I "*.zip" -I "*.txt"` > sha256sums-signed-build.txt
+
+- GPG sign the sha256sums-signed-build.txt file:
+
+    - Copy the sha256sums-signed-build.txt to a local machine
+
+            gpg -abs sha256sums-signed-build.txt
+
+    - Upload the signature (*.asc) back to build machine signed/ directory.
+
+- At this stage, you have the code signed DMG and EXE, Linux builds, signed
+  MAR files, the update information, and the signed sha256sum of all files.
+
+Testing Updates
+===============
+
+Before we push the update to users, we should test them first to make sure
+that incremental (or complete updates) are working as intended. We do this by
+pushing the updates to the `update_2.test` directory instead of `update_2`.
+
+- Copy the `htdocs/release` directory from the last section to `aus2.torproject.org`
+
+        staticiforme.torproject.org:/srv/aus2-master.torproject.org/htdocs/tormessenger/update_2.test/release
+
+**Make sure the .htaccess file is copied as well.**
+
+- ssh to `staticiforme.torproject.org:/srv/dist-master.torproject.org/htdocs/tormessenger`
+  `mkdir $VERSION` to create the directory for the new version.
+
+- Copy the contents* of the signed/ directory (MAR files) to dist.tormessenger.org/tormessenger/$VERSION
+
+        staticiforme.torproject.org:/srv/dist-master.torproject.org/htdocs/tormessenger/$VERSION
+
+  * - You can skip sha256sums-unsigned-build.txt since we don't use it.
+
+- ssh to `staticiforme.torproject.org:/srv/dist-master.torproject.org/htdocs/tormessenger`
+
+    - Run `ln -sfn $VERSION current`
+        This helps us ensure that the `current` directory always refers to the
+        latest release of Tor Messenger
+
+    - Exit
+
+- We need to finalize the changes. Run:
+
+        ssh staticiforme.torproject.org static-update-component dist.torproject.org && ssh staticiforme.torproject.org static-update-component aus2.torproject.org 
+
+- Now test the updates on ALL platforms as it is possible that updates may
+  work on one but fail on the other.
+
+    - Start Tor Messenger
+
+    - Open the preferences editor and copy the value for preference `app.update.url`
+
+    - Create a new string preference (Right click -> New -> String) and set
+      the name to `app.update.url.override`. Set the value copied from the
+      previous step REPLACING `update_2` with `update_2.test`. Your string
+      should be:
+
+            https://aus2.torproject.org/tormessenger/update_2.test/%CHANNEL%/%BUILD_TARGET%/%VERSION%/%LOCALE% 
+
+    - Create a new boolean preference `app.update.log` and set it to `true`
+
+    - Force an update by going to the about screen
+
+    - Tor Messenger should update (incrementally) and then restart
+
+    - The update should be applied on restart. If not, it should complain and
+      that means something is broken. Since we set `app.update.log` to `true`,
+      it's a good time to look at the error console
+
+If everything went on fine with the testing, move on to the next step.
+
+Finalizing Updates and Releasing
+================================
+
+- Publish the blog post on blog.torproject.org. The URL should follow the same
+  format as described in the `config.yml` file for $VERSION
+
+- ssh to `staticiforme.torproject.org:/srv/aus2-master.torproject.org/htdocs/tormessenger/update_2/release`
+
+- Delete the existing files and then copy the changes from the `test` directory:
+
+        cp -R ../../update_2.test/release/. .
+
+- The update is still not live. To finalize it, exit, and then run:
+
+        ssh staticiforme.torproject.org static-update-component aus2.torproject.org 
+
+- The update is now live. Now is a good time to again test if the updates are
+  being properly pushed to the users! It may be a good idea to repeat the Tor
+  Messenger tests in the previous section. (Install older version, force
+  update, check.)
+
+- Finalize the release process by tagging the version in
+  `tor-messenger-build.git` (run the code below). Make sure that HEAD is the
+  commit which adds the release date to the ChangeLog.
+
+        VERSION=`awk '/tormessenger_version/ {print $2}' rbm.conf | cut -d "'" -f2` 
+        git tag -s v$VERSION -m "version $VERSION"
+        git push --tags
+
+- This completes the release process.
+
+After a Release
+===============
+
+- Bump up the version number in ChangeLog, rbm.conf,
+  tools/update-responses/config.yml for the next release
+
+- Increment the version number and update the links on
+  https://trac.torproject.org/projects/tor/wiki/doc/TorMessenger
+
+- Administer the comments on the blog and reply to them. Open relevant tickets
+  wherever necessary.
+
+Troubleshooting
+===============
+
+- If you want to update add-ons like ctypes-otr or tor-launcher, make sure to
+  bump the version number in their `install.rdf` file. Add-ons are only
+  updated if the version number is incremented.
+
+- Any changes you make on staticiforme.torproject.org have to be finalized
+  with the `static-update-component $DIR` command. So if you have made changes
+  to `dist.torproject.org`, you have to run:
+
+   ssh staticiforme.torproject.org static-update-component dist.torproject.org 
+
+- Make sure `app.update.log` is set to `true` before testing updates since you
+  will get logging information as the update is applied, and if it fails.



More information about the tor-commits mailing list