8008: Run bundle install and bundle list for api server and workbench.
[arvados.git] / jenkins / run-build-packages-one-target.sh
1 #!/bin/bash
2
3 read -rd "\000" helpmessage <<EOF
4 $(basename $0): Orchestrate run-build-packages.sh for one target
5
6 Syntax:
7         WORKSPACE=/path/to/arvados $(basename $0) [options]
8
9 --target <target>
10     Distribution to build packages for (default: debian7)
11 --command
12     Build command to execute (default: use built-in Docker image command)
13 --test-packages
14     Run package install test script "test-packages-$target.sh"
15 --debug
16     Output debug information (default: false)
17 --only-test
18     Test only a specific package
19
20 WORKSPACE=path         Path to the Arvados source tree to build packages from
21
22 EOF
23
24 if ! [[ -n "$WORKSPACE" ]]; then
25   echo >&2 "$helpmessage"
26   echo >&2
27   echo >&2 "Error: WORKSPACE environment variable not set"
28   echo >&2
29   exit 1
30 fi
31
32 if ! [[ -d "$WORKSPACE" ]]; then
33   echo >&2 "$helpmessage"
34   echo >&2
35   echo >&2 "Error: $WORKSPACE is not a directory"
36   echo >&2
37   exit 1
38 fi
39
40 PARSEDOPTS=$(getopt --name "$0" --longoptions \
41     help,debug,test-packages,target:,command:,only-test: \
42     -- "" "$@")
43 if [ $? -ne 0 ]; then
44     exit 1
45 fi
46
47 TARGET=debian7
48 COMMAND=
49 DEBUG=
50
51 eval set -- "$PARSEDOPTS"
52 while [ $# -gt 0 ]; do
53     case "$1" in
54         --help)
55             echo >&2 "$helpmessage"
56             echo >&2
57             exit 1
58             ;;
59         --target)
60             TARGET="$2"; shift
61             ;;
62         --only-test)
63             packages="$2"; shift
64             ;;
65         --debug)
66             DEBUG=" --debug"
67             ;;
68         --command)
69             COMMAND="$2"; shift
70             ;;
71         --test-packages)
72             test_packages=1
73             ;;
74         --)
75             if [ $# -gt 1 ]; then
76                 echo >&2 "$0: unrecognized argument '$2'. Try: $0 --help"
77                 exit 1
78             fi
79             ;;
80     esac
81     shift
82 done
83
84 set -e
85
86 if [[ -n "$test_packages" ]]; then
87     if [[ -n "$(find $WORKSPACE/packages/$TARGET -name *.rpm)" ]] ; then
88         createrepo $WORKSPACE/packages/$TARGET
89     fi
90
91     if [[ -n "$(find $WORKSPACE/packages/$TARGET -name *.deb)" ]] ; then
92         (cd $WORKSPACE/packages/$TARGET
93          dpkg-scanpackages .  2> >(grep -v 'warning' 1>&2) | gzip -c > Packages.gz
94         )
95     fi
96
97     COMMAND="/jenkins/test-packages-$TARGET.sh"
98     IMAGE="arvados/package-test:$TARGET"
99 else
100     IMAGE="arvados/build:$TARGET"
101     if [[ "$COMMAND" != "" ]]; then
102         COMMAND="/usr/local/rvm/bin/rvm-exec default bash /jenkins/$COMMAND --target $TARGET$DEBUG"
103     fi
104 fi
105
106 JENKINS_DIR=$(dirname "$(readlink -e "$0")")
107
108 if [[ -n "$test_packages" ]]; then
109     pushd "$JENKINS_DIR/package-test-dockerfiles"
110 else
111     pushd "$JENKINS_DIR/dockerfiles"
112 fi
113
114 echo $TARGET
115 cd $TARGET
116 time docker build --tag=$IMAGE .
117 popd
118
119 if test -z "$packages" ; then
120     packages="arvados-api-server
121         arvados-data-manager
122         arvados-docker-cleaner
123         arvados-git-httpd
124         arvados-node-manager
125         arvados-src
126         arvados-workbench
127         crunchstat
128         keepproxy
129         keep-rsync
130         keepstore
131         keep-web
132         libarvados-perl"
133
134     if test $target == centos6 ; then
135         packages="$packages python27-python-arvados-fuse
136                   python27-python-arvados-python-client"
137     else
138         packages="$packages python-arvados-fuse
139                   python-arvados-python-client"
140     fi
141 fi
142
143 FINAL_EXITCODE=0
144
145 package_fails=""
146
147 if [[ -n "$test_packages" ]]; then
148     for p in $packages ; do
149         if ! docker run --rm -v "$JENKINS_DIR:/jenkins" -v "$WORKSPACE:/arvados" \
150                   --env ARVADOS_DEBUG=1 "$IMAGE" $COMMAND $p ; then
151             FINAL_EXITCODE=$?
152             package_fails="$package_fails $p"
153             echo "ERROR: $tag build failed with exit status $FINAL_EXITCODE." >&2
154         fi
155     done
156 else
157     if docker run --rm -v "$JENKINS_DIR:/jenkins" -v "$WORKSPACE:/arvados" \
158               --env ARVADOS_DEBUG=1 "$IMAGE" $COMMAND; then
159         # Success - nothing more to do.
160         true
161     else
162         FINAL_EXITCODE=$?
163         echo "ERROR: $tag build failed with exit status $FINAL_EXITCODE." >&2
164     fi
165 fi
166
167 if test -n "$package_fails" ; then
168     echo "Failed package tests:$package_fails"
169 fi
170
171 exit $FINAL_EXITCODE