<!DOCTYPE html>
<!--
 | Generated by Apache Maven Doxia Site Renderer 1.8.1 
 | Rendered using Apache Maven Fluido Skin 1.6
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="Content-Language" content="en" />
    <title>Apache Hivemall &#x2013; Apache Hivemall Release Guide</title>
    <link rel="stylesheet" href="./css/apache-maven-fluido-1.6.min.css" />
    <link rel="stylesheet" href="./css/site.css" />
    <link rel="stylesheet" href="./css/print.css" media="print" />
      <script type="text/javascript" src="./js/apache-maven-fluido-1.6.min.js"></script>
      </head>
    <body class="topBarEnabled">
                      <a href="https://github.com/apache/incubator-hivemall">
      <img style="position: absolute; top: 0; right: 0; border: 0; z-index: 10000;"
        src="https://s3.amazonaws.com/github/ribbons/forkme_right_red_aa0000.png"
        alt="Fork me on GitHub">
    </a>
      <div id="topbar" class="navbar navbar-fixed-top navbar-inverse">
      <div class="navbar-inner">
            <div class="container"><div class="nav-collapse">
            <ul class="nav">
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Project <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="index.html" title="Home">Home</a></li>
            <li><a href="download.html" title="Download">Download</a></li>
            <li><a href="licenses.html" title="Licenses">Licenses</a></li>
            <li><a href="team.html" title="Team">Team</a></li>
            <li><a href="poweredby.html" title="Powered By">Powered By</a></li>
            <li><a href="http://incubator.apache.org/projects/hivemall.html" title="Incubation Status">Incubation Status</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Documentation <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="userguide/index.html" title="User Guide">User Guide</a></li>
            <li><a href="overview.html" title="Overview">Overview</a></li>
            <li><a href="https://cwiki.apache.org/confluence/display/HIVEMALL" target="_blank" title="Wiki">Wiki</a></li>
            <li><a href="faq.html" title="FAQ">FAQ</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">Get Involved <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="mailing-lists.html" title="Mailing Lists">Mailing Lists</a></li>
            <li><a href="https://issues.apache.org/jira/browse/HIVEMALL" target="_blank" title="Issues (Jira)">Issues (Jira)</a></li>
            <li><a href="repository.html" title="Source (Git)">Source (Git)</a></li>
            <li><a href="https://travis-ci.org/apache/incubator-hivemall" target="_blank" title="Travis CI">Travis CI</a></li>
            <li><a href="contributing.html" title="Contributing">Contributing</a></li>
            <li><a href="release-guide.html" title="Release Guide">Release Guide</a></li>
        </ul>
      </li>
        <li class="dropdown">
        <a href="#" class="dropdown-toggle" data-toggle="dropdown">ASF <b class="caret"></b></a>
        <ul class="dropdown-menu">
            <li><a href="http://www.apache.org/foundation/how-it-works.html" target="_blank" title="How Apache Works">How Apache Works</a></li>
            <li><a href="http://www.apache.org/foundation/" target="_blank" title="Foundation">Foundation</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank" title="Sponsoring Apache">Sponsoring Apache</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html" target="_blank" title="Thanks">Thanks</a></li>
        </ul>
      </li>
              </ul>
                              <ul class="nav pull-right"><li>
        <a href="https://twitter.com/ApacheHivemall" class="twitter-follow-button" data-show-count="false" data-align="right" data-size="large" data-show-screen-name="true" data-lang="en">Follow ApacheHivemall</a>
    <script type="text/javascript">!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0];if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src="//platform.twitter.com/widgets.js";fjs.parentNode.insertBefore(js,fjs);}}(document,"script","twitter-wjs");</script>
        </li></ul>
                    </div>
        </div>
      </div>
    </div>
    <div class="container">
      <div id="banner">
        <div class="pull-left"><div id="bannerLeft"><h2>Apache Hivemall</h2>
</div>
</div>
        <div class="pull-right"></div>
        <div class="clear"><hr/></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">Last Published: 2021-04-28<span class="divider">|</span>
</li>
          <li id="projectVersion">Version: 0.6.2-incubating-SNAPSHOT</li>
        </ul>
      </div>
        <div id="bodyColumn" >
<!--
  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.
