Files
i2p.i2p/installer/resources/checklist.md
2017-02-05 14:56:51 +00:00

8.1 KiB

Release checklist

One week before

  • Announce string freeze on #i2p-dev

  • Update local English po files: ant poupdate

  • Revert non-English changes if any

  • Push to Transifex: tx push -s

  • Make announcement on Transifex with checkin deadline

  • GeoIP: Maxmind update is usually first week of the month, time accordingly

  • wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip

  • unzip GeoIPCountryCSV.zip

  • cut -d, -f3-5 < GeoIPCountryWhois.csv|sed 's/"//g' > geoip.txt

  • replace header

  • fix date in header (get date from HEAD)

  • ./makegeoipv6.sh

  • mtn ci geoip.txt geoipv5.dat.gz

A day or two before

  1. Write the release announcement and push to Transifex:
  • Checkout i2p.newsxml branch
    • See README for setup
  • ./create_new_entry.sh
    • Entry href should be the in-net link to the release blog post
  • tx push -s
  • mtn ci
  1. Write the draft blog post and push to Transifex:
  • Checkout i2p.www branch
  • Write draft release announcement - see i2p2www/blog/README for instructions
    • Top content should be the same as the news entry
  • tx push -s
  • mtn ci
  1. Make announcement on Transifex asking for news translation

On release day

Preparation

  1. Ensure all translation updates are imported from Transifex
  • Look for newly translated languages and resources on Transifex
  • Add any new ones to .tx/config (use your own judgement on which to include based on minimum translated percentage)
  • tx pull
  • ant testcripts to verify that all updated translations are valid
  • For any invalid that break the test, fix up the po file manually, or fix on tx and pull again, or (if new) comment out in .tx/config (add a comment why) and delete the po file
  • installer/resources/poupdate-man.sh to generate new man page translations
  • mtn add for any new po files
  • mtn ci all changed po files, and .tx/config if changed
  1. Sync with mtn.i2p2.i2p

  2. Start with a clean checkout:

    mtn -d i2p.mtn co --branch=i2p.i2p /path/to/releasedir
    
  • You must build with Java 7 or higher. If you build with Java 8 or higher, you must also have the Java 7 JRE installed for the bootclasspath.
  1. Create override.properties with (adjust as necessary):

    release.privkey.su3=/path/to/su3keystore.ks
    release.gpg.keyid=0xnnnnnnnn
    release.signer.su3=xxx@mail.i2p
    build.built-by=xxx
    javac.compilerargs=-bootclasspath /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/jce.jar
    javac.compilerargs7=-bootclasspath /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/jce.jar
    
  2. Copy latest trust list _MTN/monotonerc from website or some other workspace

  3. Change revision in:

  • history.txt
  • installer/install.xml
  • core/java/src/net/i2p/CoreVersion.java
  • router/java/src/net/i2p/router/RouterVersion.java
    • (change to BUILD = 0 and EXTRA = "")
  1. mtn ci

  2. Review the complete diff from the last release:

    mtn diff -r t:i2p-0.9.(xx-1) > out.diff
    vi out.diff
    
  3. Verify that no untrusted revisions were inadvertently blessed by a trusted party:

    mtn log --brief --no-graph --to t:i2p-0.9.(xx-1) | cut -d ' ' -f 2 | sort | uniq -c
    

