Split out shared functions into a new run-library.sh.
authorWard Vandewege <ward@curoverse.com>
Tue, 1 Sep 2015 18:52:01 +0000 (14:52 -0400)
committerWard Vandewege <ward@curoverse.com>
Tue, 1 Sep 2015 18:52:01 +0000 (14:52 -0400)
refs #6939

jenkins/run-build-packages-sso.sh
jenkins/run-build-packages.sh
jenkins/run-library.sh [new file with mode: 0755]

index 36fb586f13ff2cc17d42126101434c455483a1e6..da24867eb671090723cc81e695f79cf0210cc973 100755 (executable)
@@ -1,5 +1,6 @@
 #!/bin/bash
 
+. ./run-library.sh
 
 read -rd "\000" helpmessage <<EOF
 $(basename $0): Build Arvados SSO package
@@ -68,10 +69,6 @@ if [[ "$DEBUG" != 0 ]]; then
     DASHQ_UNLESS_DEBUG=
 fi
 
-debug_echo () {
-    echo "$@" >"$STDOUT_IF_DEBUG"
-}
-
 case "$TARGET" in
     debian7)
         FORMAT=deb
@@ -94,7 +91,6 @@ case "$TARGET" in
         ;;
 esac
 
-
 if ! [[ -n "$WORKSPACE" ]]; then
   echo >&2 "$helpmessage"
   echo >&2
@@ -133,51 +129,6 @@ fi
 debug_echo "$0 is running from $RUN_BUILD_PACKAGES_PATH"
 debug_echo "Workspace is $WORKSPACE"
 
-format_last_commit_here() {
-    local format=$1; shift
-    TZ=UTC git log -n1 --first-parent "--format=format:$format" .
-}
-
-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 $(format_last_commit_here "git_ts=%ct git_hash=%h")
-  echo "0.1.$(date -ud "@$git_ts" +%Y%m%d%H%M%S).$git_hash"
-}
-
-nohash_version_from_git() {
-    version_from_git | cut -d. -f1-3
-}
-
-timestamp_from_git() {
-    format_last_commit_here "%ct"
-}
-
-# verify build results
-fpm_verify () {
-  FPM_EXIT_CODE=$1
-  shift
-  FPM_RESULTS=$@
-
-  FPM_PACKAGE_NAME=''
-  if [[ $FPM_RESULTS =~ ([A-Za-z0-9_\.-]*\.)(deb|rpm) ]]; then
-    FPM_PACKAGE_NAME=${BASH_REMATCH[1]}${BASH_REMATCH[2]}
-  fi
-
-  if [[ "$FPM_PACKAGE_NAME" == "" ]]; then
-    EXITCODE=1
-    echo "Error: $PACKAGE: Unable to figure out package name from fpm results:"
-    echo
-    echo $FPM_RESULTS
-    echo
-  elif [[ "$FPM_RESULTS" =~ "File already exists" ]]; then
-    echo "Package $FPM_PACKAGE_NAME exists, not rebuilding"
-  elif [[ 0 -ne "$FPM_EXIT_CODE" ]]; then
-    echo "Error building package for $1:\n $FPM_RESULTS"
-  fi
-}
-
 if [[ -f /etc/profile.d/rvm.sh ]]; then
     source /etc/profile.d/rvm.sh
     GEM="rvm-exec default gem"
index 0a04788b0f3ae3512628acc383e815acd0155a98..31734a90944d4cfabe66afbea14f8d3f00fa6fd2 100755 (executable)
@@ -1,5 +1,6 @@
 #!/bin/bash
 
+. ./run-library.sh
 
 read -rd "\000" helpmessage <<EOF
 $(basename $0): Build Arvados packages
@@ -79,10 +80,6 @@ if [[ "$DEBUG" != 0 ]]; then
     DASHQ_UNLESS_DEBUG=
 fi
 
-debug_echo () {
-    echo "$@" >"$STDOUT_IF_DEBUG"
-}
-
 declare -a PYTHON_BACKPORTS PYTHON3_BACKPORTS
 
 PYTHON2_VERSION=2.7
@@ -180,22 +177,6 @@ if [[ "$?" != 0 ]]; then
   exit 1
 fi
 
