From 6a4891093517c1a0e8f60f78bf0e458a148fca18 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sun, 26 Nov 2017 15:27:06 +0000
Subject: [PATCH] Build: add xenial release target, it will be our 4th
 launchpad flavor. build.xml cleanups doc updates

---
 build.xml                        | 149 +++++++++++++++++++++++--------
 debian-alt/doc/debian-build.txt  |   4 +-
 debian-alt/doc/launchpad.txt     |   4 +-
 installer/resources/checklist.md |  25 +++++-
 4 files changed, 137 insertions(+), 45 deletions(-)

diff --git a/build.xml b/build.xml
index 4f8dd936af..4628ac271e 100644
--- a/build.xml
+++ b/build.xml
@@ -432,10 +432,22 @@
 
     <!-- end of sub-build.xml targets -->
 
+    <!-- monotone targets -->
+
     <target name="checkForMtn" >
         <available property="mtn.available" file="_MTN" type="dir" />
     </target>
 
+    <target name="failIfNoMtn" depends="checkForMtn">
+        <fail message="This target cannot be used without Monotone! Use &quot;fakeroot debian/rules get-orig-source&quot; instead.">
+            <condition>
+                <not>
+                    <isset property="mtn.available" />
+                </not>
+            </condition>
+        </fail>
+    </target>
+
     <target name="getMtnRev" depends="checkForMtn" if="mtn.available" >
         <exec executable="mtn" outputproperty="workspace.version" errorproperty="mtn.error1" failifexecutionfails="false" >
             <arg value="automate" />
@@ -490,6 +502,10 @@
             match='(^\s+public\s+final\s+static\s+long\s+BUILD\s+=\s+)[0-9]+;' replace='\1${new.i2p.build.number};'/>
     </target>
 
+    <!-- end monotone targets -->
+
+    <!-- launch4j targets -->
+
     <condition property="noExe">
         <not>
             <!-- We only have launch4j binaries for the following systems -->
@@ -533,6 +549,8 @@
                  classpath="${basedir}/installer/lib/launch4j/launch4j.jar:${basedir}/installer/lib/launch4j/lib/xstream.jar" />
      </target>
 
+    <!-- end launch4j targets -->
+
      <!--
           the files are now copied to the build directory
           in the build* targets
@@ -546,6 +564,8 @@
         <copy file="apps/susidns/src/lib/standard.jar" todir="build/" />
     </target>
 
+    <!-- jbigi targets -->
+
     <target name="jbigi-list-changes" depends="checkForMtn" if="mtn.available">
         <exec executable="mtn" outputproperty="workspace.changes.jbigi" errorproperty="mtn.error.jbigi" failifexecutionfails="false" >
             <arg value="list" />
@@ -677,6 +697,8 @@
         </jar>
     </target>
 
+    <!-- end jbigi targets -->
+
     <!-- the apps need to compile the jsps to poupdate -->
     <target name="poupdate" depends="buildRouter, buildStreaming, buildSystray, buildJetty, buildDesktopGui, buildJrobin" >
         <echo message="Setting environment variable LG2 to a lang code (eg: de,zh,nl etc)" />
@@ -932,7 +954,7 @@
             </fail>
     </target>
 
-    <target name="-pre-release" depends="-pre-sign">
+    <target name="-pre-release" depends="-pre-sign, failIfNoMtn">
             <echo message="================================================================" />
             <echo message="Did you update these files?" />
             <exec executable="ls" failonerror="true">
@@ -2031,17 +2053,27 @@
     </target>
 
     <target name="mavenCentral.deps" depends="buildRouter, buildStreaming">
-        <ant dir="core/java/" target="javadocJar" />
-        <ant dir="core/java/" target="sourcesJar" />
-        <ant dir="router/java/" target="javadocJar" />
-        <ant dir="router/java/" target="sourcesJar" />
-        <ant dir="apps/ministreaming/java/" target="javadocJar" />
-        <ant dir="apps/ministreaming/java/" target="sourcesJar" />
-        <ant dir="apps/streaming/java/" target="javadocJar" />
-        <ant dir="apps/streaming/java/" target="sourcesJar" />
-        <ant dir="apps/jetty/" target="servletJar" />
-        <ant dir="apps/jetty/" target="servletJavadocJar" />
-        <ant dir="apps/jetty/" target="servletSourcesJar" />
+        <ant dir="core/java/">
+            <target name="javadocJar" />
+            <target name="sourcesJar" />
+        </ant>
+        <ant dir="router/java/">
+            <target name="javadocJar" />
+            <target name="sourcesJar" />
+        </ant>
+        <ant dir="apps/ministreaming/java/">
+            <target name="javadocJar" />
+            <target name="sourcesJar" />
+        </ant>
+        <ant dir="apps/streaming/java/">
+            <target name="javadocJar" />
+            <target name="sourcesJar" />
+        </ant>
+        <ant dir="apps/jetty/">
+            <target name="servletJar" />
+            <target name="servletJavadocJar" />
+            <target name="servletSourcesJar" />
+        </ant>
     </target>
 
     <target name="mavenCentral" depends="verifyReleaseBuildNumbers, -pre-release, distclean, testscripts, mavenCentral.deps">
