<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<!-- 
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. 
-->
<html lang="en">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <meta name="description" content="Apache Olingo provides libraries which enable developers to implement OData producers and OData consumers. The available OData Java library implements OData version 2.0. In future on goal is to provide an OData 4.0 compliant library once the OData standard is published at OASIS. The focus within the community is currently on the Java technology but it is up to the community to discuss if other environments find interest.">
    <meta name="author" content="">
    <link rel="icon" href="/favicon.ico">
    <title>Apache Olingo Library</title>
    <!-- Bootstrap core CSS -->
    <link href="/css/bootstrap.css" rel="stylesheet" type="text/css"><!-- Custom styles for this template -->
    <link href="/css/navbar.css" rel="stylesheet" type="text/css"><!-- Just for debugging purposes. Don't actually copy these 2 lines! -->
    <link href="/css/offcanvas.css" rel="stylesheet" type="text/css"><!-- Custom styles for this template -->
    <link rel="stylesheet" href="/css/main.css">
    <!--[if lt IE 9]><script src="/js/ie8-responsive-file-warning.js"></script><![endif]-->
    <style>
.headerlink {
  visibility: hidden;
}
dt:hover > .headerlink, p:hover > .headerlink, td:hover > .headerlink, h1:hover > .headerlink, h2:hover > .headerlink, h3:hover > .headerlink, h4:hover > .headerlink, h5:hover > .headerlink, h6:hover > .headerlink {
  visibility: visible
}    </style>
    <script src="/js/ie-emulation-modes-warning.js" type="text/javascript">
</script><!-- IE10 viewport hack for Surface/desktop Windows 8 bug -->

    <script src="/js/ie10-viewport-bug-workaround.js" type="text/javascript">
</script><!-- HTML5 shim and Respond.js IE8 support of HTML5 elements and media queries -->
    <!--[if lt IE 9]>
      <script src="/js/html5shiv.min.js"></script>
      <script src="/js/respond.min.js"></script>
    <![endif]-->
  </head>

  <body>
    <div class="container">
      <!-- Static navbar -->
      <div class="navbar navbar-default" role="navigation">
        <div class="container-fluid">
          <div class="navbar-header">
            <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
              <span class="sr-only">Toggle navigation</span>
             <span class="icon-bar"></span>
             <span class="icon-bar"></span>
             <span class="icon-bar"></span>
            </button>
              <img class="navbar-brand" src="/img/OlingoOrangeTM.png" style="width:62px;" >
              <a class="navbar-brand" href="/">Apache Olingo™</a>
          </div>
          <div class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
              <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/">ASF Home</a></li>
                      <li><a href="http://projects.apache.org/">Projects</a></li>
                      <li><a href="http://people.apache.org/">People</a></li>
                      <li><a href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a></li>
                      <li><a href="http://www.apache.org/dyn/closer.cgi">Download</a></li>
                      <li><a href="http://www.apache.org/security/">Security</a></li>
                      <li><a href="http://www.apache.org/foundation/sponsorship.html">Support Apache</a></li>
                  </ul>
              </li>

              <li><a href="http://www.apache.org/licenses/">License</a></li>

              <li class="dropdown">
                  <a href="#" class="dropdown-toggle" data-toggle="dropdown">Download <b class="caret"></b></a>
                  <ul class="dropdown-menu">
                      <li><a href="/doc/odata2/download.html">Download OData 2.0 Java</a></li>
                      <li><a href="/doc/odata4/download.html">Download OData 4.0 Java</a></li>
                      <li><a href="/doc/javascript/download.html">Download OData 4.0 JavaScript</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="/doc/odata2/index.html">Documentation OData 2.0 Java</a></li>
                    <li><a href="/doc/odata4/index.html">Documentation OData 4.0 Java</a></li>
                    <li><a href="/doc/javascript/index.html">Documentation OData 4.0 JavaScript</a></li>
                  </ul>
              </li>
              <li><a href="/support.html">Support</a></li>
              <li><a href="/contribute.html">Contribute</a></li>

            </ul>

			  <a class="navbar-right" href="http://www.apache.org/foundation/" target="_blank">
          <img class="navbar-right" height="50px" src="/img/asf_logo_url.svg" alt="Apache Software Foundation">
        </a>

			</div><!--/.nav-collapse -->
        </div><!--/.container-fluid -->
      </div><!-- Main component for a primary marketing message or call to action -->
    <h1 id="apache-olingo-release-documentation">Apache Olingo Release Documentation<a class="headerlink" href="#apache-olingo-release-documentation" title="Permalink">&para;</a></h1>
