Meta scripts to do the entire release process with a single script invocation
Change-Id: If9826cff51978a4cc4147d9b437c3c4098b9c6c0
diff --git a/tools/build/check-uploaded-maven-artifacts b/tools/build/check-uploaded-maven-artifacts
new file mode 100755
index 0000000..0db1d04
--- /dev/null
+++ b/tools/build/check-uploaded-maven-artifacts
@@ -0,0 +1,75 @@
+#! /usr/bin/env python
+
+# Spot checks some published artifacts to be sure that they uploaded correctly
+# to the release repository
+
+import requests
+import sys
+import sha
+import os
+
+
+from requests.auth import HTTPBasicAuth
+
+if len(sys.argv) != 4:
+ print "usage: check-uploaded-maven-artifact version buildRoot repoRoot"
+ sys.exit(1)
+
+version = sys.argv[1]
+buildRoot = sys.argv[2]
+repoRoot = sys.argv[3]
+
+def checkArtifact(localPath, remoteUrl):
+
+ repoResponse = requests.head(remoteUrl)
+
+ if repoResponse.status_code != 200:
+ print 'Cannot find jar file artifact'
+ print repoResponse.text
+ sys.exit(1)
+
+ remoteSize = int(repoResponse.headers['content-length'])
+ etag = repoResponse.headers['etag']
+
+ localSize = os.path.getsize(localPath)
+
+ localArtifact = open(localPath)
+ localArtifactSha = sha.new(localArtifact.read())
+ expectedSha1 = localArtifactSha.hexdigest()
+
+ if localSize != remoteSize:
+ print 'Size for ' + remoteUrl + ' is wrong local ' + str(localSize) + ' but found remote ' + str(remoteSize)
+ sys.exit(1)
+
+ sha1 = ''
+ if '{SHA1{' in etag:
+ # this is a sonatype style artifact
+ sha1 = etag[7:len(etag)-3]
+ else:
+ sha1 = repoResponse.headers['x-checksum-sha1']
+
+ if sha1 != expectedSha1:
+ print 'SHA1 hash is wrong expected ' + expectedSha1 + ' but found ' + sha1
+ sys.exit(1)
+
+def checkArtifactsForComponent(version, name, component, buildRoot, repoRoot):
+ localArtifactRootPath = buildRoot + '/buck-out/gen/' + component
+ localArtifactJarPath = localArtifactRootPath + '/lib__' + name + '__output/' + name + '.jar'
+ localArtifactJavadocPath = localArtifactRootPath + '/' + name + '#javadoc,maven-sources.jar'
+ localArtifactSourcesPath = localArtifactRootPath + '/' + name + '#maven,src-sources.jar'
+
+ remoteArtifactBaseUrl = repoRoot + '/org/onosproject/' + name + '/' + version + '/' + name + '-' + version
+ remoteArtifactJarUrl = remoteArtifactBaseUrl + '.jar'
+ remoteArtifactJavadocUrl = remoteArtifactBaseUrl + '-javadoc.jar'
+ remoteArtifactSourcesUrl = remoteArtifactBaseUrl + '-sources.jar'
+
+ checkArtifact(localArtifactJarPath, remoteArtifactJarUrl)
+ checkArtifact(localArtifactJavadocPath, remoteArtifactJavadocUrl)
+ checkArtifact(localArtifactSourcesPath, remoteArtifactSourcesUrl)
+
+checkArtifactsForComponent(version, 'onos-api', 'core/api', buildRoot, repoRoot)
+checkArtifactsForComponent(version, 'onos-protocols-openflow-api', 'protocols/openflow/api', buildRoot, repoRoot)
+checkArtifactsForComponent(version, 'onos-drivers-ciena', 'drivers/ciena', buildRoot, repoRoot)
+checkArtifactsForComponent(version, 'onos-providers-lldp', 'providers/lldp', buildRoot, repoRoot)
+checkArtifactsForComponent(version, 'onos-apps-bgprouter', 'apps/bgprouter', buildRoot, repoRoot)
+
diff --git a/tools/build/onos-build-and-upload b/tools/build/onos-build-and-upload
new file mode 100755
index 0000000..bdf2f36
--- /dev/null
+++ b/tools/build/onos-build-and-upload
@@ -0,0 +1,32 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Builds the release bits and uploads them.
+# -----------------------------------------------------------------------------
+
+VERSION=$1
+NEXT_VERSION=$2
+BRANCH=$3
+
+set -e
+set -x
+
+# fix version strings, build artifacts, upload artifacts
+onos-release $VERSION | tee build.log
+
+# upload docs
+onos-upload-docs ${WIKI_USER}
+
+# upload release bits
+onos-upload-bits
+
+# spot check that uploaded artifacts are correct
+check-uploaded-maven-artifacts $VERSION $ONOS_ROOT https://oss.sonatype.org/content/groups/staging
+
+# set the version strings to the next version
+onos-snapshot ${NEXT_VERSION}
+
+# Push version string changes to git
+git push origin ${BRANCH}
+
+# Push tag for this build to git
+git push origin ${VERSION}
diff --git a/tools/build/onos-build-release b/tools/build/onos-build-release
new file mode 100755
index 0000000..ee39597
--- /dev/null
+++ b/tools/build/onos-build-release
@@ -0,0 +1,30 @@
+#!/bin/bash
+# -----------------------------------------------------------------------------
+# Builds an ONOS release
+# -----------------------------------------------------------------------------
+
+if [ $# -ne 3 ]; then
+ echo "Usage: onos-build-release version next-version branch"
+ echo "For example, to build rc2 on the 1.8 branch - onos-build-release onos-1.8 1.8.0-rc2 1.8.0-SNAPSHOT"
+ exit 1
+fi
+
+BRANCH=$1
+VERSION=$2
+NEXT_VERSION=$3
+
+set -e
+set -x
+
+# Check that environment setup is correct
+onos-release-prerequisites
+
+# Block commits to Gerrit
+ssh -p 29418 gerrit.onosproject.org projectlock lock onos ${BRANCH}
+
+# Prepare the build tree
+onos-prepare-release $VERSION $BRANCH "onos-build-and-upload $VERSION $NEXT_VERSION $BRANCH"
+
+# Unblock commits
+ssh -p 29418 gerrit.onosproject.org projectlock unlock onos ${BRANCH}
+
diff --git a/tools/build/onos-prepare-release b/tools/build/onos-prepare-release
index 9c4ce71..4088869 100755
--- a/tools/build/onos-prepare-release
+++ b/tools/build/onos-prepare-release
@@ -4,9 +4,11 @@
# --------------------------------------------------------
set -e
+set -x
GERRIT_USER=${GERRIT_USER:-$USER}
BRANCH=${2:-master}
+COMMAND=${3:--i}
export ONOS_VERSION=${1:-$ONOS_VERSION}
if [ -z "$ONOS_VERSION" ]; then
@@ -35,6 +37,6 @@
export ONOS_ROOT=$DIR
. $ONOS_ROOT/tools/build/envDefaults
-exec bash -i
+exec bash $COMMAND
# TODO on exit, print "leaving directory"