-->
<!-- toc --><h1>Apache Hivemall Release Guide</h1>
<p>This document describes the release process of Apache Hivemall particularly for <a class="externalLink" href="http://incubator.apache.org/guides/releasemanagement.html#glossary-release-manager">Release Managers</a>.</p>
<p>For general information of the Apache Incubator release process, please refer <a class="externalLink" href="http://incubator.apache.org/guides/releasemanagement.html">Incubator Release Management</a> and <a class="externalLink" href="http://www.apache.org/dev/#releases">ASF Release Poloicy</a> page.</p>
<div class="section">
<h2><a name="Prerequisites"></a>Prerequisites</h2>
<p>If it is your first time doing an Apache release, then there is some initial setup involved. Follow <a href="./release-setup.html">this guide</a> for the initial setup.</p>

<ol style="list-style-type: decimal">
  
<li>Notifying the community the overall plan for the release</li>
  
<li>Ensure JIRA Issues are appropriately tagged for the Release
  
<ul>
    
<li><a class="externalLink" href="https://issues.apache.org/jira/browse/HIVEMALL-162?jql=project%20%3D%20HIVEMALL%20AND%20status%20in%20(Resolved%2C%20Closed)%20AND%20fixVersion%20%3D%20EMPTY">Check this link</a> for <tt>CLOSED/RESOLVED</tt> issues that does not have <tt>FixVersion</tt>.</li>
    
<li>Then, ensure that all JIRA issues that are addressed in this release are marked with the release version in the <tt>FixVersion</tt> field of the issue. <a class="externalLink" href="https://issues.apache.org/jira/browse/HIVEMALL-157?jql=project%20%3D%20HIVEMALL%20AND%20status%20in%20(Resolved%2C%20Closed)%20AND%20fixVersion%20%3D%200.5.0">Here</a> is an example for v0.5.0 release.</li>
  </ul></li>
</ol></div>
<div class="section">
<h2><a name="UPDATE_CHANGELOG"></a>UPDATE CHANGELOG</h2>

<ol style="list-style-type: decimal">
  
<li>Create a release note in JIRA following <a class="externalLink" href="https://confluence.atlassian.com/adminjiraserver071/creating-release-notes-802592502.html">this instructions</a>.</li>
  
<li>Download a release note as <tt>ChangeLog.html</tt> using <a class="externalLink" href="https://issues.apache.org/jira/secure/ConfigureReleaseNote.jspa?projectId=12320630">JIRA</a>.</li>
</ol></div>
<div class="section">
<h2><a name="TEST_YOUR_SETTINGS"></a>TEST YOUR SETTINGS</h2>
<p>Try installing locally artifacts with activation apache-release profile. The following command will build artifacts, sources and sign. </p>
<p><b>Note:</b> <i>Apache Hivemall keeps class file compatibility to Java 7 but requires Java 8 for packaging.</i></p>

<div class="source">
<div class="source"><pre class="prettyprint"># JDK 8 is required for packaging
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

# Try to create artifacts
export MAVEN_OPTS=-XX:MaxMetaspaceSize=256m

# (Optional) Workaround for SSL error `Received fatal alert: protocol_version`
export MAVEN_OPTS=&quot;$MAVEN_OPTS -Dhttps.protocols=TLSv1,TLSv1.1,TLSv1.2&quot;

mvn -Papache-release clean install
</pre></div></div>
<p>Ensure that all unit tests passes. License check by Apache RAT (<tt>mvn apache-rat:check</tt>) will be ran by the above commands.</p></div>
<div class="section">
<h2><a name="SNAPSHOT_RELEASE"></a>SNAPSHOT RELEASE</h2>
<div class="section">
<h3><a name="PREPARE_YOUR_POMS_FOR_RELEASE"></a>PREPARE YOUR POMS FOR RELEASE</h3>
<p><b>1)</b> Switch to master syncing to ASF master</p>

<div class="source">
<div class="source"><pre class="prettyprint">git checkout master
git fetch
git pull # or, git reset --hard asf/master
</pre></div></div>
<p><b>2)</b> Set version string for a snapshot</p>

<div class="source">
<div class="source"><pre class="prettyprint">version=X.Y.Z
# echo &quot;${version}-incubating-SNAPSHOT&quot;

./bin/set_version.sh --pom --version &quot;${version}-incubating-SNAPSHOT&quot;
</pre></div></div>
<p><b>Note:</b> <i><tt>--pom</tt> option SHOULD only used for SNAPSHOT release.</i></p>

<div class="source">
<div class="source"><pre class="prettyprint">git commit -a -m &quot;Prepare for the next Snapshot release of X.Y.Z&quot;
git push asf master
</pre></div></div>
<p><b>3)</b> Perform a dryRun</p>