<hr/>
<h3 id="introduction">Introduction<a class="headerlink" href="#introduction" title="Permalink">&para;</a></h3>
<p>This document describes the release guidelines for Apache Olingo. It heavily refers
to <a href="http://maven.apache.org/developers/release/apache-release.html">standard Apache procedures to release</a>
Maven based projects at Apache.</p>
<h3 id="build-environments">Build Environments<a class="headerlink" href="#build-environments" title="Permalink">&para;</a></h3>
<p>Apache Olingo is built and released with <a href="http://maven.apache.org">Maven3</a> and uses
the <a href="http://svn.apache.org/repos/asf/maven/pom/tags/apache-13/pom.xml">Apache POM version 13</a>.</p>
<h3 id="release-artifacts">Release Artifacts<a class="headerlink" href="#release-artifacts" title="Permalink">&para;</a></h3>
<p>An Apache Olingo release consists of:</p>
<ul>
<li>All POMs/JARs/WARs built as part of the standard Maven build process. For
an overview on the released modules see artifacts with groupId
<em>org.apache.olingo</em> in the <a href="https://repository.apache.org/index.html#nexus-search;gav%7Eorg.apache.olingo%7E%7E%7E%7E">Apache Maven Repository</a>.
In detail, per every module, where applicable, the following artifacts are produced:</li>
<li><strong>Main artifact</strong>: <code>&lt;artifactId&gt;-&lt;version&gt;.&lt;ext&gt;</code></li>
<li><strong>Source artifact</strong>: <code>&lt;artifactId&gt;-&lt;version&gt;-sources.&lt;ext&gt;</code></li>
<li><strong>Javadoc artifact</strong>: <code>&lt;artifactId&gt;-&lt;version&gt;-javadoc.&lt;ext&gt;</code></li>
<li><strong>POM</strong>: <code>&lt;artifactId&gt;-&lt;version&gt;.pom</code></li>
</ul>
<p>Also the following additional <em>distribution commodity packages</em> are
provided as part of the release:</p>
<ul>
<li>
<p><code>org.apache.olingo-olingo-odata2-parent-${version}-source-release.${ext}</code> <br/> A source-release
bundle containing all files the sources necessary to build all other artifacts. <br/> <strong>Package formats</strong>: zip.</p>
</li>
<li>
<p><code>org.apache.olingo-olingo-odata2-dist-${version}-lib.${ext}</code> <br/> A bundle containing the OData2 core
library and dependencies required to implement an OData V2 processor. <br/> <strong>Package formats</strong>: zip.</p>
</li>
<li>
<p><code>org.apache.olingo-olingo-odata2-dist-${version}-javadoc.${ext}</code> <br/> A bundle
containing JavaDoc of the OData2 library API and annotations, the
JPA processor API as well as additional documentation and reference scenario
examples. <br/> <strong>Package formats</strong>: zip.</p>
</li>
<li>
<p><code>org.apache.olingo-olingo-odata2-dist-${version}-jpa.${ext}</code> <br/> A bundle containing the OData2 JPA
processor and dependencies required to implement an OData V2 processor. <br/> <strong>Package formats</strong>: zip.</p>
</li>
<li>
<p><code>org.apache.olingo-olingo-odata2-dist-${version}-janos.${ext}</code> <br/> A bundle containing the OData2 Java Annotation
processor and dependencies required to implement an OData V2 processor using Java Annotations. <br/> <strong>Package formats</strong>: zip.</p>
</li>
<li>
<p><code>org.apache.olingo-olingo-odata2-dist-${version}-ref.${ext}</code> <br/> A bundle containing ready-to-depoly WAR
files of the OData V2 reference scenarios implementations for the core library and the JPA processor. <br/> <strong>Package formats</strong>: zip.</p>
</li>
</ul>
<h3 id="documentation-and-javadoc">Documentation and JavaDoc<a class="headerlink" href="#documentation-and-javadoc" title="Permalink">&para;</a></h3>
<p>The documentation that will be part of the release must match the code.
All examples in the documentation must work. The Java package documentation must be
up-to-date. Release independend documentation is maintained on the <a href="/documentation.html">Apache Olingo Documentation</a> page.</p>
<h3 id="preparation">Preparation<a class="headerlink" href="#preparation" title="Permalink">&para;</a></h3>
<h5 id="release-manager">Release Manager<a class="headerlink" href="#release-manager" title="Permalink">&para;</a></h5>
<p>A release manager must be appointed for a release. He or she is in charge of the release process,
following the guidelines and eventually generating the release artifacts.
The release manager might tailor the process for a specific release.</p>
<h5 id="version">Version<a class="headerlink" href="#version" title="Permalink">&para;</a></h5>
<p>The Olingo community decides if the release will be a major or a minor release and
agrees on a version number.</p>
<pre><code>mvn versions:set -DnewVersion=1.0.0-RC01
find . -name '*.versionsBackup' -type f -delete
git add .
git commit -am 'Issue OLINGO-25 - make release - set version 1.0.0-RC01'
git tag -f 1.0.0-RC01

