X-Git-Url: https://git.arvados.org/arvados-dev.git/blobdiff_plain/1530c4fdb9c691ac378ebc67ff3c5775f2f9ee9b..27d5f6ed785b6e127cf9a2f1145fac21627a9a89:/jenkins/run-build-packages.sh diff --git a/jenkins/run-build-packages.sh b/jenkins/run-build-packages.sh index 878a9c2..99d0681 100755 --- a/jenkins/run-build-packages.sh +++ b/jenkins/run-build-packages.sh @@ -5,7 +5,7 @@ read -rd "\000" helpmessage </dev/null 2>&1 + +if [[ "$?" != 0 ]]; then + echo >&2 "$helpmessage" + echo >&2 + echo >&2 "Error: fpm not found" + echo >&2 + exit 1 +fi + if [[ "$DEBUG" != 0 ]]; then echo "Workspace is $WORKSPACE" fi +version_from_git() { + # Generates a version number from the git log for the current working + # directory, and writes it to stdout. + local git_ts git_hash + declare $(TZ=UTC git log -n1 --first-parent --max-count=1 \ + --format=format:"git_ts=%ct git_hash=%h" .) + echo "0.1.$(date -ud "@$git_ts" +%Y%m%d%H%M%S).$git_hash" +} + handle_python_package () { # This function assumes the current working directory is the python package directory if [[ "$UPLOAD" != 0 ]]; then @@ -95,14 +115,22 @@ handle_python_package () { # Build debs for everything build_and_scp_deb () { + # The package source. Depending on the source type, this can be a + # path, or the name of the package in an upstream repository (e.g., + # pip). PACKAGE=$1 shift + # The name of the package to build. Defaults to $PACKAGE. PACKAGE_NAME=$1 shift + # Optional: the vendor of the package. Should be "Curoverse, Inc." for + # packages of our own software. Passed to fpm --vendor. VENDOR=$1 shift + # The type of source package. Passed to fpm -s. Default "python". PACKAGE_TYPE=$1 shift + # Optional: the package version number. Passed to fpm -v. VERSION=$1 shift @@ -114,7 +142,7 @@ build_and_scp_deb () { PACKAGE_TYPE='python' fi - declare -a COMMAND_ARR=("fpm" "--maintainer=Ward Vandewege " "-s" "$PACKAGE_TYPE" "-t" "deb") + declare -a COMMAND_ARR=("fpm" "--maintainer=Ward Vandewege " "-s" "$PACKAGE_TYPE" "-t" "deb" "-x" "usr/local/lib/python2.7/dist-packages/tests") if [[ "$PACKAGE_NAME" != "$PACKAGE" ]]; then COMMAND_ARR+=('-n' "$PACKAGE_NAME") @@ -128,6 +156,7 @@ build_and_scp_deb () { COMMAND_ARR+=('-v' "$VERSION") fi + # Append remaining function arguments directly to fpm's command line. for i; do COMMAND_ARR+=("$i") done @@ -150,7 +179,7 @@ build_and_scp_deb () { if [[ "$FPM_PACKAGE_NAME" == "" ]]; then EXITCODE=1 - echo "Error: Unable to figure out package name from fpm results:" + echo "Error: $PACKAGE: Unable to figure out package name from fpm results:" echo echo $FPM_RESULTS echo @@ -176,6 +205,9 @@ source /etc/profile.d/rvm.sh # out our git tree here chmod o+r "$WORKSPACE" -R +# More cleanup - make sure all executables that we'll package are 755 +find -type d -name 'bin' |xargs -I {} find {} -type f |xargs -I {} chmod 755 {} + # Now fix our umask to something better suited to building and publishing # gems and packages umask 0022 @@ -184,6 +216,31 @@ if [[ "$DEBUG" != 0 ]]; then echo "umask is" `umask` fi +# Perl packages +if [[ "$DEBUG" != 0 ]]; then + echo -e "\nPerl packages\n" +fi + +if [[ "$DEBUG" != 0 ]]; then + PERL_OUT=/dev/stdout +else + PERL_OUT=/dev/null +fi + +cd "$WORKSPACE/sdk/perl" + +if [[ -e Makefile ]]; then + make realclean >"$PERL_OUT" +fi +find -maxdepth 1 \( -name 'MANIFEST*' -or -name 'libarvados-perl_*.deb' \) \ + -delete +rm -rf install + +perl Makefile.PL >"$PERL_OUT" && \ + make install PREFIX=install INSTALLDIRS=perl >"$PERL_OUT" && \ + build_and_scp_deb install/=/usr libarvados-perl "Curoverse, Inc." dir \ + "$(version_from_git)" + # Ruby gems if [[ "$DEBUG" != 0 ]]; then echo @@ -191,10 +248,17 @@ if [[ "$DEBUG" != 0 ]]; then echo fi +if type rvm-exec 2>/dev/null; then + FPM_GEM_PREFIX=$(rvm-exec system gem environment gemdir) +else + FPM_GEM_PREFIX=$(gem environment gemdir) +fi + cd "$WORKSPACE" cd sdk/ruby -# clean up old gems -rm -f arvados-*gem +# clean up old packages +find -maxdepth 1 \( -name 'arvados-*.gem' -or -name 'rubygem-arvados_*.deb' \) \ + -delete if [[ "$DEBUG" != 0 ]]; then gem build arvados.gemspec @@ -208,6 +272,9 @@ if [[ "$UPLOAD" != 0 ]]; then gem push arvados-*gem fi +build_and_scp_deb arvados-*.gem "" "Curoverse, Inc." gem "" \ + --prefix "$FPM_GEM_PREFIX" + # Build arvados-cli GEM cd "$WORKSPACE" cd sdk/cli @@ -234,8 +301,7 @@ if [[ "$DEBUG" != 0 ]]; then fi cd "$WORKSPACE" - -GIT_HASH=`git log --format=format:%ct.%h -n1 .` +PKG_VERSION=$(version_from_git) cd sdk/python handle_python_package @@ -278,7 +344,7 @@ fi # Build arvados src deb package cd $WORKSPACE/debs -build_and_scp_deb $WORKSPACE/src-build-dir/=/usr/local/arvados/src arvados-src 'Curoverse, Inc.' 'dir' "0.1.$GIT_HASH" "-x 'usr/local/arvados/src/.git*'" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=The Arvados source code" "--architecture=all" +build_and_scp_deb $WORKSPACE/src-build-dir/=/usr/local/arvados/src arvados-src 'Curoverse, Inc.' 'dir' "$PKG_VERSION" "--exclude=usr/local/arvados/src/.git" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=The Arvados source code" "--architecture=all" # clean up, check out master and step away from detached-head state cd "$WORKSPACE/src-build-dir" @@ -296,17 +362,17 @@ ln -sfn "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git" # keepstore go get "git.curoverse.com/arvados.git/services/keepstore" cd $WORKSPACE/debs -build_and_scp_deb $GOPATH/bin/keepstore=/usr/bin/keepstore keepstore 'Curoverse, Inc.' 'dir' "0.1.$GIT_HASH" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=Keepstore is the Keep storage daemon, accessible to clients on the LAN" +build_and_scp_deb $GOPATH/bin/keepstore=/usr/bin/keepstore keepstore 'Curoverse, Inc.' 'dir' "$PKG_VERSION" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=Keepstore is the Keep storage daemon, accessible to clients on the LAN" # keepproxy go get "git.curoverse.com/arvados.git/services/keepproxy" cd $WORKSPACE/debs -build_and_scp_deb $GOPATH/bin/keepproxy=/usr/bin/keepproxy keepproxy 'Curoverse, Inc.' 'dir' "0.1.$GIT_HASH" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=Keepproxy makes a Keep cluster accessible to clients that are not on the LAN" +build_and_scp_deb $GOPATH/bin/keepproxy=/usr/bin/keepproxy keepproxy 'Curoverse, Inc.' 'dir' "$PKG_VERSION" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=Keepproxy makes a Keep cluster accessible to clients that are not on the LAN" # crunchstat go get "git.curoverse.com/arvados.git/services/crunchstat" cd $WORKSPACE/debs -build_and_scp_deb $GOPATH/bin/crunchstat=/usr/bin/crunchstat crunchstat 'Curoverse, Inc.' 'dir' "0.1.$GIT_HASH" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=Crunchstat gathers cpu/memory/network statistics of running Crunch jobs" +build_and_scp_deb $GOPATH/bin/crunchstat=/usr/bin/crunchstat crunchstat 'Curoverse, Inc.' 'dir' "$PKG_VERSION" "--url=https://arvados.org" "--license=GNU Affero General Public License, version 3.0" "--description=Crunchstat gathers cpu/memory/network statistics of running Crunch jobs" # The Python SDK # Please resist the temptation to add --no-python-fix-name to the fpm call here @@ -329,12 +395,41 @@ cd $WORKSPACE/debs build_and_scp_deb $WORKSPACE/services/nodemanager arvados-node-manager 'Curoverse, Inc.' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/services/nodemanager/arvados_node_manager.egg-info/PKG-INFO)" "--url=https://arvados.org" "--description=The Arvados node manager" # A few dependencies -build_and_scp_deb python-gflags -build_and_scp_deb pyvcf -build_and_scp_deb google-api-python-client -build_and_scp_deb httplib2 -build_and_scp_deb ws4py -build_and_scp_deb virtualenv +for deppkg in python-gflags pyvcf google-api-python-client oauth2client \ + pyasn1 pyasn1-modules rsa uritemplate httplib2 ws4py virtualenv \ + pykka apache-libcloud requests six pyexecjs jsonschema; do + build_and_scp_deb "$deppkg" +done + +# cwltool from common-workflow-language. We use this in arv-run-pipeline-instance. +# We use $WORKSPACE/common-workflow-language as the clean directory from which to build the cwltool package +if [[ ! -d "$WORKSPACE/common-workflow-language" ]]; then + mkdir "$WORKSPACE/common-workflow-language" + cd "$WORKSPACE" + if [[ "$DEBUG" != 0 ]]; then + git clone https://github.com/rabix/common-workflow-language.git common-workflow-language + else + git clone -q https://github.com/rabix/common-workflow-language.git common-workflow-language + fi +fi + +cd "$WORKSPACE/common-workflow-language" +if [[ "$DEBUG" != 0 ]]; then + git checkout master + git pull +else + git checkout -q master + git pull -q +fi + +cd reference +handle_python_package +CWLTOOL_VERSION=`git log --first-parent --max-count=1 --format='format:0.1.%ct.%h'` + +# Build cwltool package +cd $WORKSPACE/debs + +build_and_scp_deb $WORKSPACE/common-workflow-language/reference cwltool 'Common Workflow Language Working Group' 'python' "$(awk '($1 == "Version:"){print $2}' $WORKSPACE/common-workflow-language/reference/cwltool.egg-info/PKG-INFO)" # Finally, publish the packages, if necessary if [[ "$UPLOAD" != 0 && "$CALL_FREIGHT" != 0 ]]; then