<div class="source">
<div class="source"><pre class="prettyprint">version=X.Y.Z
# RC should start at 1 and increment if early release candidates fail to release
rc=1
next_version=X.(Y+1).Z

# Confirm that version and rc is defined.
echo &quot;Release version: ${version}-incubating&quot;
echo &quot;Development version: ${next_version}-incubating-SNAPSHOT&quot;

mvn -Papache-release release:prepare \
  -DautoVersionSubmodules=true -DdryRun=true \
  -Darguments='-Dmaven.test.skip.exec=true' -DskipTests=true -Dmaven.test.skip=true \
  -Dtag=v${version}-rc${rc} -DreleaseVersion=${version}-incubating -DdevelopmentVersion=${next_version}-incubating-SNAPSHOT
</pre></div></div>
<p><b>Note:</b> <tt>-rcX</tt> is only used for git tag. Release candidates do NOT have <tt>-rcX</tt> for artifact versions in pom. Release candidates are just for voting.</p></div>
<div class="section">
<h3><a name="PUBLISH_A_SNAPSHOT"></a>PUBLISH A SNAPSHOT</h3>

<div class="source">
<div class="source"><pre class="prettyprint">mvn deploy \
  -Darguments='-Dmaven.test.skip.exec=true' -DskipTests=true -Dmaven.test.skip=true
</pre></div></div>
<p><b>Note:</b> <i>You SHOULD verify the deployment under <a class="externalLink" href="https://repository.apache.org/content/repositories/snapshots/org/apache/hivemall/">the Maven Snapshot repository at Apache</a>.</i></p></div></div>
<div class="section">
<h2><a name="PREPARE_THE_RELEASE"></a>PREPARE THE RELEASE</h2>
<div class="section">
<h3><a name="BRANCH_THE_RELEASE"></a>BRANCH THE RELEASE</h3>
<p><b>1)</b> Create a branch</p>

<div class="source">
<div class="source"><pre class="prettyprint">git checkout -b vX.Y.Z
</pre></div></div>
<p><b>Note:</b> <i>Branch name starts with <tt>v</tt> and does not include <tt>-rcX</tt>.</i></p>
<p><b>2)</b> Send e-mail announcing the release branch</p>

<div class="source">
<div class="source"><pre class="prettyprint">To: dev@hivemall.incubator.apache.org
CC: private@hivemall.incubator.apache.org
Subject: New release branch X.Y.Z

Hello Hivemall developers and friends,

We now have a release branch for X.Y.Z release. Trunk has been bumped to X.Y.Z-SNAPSHOT.

  https://github.com/apache/incubator-hivemall/tree/vX.Y.Z

I'll be going over the JIRAs to move every non-blocker from this release to the next release. Release voting will be posted soon.
</pre></div></div></div>
<div class="section">
<h3><a name="PREPARE_A_RELEASE"></a>PREPARE A RELEASE</h3>
<p><b>1)</b> Set a release version</p>

<div class="source">
<div class="source"><pre class="prettyprint">version=X.Y.Z
rc=1
next_version=X.(Y+1).Z

# Confirm that version and rc is defined.
echo &quot;${version}-incubating (Release Candidates ${rc})&quot;
# 0.5.0-incubating (Release Candidates 3)
</pre></div></div>
<p><b>2)</b> Update version strings in source codes.</p>

<div class="source">
<div class="source"><pre class="prettyprint">./bin/set_version.sh --version &quot;${version}-incubating&quot;

# Check list of files to be committed.
git status
git commit -a -m &quot;Bumped version string to ${version}-incubating&quot;
</pre></div></div>
<p><b>3)</b> Prepare sets the version numbers in POM and creates a tag.</p>

<div class="source">
<div class="source"><pre class="prettyprint">mvn -Papache-release release:clean release:prepare \
  -DautoVersionSubmodules=true -DdryRun=false \
  -Darguments='-Dmaven.test.skip.exec=true' -DskipTests=true -Dmaven.test.skip=true \
  -Dtag=v${version}-rc${rc} -DreleaseVersion=${version}-incubating -DdevelopmentVersion=${next_version}-incubating-SNAPSHOT
</pre></div></div>
<p><b>4)</b> Update version strings for the development iteration</p>

