source: installer/resources/checklist.md @ e71d1d38

Last change on this file since e71d1d38 was e71d1d38, checked in by zzz <zzz@…>, 2 years ago

Getopt: Add new translations
Add instructions in .tx/config for conversion
Fix checkutf8.sh for getopt translations

  • Property mode set to 100644
File size: 9.5 KB
Line 
1# Release checklist and process
2
3## One week before
4
5- Announce string freeze on #i2p-dev
6- Update local English po files: `ant poupdate-source`
7- Review changes in English po files, fix up any necessary tagged strings in Java source
8- Revert English po files with no actual changes (i.e. with line number changes only)
9- Check in remaining English po files (and any files with changed strings)
10- Push to Transifex: `tx push -s`
11- Make announcement on Transifex with checkin deadline
12
13- GeoIP: Maxmind update is usually first week of the month, time accordingly
14- wget http://geolite.maxmind.com/download/geoip/database/GeoIPCountryCSV.zip
15- unzip GeoIPCountryCSV.zip
16- cut -d, -f3-5 < GeoIPCountryWhois.csv|sed 's/"//g' > geoip.txt
17- replace header
18- fix date in header (get date from HEAD)
19- ./makegeoipv6.sh
20- mtn ci geoip.txt geoipv6.dat.gz
21
22- BuildTime: Don't have to do this every release, but update the
23  EARLIEST and EARLIEST_LONG values in ~/mtn/i2p/core/java/src/net/i2p/time/BuildTime.java
24  to the current date, more or less.
25
26- Tickets: Check if any blocker or critical tickets for this release remain open;
27  get them fixed and closed, or reclassified.
28
29- Review Google Play crash reports, fix any related issues
30
31- Initial review: Review the complete diff from the last release, fix any issues
32
33- Trial Debian build: Build and test a preliminary Debian build
34  with 'ant debian' and fix any issues
35
36
37## A day or two before
38
391. Write the release announcement and push to Transifex:
40
41  - Checkout i2p.newsxml branch
42    - See README for setup
43  - `./create_new_entry.sh`
44    - Entry href should be the in-net link to the release blog post
45  - `tx push -s`
46  - `mtn ci`
47
482. Write the draft blog post and push to Transifex:
49
50  - Checkout i2p.www branch
51  - Write draft release announcement - see i2p2www/blog/README for instructions
52    - Top content should be the same as the news entry
53  - `tx push -s`
54  - `mtn ci`
55
563. Make announcement on Transifex asking for news translation
57
584. Tickets: Check if any blocker or critical tickets for this release remain open;
59   get them fixed and closed, or reclassified.
60
61
62## On release day
63
64### Preparation
65
661. Ensure all translation updates are imported from Transifex
67
68  - Look for newly translated languages and resources on Transifex
69  - Add any new ones to .tx/config (use your own judgement on which to include
70    based on minimum translated percentage)
71  - `tx pull`
72  - `ant testcripts` to verify that all updated translations are valid
73  - For any invalid that break the test, fix up the po file manually, or fix on
74    tx and pull again, or (if new) comment out in .tx/config (add a comment why)
75    and delete the po file.
76    See instructions in .tx/config for fixing up getopt properties files.
77  - `installer/resources/poupdate-man.sh` to generate new man page translations
78    (requires po4a package)
79  - `mtn add` for any new po files
80  - `mtn ci` all changed po files, and .tx/config if changed
81
822. Sync with mtn.i2p2.i2p
83
843. Start with a clean checkout:
85
86    ```
87    mtn -d i2p.mtn co --branch=i2p.i2p /path/to/releasedir
88    ```
89
90  - You must build with Java 7 or higher.
91    If you build with Java 8 or higher, you must also have the Java 7 JRE installed for the bootclasspath.
92
934. Create override.properties with (adjust as necessary):
94
95    ```
96    release.privkey.su3=/path/to/su3keystore.ks
97    release.gpg.keyid=0xnnnnnnnn
98    release.signer.su3=xxx@mail.i2p
99    build.built-by=xxx
100    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
101    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
102    ```
103
1045. Copy latest trust list _MTN/monotonerc from website or some other workspace
105
1066. Change revision in:
107  - `history.txt`
108  - `installer/install.xml`
109  - `core/java/src/net/i2p/CoreVersion.java`
110  - `router/java/src/net/i2p/router/RouterVersion.java`
111    - (change to BUILD = 0 and EXTRA = "")
112
1137. `mtn ci`
114
1158. Review the complete diff from the last release:
116
117    ```
118    mtn diff -r t:i2p-0.9.(xx-1) > out.diff
119    vi out.diff
120    ```
121
1229. Verify that no untrusted revisions were inadvertently blessed by a trusted party:
123
124    ```
125    mtn log --brief --no-graph --to t:i2p-0.9.(xx-1) | cut -d ' ' -f 2 | sort | uniq -c
126    ```
127
128### Build and test
129
1301. `ant release`
131
132    > NOTE: These tasks are now automated by `ant release`
133    >
134    > Build and tag:
135    >
136    >     ant pkg
137    >
138    > Create signed update files with:
139    >
140    >     export I2P=~/i2p
141    >     java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate sign i2pupdate.zip i2pupdate.sud /path/to/private.key 0.x.xx
142    >     java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate sign i2pupdate200.zip i2pupdate.su2 /path/to/private.key 0.x.xx
143    >
144    > Verify signed update files with:
145    >
146    >     java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate showversion i2pupdate.sud
147    >     java -cp $I2P/lib/i2p.jar net.i2p.crypto.TrustedUpdate verifysig i2pupdate.sud
148    >
149    > Make the source tarball:
150    >
151    >     Start with a clean checkout mtn -d i2p.mtn co --branch=i2p.i2p i2p-0.x.xx
152    >     Double-check trust list
153    >     tar cjf i2psource-0.x.xx.tar.bz2 --exclude i2p-0.x.xx/_MTN i2p-0.x.xx
154    >     mv i2p-0.x.xx.tar.bz2 i2p.i2p
155    >
156    > Rename some files:
157    >
158    >     mv i2pinstall.exe i2pinstall-0.x.xx.exe
159    >     mv i2pupdate.zip i2pupdate-0.x.xx.zip
160    >
161    > Generate hashes:
162    >
163    >     sha256sum i2p*0.x.xx.*
164    >     sha256sum i2pupdate.sud
165    >     sha256sum i2pupdate.su2
166    >
167    > Generate PGP signatures:
168    >
169    >     gpg -b i2pinstall-0.x xx.exe
170    >     gpg -b i2psource-0.x.xx.tar.bz2
171    >     gpg -b i2pupdate-0.x.xx.zip
172    >     gpg -b i2pupdate.sud
173    >     gpg -b i2pupdate.su2
174    >
175    > (end of tasks automated by 'ant release')
176
1772. Now test:
178  - Save the output about checksums, sizes, and torrents to a file
179    (traditionally `shasums.txt`)
180    - (edit timestamps to UTC if you care)
181  - Copy all the release files somewhere, make sure you have the same ones as last release
182  - Verify sha256sums for release files
183  - Check file sizes vs. previous release, shouldn't be smaller
184    - If the update includes GeoIP, it will be about 1MB bigger
185  - Unzip or list files from `i2pupdate.zip`, see if it looks right
186  - For either windows or linux installer: (probably should do both the first time)
187    - Rename any existing config dir (e.g. mv .i2p .i2p-save)
188    - Run installer, install to temp dir
189    - Look in temp dir, see if all the files are there
190    - Unplug ethernet / turn off wifi so RI doesn't leak
191    - `i2prouter start`
192    - Verify release number in console
193    - Verify welcome news
194    - Click through all the app, status, eepsite, and config pages, see if they look right
195    - Click through each of the translations, see if /console looks right
196    - Look for errors in /log (other than can't reseed errors)
197    - Look in config dir, see if all the files are there
198    - Shutdown
199    - Delete config dir
200    - Move saved config dir back
201    - Reconnect ethernet / turn wifi back on
202  - Load torrents in i2psnark on your production router, verify infohashes
203
2043. If all goes well, tag and push the release:
205
206    ```
207    mtn tag h: i2p-0.x.xx
208    mtn cert t:i2p-0.x.xx branch i2p.i2p.release
209    mtn push
210    ```
211
212### Distribute updates
213
2141. Update news with new version:
215  - Add magnet links, change release dates and release number in to old-format
216    news.xml, and distribute to news hosts (no longer necessary)
217  - In the i2p.newsxml branch, edit magnet links, release dates and release
218    number in data/releases.json, check in and push
219
2202. Add i2pupdate-0.9.xx.su3 torrent to tracker2.postman.i2p and start seeding
221
2223. Notify the following people:
223  - All in-network update hosts
224  - PPA maintainer
225  - news.xml maintainer
226  - backup news.xml maintainer
227  - website files maintainer
228
2294. Update Trac:
230  - Add milestone and version dates
231  - Increment milestone and version defaults
232
2335. Wait for a few update hosts to be ready
234
2356. Tell news hosts to flip the switch
236
2377. Monitor torrent for activity to verify that the new news is now live
238
239
240### Distribute libraries
241
2421. `ant mavenCentral`
243
2442. Upload the bundles to Maven Central via https://oss.sonatype.org
245
246
247### Android build
248
2491. See branch i2p.android.base for build instructions
250
2512. Upload to Google Play, F-Droid, and website
252
2533. Announce on Twitter
254
255
256### Notify release
257
2581. Upload files to launchpad release (download mirror)
259   (see debian-alt/doc/launchpad.txt for instructions)
260
2612. Wait for files to be updated on download server
262   Verify at http://download.i2p2.no/releases/
263
2643. Website files to change:
265  - Sync with mtn.i2p-projekt.i2p
266  - `i2p2www/static/hosts.txt` if it changed (copy from i2p.i2p mtn branch)
267  - `i2p2www/__init__.py` (release number)
268  - `i2p2www/pages/downloads/list.html` (release signer, if changed)
269  - `i2p2www/pages/downloads/macros` (checksums)
270  - `i2p2www/pages/site/get-involved/roadmap.html` (release date, actual release contents)
271  - `i2p2www/static/news/news.xml` (no longer necessary)
272  - Sync with mtn.i2p-projekt.i2p
273
2744. Announce on:
275  - #i2p, #i2p-dev (also on Freenode side)
276  - IRC
277  - Twitter
278
2795. Launchpad builds
280   (see debian-alt/doc/launchpad.txt for instructions)
281
2826. Copy launchpad files to our Debian repo,
283   or build Debian packages and upload them
284   (see debian-alt/doc/debian-build.txt for instructions)
285
2867. Announce Launchpad and Debian builds on Twitter
287
2888. Notify downstream Debian maintainer
289
2909. (if we get back into Tails) Notify Tails that new Debian builds are available
Note: See TracBrowser for help on using the repository browser.