blob: dca678748a491aa01aef5d9432ac512e82bbbfef [file] [log] [blame]
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<!-- ====================================================================== -->
<!-- GENERATED FILE, DO NOT EDIT, EDIT THE XML FILE IN xdocs INSTEAD! -->
<!-- ====================================================================== -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<style type="text/css">@import "stylesheets/base.css";</style>
<meta name="author" value=" Apache UIMA Documentation Team">
<meta name="email" value="dev@uima.apache.org">
<title>Apache UIMA - Notes on Releases with Git</title>
<!-- Begin Cookie Consent plugin by Silktide - https://silktide.com/cookieconsent -->
<!-- Commented out because implied consent is not compatible with GDPR -->
<!--
<script type="text/javascript">
window.cookieconsent_options = {"message":"This website uses cookies to ensure you get the best experience on our website","dismiss":"Got it!","learnMore":"More info","link":"https://uima.apache.org/privacy-policy.html","theme":"dark-bottom"};
</script>
<script type="text/javascript" src="/cookieconsent2/cookieconsent.min.js"></script>
-->
<!-- End Cookie Consent plugin -->
<!-- Begin Google Analytics -->
<!-- Commented out because GA requires consent according to GDPR -->
<!--
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-70846351-1', 'auto');
ga('set', 'anonymizeIp', true);
ga('send', 'pageview');
</script>
-->
<!-- End Google Analytics -->
</head>
<body>
<div class="topLogos">
<table border="0" width="100%" cellspacing="0">
<!-- TOP IMAGE -->
<tr>
<td align='LEFT'>
<a href="index.html">
<img style="border: 1px solid black;" src="./images/UIMA_banner2tlpTm.png" alt="UIMA project logo" border="0"/>
</a>
</td>
<td align='CENTER'>
<div class="pageBanner">Notes on Releases with Git</div>
</td>
<td align='RIGHT'>
<a href="https://www.apache.org">
<img src="./images/asf-logo-on-white-smallTm.png" alt="Apache UIMA" border="0"/>
</a>
</td>
</tr>
</table>
<hr noshade="" size="1"/>
</div>
<table border="0" width="100%" cellspacing="4">
<tr>
<td align='RIGHT' colspan="2">
<form method="get" action="https://www.google.com/search">
Search the site
<input type="text" name="q" size="25" maxlength="255" value="" />
<input type="hidden" name="sitesearch" value="https://uima.apache.org/" />
<input name="Search" value="Search Site" type="submit"/>
</form>
</td>
</tr>
<tr> <!-- LEFT SIDE NAVIGATION -->
<td width="20%" valign="top">
<!-- regular menu -->
<div class="navBar">
<br/>
<div class="navBarItem"> <div class="navPartHeading">General</div>
</div>
<div class="navBar">
<div class="navBarItem"> <a href="./index.html">Home</a>
</div>
<div class="navBarItem"> <a href="./downloads.cgi">Downloads</a>
</div>
<div class="navBarItem"> <a href="./documentation.html">Documentation</a>
</div>
<div class="navBarItem"> <a href="./news.html">News</a>
</div>
<div class="navBarItem"> <a href="./publications.html">Publications</a>
</div>
<br style="line-height: .5em"/>
<div class="navBarItem"> <a href="https://issues.apache.org/jira/browse/uima" target="_blank" rel="noopener">Issue tracker <img src="images/offsitelink.png"/></a>
</div>
<div class="navBarItem"> <a href="https://cwiki.apache.org/confluence/display/UIMA/" target="_blank" rel="noopener">Wiki <img src="images/offsitelink.png"/></a>
</div>
<br style="line-height: .5em"/>
<div class="navBarItem"> <a href="https://cwiki.apache.org/confluence/display/UIMA/Powered+by+Apache+UIMA" target="_blank" rel="noopener">Powered By UIMA <img src="images/offsitelink.png"/></a>
</div>
</div>
<br/>
<div class="navBarItem"> <div class="navPartHeading">Community</div>
</div>
<div class="navBar">
<div class="navBarItem"> <a href="./get-involved.html">Get Involved</a>
</div>
<div class="navBarItem"> <a href="./mail-lists.html">Mailing Lists</a>
</div>
<div class="navBarItem"> <a href="./contribution-policy.html">Contribution Policies</a>
</div>
<div class="navBarItem"> <a href="./faq.html">FAQ</a>
</div>
<div class="navBarItem"> <a href="./project-guidelines.html">Project Guidelines</a>
</div>
</div>
<br/>
<div class="navBarItem"> <div class="navPartHeading">Scaleout Frameworks</div>
</div>
<div class="navBar">
<div class="navBarItem"> <a href="./doc-uimaas-what.html">UIMA-AS</a>
</div>
<div class="navBarItem"> <a href="./doc-uimaducc-whatitam.html">UIMA-DUCC</a>
</div>
<div class="navBarItem"> <a href="./doc-uimaducc-demo.html">..Demo Page</a>
</div>
<div class="navBarItem"> <a href="http://uima-ducc-demo.apache.org:42133" target="_blank" rel="noopener">..Demo Live <img src="images/offsitelink.png"/></a>
</div>
</div>
<br/>
<div class="navBarItem"> <div class="navPartHeading">Components & Tools</div>
</div>
<div class="navBar">
<div class="navBarItem"> <a href="./sandbox.html#uima-addons-annotators">Annotators</a>
</div>
<div class="navBarItem"> <a href="./toolsServers.html">Tools & Servers</a>
</div>
<div class="navBarItem"> <a href="./sandbox.html">Addons and Sandbox</a>
</div>
<div class="navBarItem"> <a href="./ruta.html">UIMA Ruta</a>
</div>
<div class="navBarItem"> <a href="./uimafit.html">uimaFIT</a>
</div>
<div class="navBarItem"> <a href="./external-resources.html">External Resources</a>
</div>
</div>
<br/>
<div class="navBarItem"> <div class="navPartHeading">Development</div>
</div>
<div class="navBar">
<div class="navBarItem"> <a href="./dev-quick.html">Quick Start: building</a>
</div>
<div class="navBarItem"> <a href="./building-uima.html">Building from Source</a>
</div>
<div class="navBarItem"> <a href="./one-time-setup.html">One-time setups</a>
</div>
<div class="navBarItem"> <a href="./svn.html">Source Code</a>
</div>
<div class="navBarItem"> <a href="./release.html">Doing a UIMA release</a>
</div>
<div class="navBarItem"> <a href="https://www.apache.org/security/committers.html" target="_blank" rel="noopener">Doing a CVE (Apache) <img src="images/offsitelink.png"/></a>
</div>
<div class="navBarItem"> <a href="./eclipse-update-site.html">Eclipse Update Sites</a>
</div>
<div class="navBarItem"> <a href="./git.html">GIT</a>
</div>
<div class="navBarItem"> <a href="./codeConventions.html">Code Conventions</a>
</div>
<div class="navBarItem"> <a href="./uima-specification.html">UIMA Specification (OASIS)</a>
</div>
<div class="navBarItem"> <a href="./team-list.html">Project Team</a>
</div>
<div class="navBarItem"> <a href="./maven-design.html">Maven Use</a>
</div>
<div class="navBarItem"> <a href="./updating-website.html">Updating this Website</a>
</div>
</div>
<br/>
<div class="navBarItem"> <div class="navPartHeading">Events and Conferences</div>
</div>
<div class="navBar">
<div class="navBarItem"> <a href="./coling14.html">COLING 2014</a>
</div>
<div class="navBarItem"> <a href="./gscl13.html">GSCL 2013</a>
</div>
<div class="navBarItem"> <a href="./iks09.html">IKS 2009</a>
</div>
<div class="navBarItem"> <a href="./gscl09.html">GSCL 2009</a>
</div>
<div class="navBarItem"> <a href="./lsm09.html">LSM 2009</a>
</div>
<div class="navBarItem"> <a href="./lrec08.html">LREC 2008</a>
</div>
<div class="navBarItem"> <a href="./gldv07.html">GLDV 2007</a>
</div>
</div>
<br/>
<div class="navBarItem"> <div class="navPartHeading">ASF</div>
</div>
<div class="navBar">
<div class="navBarItem"> <a href="https://www.apache.org/licenses/" target="_blank" rel="noopener">License <img src="images/offsitelink.png"/></a>
</div>
<div class="navBarItem"> <a href="https://www.apache.org/foundation/thanks.html" target="_blank" rel="noopener">ASF Sponsors <img src="images/offsitelink.png"/></a>
</div>
<div class="navBarItem"> <a href="https://www.apache.org/foundation/sponsorship.html" target="_blank" rel="noopener">ASF Sponsorship <img src="images/offsitelink.png"/></a>
</div>
<div class="navBarItem"> <a href="./security_report">Security</a>
</div>
</div>
</div>
</td>
<td width="80%" align="left" valign="top">
<div class="sectionTable">
<table class="sectionTable">
<tr><td>
<a name="Suggested basic release flow"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;Suggested basic release flow</h1></a>
</td></tr>
<tr><td>
<blockquote class="sectionBody">
<ol><li><p>Update the master in preparation for the release, including things like the Readme, release-notes,
the Jira release pointer for ISSUES Fixed, API compatibility: previous version.
See <a target="_blank" rel="nofollow noopener" href="checklist-release.html">checklist-release</a>
</p></li>
<li><p>(optional, but recommended) Make a release branch, and do all the work
on that branch. Once the release is out, merge the branch back into the master (should have
very little change, other than new pom SNAPSHOT version levels).</p></li>
<li><p>Checkout the release branch, and run the normal maven release prepare / perform cycles.</p></li>
<li><p>Once the vote passes, retag the last rc with the rel/tag-name (see below).</p></li>
<li><p>If branched, merge the release branch back into the master (updating the pom SNAPSHOT version numbers).</p></li>
</ol>
<h2>Git Commands to use</h2>
<h3>Make new Release branch</h3>
<p>On github.com/apache/uima-xxx, use the website to create a new branch, suggested name rc/uimaxxx.x.y.z.
Don't use a name starting with rel/ because those branches are "protected".</p>
<p>First switch to the particular "master" (e.g. master or master-v2 or ... ). Then create the new branch,
which will start by being a copy of whatever branch github was on.</p>
<h3>Check out the new release branch</h3>
<p>Checkout a new release branch to a specific spot. </p>
<p>cd to your build spot; mkdir build-directory-rcX</p>
<p><code>git clone -b rc/uimaxxx.x.y.z https://github.com/apache/uima-uimaj build-directory-rcX</code></p>
</blockquote>
</p>
</td></tr>
</table>
<div class="sectionTable">
<table class="sectionTable">
<tr><td>
<a name="Tags"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;Tags</h1></a>
</td></tr>
<tr><td>
<blockquote class="sectionBody">
<p>Tags are stored in the .git folder in the subfolder /refs/tags.</p>
<p>When Apache Infra sets up a writable git project, they set
<a target="_blank" rel="nofollow noopener" href="https://help.github.com/en/github/administering-a-repository/about-protected-branches">
github protection</a>. The protection is set on
<ul><li>refs/heads/trunk</li>
<li>refs/heads/master</li>
<li>refs/heads/rel/</li>
<li>refs/tags/rel/</li>
</ul>
</p>
<p>After a release passes, make a new tag for the release with the name rel/...tag-name... Here's how:</p>
<ul><li><code>git tag -m "proj-name-1.2.3 rcXXX released" rel/proj-name-x.y.z proj-name-x.y.z^{}</code>
The strange notation ^{} peels the annotated tag and returns a ref to the actual commit.</li>
<li><code>git push origin rel/proj-name-x.y.z</code> This updates the new tag to the remote repo</li>
</ul>
</blockquote>
</p>
</td></tr>
</table>
<div class="sectionTable">
<table class="sectionTable">
<tr><td>
<a name="What the maven release plugin does with GIT"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;What the maven release plugin does with GIT</h1></a>
</td></tr>
<tr><td>
<blockquote class="sectionBody">
<h2>release:prepare</h2>
<p>
<ul>
<li>Take all the poms in the project which start out at some x.y.z-SNAPSHOT version, and
update the versions to x.y.z (without the -SNAPSHOT).</li>
<li>Build the project.</li>
</ul>
</p>
<p>
<ul>
<li>Create a commit with all the updated POMs, and commit that to whatever branch was checked out at the start.</li>
<li>git push</li>
<li>Create a tag</li>
<li>git push</li>
</ul>
</p>
<p>
<ul>
<li>Update all the poms to x.y.z + 0.0.1 -SNAPSHOT, and commit them</li>
<li>git push</li>
</ul>
</p>
<h2>release:perform</h2>
<p>This does a build using the "tag" checkout, and uploads the artifacts to the maven staging repository.</p>
<p>The tag is cloned into the target/checkout directory</p>
<p>A build is done from the target/checkout spot, with maven artifacts uploaded to repository.apache.com staging area.</p>
</blockquote>
</p>
</td></tr>
</table>
<div class="sectionTable">
<table class="sectionTable">
<tr><td>
<a name="How to roll back a release attempt"><h1><img src="images/UIMA_4sq50tightCropSolid.png"/>&nbsp;How to roll back a release attempt</h1></a>
</td></tr>
<tr><td>
<blockquote class="sectionBody">
<h2>(Optional) Reset the branch to last commit before release:prepare</h2>
<p>If you don't do this, when you do the release:prepare again, it will increment the SNAPSHOT and release numbers,
and you'll need to override those. It's fine to work this way, as long as you remember to override the release
and SNAPSHOT numbers.
</p>
<p>The idea is to reset the branch being used to build, back to the commit just before the maven release:prepare
commit, which is identified with the message <code>[maven-release-plugin] prepare for next development iteration</code>.</p>
<p>Do this by working in a checkout of the branch being used to build, typing <code>git log ...</code> and finding the hash
for the commit right before the prepare commit.</p>
<p>Don't do this next step unless you know no one has fetched the previously pushed maven release changes.
This is typically true, because only you are working on the release, and you typically will be working in
a branch made just for this, which others are unlikely to access.</p>
<ul><li><code>git log -5 --oneline</code> # shows the last 5 commits. Find the last commit before the maven prepare one.</li>
<li><code>git reset --hard hash-of-commit</code> where hash-of-commit is from the log </li>
<li><code>git push -f origin branch-name # force needed because removing history</code></li>
</ul>
<h2>Remove the previously created tag</h2>
<p>Next, because the release:prepare created a tag, you need to remove it. Do this:</p>
<ul><li><code>git tag</code> to list the tags</li>
<li><code>git tag -d name-of-tag</code> to delete, e.g. uimaj-3.1.1. This deletes it locally only.</li>
<li><code>git push origin :refs/tags/name-of-tag</code> to remove the tag in the remote.</li>
</ul>
<h2>Do any fixes, updates and then rerun the release</h2>
</blockquote>
</p>
</td></tr>
</table>
</td>
</tr>
<!-- FOOTER -->
<tr><td colspan="2">
<hr noshade="" size="1"/>
</td></tr>
<tr><td colspan="2">
<table class="pageFooter">
<tr>
<td><a href="index.html">Home</a></td>
<td><a href="privacy-policy.html">Privacy Policy</a></td>
<td style="font-size:75%">
Copyright &#169; 2006-2013, The Apache Software Foundation.<br/>
Apache UIMA, UIMA, the Apache UIMA logo and the Apache Feather logo are trademarks of The Apache Software Foundation.<br/>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</td>
<td><a href="mailto:dev@uima.apache.org">Contact us</a></td>
</tr>
</table>
</td></tr>
</table>
</body>
</html>