<div class="source">
<div class="source"><pre class="prettyprint">./bin/set_version.sh --version &quot;${next_version}-incubating-SNAPSHOT&quot;

# Check list of files to be committed.
git stauts
git commit --amend -a
</pre></div></div>
<p><b>5)</b> Push release branch and tag to remote ASF repository</p>

<div class="source">
<div class="source"><pre class="prettyprint"># Push the release branch
git push asf v${version}

# Push the release tag
git push asf v${version}-rc${rc}
</pre></div></div></div></div>
<div class="section">
<h2><a name="STAGE_THE_RELEASE_FOR_A_VOTE"></a>STAGE THE RELEASE FOR A VOTE</h2>
<p>The release will automatically be inserted into a temporary staging repository for you.</p>

<div class="source">
<div class="source"><pre class="prettyprint">mvn -Papache-release release:perform \
  -Darguments='-Dmaven.test.skip.exec=true' -DskipTests=true -Dmaven.test.skip=true \
  -Dgoals=deploy -DlocalRepoDirectory=. -DlocalCheckout=true
</pre></div></div>
<div class="section">
<h3><a name="Verify_nexus_release_artifacts"></a>Verify nexus release artifacts</h3>
<p>1) Verify the staged artifacts in the nexus repo  - Go to <a class="externalLink" href="https://repository.apache.org/">https://repository.apache.org/</a> and login  - Under <tt>Build Promotion</tt>, click <tt>Staging Repositories</tt>  - In the <tt>Staging Repositories</tt> tab there should be a line with profile <tt>org.apache.hivemall</tt>  - Navigate through the artifact tree and make sure that all javadoc, sources, tests, and jars have .asc (GPG signature). Refer <a class="externalLink" href="http://www.apache.org/dev/release-signing.html#verifying-signature">the ASF page</a> for artifacts verification.</p>
<p>2) Close the nexus staging repo  - Check the box on in the first column of the row, and press the &#x2018;Close&#x2019; button to publish the repository at <a class="externalLink" href="https://repository.apache.org/content/repositories/orgapachehivemall-1001/">https://repository.apache.org/content/repositories/orgapachehivemall-1001/</a> (or a similar URL)</p></div>
<div class="section">
<h3><a name="Upload_the_artifacts_via_subversion_to_a_staging_area"></a>Upload the artifacts via subversion to a staging area</h3>

<ul>
  
<li>Prepare release artifacts in SVN repository</li>
</ul>

<div class="source">
<div class="source"><pre class="prettyprint"># Checkout release SVN repository
mkdir -p dist/dev/incubator
cd dist/dev/incubator
svn co https://dist.apache.org/repos/dist/dev/incubator/hivemall/
cd hivemall

# Download release artifacts
wget -e robots=off --no-check-certificate \
 -r -np --reject=html,txt,tmp -nH --cut-dirs=7 \
 https://repository.apache.org/content/repositories/orgapachehivemall-1001/org/apache/hivemall/hivemall/${version}-incubating/

# Rename directory for RC
mv ${version}-incubating ${version}-incubating-rc${rc}

# Put ChangeLog
cd ${version}-incubating-rc${rc}
# Put ChangeLog generated by JIRA
cp ~/Downloads/ChangeLog.html .

# Remove deprecated md5 and sha1
# See https://www.apache.org/dev/release-distribution.html#sigs-and-sums

ls *.md5 *.sha1
rm *.md5 *.sha1

# Add SHA-512 checksum

ls *.xml *.zip *.pom

for f in `ls *.xml *.zip *.pom`; do
  shasum -a 512 ${f} | cut -f1 -d' '  &gt; ${f}.sha512
  ls ${f}.sha512
done
</pre></div></div>

<ul>
  
<li>Push release arfifacts to ASF svn repository</li>
</ul>

<div class="source">
<div class="source"><pre class="prettyprint">cd dist/dev/incubator/hivemall
# ls ${version}-incubating-rc${rc}

svn add ${version}-incubating-rc${rc}/
svn commit -m &quot;Put hivemall version ${version}-incubating-rc${rc} artifacts&quot;
</pre></div></div></div>
<div class="section">
<h3><a name="Verify_Release_Artifacts"></a>Verify Release Artifacts</h3>

<ul>
  
<li>Check release artifacts are properly deployed in the SVN repository: <a class="externalLink" href="https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc1/">https://dist.apache.org/repos/dist/dev/incubator/hivemall/X.Y.Z-incubating-rcZ/</a></li>
  
