Fork me on GitHub

Making a release

Content

Release Preparation

  • Elect a release manager.

  • Create a ticket for a new release in JIRA. If you do not have permission to do so just ask to be given permissions on the mailing list.

  • Review all of the JIRA issues associated with the release. All issues should be resolved and closed.

  • Any issues assigned to the release that are not complete should be assigned to the next release. Any critical or blocker issues should be resolved on the mailing list. Discuss any issues that you are unsure of on the mailing list.

Steps for the Release Manager

The following steps need only to be performed once.

  • Make sure you have your PGP fingerprint added into https://id.apache.org/

  • Make sure you have your PGP keys password.

  • Add your PGP key to the KEYS file

    Examples of adding your key to this file:
     pgp -kxa <your name> and append it to this file.
     (pgpk -ll <your name> && pgpk -xa <your name>) >> this file.
     (gpg --list-sigs <your name>
         && gpg --armor --export <your name>) >> this file.
  • In a local temp folder, svn checkout the OpenNLP artifacts and update the KEYS file

  • Note: This can only be done by a PMC member. If you are a committer acting as a release manager, ask a PMC member to add your key.

    svn co https://dist.apache.org/repos/dist/release/opennlp/
    svn commit -m "Added Key for <name>" KEYS
  • Create a maven settings.xml to publish to repository.apache.org. An example configuration:

    <?xml version="1.0" encoding="UTF-8"?>
    <settings xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd"
              xmlns="http://maven.apache.org/SETTINGS/1.1.0"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
        <servers>
            <server>
                <id>apache.snapshots.https</id>
                <username>your-asf-ldap</username>
                <password>your-asf-ldap-password</password>
            </server>
            <server>
                <id>apache.releases.https</id>
                <username>your-asf-ldap</username>
                <password>your-asf-ldap-password</password>
            </server>
            <server>
                <id>apache.dist.https</id>
                <username>your-asf-ldap</username>
                <password>your-asf-ldap-password</password>
            </server>
        </servers>
        <profiles>
            <profile>
                <id>apache-gpg</id>
                <properties>
                    <gpg.keyname>your-gpg-code-signing-key-fingerprint</gpg.keyname>
                </properties>
                <repositories>
                    <repository>
                        <id>apache.dist.https</id>
                        <url>https://dist.apache.org/repos/dist</url>
                    </repository>
                </repositories>
            </profile>
        </profiles>
    </settings>
  • In case you are running on a headless system, it might be necessary to set the following export before starting with the release preparation.

    export GPG_TTY=$(tty)

Release Steps

Maven Release Preparation

  • Checkout the Apache OpenNLP main branch:
    git clone git@github.com:apache/opennlp.git

  • (Optional) Execute a complete test (it can take several hours):
    mvn test -DOPENNLP_DATA_DIR=/path/to/opennlp-test-data/ -Peval-tests

  • Check the current results of the eval build on the ASF Jenkins CI:
    https://ci-builds.apache.org/job/OpenNLP/job/eval-tests/

  • Do a trial build:
    mvn package -Papache-release,apache-gpg

  • Switch to a new branch with a format like rel-opennlp-x.y.z..

  • Prepare the release:
    mvn release:prepare -Papache-release,apache-gpg and answer the questions appropriately.
    The tag name format should be opennlp-x.y.z. This command creates and pushes two new commits to the repository to reflect the version changes. It also tags the release and pushes the branch.

  • Start an eval build for the tag via
    https://ci-builds.apache.org/job/OpenNLP/job/eval-tests-releases/ (build can take several hours)

Perform the Release

  • Perform the release:
    mvn release:perform -Papache-release,apache-gpg

  • This creates a staged repository at https://repository.apache.org/#stagingRepositories

  • Check the staged repository and if all looks well.

  • Close the staging repository but do not promote or release it at this time.

  • The build results are in opennlp/target/checkout/target. Do not modify or delete these files.

Put the artifacts to dist/dev

Check the Release Artifacts

