Generate a public/private key pair. For example, you can use your name and Apache email.

gpg --gen-key

Your public and private keys can be verified using:

gpg --list-keys
gpg --list-secret-keys

Clone SystemML Repository

Since the artifacts will be deployed publicly, you should ensure that the project is completely clean.
The deploy command should not be run on a copy of the project that you develop on. It should be a completely
clean project used only for building and deploying.

Therefore, create a directory such as:

mkdir ~/clean-systemml

In that directory, clone a copy of the project.

git clone https://github.com/apache/systemml.git

Deploy Artifacts to Snapshot Repository

Before deploying the latest snapshot artifacts, ensure you have the latest code on the master branch.

git pull

In the pom.xml file, the maven-gpg-plugin’s sign goal is bound to the verify stage of the Maven lifecycle.
Therefore, you can check that signing works by installing the snapshot to your local Maven repository.

mvn clean install -DskipTests -Pdistribution

If this succeeds, you can deploy the snapshot artifacts to the Apache Snapshot Repository using the following:

Release Candidate Build

The release candidate should build on Windows, OS X, and Linux. To do this cleanly,
the following procedure can be performed.

Clone the Apache SystemML GitHub repository
to an empty location. Next, check out the release tag. Following
this, build the distributions using Maven. This should be performed
with an empty local Maven repository.

Check LICENSE and NOTICE Files

Each artifact must contain LICENSE and NOTICE files. These files must reflect the
contents of the artifacts. If the project dependencies (ie, libraries) have changed
since the last release, the LICENSE and NOTICE files must be updated to reflect these
changes.

Single-Node Standalone

The standalone tgz and zip artifacts contain runStandaloneSystemML.sh and runStandaloneSystemML.bat
files. Verify that one or more algorithms can be run on a single node using these
standalone distributions.

Here is an example based on the Standalone Guide
demonstrating the execution of an algorithm (on OS X).

Run NN Unit Tests for GPU

The unit tests for NN operators for GPU take a long time to run and are therefore not run as part of the Jenkins build.
They must be run before a release. To run them, edit the
NeuralNetworkOpTests.java
file and remove all the @Ignore annotations from all the tests. Then run the NN unit tests using mvn verify:

Voting

Following a successful release candidate vote by SystemML PMC members on the SystemML mailing list, the release candidate
has been approved.

Release

Release Deployment

To be written. (What steps need to be done? How is the release deployed to Apache dist and the central maven repo?
Where do the release notes for the release go?)

Documentation Deployment

This section describes how to deploy versioned project documentation to the main website.
Note that versioned project documentation is committed directly to the svn project’s docs folder.
The versioned project documentation is not committed to the website’s git project.

Update systemml/pom.xml project version to what should be displayed in javadocs (such as 1.0.0).

Build project (which generates javadocs).

$ mvn clean package -P distribution

Copy contents of systemml/target/apidocs to systemml-website-site/docs/1.0.0/api/java.

Define environment variables to match version and release number used in updated systemml/pom.xml. Both environment variables are referenced when building pythondocs with Sphinx.

$ export SYSTEMML_VERSION=1.0
$ export SYSTEMML_RELEASE=1.0.0

Generate pythondocs with Sphinx.

$ cd systemml/src/main/pythondoc
$ make html

Copy contents of systemml/target/pydocs/html to systemml-website-site/docs/1.0.0/api/python.

Open up file:///.../systemml-website-site/docs/1.0.0/index.html and verify API Docs → Java link works and that the correct Javadoc version is displayed.
Verify API Docs → Python link works and that the same Pythondoc version is displayed. Verify feedback links under Issues menu are not present.

Clean up any unnecessary files (such as deleting .DS_Store files on OS X).