| //// |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| //// |
| Release Process |
| --------------- |
| |
| This document describes the steps required to release a version of TinkerPop. The process is multi-phased and can therefore take several weeks to complete given the time needed for Apache voting and community feedback. Once a release point has been identified, the following phases represent the flow of "release": |
| |
| * Optionally, produce a release candidate for community feedback. |
| * Submit the official release for PMC vote. |
| * Submit the official release for Incubator vote. |
| * Release and promote. |
| |
| Release Candidate |
| ~~~~~~~~~~~~~~~~~ |
| |
| A release candidate is an unofficial release that is represented by a tagged version in the Git repository. It is offered in cases where there is significant change in a particular version and the potential for upgrades and problems might be high. |
| |
| . `mvn clean install -DincludeNeo4j` |
| .. `mvn verify -DskipIntegrationTests=false -DincludeNeo4j` |
| .. `mvn verify -DskipPerformanceTests=false` |
| . `bin/publish-docs.sh <username>` - note that under a release candidate the documentation is published as SNAPSHOT |
| . `bin/bump.sh "version"` to update the project files to reference a non-SNAPSHOT `rc` version (e.g. `x.y.z-incubating-rc1) |
| . `git diff` and review the updated files (expect all `pom.xml` files and this README) |
| . `git commit -a -m "TinkerPop x.y.z release"` and `git push` |
| . `git tag -a -m "TinkerPop x.y.z release" x.y.z` and `git push --tags` |
| . `mvn clean install -Dmaven.test.skip=true` |
| . `bin/bump.sh "version"` to go back to SNAPSHOT |
| . `git commit -a -m "Returned to x.y.z-SNAPSHOT"` and `git push` |
| . Announce the release candidate to `dev` mailing list and await feedback |
| . Repeat as required or proceed to the next phase |
| |
| PMC Vote |
| ~~~~~~~~ |
| |
| A positive vote for a particular release from the TinkerPop PMC is required to move to the following phase. |
| |
| . `mvn clean install` |
| .. `mvn verify -DskipIntegrationTests=false -DincludeNeo4j` |
| .. `mvn verify -DskipPerformanceTests=false` |
| . Perform manual tests: |
| .. Execute `:remote connect conf/remote.yaml` and send some requests to a running Gremlin Server instance. |
| .. Execute `:?` to display the help in the Console. |
| . Update `CHANGELOG.asciidoc`: |
| .. Update the release date |
| .. Generate the JIRA release notes report for the current version and append them to the `CHANGELOG.asciidoc` |
| .. Organize "breaking" changes to be clearly marked (use JIRA and the "breaking" label to identify those) |
| . `bin/bump.sh "version"` to update project files to reference the non-SNAPSHOT version |
| . `git diff` and review the updated files (expect all `pom.xml` files and this README) |
| . `git commit -a -m "TinkerPop x.y.z release"` and `git push` |
| . `git tag -a -m "TinkerPop x.y.z release" x.y.z` and `git push --tags` |
| . `mvn clean install -Dmaven.test.skip=true` |
| . `bin/publish-docs.sh <username>` |
| . `mvn install -Papache-release -DcreateChecksum=true -Dmaven.test.skip=true` |
| . Upload artifacts to `https://dist.apache.org/repos/dist/dev/incubator/tinkerpop` for `[VOTE]` review. |
| .. `svn co --depth empty https://dist.apache.org/repos/dist/dev/incubator/tinkerpop/ dev` and `mkdir dev/x.y.z` |
| .. `cp ~/.m2/repository/org/apache/tinkerpop/gremlin-console/x.y.z/gremlin-console-x.y.z-distribution.zip* dev/x.y.z` |
| .. `cp ~/.m2/repository/org/apache/tinkerpop/gremlin-server/x.y.z/gremlin-server-x.y.z-distribution.zip* dev/x.y.z` |
| .. `cp ~/.m2/repository/org/apache/tinkerpop/tinkerpop/x.y.z/tinkerpop-x.y.z-source-release.zip* dev/x.y.z` |
| .. `cd dev/x.y.z` and `for f in *.zip*; do mv "$f" "apache-$f"; done` |
| .. `cd ..; svn add x.y.z/; svn ci -m "TinkerPop x.y.z release"` |
| . Submit for `[VOTE]` at `dev@tinkerpop.incubator.apache.org` (see email template below). |
| . *Wait for vote acceptance* (72 hours). |
| |
| Incubator Vote |
| ~~~~~~~~~~~~~~ |
| |
| A positive vote for a particular release from the Apache Incubator is required to move to the following phase. |
| |
| . Submit for `[VOTE]` at `general@incubator.apache.org` (see email template below). |
| .. Include the vote tally: "Apache TinkerPop (http://tinkerpop.incubator.apache.org/) would like to release TinkerPop x.y.z. We had a dev@ VOTE which resulted in a tally of +1 (3), 0 (0), and -1 (0). We now present our artifacts for vote by Incubator." |
| . *Wait for vote acceptance* (72 hours). |
| |
| Release & Promote |
| ~~~~~~~~~~~~~~~~~ |
| |
| . `mvn clean install -Dmaven.test.skip=true; bin/process-docs.sh` - rebuild source and docs of tagged release |
| . `mvn deploy -Papache-release -DcreateChecksum=true -Dmaven.test.skip=true`- deploy signed artifacts with checksums to Apache Nexus |
| . Review and close the staging repository (Apache Nexus at link:https://repository.apache.org/[https://repository.apache.org/]) |
| . `svn co --depth empty https://dist.apache.org/repos/dist/dev/incubator/tinkerpop dev; svn up dev/x.y.z` |
| . `svn co --depth empty https://dist.apache.org/repos/dist/release/incubator/tinkerpop release; mkdir release/x.y.z` |
| . `ls dev/x.y.z/ | grep '\-\(distribution\|source\-release\)\.zip' | sed -e 's/\(^[^ ]*\)-distribution\([^ ]*\)/cp dev\/x.y.z\/\0 release\/x.y.z\/\1-bin\2/' -e 's/\(^[^ ]*\)-source-release\([^ ]*\)/cp dev\/x.y.z\/\0 release\/x.y.z\/\1-src\2/' | /bin/sh` |
| . `cd release; svn add x.y.z/; svn ci -m "TinkerPop x.y.z release"` |
| . Update homepage with references to latest distribution and to other internal links elsewhere on the page. |
| . Wait for Apache Central to sync the jars and src (link:http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/[http://repo1.maven.org/maven2/org/apache/tinkerpop/tinkerpop/]). |
| . Announce release on `dev@`/`gremlin-users@` mailing lists and tweet from `@apachetinkerpop`. |
| |
| Example `[VOTE]` email: |
| |
| ``` |
| [VOTE] TinkerPop x.y.z Release |
| |
| Hello, |
| |
| The release artifacts can be found at this location: |
| https://dist.apache.org/repos/dist/dev/incubator/tinkerpop/x.y.z/ |
| |
| The source distribution is provided by: |
| apache-tinkerpop-x.y.z-source-release.zip |
| |
| Two binary distributions are provided for user convenience: |
| apache-gremlin-console-x.y.z-distribution.zip |
| apache-gremlin-server-x.y.z-distribution.zip |
| |
| The online docs can be found here: |
| http://tinkerpop.incubator.apache.org/docs/x.y.z/ (user docs) |
| http://tinkerpop.incubator.apache.org/javadocs/x.y.z/core/ (core javadoc) |
| http://tinkerpop.incubator.apache.org/javadocs/x.y.z/full/ (full javadoc) |
| |
| The tag in Apache Git can be found here: |
| https://git-wip-us.apache.org/repos/asf?p=incubator-tinkerpop.git;... |
| |
| The release notes are available here: |
| https://github.com/apache/incubator-tinkerpop/blob/master/CHANGELOG.asciidoc#... |
| |
| The [VOTE] will be open for the next 72 hours --- closing <DayOfTheWeek> (<Month> <Day> <Year>) at <Time> <TimeZone>. |
| |
| My vote is +1. |
| |
| Thank you very much, |
| <TinkerPop Committer Name> |
| ``` |