Perform basic checks against the release binary:

  • Check signature of generated artifacts. This can be done like that:

    #!/bin/bash
    
    mkdir /tmp/test
    cd /tmp/test
    curl -s -O https://dist.apache.org/repos/dist/release/opennlp/KEYS
    curl -s -O https://dist.apache.org/repos/dist/dev/opennlp/opennlp-x.y.z/apache-opennlp-x.y.z-src.tar.gz
    curl -s -O https://dist.apache.org/repos/dist/dev/opennlp/opennlp-x.y.z/apache-opennlp-x.y.z-src.tar.gz.asc
    
    echo "
    list keys
    "
    gpg --homedir . --list-keys
    
    echo "
    import KEYS file
    "
    gpg --homedir . --import KEYS
    
    echo "
    verify signature
    "
    gpg --homedir . --output  apache-opennlp-x.y.z-src.tar.gz --decrypt apache-opennlp-x.y.z-src.tar.gz.asc
  • Check presence and appropriateness of LICENSE, NOTICE, and README files.

Create a VOTE Thread

  • Notify the developer mailing list of a new version vote. Be sure to replace all values in [] with the appropriate values.

Message Subject: [VOTE] Apache OpenNLP [version] Release Candidate

Hi folks,

I have posted a [Nth] release candidate for the Apache OpenNLP [version] release and it is ready for testing.

<Add a summary to highlight notable changes>

Thank you to everyone who contributed to this release, including all of our users and the people who submitted bug reports, c
ontributed code or documentation enhancements.

The release was made using the OpenNLP release process, documented on the website:
https://opennlp.apache.org/release.html

Maven Repo:
https://repository.apache.org/content/repositories/orgapacheopennlp-XXXX

<repositories>
<repository>
<id>opennlp-y.x.z-rc1</id>
<name>Testing OpenNLP x.y.z release candidate</name>
<url>
https://repository.apache.org/content/repositories/orgapacheopennlp-XXXX
</url>
</repository>
</repositories>

Binaries & Source:

https://dist.apache.org/repos/dist/dev/opennlp/opennlp-x.y.z

Tag:

https://github.com/apache/opennlp/releases/tag/opennlp-x.y.z

Release notes:

<Add link to the Jira release notes>

The results of the eval tests for the aforementioned tag can be found
here: https://ci-builds.apache.org/job/OpenNLP/job/eval-tests-releases/<add-link-to-build>

Reminder: The up-2-date KEYS file for signature verification can be
found here: https://dist.apache.org/repos/dist/release/opennlp/KEYS

Please vote on releasing these packages as Apache OpenNLP x.y.z The
vote is open for at least the next 72 hours.

Only votes from OpenNLP PMC are binding, but everyone is welcome to
check the release candidate and vote.
The vote passes if at least three binding +1 votes are cast.

Please VOTE

[+1] go ship it
[+0] meh, don't care
[-1] stop, there is a ${showstopper}

Thanks!

<Your-Name>

After a Successful Vote

The vote is successful if at least 3 +1 votes are received from OpenNLP PMC members after a minimum of 72 hours of sending the vote email. Acknowledge the voting results on the mailing list in the VOTE thread by sending a mail.

Message Subject: [RESULT] [VOTE] Apache OpenNLP [version]

Hi folks,

this vote passes with the following +1 being cast:

- PMC Name Y (binding)
- PMC Name X (binding)
- User Name Z
- PMC Name YY (binding)
- User Name ZZ

Thanks to all voters. I'll proceed with the steps.

<Your-Name>

Release Nexus Staging Repository

Release the staging repository. This will make the artifacts available in the Maven Central repository. To do this go to the repository server, log in, go to the staging area and release the staging repository linked to this release

Merge the Release Branch

Merge the release branch into main.

Commit Distribution to SVN

Move the distribution from dist/dev to dist/release via SVN

svn mv https://dist.apache.org/repos/dist/dev/opennlp/opennlp-x.y.z https://dist.apache.org/repos/dist/release/opennlp/opennlp-x.y.z -m "Release OpenNLP x.y.z"

