---
# 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.

title: Release Guide
in_menu: false
--- name:overview

# Release Guide
How to create releases of ${project_name}

--- name:content 

## Release Preparation Steps

Various documentation changes first (which should be done before the release is cut)

* update the **${project_id}-website/src/main/webapp/download.page** page for this release
* edit the **${project_id}-website/src/main/scala/Website.scala** file and change the **project\_version** values
* blog about the release by creating an entry in **${project_id}-website/src/blog/releases** 
* update the changelog.md file, copying and pasting the section the release highlights from the above blog post
* add a link to the **${project_id}-website/src/main/webapp/versions.page** to the new version. 

## Cutting the release 

* prepare the release

{pygmentize:: text}
mvn -P release release:prepare 
{pygmentize}

* perform the release

{pygmentize:: text}
mvn -P release release:perform
{pygmentize}

* open [Nexus Staging](http://repository.apache.org/index.html#staging)
  and close the staged release of #{project_name}
* now start a vote on the mailing lists and if it passes
* promote the closed release in nexus
* announce the release on the [mailing list](index.html)
* drink beers!