@@ -2242,15 +2274,9 @@
         <delete dir="./.pc" />
     </target>
 
-    <target name="debian-tarball" depends="getExtendedVersion">
+    <!-- stretch+, zesty+ -->
+    <target name="debian-tarball" depends="getExtendedVersion, failIfNoMtn">
         <!-- this will use the monotonerc file in the current workspace -->
-        <fail message="This target cannot be used without Monotone! Use &quot;fakeroot debian/rules get-orig-source&quot; instead.">
-            <condition>
-                <not>
-                    <isset property="mtn.available" />
-                </not>
-            </condition>
-        </fail>
         <property name="debian.tarball.name" value="i2p_${Extended.Version}.orig.tar.bz2" />
         <echo message="Checking out fresh copy into ../i2p-${Extended.Version} for tarballing:" />
         <delete dir="../i2p-${Extended.Version}" />
@@ -2312,15 +2338,7 @@
       -  We add a 'p' to the release name and tarball since the source package is different;
       -  Launchpad does not allow different source packages with the same name.
       -->
-    <target name="precise-release-tarball" depends="getExtendedVersion">
-        <!-- this will use the monotonerc file in the current workspace -->
-        <fail message="This target cannot be used without Monotone! Use &quot;fakeroot debian/rules get-orig-source&quot; instead.">
-            <condition>
-                <not>
-                    <isset property="mtn.available" />
-                </not>
-            </condition>
-        </fail>
+    <target name="precise-release-tarball" depends="getExtendedVersion, failIfNoMtn">
         <property name="debian.tarball.name" value="i2p_${release.number}p.orig.tar.bz2" />
         <echo message="Checking out fresh copy into ../i2p-${Extended.Version} for tarballing:" />
         <delete dir="../i2p-${Extended.Version}" />
@@ -2387,16 +2405,71 @@
         </tar>
     </target>
 
