This document is intended to be used and kept up to date by the VIVO Release Manager. It details the steps necessary to perform an official release of VIVO.
Before Release Day
Release Numbering Convention
As agreed by the Steering Group, VIVO follows the Semantic Versioning guidelines - http://semver.org/
- MAJOR version when you make incompatible API changes,
- MINOR version when you add functionality in a backwards-compatible manner, and
- PATCH version when you make backwards-compatible bug fixes.
Verify release privileges
To make sure release day goes smoothly, you should ensure that:
- You have an account with commit access for the vivo-project on github. As a committer, you should already have this level of access.
- You have an account with edit privileges on the lyrasis.org Confluence wiki.
- You have an https://central.sonatype.com/ account with generated token and have requested to be given permission to publish to the org.vivoweb groupId
- To add a new publisher to an existing namespace, send us a support ticket at Central Support and include the username(s) to be added. The username(s) must be already registered by following the instructions on the registration page. Please make sure the email account that submits the support request is a registered publisher on the namespace in question.
- You have project configuration privileges on JIRA (you'll see an error here if you don't) : must be added to `Project Settings → Administrators` role
Update Maven settings.xml
Vitro and VIVO root pom.xml already has the correct repositories listed in the central parent's '<distributionManagement>' section. In order to deploy, you will need to add your central maven username and password to your local ~/.m2/settings.xml file. For example:
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
http://maven.apache.org/xsd/settings-1.0.0.xsd">
<profile>
<id>central</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<gpg.keyname>YourKeyID</gpg.keyname>
<gpg.homedir>YourGPGDir</gpg.homedir>
<maven.deploy.skip>false</maven.deploy.skip>
</properties>
</profile>
<servers>
<!--Login info for central repository-->
<server>
<id>central</id>
<username>YourCentralSonatypeToken</username>
<password>YourCentralSonatypePassword</password>
</server>
<server>
<id>github</id>
<username>your-github-id</username>
<password>your-github-pwd</password>
</server>
</servers>
</settings>
If you don't yet have a ~/.m2/settings.xml file, you should create one, and copy the full contents above (obviously make sure to put in your username and password, and GPG details).
Ensure you have a trusted code signing key
- create one if you haven't before
- ensure that it's listed within the contributor keys
- You must generate and publish your own personal Code Signing Key (required by Sonatype). Here are two sites that give hints on how to do that:
- Creating a Code Signing Key
- How to Generate PGP Signatures with Maven (required for all Sonatype releases)
- Make sure to publish your Key file to hkps://keys.openpgp.org, as this is the Key Server Sonatype uses for verification:
- (e.g.)
gpg --keyserver hkps://keys.openpgp.org --send-keys [yourKeyID][yourKeyId]can be found by running the following command and copying the alpha-numeric string after the "/" on the "pub" linegpg --list-keys
- You can see if your key is already on that Key Server by visiting https://keys.openpgp.org and searching on your name
- (e.g.)
Ensure you have a SSH key setup locally and in GitHub
- Create SSH Key
mkdir -p ~/.sshssh-keyscan -t rsa github.com >> ~/.ssh/known_hostsssh-keygen -t rsa -C "user.email"
- Setup on GitHub
- open the public key with this command
$ cat ~/.ssh/id_rsa.puband copy it. - Add the id_rsa.pub key to SSH keys list on your GitHub profile.
- open the public key with this command
Creation of release candidates
- The test plan should also be ready prior to code freeze.
- Checkout VIVO-release-publishing project (git checkout https://github.com/vivo-project/VIVO-release-publisher)
- Configure variables for creation of release candidate (defineVariables.sh)
#!/bin/bash
# RC define common variables Script
export RC_TARGET_DIR=RC
export ORG=vivo-project
export PERSONAL_ACCESS_TOKEN=XXXXXXXX
export BRANCH=main
export RC_VERSION=1.14.0
export RC_VERSION_MINOR=1.14
export RC_NEXT_SNAPSHOT=1.14.1
RC_NUM=5
export Vitro_REPO=Vitro
export Vitro_TAG=vitro
export Vitro_RC_NUM=${RC_NUM}
export VIVO_REPO=VIVO
export VIVO_TAG=vivo
export VIVO_RC_NUM=${RC_NUM}
- run prepareReleaseCandidate.sh (./prepareReleaseCandidate.sh)
- announce that Release candidate is ready for testing (Release Testing)
- Release testing page should contain
- instructions how to build and run VIVO Release candidate or how to get credentials for an active and public VIVO instance (for instance https://vivo.tib.eu/vivorc)
- links to google forms where community can provide test results and feedbacks
- Release testing page should contain
- analyze results of release candidate testing inside VIVO committers group and classify reported issue to release blockers and non-release blockers
- if there are release blockers, after resolving those issues, the new release candidate should be published, if not, release is ready to be published (see the next section)
Release Day
- Checkout VIVO-release-publishing project (git checkout https://github.com/vivo-project/VIVO-release-publisher)
- Configure variables for creation of release candidate (defineVariables.sh)Variable release number
#!/bin/bash # RC define common variables Script export RC_TARGET_DIR=RC export ORG=vivo-project export PERSONAL_ACCESS_TOKEN=XXXXXXXX export BRANCH=main export RC_VERSION=1.14.0 export RC_VERSION_MINOR=1.14 export RC_NEXT_SNAPSHOT=1.14.1 RC_NUM=5 export Vitro_REPO=Vitro export Vitro_TAG=vitro export Vitro_RC_NUM=${RC_NUM} export VIVO_REPO=VIVO export VIVO_TAG=vivo export VIVO_RC_NUM=${RC_NUM} - run publishReleaseVitro.sh (./publishReleaseVitro.sh)
- Go to https://github.com/vivo-project/Vitro/releases/ and check if everything is ok
- Go to https://doi.org/10.5281/zenodo.20845352 and check whether release is also archived on Zenodo
- Go to https://central.sonatype.com/ (Maven Central Repository)
- Click on Log In (Top Right Corner) and use your central sonatype id from your settings.xml file
Click Publish in top right corner and click on Deployments
- Check whether everything looks ok - war, pom, jar, md5, asc, etc.
- If everything is ok, Click on Publish (otherwise Click on Drop and fix the issue and start releasing process again)
- In a couple of minutes, new artefacts will be available at https://repo1.maven.org/maven2/org/vivoweb.
- Wait until the Vitro release is available in the maven repository (http://repo1.maven.org/maven2/org/vivoweb). This make take some time.
- run publishReleaseVIVO.sh (./publishReleaseVIVO.sh)
- Go to https://github.com/vivo-project/VIVO/releases/ and check if everything is ok
- Go to https://doi.org/10.5281/zenodo.3509498 and check whether release is also archived on Zenodo
- Go to https://central.sonatype.com/ (Maven Central Repository)
- Click on Log In (Top Right Corner) and use your central sonatype id from your settings.xml file
Click Publish in top right corner and click on Deployments
- Check whether everything looks ok - war, pom, jar, md5, asc, etc.
- If everything is ok, Click on Publish (otherwise Click on Drop and fix the issue and start releasing process again)
- In a couple of minutes, new artefacts will be available at https://repo1.maven.org/maven2/org/vivoweb.
- Make release announcement and update technical documentation at wiki
- Distribute the message that new release has been published
Push Release Branch to develop and Maintenance
- Checkout VIVO-release-publishing project (git checkout https://github.com/vivo-project/VIVO-release-publisher)
- Configure variables for creation of release candidate (defineVariables.sh)
#!/bin/bash
# RC define common variables Script
export RC_TARGET_DIR=RC
export ORG=vivo-project
export PERSONAL_ACCESS_TOKEN=XXXXXXXX
export BRANCH=main
export RC_VERSION=1.14.0
export RC_VERSION_MINOR=1.14
export RC_NEXT_SNAPSHOT=1.14.1
RC_NUM=5
export Vitro_REPO=Vitro
export Vitro_TAG=vitro
export Vitro_RC_NUM=${RC_NUM}
export VIVO_REPO=VIVO
export VIVO_TAG=vivo
export VIVO_RC_NUM=${RC_NUM}
- run pushToMaintenance.sh (./pushToMaintenance.sh)
Announce release
Let Dragan Ivanovic know that the release is complete and can be announced.
Helpful Tips - Debugging Issues
Key Issues?
#Verify that your GPG key is in your ring gpg --list-secret-keys #If the key isn't listed import the private key your previously created gpg --import name-of-private-key.asc #List the keys again but in keyid LONG format gpg --list-secret-keys --keyid-format LONG #Take the keyid and setup git to use it as your global default. git config --global user.signingkey YYYYXXXXYYYYXXXX