blob: 4598f7d541e84366879da4eb628f3bd244599a92 [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
Hailong Wen916e10e2018-01-19 16:30:14 -080068 examples/pom.xml
Bogdan Drutubd96a9c2017-10-23 12:35:01 -070069 api/src/main/java/io/opencensus/common/OpenCensusLibraryInformation.java
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070070 )
71 $ git checkout -b v$MAJOR.$MINOR.x master
72 $ git push upstream v$MAJOR.$MINOR.x
73 ```
sebright98fb8ad2018-09-14 14:06:20 -070074 The branch will be automatically protected by the GitHub branch protection rule for release
75 branches.
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070076
sebright98fb8ad2018-09-14 14:06:20 -0700772. For `master` branch:
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070078
79 - Change root build files to the next minor snapshot (e.g.
80 `0.5.0-SNAPSHOT`).
81
82 ```bash
83 $ git checkout -b bump-version master
84 # Change version to next minor (and keep -SNAPSHOT)
Bogdan Drutu1d2eda62017-06-19 23:54:11 -070085 $ sed -i 's/[0-9]\+\.[0-9]\+\.[0-9]\+\(.*CURRENT_OPENCENSUS_VERSION\)/'$MAJOR.$((MINOR+1)).0'\1/' \
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -070086 "${VERSION_FILES[@]}"
87 $ ./gradlew build
88 $ git commit -a -m "Start $MAJOR.$((MINOR+1)).0 development cycle"
89 ```
90
91 - Go through PR review and push the master branch to GitHub:
92
93 ```bash
94 $ git checkout master
95 $ git merge --ff-only bump-version
96 $ git push upstream master
97 ```
98
sebright98fb8ad2018-09-14 14:06:20 -0700993. For `vMajor.Minor.x` branch:
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -0700100
101 - Change root build files to remove "-SNAPSHOT" for the next release
102 version (e.g. `0.4.0`). Commit the result and make a tag:
103
104 ```bash
105 $ git checkout -b release v$MAJOR.$MINOR.x
106 # Change version to remove -SNAPSHOT
Bogdan Drutu1d2eda62017-06-19 23:54:11 -0700107 $ sed -i 's/-SNAPSHOT\(.*CURRENT_OPENCENSUS_VERSION\)/\1/' "${VERSION_FILES[@]}"
Bogdan Drutu4e1c4fc2017-04-13 19:50:36 -0700108 $ ./gradlew build
109 $ git commit -a -m "Bump version to $MAJOR.$MINOR.$PATCH"
110 $ git tag -a v$MAJOR.$MINOR.$PATCH -m "Version $MAJOR.$MINOR.$PATCH"
111 ```
112
113 - Change root build files to the next snapshot version (e.g.
114 `0.4.1-SNAPSHOT`). Commit the result:
115
116 ```bash
117 # Change version to next patch and add -SNAPSHOT
Bogdan Drutu1d2eda62017-06-19 23:54:11 -0700118 $ 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 -0700119 "${VERSION_FILES[@]}"
120 $ ./gradlew build
121 $ git commit -a -m "Bump version to $MAJOR.$MINOR.$((PATCH+1))-SNAPSHOT"
122 ```
123
124 - Go through PR review and push the release tag and updated release branch
125 to GitHub:
126
127 ```bash
128 $ git checkout v$MAJOR.$MINOR.x
129 $ git merge --ff-only release
130 $ git push upstream v$MAJOR.$MINOR.$PATCH
131 $ git push upstream v$MAJOR.$MINOR.x
132 ```
Bogdan Drutuac9dd022017-04-17 13:03:01 -0700133
134## Deployment
135
136Deployment to Maven Central (or the snapshot repo) is for all of the artifacts
137from the project.
138
139### Branch
140
Kristen Kozak0f28b172018-05-01 14:40:29 -0700141Before building/deploying, be sure to switch to the appropriate tag. The tag
142must reference a commit that has been pushed to the main repository, i.e., has
143gone through code review. For the current release use:
Bogdan Drutuac9dd022017-04-17 13:03:01 -0700144
145```bash
146$ git checkout -b v$MAJOR.$MINOR.$PATCH tags/v$MAJOR.$MINOR.$PATCH
147```
148
149### Initial Deployment
150
151The following command will build the whole project and upload it to Maven
152Central. Parallel building [is not safe during
153uploadArchives](https://issues.gradle.org/browse/GRADLE-3420).
154
155```bash
156$ ./gradlew clean build && ./gradlew -Dorg.gradle.parallel=false uploadArchives
157```
158
159If the version has the `-SNAPSHOT` suffix, the artifacts will automatically go
160to the snapshot repository. Otherwise it's a release deployment and the
161artifacts will go to a staging repository.
162
163When deploying a Release, the deployment will create [a new staging
164repository](https://oss.sonatype.org/#stagingRepositories). You'll need to look
Bogdan Drutuce8ad4b2017-07-07 12:26:21 -0700165up the ID in the OSSRH UI (usually in the form of `opencensus-*`).
Bogdan Drutuac9dd022017-04-17 13:03:01 -0700166
167## Releasing on Maven Central
168
169Once all of the artifacts have been pushed to the staging repository, the
170repository must first be `closed`, which will trigger several sanity checks on
171the repository. If this completes successfully, the repository can then be
172`released`, which will begin the process of pushing the new artifacts to Maven
173Central (the staging repository will be destroyed in the process). You can see
174the complete process for releasing to Maven Central on the [OSSRH
175site](http://central.sonatype.org/pages/releasing-the-deployment.html).
Bogdan Drutuc796e252017-07-07 16:42:36 -0700176
Hailong Wene9b61782018-01-22 14:18:36 -0800177## Announcement
178
179Once deployment is done, go to Github [release
180page](https://github.com/census-instrumentation/opencensus-java/releases), press
181`Draft a new release` to write release notes about the new release.
182
183You can use `git log upstream/v$MAJOR.$((MINOR-1)).x..upstream/v$MAJOR.$MINOR.x --graph --first-parent`
184or the Github [compare tool](https://github.com/census-instrumentation/opencensus-java/compare/)
Yang Songb09b3282018-04-27 16:07:18 -0700185to view a summary of all commits since last release as a reference. In addition, you can refer to
186[CHANGELOG.md](https://github.com/census-instrumentation/opencensus-java/blob/master/CHANGELOG.md)
187for a list of major changes since last release.
188
Hailong Wene9b61782018-01-22 14:18:36 -0800189Please pick major or important user-visible changes only.
190
191## Update release versions in documentations and build files
192
193After releasing is done, you need to update all readmes and examples to point to the
194latest version.
195
1961. Update README.md and gradle/maven build files on `master` branch:
197
198```bash
199$ git checkout -b bump-document-version master
200$ BUILD_FILES=(
201 examples/build.gradle
202 examples/pom.xml
203 )
204$ README_FILES=(
205 README.md
Yang Song432d0a92018-06-05 10:35:35 -0700206 contrib/appengine_standard_util/README.md
Yang Songd3a3fbf2018-07-12 12:02:14 -0700207 contrib/exemplar_util/README.md
Hailong Wene9b61782018-01-22 14:18:36 -0800208 contrib/grpc_util/README.md
209 contrib/http_util/README.md
sebright8a95c212018-09-04 10:26:22 -0700210 contrib/log_correlation/log4j/README.md
Kristen Kozak81f5abb2018-06-19 18:13:48 -0700211 contrib/log_correlation/stackdriver/README.md
Yang Songa3b50ea2018-05-21 15:32:23 -0700212 contrib/monitored_resource_util/README.md
savaki9dad9592018-07-19 19:32:00 -0700213 contrib/spring/README.md
Dino Oliva30c10cc2018-09-05 12:09:44 -0700214 contrib/spring_sleuth/README.md
Hailong Wene9b61782018-01-22 14:18:36 -0800215 contrib/zpages/README.md
Yang Songb0d39672018-02-13 12:47:32 -0800216 exporters/stats/prometheus/README.md
Hailong Wene9b61782018-01-22 14:18:36 -0800217 exporters/stats/signalfx/README.md
218 exporters/stats/stackdriver/README.md
Fabian Lange17a1a1a2018-02-09 14:33:30 -0500219 exporters/trace/instana/README.md
Hailong Wene9b61782018-01-22 14:18:36 -0800220 exporters/trace/logging/README.md
Yang Song9b6eb8c2018-03-16 11:00:43 -0700221 exporters/trace/jaeger/README.md
Hailong Wene9b61782018-01-22 14:18:36 -0800222 exporters/trace/stackdriver/README.md
223 exporters/trace/zipkin/README.md
224 )
225# Substitute versions in build files
226$ sed -i 's/[0-9]\+\.[0-9]\+\.[0-9]\+\(.*LATEST_OPENCENSUS_RELEASE_VERSION\)/'$MAJOR.$MINOR.$PATCH'\1/' \
227 "${BUILD_FILES[@]}"
228# Substitute versions in build.gradle examples in README.md
229$ sed -i 's/\(\(compile\|runtime\).\+io\.opencensus:.\+:\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1'$MAJOR.$MINOR.$PATCH'/' \
230 "${README_FILES[@]}"
231# Substitute versions in maven pom examples in README.md
232$ sed -i 's/\(<version>\)[0-9]\+\.[0-9]\+\.[0-9]\+/\1'$MAJOR.$MINOR.$PATCH'/' \
233 "${README_FILES[@]}"
234```
235
2362. Update bazel dependencies for subproject `examples`:
237
238 - Follow the instructions on [this
239 page](https://docs.bazel.build/versions/master/generate-workspace.html) to
240 install bazel migration tool. You may also need to manually apply
241 this [patch](
242 https://github.com/nevillelyh/migration-tooling/commit/f10e14fd18ad3885c7ec8aa305e4eba266a07ebf)
243 if you encounter `Unable to find a version for ... due to Invalid Range Result` error when
244 using it.
245
246 - Use the following command to generate new dependencies file:
247
248 ```bash
249 $ bazel run //generate_workspace -- \
Yang Song751ea3c2018-03-20 10:44:54 -0700250 --artifact=com.google.guava:guava:23.0 \
251 --artifact=io.grpc:grpc-all:1.9.0 \
Hailong Wene9b61782018-01-22 14:18:36 -0800252 --artifact=io.opencensus:opencensus-api:$MAJOR.$MINOR.$PATCH \
Yang Song751ea3c2018-03-20 10:44:54 -0700253 --artifact=io.opencensus:opencensus-contrib-grpc-metrics:$MAJOR.$MINOR.$PATCH \
Hailong Wene9b61782018-01-22 14:18:36 -0800254 --artifact=io.opencensus:opencensus-contrib-zpages:$MAJOR.$MINOR.$PATCH \
Yang Song751ea3c2018-03-20 10:44:54 -0700255 --artifact=io.opencensus:opencensus-exporter-stats-prometheus:$MAJOR.$MINOR.$PATCH \
256 --artifact=io.opencensus:opencensus-exporter-stats-stackdriver:$MAJOR.$MINOR.$PATCH \
Hailong Wene9b61782018-01-22 14:18:36 -0800257 --artifact=io.opencensus:opencensus-exporter-trace-logging:$MAJOR.$MINOR.$PATCH \
Yang Song751ea3c2018-03-20 10:44:54 -0700258 --artifact=io.opencensus:opencensus-exporter-trace-stackdriver:$MAJOR.$MINOR.$PATCH \
Hailong Wene9b61782018-01-22 14:18:36 -0800259 --artifact=io.opencensus:opencensus-impl:$MAJOR.$MINOR.$PATCH \
Yang Song751ea3c2018-03-20 10:44:54 -0700260 --artifact=io.prometheus:simpleclient_httpserver:0.3.0 \
Hailong Wene9b61782018-01-22 14:18:36 -0800261 --repositories=http://repo.maven.apache.org/maven2
262 Wrote
263 /usr/local/.../generate_workspace.runfiles/__main__/generate_workspace.bzl
264 ```
265
266 - Copy this file to overwrite `examples/opencensus_workspace.bzl`.
267
268 - Use the following command to rename the generated rules and commit the
269 changes above:
270
271 ```bash
272 $ sed -i 's/def generated_/def opencensus_/' examples/opencensus_workspace.bzl
273 $ git commit -a -m "Update release versions for all readme and build files."
274 ```
275
2763. Go through PR review and merge it to GitHub master branch.
277
Yang Songe812bcf2018-05-03 16:26:52 -07002784. In addition, create a PR to mark the new release in
279[CHANGELOG.md](https://github.com/census-instrumentation/opencensus-java/blob/master/CHANGELOG.md)
280on master branch. Once that PR is merged, cherry-pick the commit and create another PR to the
281release branch (branch v$MAJOR.$MINOR.x).
282
283
Bogdan Drutuc796e252017-07-07 16:42:36 -0700284## Known Issues
285
Bogdan Drutu6684c2b2017-07-10 13:59:40 -0700286### Deployment for tag v0.5.0
287To rebuild the releases on the tag v0.5.0 use:
Bogdan Drutuc796e252017-07-07 16:42:36 -0700288```bash
289$ ./gradlew clean build && ./gradlew uploadArchives
290```
291
292If option `-Dorg.gradle.parallel=false` is used, you will hit [this bug](https://issues.sonatype.org/browse/OSSRH-19485)
293caused by [this bug](https://github.com/gradle/gradle/issues/1827) in gradle 3.5.