Build and test

  1. ant release

    NOTE: These tasks are now automated by ant release

    Build and tag:

    ant pkg
    

    Create signed update files with:

    export I2P=~/i2p
    java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate sign i2pupdate.zip i2pupdate.sud /path/to/private.key 0.x.xx
    java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate sign i2pupdate200.zip i2pupdate.su2 /path/to/private.key 0.x.xx
    

    Verify signed update files with:

    java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate showversion i2pupdate.sud
    java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate verifysig i2pupdate.sud
    

    Make the source tarball:

    Start with a clean checkout mtn -d i2p.mtn co --branch=i2p.i2p i2p-0.x.xx
    Double-check trust list
    tar cjf i2psource-0.x.xx.tar.bz2 --exclude i2p-0.x.xx/_MTN i2p-0.x.xx
    mv i2p-0.x.xx.tar.bz2 i2p.i2p
    

    Rename some files:

    mv i2pinstall.exe i2pinstall-0.x.xx.exe
    mv i2pupdate.zip i2pupdate-0.x.xx.zip
    

    Generate hashes:

    sha256sum i2p*0.x.xx.*
    sha256sum i2pupdate.sud
    sha256sum i2pupdate.su2
    

    Generate PGP signatures:

    gpg -b i2pinstall-0.x xx.exe
    gpg -b i2psource-0.x.xx.tar.bz2
    gpg -b i2pupdate-0.x.xx.zip
    gpg -b i2pupdate.sud
    gpg -b i2pupdate.su2
    

    (end of tasks automated by 'ant release')

  2. Now test:

  • Save the output about checksums, sizes, and torrents to a file (traditionally shasums.txt)
    • (edit timestamps to UTC if you care)
  • Copy all the release files somewhere, make sure you have the same ones as last release
  • Verify sha256sums for release files
  • Check file sizes vs. previous release, shouldn't be smaller
    • If the update includes GeoIP, it will be about 1MB bigger
  • Unzip or list files from i2pupdate.zip, see if it looks right
  • For either windows or linux installer: (probably should do both the first time)
    • Rename any existing config dir (e.g. mv .i2p .i2p-save)
    • Run installer, install to temp dir
    • Look in temp dir, see if all the files are there
    • Unplug ethernet / turn off wifi so RI doesn't leak
    • i2prouter start
    • Verify release number in console
    • Verify welcome news
    • Click through all the app, status, eepsite, and config pages, see if they look right
    • Click through each of the translations, see if /console looks right
    • Look for errors in /log (other than can't reseed errors)
    • Look in config dir, see if all the files are there
    • Shutdown
    • Delete config dir
    • Move saved config dir back
    • Reconnect ethernet / turn wifi back on
  • Load torrents in i2psnark on your production router, verify infohashes
  1. If all goes well, tag and push the release:

    mtn tag h: i2p-0.x.xx
    mtn cert t:i2p-0.x.xx branch i2p.i2p.release
    mtn push
    

Distribute updates

  1. Update news with new version:
  • Add magnet links, change release dates and release number in to old-format news.xml, and distribute to news hosts (no longer necessary)
  • In the i2p.newsxml branch, edit magnet links, release dates and release number in data/releases.json, check in and push
  1. Add i2pupdate-0.9.xx.su3 torrent to tracker2.postman.i2p and start seeding

  2. Notify the following people:

  • All in-network update hosts
  • PPA maintainer
  • news.xml maintainer
  • backup news.xml maintainer
  • website files maintainer
  1. Update Trac:
  • Add milestone and version dates
  • Increment milestone and version defaults
  1. Wait for a few update hosts to be ready

  2. Tell news hosts to flip the switch

  3. Monitor torrent for activity to verify that the new news is now live

Distribute libraries

  1. ant mavenCentral

  2. Upload the bundles to Maven Central via https://oss.sonatype.org

Notify release

  1. Upload files to launchpad release (download mirror) (see debian-alt/doc/launchpad.txt for instructions)

  2. Wait for files to be updated on download server Verify at http://download.i2p2.no/releases/

  3. Website files to change:

  • Sync with mtn.i2p-projekt.i2p
  • i2p2www/static/hosts.txt if it changed (copy from i2p.i2p mtn branch)
  • i2p2www/__init__.py (release number)
  • i2p2www/pages/downloads/list.html (release signer, if changed)
  • i2p2www/pages/downloads/macros (checksums)
  • i2p2www/static/news/news.xml (no longer necessary)
  • Sync with mtn.i2p-projekt.i2p
  1. Announce on:
  • #i2p, #i2p-dev (also on Freenode side)
  • forum.i2p
  • Twitter
  1. Launchpad builds (see debian-alt/doc/launchpad.txt for instructions)

  2. Debian builds (see debian-alt/doc/debian-build.txt for instructions)

  3. Announce Launchpad and Debian builds on Twitter

  4. Notify Tails that new Debian builds are available