<li>Follow <a href="./verify_artifacts.html">this guide</a> for release artifacts verification.</li>
</ul></div></div>
<div class="section">
<h2><a name="PPMC_voting"></a>PPMC voting</h2>
<p>Create a VOTE email thread on <a class="externalLink" href="mailto:dev@hivemall.incubator.apache.org">dev@hivemall.incubator.apache.org</a> to record votes as replies.</p>

<div class="source">
<div class="source"><pre class="prettyprint">To: dev@hivemall.incubator.apache.org
CC: private@hivemall.incubator.apache.org
Subject: [VOTE] Release Apache Hivemall (Incubating) v0.5.0 Release Candidate #3

Hi all,

Apache Hivmeall 0.5.0 release candidate #1 is now available for a vote within dev community.

Links to various release artifacts are given below. Please review and cast your vote.

    - The source tarball, including signatures, digests, ChangeLog, etc.:
      https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc1/
	- Sources for the release:
	  https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc1/hivemall-0.5.0-incubating-source-release.zip
	  https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc1/hivemall-0.5.0-incubating-source-release.zip.asc (PGP Signature)
	  https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc1/hivemall-0.5.0-incubating-source-release.zip.sha512 (SHA512 Hash)
    - Git tag for the release:
      https://gitbox.apache.org/repos/asf?p=incubator-hivemall.git;a=shortlog;h=refs/tags/v0.5.0-rc1
    - The Nexus Staging URL:
      https://repository.apache.org/content/repositories/orgapachehivemall-1001/
    - KEYS file for verification:
      https://dist.apache.org/repos/dist/dev/incubator/hivemall/KEYS
    - For information about the contents of this release, see:
      https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc1/ChangeLog.html

Find Podling releases policies in
    https://incubator.apache.org/policy/incubation.html#releases
    http://www.apache.org/legal/release-policy.html

Artifacts verification how-to can be found in
    http://hivemall.incubator.apache.org/verify_artifacts.html

The vote will be open for at least 72 hours and until necessary number of votes are reached.

At lease three +1 from PPMC members are required and we welcome your vote!

[ ] +1  approve (Release this package as Apache Hivemall 0.5.0-incubating)
[ ] +0  no opinion
[ ] -1  disapprove (and reason why)

Here is my +1 (binding).

Regards,
Makoto
</pre></div></div>
<p>Once 72 hours has passed (which is generally preferred) and/or at least three +1 (binding) votes have been cast with no -1 (binding) votes, send an email closing the vote and pronouncing the release candidate a success.</p>

<div class="source">
<div class="source"><pre class="prettyprint">To: dev@hivemall.incubator.apache.org
Subject: [RESULT][VOTE]: Release Apache Hivemall (Incubating) &lt;release version&gt;

Hi all,

The Apache Hivemall &lt;release version&gt; vote is now closed and has passed as follows:

From PPMC members:
+1 myui (Makoto)
+1 maropu (Takeshi)
+1 lewuathe (Kai)
+1 takuti (Takuya)
+1 ozawa (Tsuyoshi)

From Mentors:
+1 daniel (IPMC)

Other non-binding votes:
+1 Kento (committer)

I will send a vote mail to incubator-general mail list to collect three IPMC +1's votes.
https://incubator.apache.org/policy/incubation.html#releases.

If voting succeeds, v0.5.0 will be released based on v0.5.0-rc2 with removing rc2.

Thanks all of the voters.

Thanks,
Makoto
on behalf of Apache Hivemall PPMC
</pre></div></div></div>
<div class="section">
<h2><a name="IPMC_Voting"></a>IPMC Voting</h2>
<p>What if vote succeed, then vote in <a class="externalLink" href="mailto:general@incubator.apache.org">general@incubator.apache.org</a>. Three +1 Incubator PMC votes are required as described in <a class="externalLink" href="https://incubator.apache.org/policy/incubation.html#releases">this page</a>.</p>

<div class="source">
<div class="source"><pre class="prettyprint">To: general@incubator.apache.org
Subject: [VOTE] Release Apache Hivemall (Incubating) v0.5.0-RC2

Hi all,

The Apache Hivemall community has approved a proposal to release Apache Hivemall v0.5.0 by v0.5.0-RC2.

We now kindly request that the Incubator PMC members review and vote on this incubator release candidate.

