forked from I2P_Developers/i2p.i2p
Rewrite release checklist in Markdown
This commit is contained in:
201
installer/resources/checklist.md
Normal file
201
installer/resources/checklist.md
Normal file
@@ -0,0 +1,201 @@
|
||||
# Release checklist
|
||||
|
||||
## One week before
|
||||
|
||||
- Make announcement on Transifex with checkin deadline
|
||||
|
||||
|
||||
## 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`
|
||||
|
||||
2. 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`
|
||||
|
||||
3. Make announcement on Transifex asking for news translation
|
||||
|
||||
|
||||
## On release day
|
||||
|
||||
### Preparation
|
||||
|
||||
1. Ensure all translation updates are imported from Transifex
|
||||
|
||||
2. Sync with mtn.i2p2.i2p
|
||||
|
||||
3. Start with a clean checkout:
|
||||
|
||||
```
|
||||
mtn -d i2p.mtn co --branch=i2p.i2p /path/to/releasedir
|
||||
```
|
||||
|
||||
- You may build with Java 7 or higher, but ensure you have the Java 6 JRE installed for the bootclasspath
|
||||
|
||||
4. 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-6-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jce.jar
|
||||
```
|
||||
|
||||
5. Copy latest trust list _MTN/monotonerc from website or some other workspace
|
||||
|
||||
6. 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 = "")
|
||||
|
||||
7. `mtn ci`
|
||||
|
||||
8. Review the complete diff from the last release:
|
||||
|
||||
```
|
||||
mtn diff -r t:i2p-0.9.(xx-1) > out.diff
|
||||
vi out.diff
|
||||
```
|
||||
|
||||
9. 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
|
||||
|
||||
3. If all goes well, tag and sync the release:
|
||||
|
||||
```
|
||||
mtn tag h: i2p-0.x.xx
|
||||
mtn cert t:i2p-0.x.xx branch i2p.i2p.release
|
||||
mtn sync (with e.g. mtn.killyourtv.i2p)
|
||||
```
|
||||
|
||||
### 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
|
||||
- In the i2p.newsxml branch, edit magnet links, release dates and release
|
||||
number in data/releases.json, and check in
|
||||
|
||||
2. Add update torrents to tracker2.postman.i2p and start seeding (su2 and su3)
|
||||
|
||||
3. Notify the following people:
|
||||
- All in-network update hosts
|
||||
- PPA maintainer
|
||||
- news.xml maintainer
|
||||
- backup news.xml maintainer
|
||||
- website files maintainer
|
||||
|
||||
4. Update Trac:
|
||||
- Add milestone and version dates
|
||||
- Increment milestone and version defaults
|
||||
|
||||
5. Wait for a few update hosts to be ready
|
||||
|
||||
6. Tell news hosts to flip the switch
|
||||
|
||||
### Notify release
|
||||
|
||||
1. Wait for files to be updated on download server
|
||||
|
||||
2. 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/macros` (checksums)
|
||||
- `i2p2www/static/news/news.xml`
|
||||
- Sync with mtn.i2p-projekt.i2p
|
||||
|
||||
3. Wait for debian packages to be ready
|
||||
|
||||
4. Announce on:
|
||||
- #i2p, #i2p-dev (also on Freenode side)
|
||||
- forum.i2p
|
||||
- Twitter
|
||||
@@ -1,163 +0,0 @@
|
||||
Release checklist
|
||||
-----------------
|
||||
|
||||
One week before:
|
||||
Make announcement on Transifex with checkin deadline
|
||||
|
||||
|
||||
A day or two before:
|
||||
Write the release announcement and push to Transifex:
|
||||
Checkout i2p.newsxml branch
|
||||
See README for setup
|
||||
./create_new_entry.sh
|
||||
tx push -s
|
||||
mtn ci
|
||||
|
||||
Checkout i2p.www branch
|
||||
Write draft release announcement - see i2p2www/blog/README for instructions
|
||||
Top content should be the same as the news entry
|
||||
Push blog strings (including draft announcement) to Transifex
|
||||
|
||||
Make announcement on Transifex asking for news translation
|
||||
|
||||
|
||||
Ensure all translation updates are imported from Transifex
|
||||
Sync with mtn.i2p2.i2p
|
||||
Start with a clean checkout mtn -d i2p.mtn co --branch=i2p.i2p /path/to/releasedir
|
||||
You may build with Java 7 or higher, but ensure you have the Java 6 JRE installed for the bootclasspath
|
||||
|
||||
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-6-openjdk-amd64/jre/lib/rt.jar:/usr/lib/jvm/java-6-openjdk-amd64/jre/lib/jce.jar
|
||||
-----------
|
||||
|
||||
Copy latest trust list _MTN/monotonerc from website or some other workspace
|
||||
|
||||
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 = "")
|
||||
|
||||
mtn ci
|
||||
|
||||
Review the complete diff from the last release:
|
||||
mtn diff -r t:i2p-0.9.(xx-1) > out.diff
|
||||
vi out.diff
|
||||
|
||||
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
|
||||
|
||||
=========================================
|
||||
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')
|
||||
=========================================
|
||||
|
||||
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
|
||||
(this one will be about 1MB bigger for the updaters due to geoip inclusion)
|
||||
- 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
|
||||
|
||||
If all goes well:
|
||||
mtn tag h: i2p-0.x.xx
|
||||
mtn cert t:i2p-0.x.xx branch i2p.i2p.release
|
||||
mtn sync (with e.g. mtn.killyourtv.i2p)
|
||||
|
||||
Add magnet links, change release dates and release number in to old-format news.xml,
|
||||
and distribute to news hosts
|
||||
In the i2p.newsxml branch, edit magnet links, release dates and release number in data/releases.json, and check in
|
||||
|
||||
Add update torrents to tracker2.postman.i2p and start seeding (su2 and su3)
|
||||
|
||||
Notify the following people:
|
||||
All in-network update hosts
|
||||
PPA maintainer
|
||||
news.xml maintainer
|
||||
backup news.xml maintainer
|
||||
website files maintainer
|
||||
|
||||
Update Trac:
|
||||
Add milestone and version dates
|
||||
Increment milestone and version defaults
|
||||
|
||||
Wait for website files to be updated
|
||||
|
||||
Website files to change:
|
||||
Sync with mtn.i2p-projekt.i2p
|
||||
hosts.txt if it changed (copy from i2p.i2p mtn branch)
|
||||
i2p2www/__init__.py (release number)
|
||||
i2p2www/pages/downloads/macros (checksums)
|
||||
i2p2www/static/news/news.xml
|
||||
Sync with mtn.i2p-projekt.i2p
|
||||
|
||||
Wait for a few update hosts to be ready
|
||||
Tell news hosts to flip the switch
|
||||
Wait for debian packages to be ready
|
||||
|
||||
Announce on:
|
||||
#i2p, #i2p-dev (also on freenode side)
|
||||
forum.i2p
|
||||
twitter
|
||||
Reference in New Issue
Block a user