blob: a981f21a416d6b867a47f40d463d4d71a6e8cdd2 [file] [log] [blame] [view]
---
layout: site
title: Release Process
---
<!--
{% comment %}
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.
{% endcomment %}
-->
## Release Process
The Apache SystemDS project publishes new version of the software on a regular basis.
Releases are the interface of the project with the public and most users interact with
the project only through the released software (this is intentional!). Releases are a
formal offering, which are publicly voted by the SystemDS community.
Releases are executed by a Release Manager, who is one of the [project committers](https://whimsy.apache.org/roster/committee/systemds).
Release has legal consequences to the team. Make sure to comply with all the procedures
outlined by the ASF via [Release Policy](https://www.apache.org/legal/release-policy.html) and
[Release Distribution](https://infra.apache.org/release-distribution.html). Any deviations or
compromises are to be discussed in private@ or dev@ mail list appropriately.
## Before you begin
Install the basic software and procure the required code and dependencies, credentials.
OS Requirement: Linux
RAM requirement: 8 GB +
Software Requirements:
1. Apache Maven (3.8.1 or newer). [link](https://maven.apache.org/download.cgi)
2. GnuPG [link](https://www.gnupg.org/download/index.html)
3. Install jq utility (size 1MB). [link](https://stedolan.github.io/jq/download/)
Credential Requirements:
- GPG passphrase
- Apache ID and Password
- GitHub ID and Password
- PyPi.org ID and password (if applicable)
## Architecture of the release pipeline
An important part of the software development life cycle (SDLC)
is ensuring software release follow the ASF approved processes.
The release pipeline consists of the following steps:
1. Builds the artifacts (binary, zip files) with source code.
2. Pushes the artifacts to staging repository
3. Check for the vulnerabilities. Voting process.
The project PMC and community inspects the build files by
downloading and testing. If it passes their requirements, they vote
appropriately in the mailing list. The release version metadata is
updated and the application is deployed to the public release.
## Setting up your environment
## Access to Apache Nexus repository
Note: Only PMC can push to the Release repo for legal reasons, but committer can also act as the Release Manager with consensus by
the team on the dev@ mail list.
Apache Nexus repository is located at [repository.apache.org](https://repository.apache.org), it is Nexus 2.x Profession edition.
1. Login with Apache Credentials
2. Confirm access to `org.apache.systemds` by visiting https://repository.apache.org/#stagingProfiles;1486a6e8f50cdf
## Add future release version to JIRA
1. In JIRA, navigate to `SYSTEMDS > Administration > Versions`.
2. Add a new release version.
Know more about versions in JIRA at
[`view-and-manage-a-projects-versions` guide](https://support.atlassian.com/jira-core-cloud/docs/view-and-manage-a-projects-versions/)
## Performance regressions
Investigating performance regressions is a collective effort. Regressions can happen during
release process, but they should be investigated and fixed.
Release Manger should make sure that the JIRA issues are filed for each regression and mark
`Fix Version` to the to-be-released version.
The regressions are to be informed to the dev@ mailing list, through release duration.
## Release tags or branch
Create release branch from the `main` with version named `2.x.0-SNAPSHOT`.
### The chosen commit for RC
Release candidates are built from single commits off the development branch. Before building,
the version must be set to a non `SNAPSHOT`/`dev` version.
[Discussion](https://lists.apache.org/thread/277vks8q72cxxgmywxm7cblqvgn3yzgj) on what is covered in voting for a commit.
### Inform mailing list
Mail dev@systemds.apache.org of the release tags and triage information.
This list of pending issues will be refined and updated collaboratively.
## Creating builds
### Checklist
1. Release Manager's GPG key is publised to [dist.apache.org](https://dist.apache.org/repos/dist/release/systemds/KEYS)
2. Release Manager's GPG key is configured in `git` configuration
3. Set `JAVA_HOME` to JDK 8
4. `export GNUPGHOME=$HOME/.gnupg`
### Release build to create a release candidate
0. Dry run the release build
```sh
./do-release.sh -n
```
1. In the shell, build artifacts and deploy
```sh
./do-release.sh
```
Answer the prompts with appropriate details as shown:
```
Branch [master]: master
Current branch version is 2.1.0-SNAPSHOT.
Release [2.1.0]:
RC # [1]: 1
ASF user [ubuntu]: firstname
Full name [Firstname Lastname]:
GPG key [firstname@apache.org]:
================
Release details:
BRANCH: master
VERSION: 2.1.0
TAG: 2.1.0-rc1
NEXT: 2.1.1-SNAPSHOT
ASF USER: firstname
GPG KEY ID: firstname@apache.org
FULL NAME: Firstname Lastname
E-MAIL: firstname@apache.org
================
Is this info correct [Y/n]?
```
## Upload release candidate to PyPi
1. Download python binary artifacts
2. Deploy release candidate to PyPi
## Prepare documentation
### Build and verify JavaDoc
- Confirm that version names are appropriate.
### Build the Pydoc API reference
The docs will generated in `build` directory.
## Snapshot deployment setup
### Use a fresh SystemDS Repository
Since the artifacts will be deployed publicly, use a completely fresh
copy of the SystemDS project used only for building and deploying.
Therefore, create a directory such as
```sh
mkdir ~/systemds-release
```
In this directory, clone a copy of the project.
```sh
git clone https://github.com/apache/systemds.git
```
## Post Release Publish
### Checklist
#### 1. All artifacts and checksums present
Verify that each expected artifact is present at
https://dist.apache.org/repos/dist/dev/systemds/ and that
each artifact has accompanying checksums (such as .asc and .sha512)
#### 2. Release candidate build
The release candidate should build on Windows, OS X, and Linux. To do
this cleanly, the following procedure can be performed.
Note: Use an empty local maven repository
Example:
```sh
git clone https://github.com/apache/systemds.git
cd systemds
git tag -l
git checkout tags/2.1.0-rc1 -b 2.1.0-rc1
mvn -Dmaven.repo.local=$HOME/.m2/temp-repo clean package -P distribution
```
#### 3. Test suite check
The entire test suite should pass on Windows, OS X, Linux.
For verification:
```sh
mvn clean verify
```
### LICENSE and NOTICE
Each artifact must contain LICENSE and NOTICE files. These files must
reflect the contents of the artifacts. If the project dependencies
(i.e., libraries) have changed since the last release, the LICENSE and
NOTICE files to be updated to reflect these changes.
For more information, see:
1. http://www.apache.org/dev/#releases
2. http://www.apache.org/dev/licensing-howto.html
### Build src artifact and verify
The project should also be built using the `src` (tgz and zip).
```sh
tar -xvzf systemds-2.1.0-src.tgz
cd systemds-2.1.0-src
mvn clean package -P distribution
mvn verify
```
### Single node standalone
The standalone `tgz` and `zip` artifacts contain `systemds` files.
Verify that the algorithms can be run on single node using these
standalone distributions.
Here is an example:
see standalone guide of the documenation for more details.
```sh
tar -xvzf systemds-2.1.0-bin.tgz
cd systemds-2.1.0-bin
wget -P data/ http://archive.ics.uci.edu/ml/machine-learning-databases/haberman/haberman.data
echo '{"rows": 306, "cols": 4, "format": "csv"}' > data/haberman.data.mtd
echo '1,1,1,2' > data/types.csv
echo '{"rows": 1, "cols": 4, "format": "csv"}' > data/types.csv.mtd
systemds scripts/algorithms/Univar-Stats.dml -nvargs X=data/haberman.data TYPES=data/types.csv STATS=data/univarOut.mtx CONSOLE_OUTPUT=TRUE
cd ..
```
Also check for Hadoop, and spark
#### Performance suite
Verify that the performance suite executes on Spark and Hadoop.
The datasizes are 80MB, 800MB, 8GB, and 80GB.
## Voting process
Following a successful release candidate vote by SystemDS PMC members and the SystemDS community
on the dev mailing list, the release candidate shall be approved.
## Release
### Release deployment
The scripts will execute the release steps. and push the changes
to the releases.
### Deploy artifacts to Maven Central
In the [Apache Nexus Repo](https://repository.apache.org), release
the staged artifacts to the Maven Central repository.
Steps:
1. In the `Staging Repositories` section, find the relevant release candidate entry
2. Select `Release`
3. Drop all the other release candidates
### Deploy Python artifacts to PyPI
- Use upload script.
- Verify that the files at https://pypi.org/project/systemds/#files are correct.
### Update website
- Listing the release
- Publish Python API reference, and the Java API reference
### Mark the released version in JIRA
1. Go to https://issues.apache.org/jira/plugins/servlet/project-config/SYSTEMDS/versions
2. Hover over the released version and click `Release`
### Recordkeeping
Update the record at https://reporter.apache.org/addrelease.html?systemds
### Checklist
1. Maven artifacts released and indexed in the [Maven Central Repository](https://search.maven.org/search?q=g:org.apache.systemds)
2. Source distribution available in the [release repository `/release/systemds/`](https://dist.apache.org/repos/dist/release/systemds/)
3. Source distribution removed from the [dev repository `/dev/systemds/`](https://dist.apache.org/repos/dist/dev/systemds/)
4. Website is completely updated (Release, API manuals)
5. The release tag available on GitHub at https://github.com/apache/systemds/tags
6. The release notes are published on GitHub at https://github.com/apache/systemds/release
7. Release version is listed at reporter.apache.org
### Announce Release
Announce Released version within the project and public.
#### Apache Mailing List
1. Announce on the dev@ mail list that the release has been completed
2. Announce the release on the announce@apache.org mail list, listing major improving and contributions.
This can only be done from the `@apache.org` email address. This email has to be in plain text.
#### Social media
Publish on Twitter on @ApacheSystemDS.
## Checklist to declare the release process complete
1. Release announce on the dev@, announce@apache.org mail list
2. Release recorded in reporter.apache.org
3. Completion declared on the dev@ mail list
## Improve the process
Once the release is complete, let us retrospectively update changes and improvements
to this guide. Help the community adapt this guide for release validation before casting their
vote.
Perhaps some steps can be simplified or require more clarification.
# Appendix
### Generate GPG key
1. Create a folder for GNUPGHOME or use default `~/.gnupg`.
```sh
sudo mkdir -m 700 /usr/local/.gnupg
```
2. Generate the gpg key
```sh
sudo GNUPGHOME=/usr/local/.gnupg gpg --gen-key
```
output will be, like the following:
```
gpg: /usr/local/.gnupg/trustdb.gpg: trustdb created
gpg: key F164B430F91D6*** marked as ultimately trusted
gpg: directory '/usr/local/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/usr/local/.gnupg/openpgp-revocs.d/AD**...*.rev'
public and secret key created and signed.
```
3. Export the environmental variable
Note: Using `sudo` would add credentials in root users
```sh
export GNUPGHOME=/usr/local/.gnupg
gpg --homedir $GNUPGHOME --list-keys
gpg --homedir $GNUPGHOME --list-secret-keys
```