The PPMC vote thread is located here:
    https://www.mail-archive.com/dev@hivemall.incubator.apache.org/msg00450.html (vote)
	https://www.mail-archive.com/dev@hivemall.incubator.apache.org/msg00460.html (vote result)

Links to various release artifacts are given below.

    - The source tarball, including signatures, digests, ChangeLog, etc.:
      https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc2/
    - Sources for the release:
      https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc2/hivemall-0.5.0-incubating-rc2-source-release.zip
    - Git tag for the release:
      https://gitbox.apache.org/repos/asf?p=incubator-hivemall.git;a=shortlog;h=refs/tags/v0.5.0-rc2
    - The Nexus Staging URL:
      https://repository.apache.org/content/repositories/orgapachehivemall-1002/
    - KEYS file for verification:
      https://dist.apache.org/repos/dist/dev/incubator/hivemall/KEYS
    - For information about the contents of this release, see:
      https://dist.apache.org/repos/dist/dev/incubator/hivemall/0.5.0-incubating-rc2/ChangeLog.html

Artifacts verification how-to can be found in
    http://hivemall.incubator.apache.org/verify_artifacts.html

Please vote accordingly:

[ ] +1  approve (Release this package as Apache Hivemall 0.5.0-incubating)
[ ] -1  disapprove (and reason why)

The vote will be open for at least 72 hours.

Regards,
Makoto
on behalf of Apache Hivemall PPMC
</pre></div></div>
<p>Once 72 hours has passed (which is generally preferred) and/or at least three +1 (binding) votes have been cast with no -1 (binding) votes, send an email closing the vote and pronouncing the release candidate a success.</p>

<div class="source">
<div class="source"><pre class="prettyprint">To: general@incubator.apache.org
CC: dev@hivemall.incubator.apache.org
Subject: [RESULT][VOTE]: Release Apache Hivemall (Incubating) &lt;release version&gt;

Hi all,

The vote to release Apache Hivemall (incubating) version v0.5.0
Release Candidate 3 has passed with 3 +1 binding votes and no other votes.

+1 binding:
 ..
 ..
 ..

Vote thread:
 https://lists.apache.org/thread.html/86a0d8df057c6c7b0675f8bbdb211fe6602545c68de2bf9b7b8204c1@%3Cgeneral.incubator.apache.org%3E

I'd like to thank all voters who helped verifying the release.

The Apache Hivemall community will proceed to publish the 0.5.0-incubating release and send announcements.

Best,
Makoto
on behalf of Apache Hivemall PPMC
</pre></div></div></div>
<div class="section">
<h2><a name="Finalize_release"></a>Finalize release</h2>
<p>Once the Incubator general vote has passed, we can publish the source release and artifacts.</p>
<div class="section">
<h3><a name="Publish_to_Maven_Central_in_Nexus"></a>Publish to Maven Central in Nexus</h3>

<ul>
  
<li>Go to <a class="externalLink" href="https://repository.apache.org/">https://repository.apache.org/</a> and login</li>
  
<li>Under Build Promotion, click Staging Repositories</li>
  
<li>In the Staging Repositories tab there should be a line with profile org.apache.hivemall</li>
  
<li>click <tt>Release</tt>.
  
<ul>
    
<li>You shall now see your artifacts in the release repository created for you. In some hours, it should also appear in Maven Central.</li>
  </ul></li>
</ul></div>
<div class="section">
<h3><a name="Update_JIRA"></a>Update JIRA</h3>
<p>Update the JIRA versions page to close all issues, mark the version as <tt>released</tt>, and set the date to the date that the release was approved. You may also need to make a new release entry for the next release.</p></div>
<div class="section">
<h3><a name="Source_Release"></a>Source Release</h3>
<p>The Hivemall source release are checked into SVN under: <a class="externalLink" href="https://dist.apache.org/repos/dist/release/incubator/hivemall">https://dist.apache.org/repos/dist/release/incubator/hivemall</a></p>

<div class="source">
<div class="source"><pre class="prettyprint"># cd ~/work/dist
# mkdir -p release/incubator
# cd release/incubator
# svn co https://dist.apache.org/repos/dist/release/incubator/hivemall/
# cd hivemall

# Put release artifacts to release directory
mkdir 0.5.0-incubating
cp ../../../dev/incubator/hivemall/0.5.0-incubating-rc3/ChangeLog.html 0.5.0-incubating/
cp ../../../dev/incubator/hivemall/0.5.0-incubating-rc3/hivemall-0.5.0-incubating*.zip* 0.5.0-incubating/
cp ../../../dev/incubator/hivemall/0.5.0-incubating-rc3/hivemall*.jar* 0.5.0-incubating/
ls 0.5.0-incubating/