mvn versions:set -DnewVersion=1.1.0-SNAPSHOT
find . -name '*.versionsBackup' -type f -delete
git add .
git commit -am 'Issue OLINGO-25 - make release - set version 1.1.0-SNAPSHOT'
git push
git push --tags
</code></pre>
<h5 id="open-issues">Open Issues<a class="headerlink" href="#open-issues" title="Permalink">&para;</a></h5>
<p>There must not be any open JIRA issues for this release. There might be open issues for
future releases. Check with: <a href="https://issues.apache.org/jira/browse/OLINGO/fixforversion/12324804">fix for version view</a></p>
<h5 id="unit-tests-and-integration-tests">Unit Tests and Integration Tests<a class="headerlink" href="#unit-tests-and-integration-tests" title="Permalink">&para;</a></h5>
<p>All unit tests and integration tests must succeed on a
clean machine (starting with an empty local Maven repository). The following Maven
execution will run all unit and integration tests:</p>
<pre><code>mvn clean install
</code></pre>
<h5 id="apache-license-and-code-style">Apache License and Code Style<a class="headerlink" href="#apache-license-and-code-style" title="Permalink">&para;</a></h5>
<p>Each source code file must have a current ASF license header. The source
code should follow the Apache Olingo code style. For verification run following
Maven execution</p>
<pre><code>mvn clean install -Pbuild.quality
</code></pre>
<h5 id="packaging">Packaging<a class="headerlink" href="#packaging" title="Permalink">&para;</a></h5>
<p>NOTICE, LICENSE and DISCLAIMER must be present in all bundles and must be up-to-date.</p>
<p>Remote resources are provided by the ASF and the Maven <code>remote-resources-plugin</code> is
configured in the parent pom of the project.</p>
<pre><code class="language-xml">&lt;resourceBundle&gt;org.apache:apache-jar-resource-bundle:1.4&lt;/resourceBundle&gt;
&lt;resourceBundle&gt;org.apache:apache-disclaimer-resource-bundle:1.1&lt;/resourceBundle&gt;
</code></pre>
<p>The Maven module <code>odata2-dist</code> is responsible to package convenience distribution zip files
using the assembly plugin. The distributions are created with a release build <code>mvn clean install -Papache-release -Dgpg.passphrase="yourPassphraseHere"</code></p>
<h5 id="sha-for-distribution-packages">SHA for distribution packages<a class="headerlink" href="#sha-for-distribution-packages" title="Permalink">&para;</a></h5>
<p>SHA files are created manually for distribution packages:</p>
<pre><code>gpg --print-md SHA512 ${filename}.zip &gt; ${filename}.zip.sha512
</code></pre>
<p>DO NOT generate md5 files.</p>
<h5 id="release-tag">Release Tag<a class="headerlink" href="#release-tag" title="Permalink">&para;</a></h5>
<p>A tag has to be created for every release candidate. The naming rule
for the tags is olingo-${version}-RCxx. This is created as
part of the Maven release process. The tag will be renamed to the
final version number upon vote approval.</p>
<h5 id="release-branch">Release Branch<a class="headerlink" href="#release-branch" title="Permalink">&para;</a></h5>
<p>A branch has to be created for every release. The naming rule for this
branch is olingo-${version}. This has to be created
manually upon release approval.</p>
<h3 id="release-candidate">Release Candidate<a class="headerlink" href="#release-candidate" title="Permalink">&para;</a></h3>
<p>Once all preparations are done, a release candidate will be built.</p>
<p>All release candidates must be cryptographically signed. The string
"-RCxx" will be attached to the version number of the release candidate
artifacts, where is the number of the release candidate starting with 01.
If more than one release candidate is required a new tag has to be created
and release candidate number will be increased by one.</p>
<p>The release candidate artifacts:</p>
<ul>
<li>Maven artifacts will be staged on repository.apache.org. A new staging repo
is created per RC and will be communicated upon release.</li>
<li>Distribution commodity packages are staged at
<a href="http://people.apache.org/%7E%5Busername%5D/olingo2/%5Bversion%5D">http://people.apache.org/~[username]/olingo2/[version]</a> (e.g. <a href="http://people.apache.org/%7Emibo/olingo2/2.0.0-RC01">http://people.apache.org/~mibo/olingo2/2.0.0-RC01</a>)</li>
</ul>
<p>Once candidate artifacts are available, release manager kicks off the [VOTE process][3].</p>
<p>If the vote fails, the raised issues will be fixed, a new release candidate will be
built and the VOTE process will be restarted.</p>
<p>If the release candidate gets approved, we can proceed to release publishing.</p>
<h4 id="how-to-verify-a-release-candidate">How to verify a Release Candidate<a class="headerlink" href="#how-to-verify-a-release-candidate" title="Permalink">&para;</a></h4>
<p>This checklist helps verifying if a release candidate is valid:</p>
<ul>
<li>Are all files on "<a href="http://people.apache.org/%7E%5Busername%5D/olingo2/%5Bversion%5D">http://people.apache.org/~[username]/olingo2/[version]</a>"?</li>
<li>Check if md5, sha512 and asc files are filled correctly?</li>
<li>Can the zip files be unpacked without issues?</li>
<li>Execute a "mvn clean install -Pbuild.quality" on parent distribution. It should work without issues.</li>
<li>Does the JavaDoc only contain API documentation?</li>
<li>Is there a Disclaimer, Notice, License and Dependencies File in every folder?</li>
<li>Do all License files contain the right amount of licenses?</li>
<li>Do Notice files mention 3rd party libraries if they are contained in the distribution?</li>
</ul>
<p>After all questions of this checklist can be answered with yes it is OK to give a +1 on the mailing list.
Of course the Release Manager can also use this checklist to make sure all artifacts are correct before publishing the results on the mailing list.</p>
<h3 id="publishing-the-release">Publishing the Release<a class="headerlink" href="#publishing-the-release" title="Permalink">&para;</a></h3>
<p>If the release candidate gets approved, we can proceed to release publishing:</p>
<ul>
<li>Release candidate maven artifacts are promoted in the Apache Maven Repository and
made available <a href="https://repository.apache.org/index.html#nexus-search;gav%7Eorg.apache.olingo%7E%7E%7E%7E">here</a>.</li>
<li>Publish final release Version to <a href="https://repository.apache.org/">Apache Repository</a>
<ul>
<li>First publish via <code>mvn deploy -Papache-release</code> into the <em>Staging Area</em></li>
<li>From <em>Staging Area</em> close and release the staged Artifacts to finish publishing</li>
<li>Afterwards the Maven artifacts are automatically synced to <a href="http://search.maven.org/#search%7Cga%7C1%7Corg.apache.olingo">Maven Central</a>.</li>
</ul>
</li>
<li>Release candidate commodity packages are synced (together with their checksum and
signatures) to <a href="http://www.apache.org/dist/olingo/">Apache Distributions</a>.</li>
<li>Release tag is renamed to final version.</li>
<li>Release branch is created.</li>
<li>Release is closed in Jira.</li>
<li>Release is announced to <a href="mailto:dev@olingo.apache.org">dev@olingo.apache.org</a>, <a href="mailto:announce@apache.org">announce@apache.org</a>.</li>
</ul>
<h3 id="maintain-release-distributions">Maintain Release Distributions<a class="headerlink" href="#maintain-release-distributions" title="Permalink">&para;</a></h3>
<p>To maintain the released Distributions for the download pages following steps are required (for more information see <a href="http://www.apache.org/dev/release-publishing.html#distribution_dist">Apache Distribution Documentation</a>) to upload the new distribution via SVN (<code>svn co https://dist.apache.org/repos/dist/release/olingo</code>):</p>
<ul>
<li>Check out latest SVN revision via <code>svn co https://dist.apache.org/repos/dist/release/olingo</code></li>
<li>Change into the directory according to the released Olingo artifact (e.g. <code>odata2</code>, <code>odata4</code>, ...)</li>
<li>Create new directory according to release version (e.g <code>rel-x.x.x</code>) and copy all distribution artifacts (includes <em>.zip</em>, <em>.asc</em>, <em>.md5</em>, <em>.sha512</em>).</li>
<li>Add new directory (e.g. <code>svn add rel-x.x.x</code>) and do the commit (e.g <code>svn ci -m "Added Olingo x.x.x release"</code>)</li>
<li>Afterwards do a cleanup for the old releases according to the Apache Release Guidelines <a href="http://www.apache.org/dev/release.html#when-to-archive">When</a> and <a href="http://www.apache.org/dev/release.html#how-to-archive">How</a> to archive.</li>
</ul>
<h3 id="maintain-version-section-in-doap-file">Maintain Version Section in DOAP File<a class="headerlink" href="#maintain-version-section-in-doap-file" title="Permalink">&para;</a></h3>
<p><a href="/doap_Olingo.rdf">http://olingo.apache.org/doap_Olingo.rdf</a></p>
<p>Results are shown here:</p>
<p><a href="http://projects.apache.org/indexes/alpha.html#O">link text</a></p>
<h3 id="additional-apache-release-information">Additional Apache Release Information<a class="headerlink" href="#additional-apache-release-information" title="Permalink">&para;</a></h3>
<ul>
<li><a href="http://www.apache.org/dev/release.html">Releases Policy</a></li>
<li><a href="http://www.apache.org/dev/release-publishing.html">Publishing Releases</a></li>
<li><a href="http://www.apache.org/dev/publishing-maven-artifacts.html">Publishing Maven Artifacts</a></li>
</ul>

      <div align="center">
	<p>Copyright © 2013-2022, The Apache Software Foundation<br>
				                Apache Olingo, Olingo, Apache, the Apache feather, and
				the Apache Olingo project logo are trademarks of the Apache Software
				Foundation.</p>
        <small><a href="/doc/odata2/privacy.html">Privacy</a></small>
      </div>
    </div><!-- /container -->
    <!-- Bootstrap core JavaScript
    ================================================== -->
    <!-- Placed at the end of the document so the pages load faster -->
    <script src="/js/jquery.js" type="text/javascript">
    </script>
    <script src="/js/bootstrap.js" type="text/javascript">
    </script>
    <script src="/js/offcanvas.js" type="text/javascript">
    </script>
    <link rel="stylesheet" href="/css/docco.css">
    <script src="//cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.0.1/build/highlight.min.js"></script>
    <script>hljs.highlightAll();</script>
  </body>
</html>