-find_easy_install() {
-    for version_suffix in "$@"; do
-        if "easy_install$version_suffix" --version >/dev/null 2>&1; then
-            echo "easy_install$version_suffix"
-            return 0
-        fi
-    done
-    cat >&2 <<EOF
-$helpmessage
-
-Error: easy_install$1 (from Python setuptools module) not found
-
-EOF
-    exit 1
-}
-
 EASY_INSTALL2=$(find_easy_install -$PYTHON2_VERSION "")
 EASY_INSTALL3=$(find_easy_install -$PYTHON3_VERSION 3)
 
@@ -210,168 +191,6 @@ fi
 debug_echo "$0 is running from $RUN_BUILD_PACKAGES_PATH"
 debug_echo "Workspace is $WORKSPACE"
 
-format_last_commit_here() {
-    local format=$1; shift
-    TZ=UTC git log -n1 --first-parent "--format=format:$format" .
-}
-
-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 $(format_last_commit_here "git_ts=%ct git_hash=%h")
-  echo "0.1.$(date -ud "@$git_ts" +%Y%m%d%H%M%S).$git_hash"
-}
-
-nohash_version_from_git() {
-    version_from_git | cut -d. -f1-3
-}
-
-timestamp_from_git() {
-    format_last_commit_here "%ct"
-}
-
-handle_python_package () {
-  # This function assumes the current working directory is the python package directory
-  if [ -n "$(find dist -name "*-$(nohash_version_from_git).tar.gz" -print -quit)" ]; then
-    # This package doesn't need rebuilding.
-    return
-  fi
-  # Make sure only to use sdist - that's the only format pip can deal with (sigh)
-  python setup.py $DASHQ_UNLESS_DEBUG sdist
-}
-
-handle_ruby_gem() {
-    local gem_name=$1; shift
-    local gem_version=$(nohash_version_from_git)
-    local gem_src_dir="$(pwd)"
-
-    if ! [[ -e "${gem_name}-${gem_version}.gem" ]]; then
-        find -maxdepth 1 -name "${gem_name}-*.gem" -delete
-
-        # -q appears to be broken in gem version 2.2.2
-        $GEM build "$gem_name.gemspec" $DASHQ_UNLESS_DEBUG >"$STDOUT_IF_DEBUG" 2>"$STDERR_IF_DEBUG"
-    fi
-}
-
-# Build packages for everything
-fpm_build () {
-  # 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:-$PACKAGE}
-  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:-python}
-  shift
-  # Optional: the package version number.  Passed to fpm -v.
-  VERSION=$1
-  shift
-
-  case "$PACKAGE_TYPE" in
-      python)
-          # All Arvados Python2 packages depend on Python 2.7.
-          # Make sure we build with that for consistency.
-          set -- "$@" --python-bin python2.7 \
-              --python-easyinstall "$EASY_INSTALL2" \
-              --python-package-name-prefix "$PYTHON2_PKG_PREFIX" \
-              --depends "$PYTHON2_PACKAGE"
-          ;;
-      python3)
-          # fpm does not actually support a python3 package type.  Instead
-          # we recognize it as a convenience shortcut to add several
-          # necessary arguments to fpm's command line later, after we're
-          # done handling positional arguments.
-          PACKAGE_TYPE=python
-          set -- "$@" --python-bin python3 \
-              --python-easyinstall "$EASY_INSTALL3" \
-              --python-package-name-prefix "$PYTHON3_PKG_PREFIX" \
-              --depends "$PYTHON3_PACKAGE"
-          ;;
-  esac
-
-  declare -a COMMAND_ARR=("fpm" "--maintainer=Ward Vandewege <ward@curoverse.com>" "-s" "$PACKAGE_TYPE" "-t" "$FORMAT")
-  if [ python = "$PACKAGE_TYPE" ]; then
-    COMMAND_ARR+=(--exclude=\*/{dist,site}-packages/tests/\*)
-  fi
-
-  if [[ "$PACKAGE_NAME" != "$PACKAGE" ]]; then
-    COMMAND_ARR+=('-n' "$PACKAGE_NAME")
-  fi
-
-  if [[ "$VENDOR" != "" ]]; then
-    COMMAND_ARR+=('--vendor' "$VENDOR")
-  fi
-
-  if [[ "$VERSION" != "" ]]; then
-    COMMAND_ARR+=('-v' "$VERSION")
-  fi
-
-  # Append remaining function arguments directly to fpm's command line.
-  for i; do
-    COMMAND_ARR+=("$i")
-  done
-
-  # Append --depends X and other arguments specified by fpm-info.sh in
-  # the package source dir. These are added last so they can override
-  # the arguments added by this script.
-  declare -a fpm_args=()
-  declare -a fpm_depends=()
-  if [[ -d "$PACKAGE" ]]; then
-      FPM_INFO="$PACKAGE/fpm-info.sh"
-  else
-      FPM_INFO="${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE}/fpm-info.sh"
-  fi
-  if [[ -e "$FPM_INFO" ]]; then
-      debug_echo "Loading fpm overrides from $FPM_INFO"
-      source "$FPM_INFO"
-  fi
-  for i in "${fpm_depends[@]}"; do
-    COMMAND_ARR+=('--depends' "$i")
-  done
-  COMMAND_ARR+=("${fpm_args[@]}")
-
-  COMMAND_ARR+=("$PACKAGE")
-
-  debug_echo -e "\n${COMMAND_ARR[@]}\n"
-
-  FPM_RESULTS=$("${COMMAND_ARR[@]}")
-  FPM_EXIT_CODE=$?
-
-  fpm_verify $FPM_EXIT_CODE $FPM_RESULTS
-}
-
-# verify build results
-fpm_verify () {
-  FPM_EXIT_CODE=$1
-  shift
-  FPM_RESULTS=$@
-
-  FPM_PACKAGE_NAME=''
-  if [[ $FPM_RESULTS =~ ([A-Za-z0-9_\.-]*\.)(deb|rpm) ]]; then
-    FPM_PACKAGE_NAME=${BASH_REMATCH[1]}${BASH_REMATCH[2]}
-  fi
-
-  if [[ "$FPM_PACKAGE_NAME" == "" ]]; then
-    EXITCODE=1
-    echo "Error: $PACKAGE: Unable to figure out package name from fpm results:"
-    echo
-    echo $FPM_RESULTS
-    echo
-  elif [[ "$FPM_RESULTS" =~ "File already exists" ]]; then
-    echo "Package $FPM_PACKAGE_NAME exists, not rebuilding"
-  elif [[ 0 -ne "$FPM_EXIT_CODE" ]]; then
-    echo "Error building package for $1:\n $FPM_RESULTS"
-  fi
-}
-
 if [[ -f /etc/profile.d/rvm.sh ]]; then
     source /etc/profile.d/rvm.sh
     GEM="rvm-exec default gem"