# Commit to SVN
svn add 0.5.0-incubating/
svn commit -m &quot;Put hivemall version 0.5.0-incubating release artifacts&quot;
</pre></div></div>
<p><i>Note:</i> old releases are <a class="externalLink" href="https://archive.apache.org/dist/incubator/">automatically archived</a> and to needed to be removed from <a class="externalLink" href="https://archive.apache.org/dist/incubator/hivemall/">dist</a>.</p>
<p>Check release artifacts in the SVN repository:  <a class="externalLink" href="https://dist.apache.org/repos/dist/release/incubator/hivemall/0.5.0-incubating/">https://dist.apache.org/repos/dist/release/incubator/hivemall/0.5.0-incubating/</a>  (<a class="externalLink" href="https://www.apache.org/dyn/closer.cgi/incubator/hivemall">Mirror</a>)</p></div>
<div class="section">
<h3><a name="Merge_release_branch_for_the_next_development_iteration"></a>Merge release branch for the next development iteration</h3>
<p>If IPMC vote succeed, then merge the release branch into the master branch.</p></div>
<div class="section">
<h3><a name="Publish_the_websit"></a>Publish the websit</h3>
<p>Update <a class="externalLink" href="http://hivemall.incubator.apache.org/download.html">download page</a> etc.</p></div>
<div class="section">
<h3><a name="Announcing_the_release"></a>Announcing the release</h3>
<p>Make an announcement about the release on the <tt>user@hivemall.incubator.apache.org</tt>, <tt>dev@hivemall.incubator.apache.org</tt>, <tt>general@incubator.apache.org</tt>, and <tt>announce@apache.org</tt> list as per the Apache Announcement Mailing Lists page.</p>

<div class="source">
<div class="source"><pre class="prettyprint">[ANNOUNCE] Apache Hivemall 0.5.0-incubating released

The Apache Hivemall (incubating) project team is proud to announce
Apache Hivemall 0.5.2-incubating has been released.
This is the 2nd Apache release as an Apache Incubator project.

Apache Hivemall is a scalable machine learning library implemented as
Hive UDFs/UDAFs/UDTFs. Hivemall runs on Hadoop-based data processing
frameworks, specifically on Apache Hive, Apache Spark, and Apache Pig.

The release artifacts and ChangeLog can be found at:

 http://hivemall.incubator.apache.org/download.html

Release artifacts in Maven Central:

 https://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.apache.hivemall%22%20AND%20v%3A%220.5.2-incubating%22

Find more about our project at:
 - Project Site:  http://hivemall.incubator.apache.org/
 - Github mirror: https://github.com/apache/incubator-hivemall
 - Mailing list(s): dev@hivemall.incubator.apache.org
                    user@hivemall.incubator.apache.org

Thanks,
Makoto
on behalf of Apache Hivemall PPMC

=====
*Disclaimer*
Apache Hivemall (incubating) is an effort undergoing incubation at
The Apache Software Foundation (ASF), sponsored by the name of Apache
Incubator PMC. Incubation is required of all newly accepted projects
until a further review indicates that the infrastructure, communications,
and decision making process have stabilized in a manner consistent
with other successful ASF projects. While incubation status is not
necessarily a reflection of the completeness or stability of the code,
it does indicate that the project has yet to be fully endorsed by the ASF.
</pre></div></div></div></div>
        </div>
    </div>
    <hr/>
    <footer>
      <div class="container">
        <div class="row">
<p>
			  <small>
                Apache Hivemall is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored by <a href="http://incubator.apache.org/">the Apache Incubator</a>.
                Incubation is required of all newly accepted projects until a further review indicates that the infrastructure, communications, 
                and decision making process have stabilized in a manner consistent with other successful ASF projects. 
                While incubation status is not necessarily a reflection of the completeness or stability of the code, 
                it does indicate that the project has yet to be fully endorsed by the ASF.
			  </small>
			</p>
        </div>
        <p id="poweredBy" class="pull-right">  <a href="http://incubator.apache.org/projects/hivemall.html" title="Apache Incubator" class="builtBy"><img class="builtBy"  alt="Apache Incubator" src="images/apache-incubator-logo.png"    /></a>
  </p>
        </div>
    </footer>
    </body>
</html>
