blob: c25d8299e2a79eadb4374cfbfdeb26aca6510b7b [file] [log] [blame]
Thomas Vachuska4702a262016-03-02 15:31:52 -08001#!/bin/bash
2# -----------------------------------------------------------------------------
3# Validates that the local environment is ready to commence release process.
4# -----------------------------------------------------------------------------
5
6[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
7
Ray Milkey13d3ae32017-01-03 15:00:04 -08008dryRun=0
9if [ "${1}" == "--dry-run" ]; then
10 dryRun=1
11fi
12
Thomas Vachuska4702a262016-03-02 15:31:52 -080013GERRIT_USER=${GERRIT_USER:-$USER}
Brian O'Connor156c4802016-03-02 15:50:38 -080014WIKI_USER=${WIKI_USER:-$USER}
Thomas Vachuska4702a262016-03-02 15:31:52 -080015
16set -e
17
Thomas Vachuska68918842016-03-04 10:38:55 -080018# Tests availability of the specified tools
19function testTool {
20 trap "echo 'FAILED'" ERR
21 printf "Checking $1 availability... "
22 which -s $1
23 echo "OK"
24}
25
26# Tests availability of gerrit
27function testGerritTool {
28 trap "echo 'FAILED'" ERR
29 printf "Checking gerrit... "
30 git review --version 2>/dev/null
31 echo "OK"
32}
33
34# Tests availability of GPG or GPG2
35function testGpgTool {
36 trap "echo 'FAILED'" ERR
37 printf "Checking gpg or gpg2... "
38 which -s gpg || which -s gpg2
39 echo "OK"
40}
41
42# Tests Java version
43function testJavaVersion {
44 trap "echo 'FAILED'" ERR
45 printf "Checking Java version... "
46 v=$(javac -version 2>&1 | grep 1.8.0_ | sed -e 's/.*1.8.0_\([0-9]*\).*/\1/g')
Brian O'Connora3178722016-03-10 15:44:27 -080047 test "$v" -ge 73
Thomas Vachuska68918842016-03-04 10:38:55 -080048 echo "OK"
49}
50
51# Tests availability of the required tools
52function testToolchain {
53 for tool in bash python git java javac mvn tar; do
54 testTool $tool;
55 done
56 testGerritTool
57 testGpgTool
58 testJavaVersion
59}
60
61# Tests that the specified artifact dependency is not a snapshot version
62function testArtifactDependency {
63 trap "echo 'FAILED'" ERR
64 printf "Checking $1 dependency... "
65 grep "<$1.version>.*</$1.version>" $ONOS_ROOT/pom.xml | grep -q SNAPSHOT && false
66 echo "OK"
67}
68
69# Tests that the ONOS-base is not a snapshot version
70function testOnosBase {
71 trap "echo 'FAILED'" ERR
72 printf "Checking onos-base dependency... "
73 grep -A1 "onos-base" $ONOS_ROOT/pom.xml | grep -q SNAPSHOT && false
74 echo "OK"
75}
76
77# Tests that the root pom does not contain any snapshot dependencies
78# on anxillary artifacts, e.g. openflowj, copycat
79function testSnapshotDependencies {
80 testOnosBase
81 for artifact in onos-build-conf onos-maven-plugin openflowj atomix copycat; do
82 testArtifactDependency $artifact
83 done
84}
85
Thomas Vachuska4702a262016-03-02 15:31:52 -080086# Test access to Gerrit (Administrator)
87function testGerritAccess {
88 trap "echo 'FAILED'" ERR
Brian O'Connor156c4802016-03-02 15:50:38 -080089 printf "Checking Gerrit ONOS Release group access... "
90 ssh -p 29418 gerrit.onosproject.org gerrit ls-members "ONOS\ Release"\
91 --recursive | grep -q $GERRIT_USER
Thomas Vachuska4702a262016-03-02 15:31:52 -080092 echo "OK"
93}
94
Ray Milkey46b3e852017-09-05 19:41:15 -070095# Test access to api.onosproject.org
Thomas Vachuska4702a262016-03-02 15:31:52 -080096function testWikiAccess {
97 trap "echo 'FAILED'" ERR
98 printf "Checking Wiki access... "
Ray Milkey46b3e852017-09-05 19:41:15 -070099 ssh $WIKI_USER@api.onosproject.org "test -w /var/www/api/index.html"
Thomas Vachuska4702a262016-03-02 15:31:52 -0800100 echo "OK"
101}
102
Thomas Vachuska4702a262016-03-02 15:31:52 -0800103# Sonatype account must be created & ~/.m2/settings.xml must be configured
104# Test by "releasing" a fake project setup for that purpose to validate access.
Brian O'Connord89bfd02016-11-22 15:39:49 -0800105function testSonatypeAccessMvn {
Thomas Vachuska4702a262016-03-02 15:31:52 -0800106 aux=$(mktemp)
107 trap "cat $aux; rm -f $aux; echo 'FAILED'" ERR
Brian O'Connord89bfd02016-11-22 15:39:49 -0800108 printf "Checking Sonatype access via Maven... "
Thomas Vachuska4702a262016-03-02 15:31:52 -0800109 pushd $ONOS_ROOT/tools/build/release-test >/dev/null
110 # TODO: Figure out how to supress the GPG note
111 mvn -Prelease clean deploy org.sonatype.plugins:nexus-staging-maven-plugin:drop \
112 1>$aux 2>&1 </dev/null
113 mvn clean >/dev/null
114 rm -f $aux
115 popd >/dev/null
116 echo "OK"
117}
118
Brian O'Connord89bfd02016-11-22 15:39:49 -0800119function testSonatypeAccessRest {
Ray Milkeyd6e2e442016-11-30 10:15:23 -0800120 : "${SONATYPE_USER:?SONATYPE_USER must be set}"
121 : "${SONATYPE_PASSWORD:?SONATYPE_PASSWORD must be set}"
Brian O'Connord89bfd02016-11-22 15:39:49 -0800122 export ONOS_VERSION=1.2.3
123 printf "Checking Sonatype access via REST... "
124 pushd $ONOS_ROOT/tools/build/release-test >/dev/null
125 #FIXME this won't work on Linux
126 md5 pom.xml > pom.xml.md5
127 shasum pom.xml > pom.xml.sha1
128 gpg --detach-sign --output pom.xml.asc pom.xml
129 # Upload the files to staging
130 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml \
131 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom
132 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml.md5 \
133 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom.md5
134 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml.sha1 \
135 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom.sha1
136 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml.asc \
137 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom.asc
138 rm pom.xml.md5 pom.xml.sha1 pom.xml.asc
139 onos-close-staging -d >/dev/null
140 popd >/dev/null
141 unset ONOS_VERSION
142 echo "OK"
143}
144
Thomas Vachuska68918842016-03-04 10:38:55 -0800145testToolchain
146testSnapshotDependencies
Thomas Vachuska4702a262016-03-02 15:31:52 -0800147testGerritAccess
Ray Milkey13d3ae32017-01-03 15:00:04 -0800148
149if [ ${dryRun} -eq 0 ]; then
150 testWikiAccess
Ray Milkey13d3ae32017-01-03 15:00:04 -0800151 testSonatypeAccessMvn
152 testSonatypeAccessRest
153fi
Thomas Vachuska4702a262016-03-02 15:31:52 -0800154
155echo "Ready to commence release process!"