blob: f3d2b6b0a366d9070536b091a9c3bb4891b9a0db [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
Ray Milkey4867af22018-08-10 16:52:28 -0700103# Test access to EC2
104function testEC2Access {
105 aux=$(mktemp)
106 trap "cat $aux; rm -f $aux; echo 'FAILED'" ERR
107 printf "Checking EC2 access... "
108 : "${AWS_ACCESS_KEY_ID:?AWS_ACCESS_KEY_ID must be set}"
109 : "${AWS_SECRET_ACCESS_KEY:?AWS_SECRET_ACCESS_KEY must be set}"
110
111 uploadToS3.py -v 1>$aux 2>&1
112 rm -f $aux
113 echo "OK"
114}
115
Thomas Vachuska4702a262016-03-02 15:31:52 -0800116# Sonatype account must be created & ~/.m2/settings.xml must be configured
117# Test by "releasing" a fake project setup for that purpose to validate access.
Brian O'Connord89bfd02016-11-22 15:39:49 -0800118function testSonatypeAccessMvn {
Thomas Vachuska4702a262016-03-02 15:31:52 -0800119 aux=$(mktemp)
120 trap "cat $aux; rm -f $aux; echo 'FAILED'" ERR
Brian O'Connord89bfd02016-11-22 15:39:49 -0800121 printf "Checking Sonatype access via Maven... "
Thomas Vachuska4702a262016-03-02 15:31:52 -0800122 pushd $ONOS_ROOT/tools/build/release-test >/dev/null
123 # TODO: Figure out how to supress the GPG note
124 mvn -Prelease clean deploy org.sonatype.plugins:nexus-staging-maven-plugin:drop \
125 1>$aux 2>&1 </dev/null
126 mvn clean >/dev/null
127 rm -f $aux
128 popd >/dev/null
129 echo "OK"
130}
131
Brian O'Connord89bfd02016-11-22 15:39:49 -0800132function testSonatypeAccessRest {
Ray Milkeyd6e2e442016-11-30 10:15:23 -0800133 : "${SONATYPE_USER:?SONATYPE_USER must be set}"
134 : "${SONATYPE_PASSWORD:?SONATYPE_PASSWORD must be set}"
Brian O'Connord89bfd02016-11-22 15:39:49 -0800135 export ONOS_VERSION=1.2.3
136 printf "Checking Sonatype access via REST... "
137 pushd $ONOS_ROOT/tools/build/release-test >/dev/null
138 #FIXME this won't work on Linux
139 md5 pom.xml > pom.xml.md5
140 shasum pom.xml > pom.xml.sha1
141 gpg --detach-sign --output pom.xml.asc pom.xml
142 # Upload the files to staging
143 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml \
144 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom
145 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml.md5 \
146 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom.md5
147 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml.sha1 \
148 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom.sha1
149 curl -s -u$SONATYPE_USER:$SONATYPE_PASSWORD --upload-file pom.xml.asc \
150 https://oss.sonatype.org/service/local/staging/deploy/maven2/org/onosproject/onos-api/$ONOS_VERSION/onos-api-$ONOS_VERSION.pom.asc
151 rm pom.xml.md5 pom.xml.sha1 pom.xml.asc
152 onos-close-staging -d >/dev/null
153 popd >/dev/null
154 unset ONOS_VERSION
155 echo "OK"
156}
157
Ray Milkey4867af22018-08-10 16:52:28 -0700158# .buckconfig.local must exist and the sonatype credentials must be set up
159function testBuckconfigLocal() {
160 printf "Checking local buck config..."
161 if [ ! -f $ONOS_ROOT/.buckconfig.local ]; then
162 echo ".buckconfig.local not found"
163 return 1
164 fi
165
166 trap "echo [publish] must be specified" ERR
167 grep -q "^\[publish\]" $ONOS_ROOT/.buckconfig.local
168
169 trap "echo maven_url must be specified" ERR
170 grep -q "maven_url" $ONOS_ROOT/.buckconfig.local
171
172 trap "echo maven_user must be specified" ERR
173 grep -q "maven_user" $ONOS_ROOT/.buckconfig.local
174
175 trap "echo maven_password must be specified" ERR
176 grep -q "maven_password" $ONOS_ROOT/.buckconfig.local
177
178 trap "echo pgp_keyring must be specified" ERR
179 grep -q "pgp_keyring" $ONOS_ROOT/.buckconfig.local
180
181 echo "OK"
182}
183
184testBuckconfigLocal
Thomas Vachuska68918842016-03-04 10:38:55 -0800185testToolchain
186testSnapshotDependencies
Thomas Vachuska4702a262016-03-02 15:31:52 -0800187testGerritAccess
Ray Milkey13d3ae32017-01-03 15:00:04 -0800188
189if [ ${dryRun} -eq 0 ]; then
190 testWikiAccess
Ray Milkey4867af22018-08-10 16:52:28 -0700191 testEC2Access
Ray Milkey13d3ae32017-01-03 15:00:04 -0800192 testSonatypeAccessMvn
193 testSonatypeAccessRest
194fi
Thomas Vachuska4702a262016-03-02 15:31:52 -0800195
196echo "Ready to commence release process!"