diff --git a/jenkins/run-library.sh b/jenkins/run-library.sh
new file mode 100755 (executable)
index 0000000..f07397f
--- /dev/null
@@ -0,0 +1,185 @@
+#!/bin/bash
+
+# A library of functions shared by the various scripts in this directory.
+
+debug_echo () {
+    echo "$@" >"$STDOUT_IF_DEBUG"
+}
+
+find_easy_install() {
+    for version_suffix in "$@"; do
+        if "easy_install$version_suffix" --version >/dev/null 2>&1; then
+            echo "easy_install$version_suffix"
+            return 0
+        fi
+    done
+    cat >&2 <<EOF
+$helpmessage
+
+Error: easy_install$1 (from Python setuptools module) not found
+
+EOF
+    exit 1
+}
+
+format_last_commit_here() {
+    local format=$1; shift
+    TZ=UTC git log -n1 --first-parent "--format=format:$format" .
+}
+
+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 $(format_last_commit_here "git_ts=%ct git_hash=%h")
+  echo "0.1.$(date -ud "@$git_ts" +%Y%m%d%H%M%S).$git_hash"
+}
+
+nohash_version_from_git() {
+    version_from_git | cut -d. -f1-3
+}
+
+timestamp_from_git() {
+    format_last_commit_here "%ct"
+}
+
+handle_python_package () {
+  # This function assumes the current working directory is the python package directory
+  if [ -n "$(find dist -name "*-$(nohash_version_from_git).tar.gz" -print -quit)" ]; then
+    # This package doesn't need rebuilding.
+    return
+  fi
+  # Make sure only to use sdist - that's the only format pip can deal with (sigh)
+  python setup.py $DASHQ_UNLESS_DEBUG sdist
+}
+
+handle_ruby_gem() {
+    local gem_name=$1; shift
+    local gem_version=$(nohash_version_from_git)
+    local gem_src_dir="$(pwd)"
+
+    if ! [[ -e "${gem_name}-${gem_version}.gem" ]]; then
+        find -maxdepth 1 -name "${gem_name}-*.gem" -delete
+
+        # -q appears to be broken in gem version 2.2.2
+        $GEM build "$gem_name.gemspec" $DASHQ_UNLESS_DEBUG >"$STDOUT_IF_DEBUG" 2>"$STDERR_IF_DEBUG"
+    fi
+}
+
+# Build packages for everything
+fpm_build () {
+  # 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:-$PACKAGE}
+  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:-python}
+  shift
+  # Optional: the package version number.  Passed to fpm -v.
+  VERSION=$1
+  shift
+
+  case "$PACKAGE_TYPE" in
+      python)
+          # All Arvados Python2 packages depend on Python 2.7.
+          # Make sure we build with that for consistency.
+          set -- "$@" --python-bin python2.7 \
+              --python-easyinstall "$EASY_INSTALL2" \
+              --python-package-name-prefix "$PYTHON2_PKG_PREFIX" \
+              --depends "$PYTHON2_PACKAGE"
+          ;;
+      python3)
+          # fpm does not actually support a python3 package type.  Instead
+          # we recognize it as a convenience shortcut to add several
+          # necessary arguments to fpm's command line later, after we're
+          # done handling positional arguments.
+          PACKAGE_TYPE=python
+          set -- "$@" --python-bin python3 \
+              --python-easyinstall "$EASY_INSTALL3" \
+              --python-package-name-prefix "$PYTHON3_PKG_PREFIX" \
+              --depends "$PYTHON3_PACKAGE"
+          ;;
+  esac
+
+  declare -a COMMAND_ARR=("fpm" "--maintainer=Ward Vandewege <ward@curoverse.com>" "-s" "$PACKAGE_TYPE" "-t" "$FORMAT")
+  if [ python = "$PACKAGE_TYPE" ]; then
+    COMMAND_ARR+=(--exclude=\*/{dist,site}-packages/tests/\*)
+  fi
+
+  if [[ "$PACKAGE_NAME" != "$PACKAGE" ]]; then
+    COMMAND_ARR+=('-n' "$PACKAGE_NAME")
+  fi
+
+  if [[ "$VENDOR" != "" ]]; then
+    COMMAND_ARR+=('--vendor' "$VENDOR")
+  fi
+
+  if [[ "$VERSION" != "" ]]; then
+    COMMAND_ARR+=('-v' "$VERSION")
+  fi
+
+  # Append remaining function arguments directly to fpm's command line.
+  for i; do
+    COMMAND_ARR+=("$i")
+  done
+
+  # Append --depends X and other arguments specified by fpm-info.sh in
+  # the package source dir. These are added last so they can override
+  # the arguments added by this script.
+  declare -a fpm_args=()
+  declare -a fpm_depends=()
+  if [[ -d "$PACKAGE" ]]; then
+      FPM_INFO="$PACKAGE/fpm-info.sh"
+  else
+      FPM_INFO="${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE}/fpm-info.sh"
+  fi
+  if [[ -e "$FPM_INFO" ]]; then
+      debug_echo "Loading fpm overrides from $FPM_INFO"
+      source "$FPM_INFO"
+  fi
+  for i in "${fpm_depends[@]}"; do
+    COMMAND_ARR+=('--depends' "$i")
+  done
+  COMMAND_ARR+=("${fpm_args[@]}")
+
+  COMMAND_ARR+=("$PACKAGE")
+
+  debug_echo -e "\n${COMMAND_ARR[@]}\n"
+
+  FPM_RESULTS=$("${COMMAND_ARR[@]}")
+  FPM_EXIT_CODE=$?
+
+  fpm_verify $FPM_EXIT_CODE $FPM_RESULTS
+}
+
+# verify build results
+fpm_verify () {
+  FPM_EXIT_CODE=$1
+  shift
+  FPM_RESULTS=$@
+
+  FPM_PACKAGE_NAME=''
+  if [[ $FPM_RESULTS =~ ([A-Za-z0-9_\.-]*\.)(deb|rpm) ]]; then
+    FPM_PACKAGE_NAME=${BASH_REMATCH[1]}${BASH_REMATCH[2]}
+  fi
+
+  if [[ "$FPM_PACKAGE_NAME" == "" ]]; then
+    EXITCODE=1
+    echo "Error: $PACKAGE: Unable to figure out package name from fpm results:"
+    echo
+    echo $FPM_RESULTS
+    echo
+  elif [[ "$FPM_RESULTS" =~ "File already exists" ]]; then
+    echo "Package $FPM_PACKAGE_NAME exists, not rebuilding"
+  elif [[ 0 -ne "$FPM_EXIT_CODE" ]]; then
+    echo "Error building package for $1:\n $FPM_RESULTS"
+  fi
+}