Merge remote-tracking branch 'flapflap/de-network_configuration'
[tails-test.git] / wiki / src / contribute / release_process.mdwn
blob91979b5cd636b704aa0d84bf94937e6873b5e6db
1 [[!meta title="Release process"]]
3 [[!toc levels=2]]
5 See the [[release_schedule]].
7 Environment
8 ===========
10 Export the following environment variables to be able to copy'n'paste
11 the scripts snippets found on this page:
13 * version numbers:
15       export VERSION=$(dpkg-parsechangelog -SVersion)
16       export TAG=$(echo "$VERSION" | sed -e 's,~,-,')
17       export PREVIOUS_VERSION=$(dpkg-parsechangelog --offset 1 --count 1 -SVersion)
19 * `NEXT_MAJOR_VERSION`: set to the version number of the next Tails release
20   (e.g. 0.23 when releasing 0.22.1, and 1.3 when releasing 1.2)
21 * `MAJOR_RELEASE`: set to 1 if preparing a major release, to 0 else
22 * `ISOS`: the directory where one stores `tails-i386-*`
23   sub-directories like the ones downloaded with BitTorrent.
24 * `ARTIFACTS`: the directory where build artifacts (e.g.
25   the `.packages` file) land.
26 * `MASTER_CHECKOUT`: a checkout of the `master` branch of the main
27   Tails Git repository.
28 * `RELEASE_BRANCH`: the name of the branch of the main Tails Git
29   repository used to prepare the release (`stable` or `testing`).
30 * `RELEASE_CHECKOUT`: a checkout of the branch of the main Tails Git
31   repository used to prepare the release (`stable` or `testing`).
32 * `TAILS_SIGNATURE_KEY=0D24B36AA9A2A651787876451202821CBE2CD9C1`
33 * `IUK_CHECKOUT`: a checkout of the relevant tag of the `iuk`
34   Git repository.
35 * `PERL5LIB_CHECKOUT`: a checkout of the relevant tag of the
36   `perl5lib` Git repository.
38 Pre-freeze
39 ==========
41 The [[contribute/working_together/roles/release_manager]] role
42 documentation has more tasks that should be done early enough.
44 Update Tor Browser preferences
45 ------------------------------
47 * update `extensions.adblockplus.currentVersion` in
48   `config/chroot_local-includes/etc/tor-browser/profile/preferences/0000tails.js`
50 Coordinate with Debian security updates
51 ---------------------------------------
53 See [[release_process/Debian_security_updates]].
55 Select the right branch
56 =======================
58 For a major release, the `devel` branch should be merged into the `testing`
59 branch and changes should be made from there.
61 From minor releases, work should happen in `stable`.
63 <div class="caution">
64 Then, read this document from the branch used to prepare the release.
65 </div>
67 Update included files
68 =====================
70 AdBlock patterns
71 ----------------
73 Patterns are stored in
74 `config/chroot_local-includes/etc/tor-browser/profile.default/adblockplus/`.
76 1. Boot Tails
77 2. Start the tor Browser and open *Tools* → *Addons*
78 3. Select *Adblock Plus* in extensions
79 4. Open *Preferences* → *Filter preferences…*
80 5. For each filters, click *Actions* → *Update filters*
81 6. Close the Tor Browser
82 7. Copy the `.tor-browser/profile.default/adblockplus/patterns.ini` from
83    this Tor Browser instance to the
84    `config/chroot_local-includes/etc/tor-browser/profile/adblockplus`
85    directory in the Tails Git checkout.
86 8. Commit:
88        git commit -m 'Update AdBlock Plus patterns.' \
89           config/chroot_local-includes/etc/tor-browser/profile/adblockplus/patterns.ini
91 Upgrade bundled binary Debian packages
92 --------------------------------------
94 That is: make sure the bundled binary Debian packages contain
95 up-to-date localization files.
97 For each bundled Debian package, `cd` into the package's root
98 directory (e.g. a checkout of the `whisperback` repository),
99 and then run the `import-translations` script that is in the
100 main Tails repository. For example:
102         cd whisperback
103         ../tails/import-translations
105 If the `import-translations` script fails to import translations for
106 the current package, manually copy updated PO files from the
107 Transifex branches of `git://git.torproject.org/translation.git` (e.g.
108 `whisperback_completed`) instead. In this case, skip PO files for
109 [[translation teams that use Git|contribute/how/translate#translate]].
111 Add and commit.
113 Then check the PO files:
115         ./wiki/src/contribute/l10n_tricks/check_po.sh
117 Correct any displayed error, then commit the changes if any.
119 Then see the relevant release processes:
121 * [[liveusb-creator]]
122 * [[tails-greeter]]
123 * [[perl5lib]]
124 * [[persistence-setup]]
125 * [[tails-iuk]]
126 * whisperback:
127   * follow [upstream release process](https://git-tails.immerda.ch/whisperback/plain/HACKING)
128   * build a Debian package
129   * upload it to our [[APT repository]]
131 Upgrade the Tor Browser
132 -----------------------
134 See the dedicated page: [[tor-browser]]
136 Update PO files
137 ---------------
139 Pull updated translations for languages translated in Transifex:
141         ./import-translations
143 Refresh the code PO files:
145         ./refresh-translations
147 Commit the result, including new PO files:
149         git add po && git commit -m 'Update PO files.'
151 Freeze
152 ------
154 If we are at freeze time for a major release:
156 * Merge the `master` Git branch into `devel`.
157 * Merge the `devel` Git branch into `testing`.
158 * Reset the `testing` APT suite to the state of the `devel` one, as
159   documented on [[contribute/APT_repository#workflow-freeze]].
160 * If there is no Jenkins job building ISO images from the `testing`
161   branch, ask <tails-sysadmins@boum.org> to re-activate it.
163 Else, if we are at freeze time for a point-release:
165 * Merge the `master` Git branch into `stable`.
167 Changelog
168 ---------
170 Remove the placeholder entry for next release in `debian/changelog`,
171 and then:
173         ./release $VERSION $PREVIOUS_VERSION
175 This populates the Changelog with the Git log entries.
177 Then, launch an editor for the needed cleanup of the result:
179         dch -e
181 Then, gather other useful information from:
183 * every custom bundled package's own Changelog (Greeter, Persistent
184   Volume Assistant, etc.);
185 * the "Fix committed" section on the *Release Manager View*
186   in Redmine.
188 Finally, commit:
190         git commit debian/changelog -m "Update changelog for $VERSION."
192 Included website
193 ----------------
195 ### Merge master
197 Merge `master` into the branch used for the release:
199         git fetch origin && git merge origin/master
201 ### version number
203 If preparing a RC, skip this part.
205 In the branch used to build the release, update the `wiki/src/inc/*` files to
206 match the *version number* and *date* of the new release. Set the date
207 at least 24 hours in the future! Between tests and mirror synchronization,
208 the build will not be released on the same day. Try to make sure it
209 matches the date of the future signature.
211         RELEASE_DATE='June 26, 2013'
213         echo "$VERSION"      > wiki/src/inc/stable_i386_version.html
214         echo "$RELEASE_DATE" > wiki/src/inc/stable_i386_date.html
215         sed -ri "s%news/version_.*]]%news/version_$VERSION]]%" wiki/src/inc/stable_i386_release_notes.*
216         $EDITOR wiki/src/inc/*.html
217         ./build-wiki
218         git commit wiki/src/inc/ -m "Update version and date for $VERSION."
220 ### features and design documentation
222 Read the Changelog carefully, and update [[doc/about/features]]
223 pages accordingly.
225 Also:
227         git grep PENDING wiki/src/contribute/design*
229 ... and remove the `PENDING-FOR-N.M` warnings.
231 Website translations
232 --------------------
234 Refresh the website PO files and commit the ones corresponding to
235 pages that were added or changed accordingly to changes coming with
236 the new release. This e.g. ensures that the RC call for translation
237 points translators to up-to-date PO files:
239         ./build-wiki && git add wiki/src && git commit -m 'Update website PO files.'
241 Call for translation
242 ====================
244 If at freeze time, send a call for translations to tails-l10n, making it clear what
245 Git branch the translations must be based on, and what are the
246 priorities. Also, add a few words to remember the translation teams
247 using Git that they should regularly contact Transifex translators,
248 as detailed on the [[documentation for
249 translators|contribute/how/translate]].
251 To get a list of changes on the website:
253     git diff --stat 1.1.. -- *.{mdwn,html}
255 Import the signing key
256 ======================
258 You should never import the Tails signing key into your own keyring,
259 and a good practice is to import it to a tmpfs to limit the risks that
260 the private key material is written to disk:
262     export GNUPGHOME=$(mktemp -d)
263     sudo mount -t tmpfs tmpfs "$GNUPGHOME"
264     gpg --homedir $HOME/.gnupg --export $TAILS_SIGNATURE_KEY | gpg --import
265     gpg --import path/to/private-key
267 Let's also ensure that strong digest algorithms are used for our
268 signatures, like the defaults we set in Tails:
270     cp config/chroot_local-includes/etc/skel/.gnupg/gpg.conf "$GNUPGHOME"
272 Tag the release in Git
273 ======================
275         git tag -u "$TAILS_SIGNATURE_KEY" -m "tagging version ${VERSION}" "${TAG}"
276         git push --tags
278 (Pushing the tag is needed so that the APT repository is updated, and
279 the Tails APT configuration works at build and boot time. It might be
280 premature, as testing might reveal critical issues, but this is
281 a signed tag, so it can be overridden later. Yes, there is room for
282 improvement here.)
284 Prepare the versioned APT suite
285 ===============================
287 Follow the [[post-tag|contribute/APT_repository#workflow-post-tag]] APT
288 repository documentation.
290 Build images
291 ============
293 Build the almost-final image
294 ----------------------------
296 [[Build images|contribute/build]] and carefully read the build logs to
297 make sure nothing bad happened.
299 SquashFS file order
300 -------------------
302 1. Build an ISO image.
303 1. Burn a DVD.
304 1. Boot this DVD **on bare metal**.
305 1. Add `profile` to the kernel command-line.
306 1. Login.
307 1. Wait for the "Tor is ready" notification.
308 1. Start the web browser.
309 1. A few minutes later, once the `boot-profile` process has been
310    killed, retrieve the new sort file from `/var/log/boot-profile`.
311 1. Copy the new sort file to `config/binary_rootfs/squashfs.sort`.
312 1. Cleanup a bit:
313    - remove `var/log/live/config.pipe`: otherwise the boot is broken
314      or super-slow
315    - remove the bits about `kill-boot-profile` at the end: they're
316      only useful when profiling the boot
317 1. Inspect the Git diff (including diff stat), apply common sense.
318    The following command is also helpful but requires that you save a
319    copy of the old sort file into `/tmp/squashfs.sort.old`:
321        diff -NaurB \
322            <( cut -d' ' -f1 /tmp/squashfs.sort.old | sort ) \
323            <( cut -d' ' -f1 config/binary_rootfs/squashfs.sort | sort ) \
324            | less
326 1. `git commit -m 'Updating SquashFS sort file' config/binary_rootfs/squashfs.sort`
328 Build the final image
329 ---------------------
331 Then all included files should be up-to-date and the versioned APT
332 suite should be ready, so it is time to:
334 * tag the release *again*, with all included files in
335 * `git push --tags`
336 *  build the final image!
338 <a id="prepare-iuk"></a>
340 Generate the OpenPGP signatures and Torrents
341 ============================================
343 First, create a directory with a suitable name and go there:
345         mkdir "$ISOS/tails-i386-$VERSION" && cd "$ISOS/tails-i386-$VERSION"
347 Second, copy the built image to this brand new directory.
348 Then, rename it:
350         mv "$ARTIFACTS/tails-i386-*-$VERSION-*.iso" "tails-i386-$VERSION.iso"
352 Third, generate detached OpenPGP signatures for the image to be
353 published, in the same directory as the image and with a `.sig`
354 extension; e.g.
356         gpg --armor --default-key "$TAILS_SIGNATURE_KEY" --detach-sign *.iso
357         rename 's,\.asc$,.sig,' *.asc
359 Fourth, go up to the parent directory, create a `.torrent` file and
360 check the generated `.torrent` files metainfo:
362         cd .. && \
363         mktorrent -a 'http://torrent.gresille.org/announce' "tails-i386-${VERSION}" && \
364         btshowmetainfo tails-i386-$VERSION.torrent
366 Fifth, generate detached OpenPGP signatures for every published
367 `.torrent` file:
369         gpg --armor --default-key "$TAILS_SIGNATURE_KEY" --detach-sign \
370           tails-i386-$VERSION.torrent && \
371         mv tails-i386-$VERSION.torrent.{asc,sig}
373 Prepare incremental upgrades
374 ============================
376 Build the Incremental Upgrade Kits
377 ----------------------------------
379 Use `tails-create-iuk` to build the following IUKs:
381 * From the previous stable release, e.g. 1.0 to 1.0.1 or 1.0 to
382   1.0.1~rc1. This may be skipped if the delta is too big (like when
383   migrating to a new Debian release) or if there are changes outside
384   of the scope for IUKs (like partition table changes).
386 * From the last RC for the version being released, e.g. 1.0~rc1 to
387   1.0. This should be done even if there was no IUK generated from the
388   previous stable release since it is a good way to test the iuk code
389   that'll be used for the incremental upgrade paths to the
390   next version.
392 Example (for RC, replace `$PREVIOUS_VERSION` with e.g. `$VERSION~rc1`
393 below):
395     sudo su -c "cd $IUK_CHECKOUT && \
396       PERL5LIB=\"$PERL5LIB_CHECKOUT/lib\" \
397         ./bin/tails-create-iuk \
398            --squashfs-diff-name \"$VERSION.squashfs\"           \
399            --old-iso \"$ISOS/tails-i386-$PREVIOUS_VERSION/tails-i386-$PREVIOUS_VERSION.iso\" \
400            --new-iso \"$ISOS/tails-i386-$VERSION/tails-i386-$VERSION.iso\"          \
401            --outfile \"$ISOS/Tails_i386_${PREVIOUS_VERSION}_to_${VERSION}.iuk\""
403 Note that developer tools for creating IUK and upgrade-description
404 files were only tested on Debian sid. It should hopefully work well on
405 Wheezy too.
407 <a id="prepare-upgrade-description-files"></a>
409 Prepare upgrade-description files
410 ---------------------------------
412 1. Prepare upgrade-description files (see the [[upgrade-description
413    files
414    specification|contribute/design/incremental_upgrades#upgrade-description-files]]
415    for details). The idea is to:
417    * update (create if needed) an upgrade-description file for every
418      *previous* supported release (e.g. N~rc1, N-1, N-1~rc2) that replaces
419      all existing upgrade paths with the path to the version being
420      released;
421    * create a new upgrade-description for the version being released,
422      that expresses that *no* upgrade is available for that one yet.
424    This is what `tails-iuk-generate-ugrade-description-files` tool
425    does:
427        ( cd $IUK_CHECKOUT && \
428        ./bin/tails-iuk-generate-upgrade-description-files \
429            --version "$VERSION" \
430            --next-version "$NEXT_MAJOR_VERSION" \
431            --next-version "${NEXT_MAJOR_VERSION}~rc1" \
432            --next-version "${VERSION}.1" \
433            --next-version "${VERSION}.1~rc1" \
434            --iso "$ISOS/tails-i386-$VERSION/tails-i386-$VERSION.iso" \
435            --previous-version "$PREVIOUS_VERSION" \
436            --previous-version "${VERSION}~rc1" \
437            --iuks "$ISOS" \
438            --release-checkout "$RELEASE_CHECKOUT" \
439            --major-release "$MAJOR_RELEASE" \
440        )
442    Note:
443    * The `--iuks` argument must point to the directory where the IUKs
444      generated at the previous step are stored.
445    * At least the last stable release and the previous release
446      candidates for the version being released must be passed to
447      `--previous-version`.
448    * Older versions for which there is no incremental upgrade path to
449      the new release must be passed with `--previous-version`, so that
450      users who skipped a release or two are informed of the new one.
451      Note that multi-steps incremental upgrade paths are valid and
452      supported: e.g. when releasing 1.1.2, 1.1 users should still be
453      able to incrementally upgrade to 1.1.1, and in turn to 1.1.2; to
454      make this work, one must _not_ pass `--previous-version 1.1`,
455      that would remove the existing incremental upgrade path from 1.1
456      to 1.1.1.
457    * If preparing a release candidate, add `--channel alpha`
458    * If preparing a release candidate, drop all `--next-version`
459      arguments, and instead pass (**untested!**)
460      `--next-version $(echo $VERSION | sed -e 's,~rc*$,,')`
461    * If preparing a point-release, pass neither
462      `--next-version "${VERSION}.1"`,
463      nor `--next-version "${VERSION}.1~rc1"`
465 1. Create an armoured detached signature for each created or modified
466    upgrade-description file.
468        find "$RELEASE_CHECKOUT/wiki/src/upgrade/" \
469           -type f -name upgrades.yml -exec \
470              gpg -u "$TAILS_SIGNATURE_KEY" --armor --detach-sign {} \;
472 1. Rename each detached signature to `.pgp`:
474        find "$RELEASE_CHECKOUT/wiki/src/upgrade/" -type f \
475           -name upgrades.yml.asc -exec rename -f 's,\.asc$,.pgp,' {} \;
477 1. Add and commit the upgrade-description files and their detached
478    signatures to the Git branch used to prepare the release (`stable`
479    or `testing`):
481        ( cd "$RELEASE_CHECKOUT" && git add wiki/src/upgrade && \
482           git commit -m "Update upgrade-description files." )
484 1. Check the syntactic correctness of all upgrade-description files:
486        ( cd $IUK_CHECKOUT && \
487           ./bin/tails-iuk-check-upgrade-description-file \
488              ${RELEASE_CHECKOUT}/wiki/src/upgrade/v1/*/*/*/*/upgrades.yml )
490 1. If preparing a release candidate, move the generated or updated
491    files to `$MASTER_CHECKOUT`, commit and push: given the updates are
492    advertised on the *alpha* channel, while all users use the *stable*
493    one by default, this will allow you to more easily test the IUK
494    without impacting anyone.
496 Upload images
497 =============
499 Sanity check
500 ------------
502 Verify that the TBB release used in Tails still is the most
503 recent. Also look if there's a new `-buildX` tag for the targetted TBB
504 and Tor Browser versions in their respective Git repos:
506 * <https://gitweb.torproject.org/builders/tor-browser-bundle.git>
507 * <https://gitweb.torproject.org/tor-browser.git>
509 A new tag may indicate that a new TBB release is imminent.
511 Better catch this before people spend time doing manual tests.
513 ## Announce, seed and test the Torrents
515 Announce and seed the Torrents.
517 Test them with a BitTorrent client running in a different place.
519 ## Download and seed image from lizard
521     scp "$ISOS/tails-i386-$VERSION.torrent" \
522        bittorrent.lizard: && \
523        ssh bittorrent.lizard transmission-remote --add tails-i386-$VERSION.torrent
525 Publish the ISO over HTTP
526 -------------------------
528 Upload the images to the primary rsync mirror. Best practice is to first
529 let bittorrent.lizard download the image, and then copy it from there to
530 rsync.lizard:
532     ssh lizard.tails.boum.org \
533         scp -3 -r \
534             bittorrent.lizard:/var/lib/transmission-daemon/downloads/tails-i386-$VERSION \
535             rsync.lizard:
536     # set DIST to either 'alpha' (for RC:s) or 'stable' (for actual releases)
537     ssh rsync.lizard << EOF
538       chown -R root:rsync_tails tails-i386-$VERSION
539       chmod -R u=rwX,go=rX tails-i386-$VERSION
540       sudo mv tails-i386-$VERSION /srv/rsync/tails/tails/$DIST/
541     EOF
543 Update the time in `project/trace` file on the primary rsync mirror
544 and on the live wiki (even for a release candidate):
546         TRACE_TIME=$(date +%s) &&
547         echo $TRACE_TIME | ssh rsync.lizard "cat > /srv/rsync/tails/tails/project/trace" && \
548         [ -n "$MASTER_CHECKOUT" ] && \
549         echo $TRACE_TIME > "$MASTER_CHECKOUT/wiki/src/inc/trace" &&
550         (
551            cd "$MASTER_CHECKOUT" && \
552            git commit wiki/src/inc/trace -m "Updating trace file after uploading $VERSION."
553         )
555 <a id="publish-iuk"></a>
557 Publish the IUKs
558 ----------------
560 Same as for the ISO, but the IUKs should land into
561 `/srv/rsync/tails/tails/$DIST/iuk/`.
563 Wait for the HTTP mirrors to catch up
564 -------------------------------------
566 Wait for the next rsync pull.
568 Make sure every webserver listed in the `dl.amnesia.boum.org` round
569 robin pool has the new version. Drop those that are lagging behind and
570 notify their administrators.
572 Test downloading the ISO and IUK over HTTP.
574 Update the website and Git repository
575 =====================================
577 What follows in this section happens on the release branch in
578 `$RELEASE_CHECKOUT`.
580 If preparing a final release
581 ----------------------------
583 Skip this part if preparing a RC.
585 In order to get any new documentation into the website, merge either
586 `stable` or `testing` (depending on which release you just did) into
587 `master`.
589 Rename the `.packages` file to remove the `.iso` and build date parts
590 of its name:
592         mv "$ARTIFACTS"/tails-i386-*-"$VERSION"-*.iso.packages \
593            "$ARTIFACTS/tails-i386-$VERSION.packages"
595 Copy the `.iso.sig`, `.packages`, `.torrent` and `.torrent.sig` files
596 into the website repository:
598         cp "$ISOS/tails-i386-$VERSION/tails-i386-$VERSION.iso.sig" \
599            "$ARTIFACTS/tails-i386-$VERSION.packages" \
600            "$ISOS/tails-i386-$VERSION.torrent" \
601            "$ISOS/tails-i386-$VERSION.torrent.sig" \
602            "$RELEASE_CHECKOUT/wiki/src/torrents/files/"
604 Remove from `wiki/src/torrents/files/` any remaining file from the
605 previous release (including any RC).
607 Generate the SHA-256 hash of every image
608 to be released in `inc/*`:
610         sha256sum $ISOS/tails-i386-$VERSION/tails-i386-$VERSION.iso | \
611           cut -f 1 -d ' ' | tr -d '\n' \
612           > "$RELEASE_CHECKOUT/wiki/src/inc/stable_i386_hash.html"
614 Update the [[support/known_issues]] page:
616 - Add regressions brought by the new release.
617 - Remove older known issues that are fixed by the new release.
619 Write the announcement for the release in
620 `news/version_$TAG.mdwn`, including:
622 - Update the `meta title` directive.
623 - Update the `meta date` directive.
624 - Make sure there's an `announce` tag to have an email sent to the
625   news mailing-list.
626 - Document important config changes that persistence users have to do
627   themselves (e.g. the Pidgin proxy settings change in
628   [[!tails_gitweb_commit 9925321]] breaks all existing persistent
629   profiles).
630 - Document known issues.
631 - Update the link(s) to these release notes in
632   `wiki/src/doc/first_steps/upgrade.mdwn`.
634 Write an announcement listing the security bugs affecting the previous
635 version in `security/` in order to let the users of the old versions
636 know that they have to upgrade. Date it a few days before the ISO
637 image to be released was *built*. Including:
639 - the list of CVE fixed in Linux since the one shipped in the previous
640   release of Tails:
641   <http://ftp-master.metadata.debian.org/changelogs/main/l/linux/unstable_changelog>
642 - the list of DSA fixed in packages we ship since those that were in
643   the previous release of Tails: <http://security.debian.org/>
644 - the list of BSA fixed in packages we ship since those that were in
645   the previous release of Tails:
646   <https://lists.debian.org/debian-backports-announce/>
647 - the list of MFSA fixed by the Tor Browser update:
648   <https://www.mozilla.org/security/announce/>
650 If preparing a release candidate
651 --------------------------------
653 Skip this part if preparing a final release.
655 Copy the `.iso.sig` file into the website repository:
657         cp "$ISOS/tails-i386-$VERSION/tails-i386-$VERSION.iso.sig" \
658            "$MASTER_CHECKOUT/wiki/src/torrents/files/"
660 Write the announcement for the release in
661 `$MASTER_CHECKOUT/wiki/src/news/test_$TAG.mdwn`, including:
663 - Update the `meta title` directive.
664 - Update the `meta date` directive.
665 - Document important config changes that persistence users have to do
666   themselves (e.g. the Pidgin proxy settings change in
667   [[!tails_gitweb_commit 9925321]] breaks all existing persistent
668   profiles).
669 - Document known issues.
671 In any case
672 -----------
674 Generate PO files for the announcements with `./build-wiki`.
676 Then, send them to <tails-l10n@boum.org> so that they get translated
677 shortly, perhaps even soon enough to integrate them before pushing the
678 release out officially.
680 Then, record the last commit before putting the release out for real:
682         git add wiki/src && \
683         git commit -m "releasing version ${VERSION}"
685 Testing
686 =======
688 1. Set up a Gobby document and copy the [[manual test
689    suite|contribute/release_process/test]] in it.
690 1. Email to <tails@boum.org> and potential contributors that tests may start:
691    - make it clear what's the deadline
692    - make it clear where and how you expect to get feedback
693    - attach the Torrent
694    - attach the `.packages` file
695 1. Email <tails-testers@boum.org> to ask them to test the tentative ISO.
696 1. Make sure someone is committed to run the automated test suite.
697 1. Make sure that enough people are here to run the tests, that they
698    report their results in due time, and that they make it clear when
699    they're leaving for good.
701 Go wild!
702 ========
704 Sanity check
705 ------------
707 Verify once more that the TBB we ship is still the most recent (see
708 above).
710 Push
711 ----
713 ### Git
715 Push the last commits to our Git repository:
717         ( cd "$RELEASE_CHECKOUT" && git push ) && \
718         ( cd "$MASTER_CHECKOUT" && git fetch && git merge "$RELEASE_BRANCH" && git push )
720 ... and ask <root@boum.org> to refresh the ikiwiki wrappers for
721 our website.
723 Bug tracker
724 -----------
726 Skip this part if preparing a release candidate.
728 Mark all issues fixed in this release as `Status: Resolved` in our bug
729 tracker. For a list of candidates, see:
731 * the [issues in *Fix committed*
732   status](https://labs.riseup.net/code/projects/tails/issues?query_id=111);
733 * the "Fix committed" section on the [Release Manager
734   View](https://labs.riseup.net/code/projects/tails/issues?query_id=130).
736 Then, mark the just-released Redmine milestone as done: go to the
737 target version page, click *Edit*, and set *Status* to *Closed*.
739 ### Tickets linked from the website
741 Go through the tickets linked from the documentation and support sections of the
742 website and point documentation writers to the ticket that might be resolved in
743 this release.
745     git grep tails_ticket -- "wiki/src/[ds]*/*.mdwn"
747 Test suite
748 ----------
750 Remove indications of known broken tests that were fixed by this
751 release:
753         git grep XXX -- features
758 Update the topic in our [[chatroom|chat]].
760 Twitter
761 -------
763 Announce the release by tweeting a link to the "news" page.
765 Tor blog
766 --------
768 We announce *major* releases on the Tor blog:
770 - [login to their Drupal](https://blog.torproject.org/user)
771 - *Add a New Blog Post*
772 - add the same tags as the previous release announce had
773 - choose *Filtered HTML* as the *Input format*
774 - paste the HTML generated by ikiwiki from the announce in `news/`
775   into the textarea in the blog post editor
776 - cleanup a bit to make it shorter
777 - add a link to our [[download page|download]]
778 - change the internal links into external links
779 - turn `<h1>` into `<strong>`
780 - direct users to [[our communication channels|support/talk]] for
781   comments and feedback
782 - disable comments
784 Tor weekly news
785 ---------------
787 Write a short announcement for the Tor weekly news, or find someone
788 who's happy to do it.
790 Amnesia news
791 ------------
793 The release notes should have been automatically sent to
794 `amensia-news@` (thanks to the `announce` flag) but it will be stuck
795 in the moderation
796 queue. [Log in](https://mailman.boum.org/admindb/amnesia-news) and
797 accept it.
799 Prepare for the next release
800 ============================
802 XXX: adapt / fork for release candidates. In the meantime, read all
803 this, and skip what does not make sense for a RC.
805 1. Move the previous stable release to `obsolete` on the mirrors.
806 1. Remove any remaining RC for the just-published release from
807    the mirrors.
808 1. Remove IUKs that are more than 6 months old from
809    `/{stable,alpha}/iuk` on the rsync server:
810    - first check that it's not going to remove anything we want to keep:
811      
812          ssh rsync.lizard /bin/sh -c \
813              \"find /srv/rsync/tails/tails/alpha  \
814                     /srv/rsync/tails/tails/stable \
815                     -type f -name '*.iuk' -mtime '+183' \
816                     -ls \
817              \"
818    
819    - then actually delete the files:
820      
821          ssh rsync.lizard /bin/sh -c \
822              \"find /srv/rsync/tails/tails/alpha  \
823                     /srv/rsync/tails/tails/stable \
824                     -type f -name '*.iuk' -mtime '+183' \
825                     -delete \
826              \"
828 1. Pull `master` back and merge it into `devel`.
829 1. Follow the
830    [[post-release|contribute/APT_repository#workflow-post-release]] APT
831    repository documentation.
832 1. Push the resulting `devel` branch.
833 1. If this was a major release, then reset experimental:
834    - take note of branches merged into `experimental`, but not into
835      `devel`:
837          git log --pretty=oneline --color=never --merges devel..experimental \
838            | /bin/grep 'into experimental$' \
839            | sed -e 's,^[a-f0-9]\+\s\+,,' | sort -u
841    - `git checkout experimental && git reset --hard devel`
842    - [[hard reset|contribute/APT_repository#workflow-reset]] the `experimental`
843      APT suite to the state of the `devel` one.
844    - merge additional branches into experimental (both at the Git and
845      APT levels)
847          for branch in $UNMERGED_BRANCHES ; do
848             git merge $branch
849             suite=$(echo $branch | sed -e 's,[/_],-,g')
850             if [ $(ssh reprepro@incoming.deb.tails.boum.org reprepro list $suite | wc -l) -gt 0 ] ; then
851                ssh reprepro@incoming.deb.tails.boum.org tails-merge-suite $suite experimental
852             fi
853          done
855    - `git push --force origin experimental`
856 1. Make sure Jenkins manages to build all updated major branches fine:
857    <https://jenkins.tails.boum.org/>.
858 1. Delete the _Release Manager View for $VERSION_ Redmine custom query.
859 1. Ensure the next few releases have their own _Release Manager View_.
860 1. On the [[!tails_roadmap]], update the *Due date* for the *Broken
861    windows* so that this section appears after the next release.
862 * If the next release is a point-release, ask
863   <tails-sysadmins@boum.org> to disable the Jenkins job that's
864   building ISO images from the `testing` branch (since it basically
865   won't be used/maintained in the next 2.5 months).
867 Related pages
868 =============
870 [[!map pages="contribute/release_process/*"]]