This will make the release artifacts available on dist.apache.org and the artifacts will start replicating.

Delete Old Release(s)

To reduce the load on the ASF mirrors, projects are required to delete old releases (see https://www.apache.org/legal/release-policy.html#when-to-archive).

Remove the old releases from SVN under https://dist.apache.org/repos/dist/release/opennlp/.

Update the Website

Update the website once the new version appears in the Apache download mirrors (keep checking https://www.apache.org/dyn/closer.cgi/opennlp until you see something):

Update jbake.properties

Update the jbake.properties file to include the new version numbers:

opennlp.version=
opennlp.next.version=

Add New Artifact Item

Add a new artifactItem in the pom.xml for the new OpenNLP release. (This automatically pulls in the details and javadocs for the new version when the site is built.):

<artifactItem>
  <groupId>org.apache.opennlp</groupId>
  <artifactId>opennlp-distr</artifactId>
  [version]${project.version}</version>
  <overWrite>false</overWrite>
  <type>zip</type>
  <classifier>bin</classifier>
  <outputDirectory>${project.build.directory}/distr/x.y.z</outputDirectory>
</artifactItem>

Move the last version’s links to the documentation to the Legacy Documentation (https://opennlp.apache.org/docs/legacy.html) page. Add the following lines at the beginning of docs/legacy.ad:

=== Apache OpenNLP ${previous.release} documentation
* link:/docs/${previous.release}/manual/opennlp.html[Apache OpenNLP Manual]
* link:/docs/${previous.release}/apidocs/opennlp-tools/index.html[Apache OpenNLP Tools Javadoc]
* link:/docs/${previous.release}/apidocs/opennlp-tools-models/index.html[Apache OpenNLP Tools Models Javadoc]
* link:/docs/${previous.release}/apidocs/opennlp-dl/index.html[Apache OpenNLP DL Javadoc]
* link:/docs/${previous.release}/apidocs/opennlp-uima/index.html[Apache OpenNLP UIMA Javadoc]
* link:/docs/${previous.release}/apidocs/opennlp-morfologik-addon/index.html[Apache OpenNLP Morfologik Addon Javadoc]

Update main.yml

  • Update the main.yml in .github to force a check on the docs for this new version.

Update doap_opennlp.rdf

  • Update the doap_opennlp.rdf file to reflect the new version number and release date.

Add News Item

  • Add a news item in news/release-{xyz}.ad by copying the content from OpenNLP project opennlp-distr/src/README.

Commit Website Changes.

  • Commit the website changes.

  • Rebuild opennlp-site and redeploy the site (if Automatic Buildbot doesn’t kick in)

  • Test and review the website. Test that all download links are working. Test that the documentation is updated and can be viewed

Post-Release Steps

Title: [ANNOUNCE] OpenNLP <version> released
TO: announce@apache.org, users@opennlp.apache.org, dev@opennlp.apache.org

Message body:

The Apache OpenNLP team is pleased to announce the release of version <version> of Apache OpenNLP. The Apache OpenNLP library is a machine learning based toolkit for the processing of natural language text. It supports the most common NLP tasks, such as tokenization, sentence segmentation, part-of-speech tagging, named entity extraction, chunking, and parsing.
The OpenNLP <version> binary and source distributions are available for download from our download page: https://opennlp.apache.org/download.html
The OpenNLP library is distributed by Maven Central as well. See the Maven Dependency page for more details: https://opennlp.apache.org/maven-dependency.html

Changes in this version:

**  TODO UPDATE THIS >>
- change 1
- change 2
<<  TODO UPDATE THIS **

For a complete list of fixed bugs and improvements please see the RELEASE_NOTES file included in the distribution.

The Apache OpenNLP Team

After an Unsuccessful Vote

The release vote may fail due to an issue discovered in the release candidate. If the vote fails the release should be canceled by:

A new release candidate can now be prepared. When complete, a new VOTE thread can be started as described in the steps above.