+    <!-- xenial/yakkety only -->
+    <!-- same as debian-release-tarball but with bundled jstl.jar
+         (there's no libtaglibs-standard-* packages)
+      -  We add a 'x' to the release name and tarball since the source package is different;
+      -  Launchpad does not allow different source packages with the same name.
+      -->
+    <target name="xenial-release-tarball" depends="getExtendedVersion, failIfNoMtn">
+        <property name="debian.tarball.name" value="i2p_${release.number}x.orig.tar.bz2" />
+        <echo message="Checking out fresh copy into ../i2p-${Extended.Version} for tarballing:" />
+        <delete dir="../i2p-${Extended.Version}" />
+        <exec executable="mtn" failonerror="true">
+            <arg value="co" />
+            <!-- w: is the revision of the current workspace -->
+            <arg value="-r" />
+            <arg value="w:" />
+            <arg value="-b" />
+            <arg value="i2p.i2p" />
+            <arg value="../i2p-${Extended.Version}" />
+        </exec>
+        <delete includeemptydirs="true" quiet="false" failonerror="false">
+            <fileset dir="../i2p-${Extended.Version}/debian-alt/" />
+            <fileset dir="../i2p-${Extended.Version}/installer/lib/" />
+            <fileset dir="../i2p-${Extended.Version}/Slackware" />
+            <fileset dir="../i2p-${Extended.Version}/_MTN" />
+            <fileset dir="../i2p-${Extended.Version}/core/java/src/gnu/gettext" />
+            <fileset dir="../i2p-${Extended.Version}/core/java/src/gnu/getopt" />
+          <!--
+            <fileset dir="../i2p-${Extended.Version}/core/java/src/org/apache/http" />
+           -->
+            <file name="../i2p-${Extended.Version}/installer/resources/geoip.txt" />
+            <file name="../i2p-${Extended.Version}/installer/resources/geoipv6.dat.gz" />
+            <fileset dir="../i2p-${Extended.Version}/apps/jetty/jetty-distribution-9.2.22.v20170606" />
+            <fileset dir="../i2p-${Extended.Version}/apps/jetty/apache-tomcat-8.5.23" />
+          <!--
+            <file name="../i2p-${Extended.Version}/apps/susidns/src/lib/jstl.jar" />
+           -->
+            <file name="../i2p-${Extended.Version}/apps/susidns/src/lib/standard.jar" />
+            <!-- anything added above, add in debian-tarball also -->
+        </delete>
+        <tar longfile="gnu" destfile="../${debian.tarball.name}" compression="bzip2">
+            <tarfileset dir="../i2p-${Extended.Version}" prefix="/i2p-${release.number}">
+                <include name="**/**" />
+                <exclude name="debian/**"/>
+                <exclude name="debian-alt/**"/>
+                <exclude name="**/*.sh"/>
+                <exclude name="installer/resources/geoip.txt"/>
+                <exclude name="installer/resources/geoipv6.dat.gz"/>
+                <exclude name="apps/jetty/jetty-distribution-*/**"/>
+                <exclude name="apps/jetty/apache-tomcat-*/**"/>
+              <!--
+                <exclude name="apps/susidns/src/lib/jstl.jar" />
+               -->
+                <exclude name="apps/susidns/src/lib/standard.jar" />
+                <!-- anything added above, add in debian-tarball also -->
+            </tarfileset>
+            <tarfileset dir="../i2p-${Extended.Version}" prefix="/i2p-${release.number}" filemode="755">
+                <exclude name="debian/**" />
+                <include name="**/*.sh" />
+            </tarfileset>
+        </tar>
+    </target>
+
+    <!-- stretch+, zesty+ -->
     <!-- same as debian-tarball but with a release tar.bz2 file name and tar prefix -->
-    <target name="debian-release-tarball" depends="getExtendedVersion">
-        <!-- this will use the monotonerc file in the current workspace -->
-        <fail message="This target cannot be used without Monotone! Use &quot;fakeroot debian/rules get-orig-source&quot; instead.">
-            <condition>
-                <not>
-                    <isset property="mtn.available" />
-                </not>
-            </condition>
-        </fail>
+    <target name="debian-release-tarball" depends="getExtendedVersion, failIfNoMtn">
         <property name="debian.tarball.name" value="i2p_${release.number}.orig.tar.bz2" />
         <echo message="Checking out fresh copy into ../i2p-${Extended.Version} for tarballing:" />
         <delete dir="../i2p-${Extended.Version}" />
diff --git a/debian-alt/doc/debian-build.txt b/debian-alt/doc/debian-build.txt
index b17f42e1cb..98df8cfe2b 100644
--- a/debian-alt/doc/debian-build.txt
+++ b/debian-alt/doc/debian-build.txt
@@ -93,9 +93,9 @@ reprepro -v copysrc wheezy precise i2p
 # Note that syntax is reprepro copysrc TO FROM package!
 reprepro -v copysrc jessie trusty i2p
 
-# To copy xenial to stretch:
+# To copy zesty to stretch:
 # Note that syntax is reprepro copysrc TO FROM package!
-reprepro -v copysrc stretch xenial i2p
+reprepro -v copysrc stretch zesty i2p
 
 # install in the architectures not copied from ubuntu
 # 'flood' should do this but forgot how, can't make it work any more
diff --git a/debian-alt/doc/launchpad.txt b/debian-alt/doc/launchpad.txt
index 581d424bf9..84dd008fd3 100644
--- a/debian-alt/doc/launchpad.txt
+++ b/debian-alt/doc/launchpad.txt
@@ -49,7 +49,9 @@ Generate files to upload
     (or add -kkeyid argument to debuild, which you must do
      if you want to sign with a subkey)
     run gpg -K to list your private keys
-- ant debian-release-tarball (ant precise-release-tarball for precise/trusty)
+- ant debian-release-tarball (this is currently for zesty and higher)
+  (ant precise-release-tarball for precise thru wily... only do this once for both the precise and trusty build)
+  (ant xenial-release-tarball for xenial and yakkety)
   this will make a directory ../i2p-0.9.XX-0-xxxxxxxx/
   and a tarball ../i2p_0.9.XX.orig.tar.bz2
 - cp debian/changelog ../i2p-0.9.XX-0-xxxxxxxx/debian/
diff --git a/installer/resources/checklist.md b/installer/resources/checklist.md
index a85d076eb8..b0f89195b6 100644
--- a/installer/resources/checklist.md
+++ b/installer/resources/checklist.md
@@ -1,4 +1,4 @@
-# Release checklist
+# Release checklist and process
 
 ## One week before
 
@@ -26,6 +26,11 @@
 
 - Review Google Play crash reports, fix any related issues
 
+- Initial review: Review the complete diff from the last release, fix any issues
+
+- Trial Debian build: Build and test a preliminary Debian build
+  with 'ant debian' and fix any issues
+
 
 ## A day or two before
 
@@ -236,6 +241,15 @@
 2. Upload the bundles to Maven Central via https://oss.sonatype.org
 
 
+### Android build
+
+1. See branch i2p.android.base for build instructions
+
+2. Upload to Google Play, F-Droid, and website
+
+3. Announce on Twitter
+
+
 ### Notify release
 
 1. Upload files to launchpad release (download mirror)
@@ -256,15 +270,18 @@
 
 4. Announce on:
   - #i2p, #i2p-dev (also on Freenode side)
-  - forum.i2p
+  - IRC
   - Twitter
 
 5. Launchpad builds
    (see debian-alt/doc/launchpad.txt for instructions)
 
-6. Debian builds
+6. Copy launchpad files to our Debian repo,
+   or build Debian packages and upload them
    (see debian-alt/doc/debian-build.txt for instructions)
 
 7. Announce Launchpad and Debian builds on Twitter
 
-8. Notify Tails that new Debian builds are available
+8. Notify downstream Debian maintainer
+
+9. (if we get back into Tails) Notify Tails that new Debian builds are available
-- 
GitLab