blob: 8c5767aceda6f799ec1f746d40dfc18604e9084c [file] [log] [blame]
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Releasing Jetty</title><link rel="stylesheet" type="text/css" href="css/docbook.css"><meta name="generator" content="DocBook XSL Stylesheets V1.79.1"><meta name="keywords" content="jetty, servlet, servlet-api, cometd, http, websocket, eclipse, maven, java, server, software"><link rel="home" href="index.html" title="Jetty"><link rel="up" href="advanced-contributing.html" title="Chapter&nbsp;35.&nbsp;Contributing to Jetty"><link rel="prev" href="security-reporting.html" title="Reporting Security Issues"><link rel="next" href="release-testing.html" title="Testing a Jetty Release"><link xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" rel="shortcut icon" href="images/favicon.ico"><link rel="stylesheet" href="css/highlighter/foundation.css"><script src="js/highlight.pack.js"></script><script>
hljs.initHighlightingOnLoad();
</script><link type="text/css" rel="stylesheet" href="css/font-awesome/font-awesome.min.css"></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><tr><td style="width: 25%"><a href="http://www.eclipse.org/jetty"><img src="images/jetty-header-logo.png" alt="Jetty Logo"></a><br><span style="font-size: small">
Version: 9.4.28-SNAPSHOT</span></td><td style="width: 50%"></td></tr></table><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="navheader"><table width="100%" summary="Navigation header"><tr><th colspan="3" align="center">Releasing Jetty</th></tr><tr><td width="20%" align="left"><a accesskey="p" href="security-reporting.html"><i class="fa fa-chevron-left" aria-hidden="true"></i> Previous</a>&nbsp;</td><th width="60%" align="center">Chapter&nbsp;35.&nbsp;Contributing to Jetty<br><a accesskey="p" href="index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></th><td width="20%" align="right">&nbsp;<a accesskey="n" href="release-testing.html">Next <i class="fa fa-chevron-right" aria-hidden="true"></i></a></td></tr></table><hr></div><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="jetty-callout"><h5 class="callout"><a href="http://www.webtide.com/">Contact the core Jetty developers at
<span class="website">www.webtide.com</span></a></h5><p>
private support for your internal/customer projects ... custom extensions and distributions ... versioned snapshots for indefinite support ...
scalability guidance for your apps and Ajax/Comet projects ... development services for sponsored feature development
</p></div><div class="section"><div class="titlepage"><div><div><h2 class="title" style="clear: both"><a name="releasing-jetty"></a>Releasing Jetty</h2></div></div></div><div class="toc"><dl class="toc"><dt><span class="section"><a href="releasing-jetty.html#releasing-process">Building and Staging a Releasable Version</a></span></dt><dt><span class="section"><a href="releasing-jetty.html#releasing-aggregates">Building and Deploying Aggregate Javadoc and Xref</a></span></dt><dt><span class="section"><a href="releasing-jetty.html#releasing-distributions">Deploying Distribution Files</a></span></dt><dt><span class="section"><a href="releasing-jetty.html#releasing-stable-links">Updating Stable Links</a></span></dt><dt><span class="section"><a href="releasing-jetty.html#_building_an_osgi_p2_repository">Building an OSGi P2 Repository</a></span></dt><dt><span class="section"><a href="releasing-jetty.html#releasing-documentation">Release Documentation</a></span></dt></dl></div><p>There are a number of steps to releasing jetty.
It is not just limited to running a couple of maven commands and then moving onto bigger and better things.
There are a number of process related issues once the fun maven bits have been completed.</p><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="releasing-process"></a>Building and Staging a Releasable Version</h3></div></div></div><p>This release script is for jetty-9 (to release jetty-7 or jetty-8 see older documentation).</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem"><p class="simpara">Pick your version identification strings.</p><p class="simpara">These follow a strict format and will be used when prompted during step listitem_title below.</p><pre class="literallayout">Release Version : 9.0.0.v20130322 (v[year][month][day])
Next Development Version : 9.0.1-SNAPSHOT
Tag Name : jetty-9.9.0.v20130322</pre></li><li class="listitem"><p class="simpara">We use the <span class="emphasis"><em>release-9</em></span> branch to avoid problems with other developers actively working on the master branch.</p><div class="screenexample"><pre class="screen">// Get all of the remotes
$ git pull origin
// Create a local tracking branch (if you haven't already)
$ git branch --track release-9 refs/remotes/origin/release-9
// Check out your local tracking branch.
$ git checkout release-9
// Merge from master into the branch (this becomes your point in time
// from master that you will be releasing from)
$ git merge --no-ff master</pre></div></li><li class="listitem"><p class="simpara">Update the VERSION.txt with changes from the git logs, this populates the resolves issues since the last release.</p><div class="screenexample"><pre class="screen">$ mvn -N -Pupdate-version</pre></div></li><li class="listitem"><p class="simpara">Edit the VERSION.txt file to set the <span class="emphasis"><em>Release Version</em></span> at the top alongside the Date of this release.</p><div class="screenexample"><pre class="screen">$ vi VERSION.txt</pre></div></li><li class="listitem"><p class="simpara">Make sure everything is commit&#8217;d and pushed to github.com/eclipse/jetty.project</p><div class="screenexample"><pre class="screen">$ git commit -m "Updating VERSION.txt top section" VERSION.txt
$ git push origin release-9</pre></div></li><li class="listitem"><p class="simpara">Prepare the Release</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>This step updates the &lt;version&gt; elements in the pom.xml files, does a test build with these new versions, and then commits the pom.xml changes to your local git repo.
The <code class="literal">eclipse-release</code> profile is required on the prepare in order to bring in the jetty aggregates as that profile defines a module which is ignored otherwise.</p></div></blockquote></div><div class="screenexample"><pre class="screen">$ mvn release:prepare -DreleaseVersion=9.0.0.v20130322 \
-DdevelopmentVersion=9.0.1-SNAPSHOT \
-Dtag=jetty-9.0.0.v20130322 \
-Peclipse-release</pre></div></li><li class="listitem"><p class="simpara">Perform the Release</p><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>This step performs the release and deploys it to a oss.sonatype.org staging repository.</p></div></blockquote></div><div class="screenexample"><pre class="screen">$ mvn release:perform</pre></div></li><li class="listitem"><p class="simpara">Set up files for next development versions.</p><p class="simpara">Edit <code class="literal">VERSION.txt</code> for <span class="emphasis"><em>Next Development Version</em></span> at the top.
Do not date this line.</p><p class="simpara">Make sure everything is commit&#8217;d and pushed to github.com/eclipse/jetty.project</p><div class="screenexample"><pre class="screen">$ vi VERSION.txt
$ git commit -m "Updating VERSION.txt top section" VERSION.txt
$ git push origin release-9</pre></div></li><li class="listitem">Close the staging repository on oss.sonatype.org</li><li class="listitem">Announce stage to the mailing list for testing.</li><li class="listitem"><p class="simpara">Once the staged repository has been approved by the rest of the committers.</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">Release the staging repository to maven central on oss.sonatype.org</li><li class="listitem"><p class="simpara">Merge back the changes in release-9 to master</p><div class="screenexample"><pre class="screen">$ git checkout master
$ git merge --no-ff release-9
$ git push origin master</pre></div></li></ul></div></li></ol></div></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="releasing-aggregates"></a>Building and Deploying Aggregate Javadoc and Xref</h3></div></div></div><p>Define the jetty.eclipse.website server entry in your .m2/settings.xml file.
You&#8217;ll need to have access to the dev.eclipse.org machine to perform these actions.
If you don&#8217;t know if you have access to this then you probably don&#8217;t and will need to ask a project leader for help.</p><p>To build and deploy the aggregate javadoc and jxr bits:</p><div class="screenexample"><pre class="screen">$ cd target/checkout
$ mvn -Paggregate-site javadoc:aggregate jxr:jxr
$ mvn -N site:deploy</pre></div><p>This will generate the aggregate docs and deploy them to the <code class="literal">/home/www/jetty/&lt;project version&gt;/jetty-project</code> directory on download.eclipse.org.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="releasing-distributions"></a>Deploying Distribution Files</h3></div></div></div><p>Since we also provide alternative locations to download jetty distributions we need to copy these into place.
There are a couple of scripts that will take care of this although they need to be localized to your particular execution environment and you need to have authorization to put stuff where it needs to go.
These scripts are located at:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem"><a class="link" href="http://git.eclipse.org/c/jetty/org.eclipse.jetty.admin.git/tree/release-scripts" target="_top">http://git.eclipse.org/c/jetty/org.eclipse.jetty.admin.git/tree/release-scripts</a>.</li></ul></div><p>To localize the scripts to your environment:</p><div class="itemizedlist"><ul class="itemizedlist" style="list-style-type: disc; "><li class="listitem">ensure you have "curl" installed</li><li class="listitem">edit the scripts and replace all ssh login lines with your own login id</li></ul></div><p>Once these are setup you can deploy a release to eclipse with the following incantation:</p><div class="screenexample"><pre class="screen">$ ./promote-to-eclipse.sh 9.0.0.v20130322</pre></div><p>Each of these scripts will download all of the relevant files from maven central and then copy them into the correct location on eclipse infrastructure.
On the eclipse side of it they will also adjust the xref and javadoc documentation links if they remain broken as well as regenerate all of the html files on the eclipse download site.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="releasing-stable-links"></a>Updating Stable Links</h3></div></div></div><p>Since we are not allowed to have symbolic links on the download site we have to log into the machine manually and remove the previous stable directory and update it with a new release.
Maintaining the conventions we use on the site will allow all <span class="emphasis"><em>stable</em></span> links to be stable and not needed to update to the latest major Jetty build version:</p><div class="screenexample"><pre class="screen">$ ssh &lt;user&gt;@build.eclipse.org
$ cd ~downloads/jetty/
$ rm -Rf stable-9
$ cp -r &lt;version&gt; stable-9
$ ./index.sh</pre></div><p>This needs to be done for all Eclipse Jetty releases (regardless of version). In addition we have to work to reduce the footprint of jetty on the primary eclipse download resources so we want to move older releases to the eclipse archive site.</p><div class="screenexample"><pre class="screen">$ cd ~/downloads/jetty
$ mv &lt;old release&gt; /home/data/httpd/archive.eclipse.org/jetty/
$ ./index.sh</pre></div><p>Periodically we need to do the same for the osgi P2 repositories to keep the size of our downloads directory at a reasonable size.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="_building_an_osgi_p2_repository"></a>Building an OSGi P2 Repository</h3></div></div></div><p>Most of the jetty jars are also osgi bundles, plus we release some specific bundles that <a class="link" href="framework-jetty-osgi.html" title="OSGI">integrate jetty closely with osgi</a>.
To do this, we use a Hudson job on the eclipse infrastructure. You will need to have permission to access <a class="link" href="https://ci.eclipse.org/shared/view/Jetty-RT/" target="_top">https://ci.eclipse.org/shared/view/Jetty-RT/</a></p><p>There are Hudson jobs that build osgi p2 repos for each of the major releases of jetty:7 (jetty-rt-bundles-7), 8 (jetty-rt-bundles-8) and 9 (jetty-rt-bundles-9).
You will need to start a manual build of the job that matches the version of jetty that you are releasing.
You will be prompted to supply some parameters to the build:</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">pack_and_sign</span></dt><dd>By default, this is ticked. Leave it ticked.</dd><dt><span class="term">jetty_release-version</span></dt><dd>Enter the version number of the release, eg 9.2.6.v20141205</dd><dt><span class="term">force_context_qualifier</span></dt><dd>Leave this blank.</dd><dt><span class="term">set_pom_version</span></dt><dd>Enter the major.minor.point release number, eg 9.2.6</dd><dt><span class="term">delete_tycho_meta</span></dt><dd>This is ticked by default. Leave it ticked</dd><dt><span class="term">BRANCH_NAME</span></dt><dd>This is not the branch of the jetty release. Rather it refers to the branch structure of the project that drives the jetty p2 release.
It will already be set correctly for the selected job, so don&#8217;t change it unless you have an extremely good reason.</dd></dl></div><p>Once you have supplied the necessary parameters, the build job will commence and the bundles and update site zips will generated and automatically placed in the <code class="literal">/home/data/httpd/downlaod.eclipse.org/jetty/updates/jetty-bundles-[MAJOR.VERSION].x</code>, where [MAJOR.VERSION] matches the major version number of the jetty release you are doing.
These files will then be visible from <a class="link" href="http://download.eclipse.org/jetty/updates/jetty-bundles-" target="_top">MAJOR.VERSION</a>.x, where [MAJOR.VERSION] corresponds to the major version of the jetty release you are doing.</p></div><div class="section"><div class="titlepage"><div><div><h3 class="title"><a name="releasing-documentation"></a>Release Documentation</h3></div></div></div><p>There are two git repositories you need to be aware of for releasing jetty-documentation. The jetty-documentation is located in our github repository and the jetty-website is located at eclipse.</p><div class="variablelist"><dl class="variablelist"><dt><span class="term">jetty-documentation</span></dt><dd><a class="link" href="https://github.com/jetty-project/jetty-documentation" target="_top">https://github.com/jetty-project/jetty-documentation</a></dd><dt><span class="term">jetty-website</span></dt><dd><a class="link" href="http://git.eclipse.org/c/www.eclipse.org/jetty.git" target="_top">http://git.eclipse.org/c/www.eclipse.org/jetty.git</a></dd></dl></div><p>Do the following steps to publish documentation for the release:</p><div class="orderedlist"><ol class="orderedlist" type="1"><li class="listitem">Checkout the jetty-documentation repository.</li><li class="listitem">Edit the &lt;version&gt; of the jetty-documentation pom.xml and change it <span class="emphasis"><em>locally</em></span> to be the release number, eg 9.2.6.v20141205</li><li class="listitem">Build the documentation with mvn clean install</li><li class="listitem">Checkout the jetty-website</li><li class="listitem">Inside the documentation/ directory, make a directory named the same as the release number, eg 9.2.6.v20141205/</li><li class="listitem">Copy the built <code class="literal">documentation</code> from jetty-documentation/target/docbkx/html/jetty into the new directory</li><li class="listitem">Edit the <code class="literal">index.html</code> file in the <code class="literal">documentation</code> directory and add the newly released documentation url.
Make sure you follow the other examples and include the <code class="literal">rel="nofollow"</code> attribute on the link so that search engines do not crawl newly created documentation, otherwise we are subject to duplicate content penalties in SEO.</li><li class="listitem">Commit the changes to the jetty-website project</li></ol></div><div class="blockquote"><blockquote class="blockquote"><div xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times" class="note" style="margin-left: 0.5in; margin-right: 0.5in;"><h3 class="title"><i class="fa fa-asterisk" aria-hidden="true"></i> Note</h3><p>There is a separate Jenkins build job that publishes documentation to <a class="link" href="http://www.eclipse.org/jetty/documentation/current" target="_top">http://www.eclipse.org/jetty/documentation/current</a> triggered by a push of changed files to the jetty-documentation project.
If you commit your change to the &lt;version&gt; number from step 2, then these builds will use the same release version number.
It is preferable if you <span class="emphasis"><em>don&#8217;t</em></span> commit that version number change, or better yet, ensure that it is set to the next -SNAPSHOT version number for your jetty major release number.</p></div></blockquote></div></div></div><script type="text/javascript">
SyntaxHighlighter.all()
</script><div class="navfooter"><hr><table width="100%" summary="Navigation footer"><tr><td width="40%" align="left"><a accesskey="p" href="security-reporting.html"><i class="fa fa-chevron-left" aria-hidden="true"></i> Previous</a>&nbsp;</td><td width="20%" align="center"><a accesskey="u" href="advanced-contributing.html"><i class="fa fa-chevron-up" aria-hidden="true"></i> Top</a></td><td width="40%" align="right">&nbsp;<a accesskey="n" href="release-testing.html">Next <i class="fa fa-chevron-right" aria-hidden="true"></i></a></td></tr><tr><td width="40%" align="left" valign="top">Reporting Security Issues&nbsp;</td><td width="20%" align="center"><a accesskey="h" href="index.html"><i class="fa fa-home" aria-hidden="true"></i> Home</a></td><td width="40%" align="right" valign="top">&nbsp;Testing a Jetty Release</td></tr></table></div><p xmlns:jfetch="java:org.eclipse.jetty.xslt.tools.JavaSourceFetchExtension" xmlns:fetch="java:org.eclipse.jetty.xslt.tools.SourceFetchExtension" xmlns:d="http://docbook.org/ns/docbook" xmlns:l="http://docbook.sourceforge.net/xmlns/l10n/1.0" xmlns:xslthl="http://xslthl.sf.net" xmlns:gcse="http://www.google.com" xmlns:date="http://exslt.org/dates-and-times"><div class="jetty-callout">
See an error or something missing?
<span class="callout"><a href="http://github.com/eclipse/jetty.project">Contribute to this documentation at
<span class="website"><i class="fa fa-github" aria-hidden="true"></i> Github!</span></a></span><span style="float: right"><i>(Generated: 2020-03-10)</i></span></div></p></body></html>