blob: 2d065d9f8ed6e869894ce0424efe9f0592f1624a [file] [log] [blame] [view]
Bogdan Drutuce8ad4b2017-07-07 12:26:21 -07001# How to Create a Release of OpenCensus Java (for Maintainers Only)
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -07002
3## Build Environments
4
Bogdan Drutuce8ad4b2017-07-07 12:26:21 -07005We deploy OpenCensus Java to Maven Central under the following systems:
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -07006
7- Ubuntu 14.04
8
9Other systems may also work, but we haven't verified them.
10
11## Prerequisites
12
13### Setup OSSRH and Signing
14
15If you haven't deployed artifacts to Maven Central before, you need to setup
16your OSSRH (OSS Repository Hosting) account and signing keys.
17
18- Follow the instructions on [this
19 page](http://central.sonatype.org/pages/ossrh-guide.html) to set up an
20 account with OSSRH.
21 - You only need to create the account, not set up a new project
Bogdan Drutuce8ad4b2017-07-07 12:26:21 -070022 - Contact a OpenCensus Java maintainer on JIRA to add your account after you
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070023 have created it.
Bogdan Drutuce8ad4b2017-07-07 12:26:21 -070024 - Comment under [this JIRA bug](https://issues.sonatype.org/browse/OSSRH-32121)
25 for release permission to io.opencensus.
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070026- (For release deployment only) [Install
27 GnuPG](http://central.sonatype.org/pages/working-with-pgp-signatures.html#installing-gnupg)
28 and [generate your key
29 pair](http://central.sonatype.org/pages/working-with-pgp-signatures.html#generating-a-key-pair).
30 You'll also need to [publish your public
31 key](http://central.sonatype.org/pages/working-with-pgp-signatures.html#distributing-your-public-key)
32 to make it visible to the Sonatype servers.
33- Put your GnuPG key password and OSSRH account information in
34 `<your-home-directory>/.gradle/gradle.properties`:
35
36 ```
37 # You need the signing properties only if you are making release deployment
38 signing.keyId=<8-character-public-key-id>
39 signing.password=<key-password>
40 signing.secretKeyRingFile=<your-home-directory>/.gnupg/secring.gpg
41
42 ossrhUsername=<ossrh-username>
43 ossrhPassword=<ossrh-password>
44 checkstyle.ignoreFailures=false
45 ```
46
47## Tagging the Release
48
49The first step in the release process is to create a release branch, bump
50versions, and create a tag for the release. Our release branches follow the
51naming convention of `v<major>.<minor>.x`, while the tags include the patch
52version `v<major>.<minor>.<patch>`. For example, the same branch `v0.4.x` would
53be used to create all `v0.4` tags (e.g. `v0.4.0`, `v0.4.1`).
54
Bogdan Drutuce8ad4b2017-07-07 12:26:21 -070055In this section upstream repository refers to the main opencensus-java github
56repository.
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070057
Bogdan Drutuac9dd022017-04-17 13:03:01 -070058Before any push to the upstream repository you need to create a [personal access
59token](https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line/).
60
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -0700611. Create the release branch and push it to GitHub:
62
63 ```bash
64 $ MAJOR=0 MINOR=4 PATCH=0 # Set appropriately for new release
65 $ VERSION_FILES=(
66 build.gradle
Bogdan Drutufc714532018-01-18 19:09:03 -080067 examples/build.gradle
Bogdan Drutubd96a9c2017-10-23 12:35:01 -070068 api/src/main/java/io/opencensus/common/OpenCensusLibraryInformation.java
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070069 )
70 $ git checkout -b v$MAJOR.$MINOR.x master
71 $ git push upstream v$MAJOR.$MINOR.x
72 ```
73
Kristen Kozakfeda64e2017-09-08 17:59:07 -0700742. Enable branch protection for the new branch, if you have admin access.
75 Otherwise, let someone with admin access know that there is a new release
76 branch.
77
78 - Open the branch protection settings for the new branch, by following
79 [Github's instructions](https://help.github.com/articles/configuring-protected-branches/).
80 - Copy the settings from a previous branch, i.e., check
81 - `Protect this branch`
82 - `Require pull request reviews before merging`
83 - `Require status checks to pass before merging`
84 - `Include administrators`
85
Kristen Kozakfeda64e2017-09-08 17:59:07 -070086 Enable the following required status checks:
87 - `cla/google`
88 - `continuous-integration/appveyor/pr`
89 - `continuous-integration/travis-ci`
Kristen Kozakd1a7aaf2017-09-11 11:13:53 -070090 - Uncheck everything else.
Kristen Kozakfeda64e2017-09-08 17:59:07 -070091 - Click "Save changes".
92
933. For `master` branch:
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070094
95 - Change root build files to the next minor snapshot (e.g.
96 `0.5.0-SNAPSHOT`).
97
98 ```bash
99 $ git checkout -b bump-version master
100 # Change version to next minor (and keep -SNAPSHOT)
Bogdan Drutu1d2eda62017-06-19 23:54:11 -0700101 $ sed -i 's/[0-9]\+\.[0-9]\+\.[0-9]\+\(.*CURRENT_OPENCENSUS_VERSION\)/'$MAJOR.$((MINOR+1)).0'\1/' \
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -0700102 "${VERSION_FILES[@]}"
103 $ ./gradlew build
104 $ git commit -a -m "Start $MAJOR.$((MINOR+1)).0 development cycle"
105 ```
106
107 - Go through PR review and push the master branch to GitHub:
108
109 ```bash
110 $ git checkout master
111 $ git merge --ff-only bump-version
112 $ git push upstream master
113 ```
114
Kristen Kozakfeda64e2017-09-08 17:59:07 -07001154. For `vMajor.Minor.x` branch:
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -0700116
117 - Change root build files to remove "-SNAPSHOT" for the next release
118 version (e.g. `0.4.0`). Commit the result and make a tag:
119
120 ```bash
121 $ git checkout -b release v$MAJOR.$MINOR.x
122 # Change version to remove -SNAPSHOT
Bogdan Drutu1d2eda62017-06-19 23:54:11 -0700123 $ sed -i 's/-SNAPSHOT\(.*CURRENT_OPENCENSUS_VERSION\)/\1/' "${VERSION_FILES[@]}"
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -0700124 $ ./gradlew build
125 $ git commit -a -m "Bump version to $MAJOR.$MINOR.$PATCH"
126 $ git tag -a v$MAJOR.$MINOR.$PATCH -m "Version $MAJOR.$MINOR.$PATCH"
127 ```
128
129 - Change root build files to the next snapshot version (e.g.
130 `0.4.1-SNAPSHOT`). Commit the result:
131
132 ```bash
133 # Change version to next patch and add -SNAPSHOT
Bogdan Drutu1d2eda62017-06-19 23:54:11 -0700134 $ sed -i 's/[0-9]\+\.[0-9]\+\.[0-9]\+\(.*CURRENT_OPENCENSUS_VERSION\)/'$MAJOR.$MINOR.$((PATCH+1))-SNAPSHOT'\1/' \
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -0700135 "${VERSION_FILES[@]}"
136 $ ./gradlew build
137 $ git commit -a -m "Bump version to $MAJOR.$MINOR.$((PATCH+1))-SNAPSHOT"
138 ```
139
140 - Go through PR review and push the release tag and updated release branch
141 to GitHub:
142
143 ```bash
144 $ git checkout v$MAJOR.$MINOR.x
145 $ git merge --ff-only release
146 $ git push upstream v$MAJOR.$MINOR.$PATCH
147 $ git push upstream v$MAJOR.$MINOR.x
148 ```
Bogdan Drutuac9dd022017-04-17 13:03:01 -0700149
150## Deployment
151
152Deployment to Maven Central (or the snapshot repo) is for all of the artifacts
153from the project.
154
155### Branch
156
157Before building/deploying, be sure to switch to the appropriate branch or tag.
158For the current release use:
159
160```bash
161$ git checkout -b v$MAJOR.$MINOR.$PATCH tags/v$MAJOR.$MINOR.$PATCH
162```
163
164### Initial Deployment
165
166The following command will build the whole project and upload it to Maven
167Central. Parallel building [is not safe during
168uploadArchives](https://issues.gradle.org/browse/GRADLE-3420).
169
170```bash
171$ ./gradlew clean build && ./gradlew -Dorg.gradle.parallel=false uploadArchives
172```
173
174If the version has the `-SNAPSHOT` suffix, the artifacts will automatically go
175to the snapshot repository. Otherwise it's a release deployment and the
176artifacts will go to a staging repository.
177
178When deploying a Release, the deployment will create [a new staging
179repository](https://oss.sonatype.org/#stagingRepositories). You'll need to look
Bogdan Drutuce8ad4b2017-07-07 12:26:21 -0700180up the ID in the OSSRH UI (usually in the form of `opencensus-*`).
Bogdan Drutuac9dd022017-04-17 13:03:01 -0700181
182## Releasing on Maven Central
183
184Once all of the artifacts have been pushed to the staging repository, the
185repository must first be `closed`, which will trigger several sanity checks on
186the repository. If this completes successfully, the repository can then be
187`released`, which will begin the process of pushing the new artifacts to Maven
188Central (the staging repository will be destroyed in the process). You can see
189the complete process for releasing to Maven Central on the [OSSRH
190site](http://central.sonatype.org/pages/releasing-the-deployment.html).
Bogdan Drutuc796e252017-07-07 16:42:36 -0700191
192## Known Issues
193
Bogdan Drutu6684c2b2017-07-10 13:59:40 -0700194### Deployment for tag v0.5.0
195To rebuild the releases on the tag v0.5.0 use:
Bogdan Drutuc796e252017-07-07 16:42:36 -0700196```bash
197$ ./gradlew clean build && ./gradlew uploadArchives
198```
199
200If option `-Dorg.gradle.parallel=false` is used, you will hit [this bug](https://issues.sonatype.org/browse/OSSRH-19485)
201caused by [this bug](https://github.com/gradle/gradle/issues/1827) in gradle 3.5.