SAMZA-1428: Fix scala 2.10 compilation issue with java 8 interface st…
[samza.git] / RELEASE.md
1 # Samza Release Procedure
2
3 Releasing Samza involves the following steps:
4
5 * Send a [DISCUSS] to dev@samza.apache.org. [Example](http://mail-archives.apache.org/mod_mbox/samza-dev/201503.mbox/%3CCABYbY7dsYAQo4_6qBvmUSOF37%2BUfsHRQ3dKOJV1qHJUTetKdAA%40mail.gmail.com%3E)
6 * Create the Release Candidate
7 * Send a [VOTE] to dev@samza.apache.org. [Example](http://mail-archives.apache.org/mod_mbox/samza-dev/201503.mbox/%3CCAOErhNQsehZ8iEXsP5saKgr9qjD%3DART7-2OCWJcCbXJko9FV4A%40mail.gmail.com%3E)
8 * Wait till the [VOTE] completes and send [RESULT][VOTE]. [Example](http://mail-archives.apache.org/mod_mbox/samza-dev/201412.mbox/%3CCADiKvVuAkgiR7-0VBYccez96xtfV6edavdy7xc%3Drg9GCftaEsg%40mail.gmail.com%3E)
9 * Publish source tarball to Apache SVN
10 * Publish website documents for new release
11 * Write a blog post on [Apache Blog](https://blogs.apache.org/samza/) (Note: Apache blog editor is primitive. You have to provide HTML formatted document.)
12
13 The following sections will be focusing on creating the release candidate, publish the source tarball, and publish website documents.
14
15 ## Steps to release Samza binary artifacts
16
17 Before you start, here are a few prerequisite steps that would be useful later:
18
19    * Make sure you have your GPG key generated and added to KEYS file. GPG tools: https://gpgtools.org/
20    * Setup your personal website on Apache: http://www.apache.org/dev/new-committers-guide.html
21    * Setup access to author the apache blog: http://www.apache.org/dev/project-blogs#grantrights
22
23 And before you proceed, do the following steps:
24
25    * create a branch $VERSION from the latest master branch
26    * checkout the $VERSION branch
27    * update the gradle.properties s.t. the following property is $VERSION w/o the suffix '-SNAPSHOT':
28       version=$VERSION
29    * change the samza_executable variable in samza-test/src/main/python/configs/tests.json to $VERSION w/o the suffix '-SNAPSHOT'. 
30    * change the samza-test versions in samza-test/src/main/config/join/README to $VERSION w/o the suffix '-SNAPSHOT'.
31    * push the changes to the $VERSION branch
32
33 Validate that all Samza source files have proper license information in their header.
34
35     ./gradlew check
36
37 To release to a local Maven repository:
38
39     ./gradlew clean publishToMavenLocal
40
41 To build a tarball suitable for an ASF source release (and its accompanying MD5 file):
42
43 First, clean any non-checked-in files from git (this removes all such files without prompting):
44
45     git clean -fdx
46
47 Alternatively, you can make a fresh clone of the repository to a separate directory:
48
49     git clone http://git-wip-us.apache.org/repos/asf/samza.git samza-release
50     cd samza-release
51
52 Then build the tarball:
53
54     ./gradlew clean sourceRelease
55
56 Then sign it:
57
58     gpg --sign --armor --detach-sig build/distribution/source/apache-samza-*.tgz
59
60 Make a signed git tag for the release candidate:
61
62     git tag -s release-$VERSION-rc0 -m "Apache Samza $VERSION release candidate 0"
63
64 Push the release tag to remote repository:
65
66     git push origin release-$VERSION-rc0
67
68 Edit `$HOME/.gradle/gradle.properties` and add your GPG key information:
69
70     signing.keyId=01234567                          # Your GPG key ID, as 8 hex digits
71     signing.secretKeyRingFile=/path/to/secring.gpg  # Normally in $HOME/.gnupg/secring.gpg
72     signing.password=YourSuperSecretPassphrase      # Plaintext passphrase to decrypt key
73     nexusUsername=yourname                          # Your username on Apache's LDAP
74     nexusPassword=password                          # Your password on Apache's LDAP
75
76 Putting your passwords there in plaintext is unfortunately unavoidable. The
77 [nexus plugin](https://github.com/bmuschko/gradle-nexus-plugin) supports asking
78 for them interactively, but unfortunately there's a
79 [Gradle issue](http://issues.gradle.org/browse/GRADLE-2357) which prevents us
80 from reading keyboard input (because we need `org.gradle.jvmargs` set).
81
82 Build binary artifacts and upload them to the staging repository:
83
84     # Set this to the oldest JDK which we are currently supporting for Samza.
85     # If it's built with Java 8, the classes won't be readable by Java 7.
86     export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_20.jdk/Contents/Home
87     ./gradlew clean uploadArchives
88
89 Go to [repository web interface](https://repository.apache.org/), log in with
90 Apache LDAP credentials, go to "Staging Repositories", select the org.apache.samza
91 repository just created, and close it. This may take a minute or so. When it
92 finishes, the UI shows a staging repository URL. This can be used in a project
93 that depends on Samza, to test the release candidate.
94
95 If the VOTE has successfully passed on the release candidate, you can log in to the 
96 [repository web interface](https://repository.apache.org) (same as above) and "release" 
97 the org.apache.samza repository listed under "Staging Repositories".
98
99 The instructions above publish the Samza artifacts for scala 2.11. To publish for scala 2.10 and 2.12:
100
101 * Set the desired `scalaVersion` in `gradle.properties`.
102 * Run `./gradlew clean uploadArchives` to generate and upload the Samza artifacts.
103 * Login to the [repository web interface](https://repository.apache.org/) with your Apache LDAP 
104 credentials, "close" the created repository and "release" it.
105
106 ## Steps to Upload Source Tarball to Apache SVN
107
108 Check out the following Apache dist SVN to local:
109
110    svn checkout https://dist.apache.org/repos/dist/release/samza samza-dist
111
112 Create the new version's sub-directory and add the source tarball, MD5, and asc files from the 
113 previous step to the new directory:
114
115    cd samza-dist
116    mkdir $VERSION
117    cp ${SAMZA_SRC_ROOT}/build/distribution/source/apache-samza-$VERSION-src.tgz $VERSION
118    cp ${SAMZA_SRC_ROOT}/build/distribution/source/apache-samza-$VERSION-src.tgz.MD5 $VERSION
119    cp ${SAMZA_SRC_ROOT}/build/distribution/source/apache-samza-$VERSION-src.tgz.asc $VERSION
120    svn add $VERSION
121
122 Commit to Apache release SVN
123
124    svn ci -m "Releasing Apache Samza $VERSION Source Tarballs"
125
126 Check the download link [here](http://www-us.apache.org/dist/samza/) to make sure that the mirror
127 site has picked up the new release. The third-party mirrors may take upto 24 hours to pick-up the release. 
128 In order to ensure that the release is available in public mirrors, wait for the release jars 
129 to show up in [maven central](http://search.maven.org/#search%7Cga%7C1%7Csamza). A full list of mirrors can be found [here](http://www.apache.org/dyn/closer.cgi).
130 Do not publish the website or any public document until the release jars are available for download.
131
132 ## Steps to Update Public Documentation
133
134 Please refer to docs/README.md, specifically "Release-new-version Website Checklist" section.