#!/bin/bash
+# Copyright (C) The Arvados Authors. All rights reserved.
+#
+# SPDX-License-Identifier: AGPL-3.0
# A library of functions shared by the various scripts in this directory.
# older packages.
LICENSE_PACKAGE_TS=20151208015500
+RAILS_PACKAGE_ITERATION=8
+
debug_echo () {
echo "$@" >"$STDOUT_IF_DEBUG"
}
mkdir -p "$GOPATH/src/git.curoverse.com"
ln -sfn "$WORKSPACE" "$GOPATH/src/git.curoverse.com/arvados.git"
+ (cd "$GOPATH/src/git.curoverse.com/arvados.git" && "$GOPATH/bin/govendor" sync -v)
cd "$GOPATH/src/git.curoverse.com/arvados.git/$src_path"
local version="$(version_from_git)"
local timestamp="$(timestamp_from_git)"
- # If the command imports anything from the Arvados SDK, bump the
- # version number and build a new package whenever the SDK changes.
+ # Update the version number and build a new package if the vendor
+ # bundle has changed, or the command imports anything from the
+ # Arvados SDK and the SDK has changed.
+ declare -a checkdirs=(vendor)
if grep -qr git.curoverse.com/arvados .; then
- cd "$GOPATH/src/git.curoverse.com/arvados.git/sdk/go"
- if [[ $(timestamp_from_git) -gt "$timestamp" ]]; then
+ checkdirs+=(sdk/go)
+ fi
+ for dir in ${checkdirs[@]}; do
+ cd "$GOPATH/src/git.curoverse.com/arvados.git/$dir"
+ ts="$(timestamp_from_git)"
+ if [[ "$ts" -gt "$timestamp" ]]; then
version=$(version_from_git)
+ timestamp="$ts"
fi
- fi
+ done
cd $WORKSPACE/packages/$TARGET
+ test_package_presence $prog $version go
+
+ if [[ "$?" != "0" ]]; then
+ return 1
+ fi
+
go get "git.curoverse.com/arvados.git/$src_path"
declare -a switches=()
default_iteration() {
local package_name="$1"; shift
local package_version="$1"; shift
+ local package_type="$1"; shift
local iteration=1
if [[ $package_version =~ ^0\.1\.([0-9]{14})(\.|$) ]] && \
[[ ${BASH_REMATCH[1]} -le $LICENSE_PACKAGE_TS ]]; then
iteration=2
fi
+ if [[ $package_type =~ ^python ]]; then
+ # Fix --iteration for #9242.
+ iteration=2
+ fi
echo $iteration
}
done
}
+test_rails_package_presence() {
+ local pkgname="$1"; shift
+ local srcdir="$1"; shift
+
+ if [[ -n "$ONLY_BUILD" ]] && [[ "$pkgname" != "$ONLY_BUILD" ]] ; then
+ return 1
+ fi
+
+ tmppwd=`pwd`
+
+ cd $srcdir
+
+ local version="$(version_from_git)"
+
+ cd $tmppwd
+
+ test_package_presence $pkgname $version rails $RAILS_PACKAGE_ITERATION
+}
+
+test_package_presence() {
+ local pkgname="$1"; shift
+ local version="$1"; shift
+ local pkgtype="$1"; shift
+ local iteration="$1"; shift
+ local arch="$1"; shift
+
+ if [[ -n "$ONLY_BUILD" ]] && [[ "$pkgname" != "$ONLY_BUILD" ]] ; then
+ return 1
+ fi
+
+ if [[ "$iteration" == "" ]]; then
+ iteration="$(default_iteration "$pkgname" "$version" "$pkgtype")"
+ fi
+
+ if [[ "$arch" == "" ]]; then
+ rpm_architecture="x86_64"
+ deb_architecture="amd64"
+
+ if [[ "$pkgtype" =~ ^(python|python3)$ ]]; then
+ rpm_architecture="noarch"
+ deb_architecture="all"
+ fi
+
+ if [[ "$pkgtype" =~ ^(src)$ ]]; then
+ rpm_architecture="noarch"
+ deb_architecture="all"
+ fi
+
+ # These python packages have binary components
+ if [[ "$pkgname" =~ (ruamel|ciso|pycrypto|pyyaml) ]]; then
+ rpm_architecture="x86_64"
+ deb_architecture="amd64"
+ fi
+ else
+ rpm_architecture=$arch
+ deb_architecture=$arch
+ fi
+
+ if [[ "$FORMAT" == "deb" ]]; then
+ local complete_pkgname=$pkgname"_"$version"-"$iteration"_"$deb_architecture".deb"
+ else
+ local complete_pkgname="$pkgname-$version-$iteration.$rpm_architecture.rpm"
+ fi
+
+ # See if we can skip building the package, only if it already exists in the
+ # processed/ directory. If so, move it back to the packages directory to make
+ # sure it gets picked up by the test and/or upload steps.
+ if [[ -e "processed/$complete_pkgname" ]]; then
+ echo "Package $complete_pkgname exists, not rebuilding!"
+ mv processed/$complete_pkgname .
+ return 1
+ else
+ echo "Package $complete_pkgname not found, building"
+ return 0
+ fi
+}
+
handle_rails_package() {
local pkgname="$1"; shift
if [[ -n "$ONLY_BUILD" ]] && [[ "$pkgname" != "$ONLY_BUILD" ]] ; then
return 0
fi
-
local srcdir="$1"; shift
local license_path="$1"; shift
local scripts_dir="$(mktemp --tmpdir -d "$pkgname-XXXXXXXX.scripts")" && \
local -a pos_args=("$srcdir/=$railsdir" "$pkgname" "Curoverse, Inc." dir
"$(cat "$version_file")")
local license_arg="$license_path=$railsdir/$(basename "$license_path")"
- local -a switches=(--iteration=6
+ local -a switches=(--iteration=$RAILS_PACKAGE_ITERATION
--after-install "$scripts_dir/postinst"
--before-remove "$scripts_dir/prerm"
--after-remove "$scripts_dir/postrm")
return 0
fi
- local default_iteration_value="$(default_iteration "$PACKAGE" "$VERSION")"
+ local default_iteration_value="$(default_iteration "$PACKAGE" "$VERSION" "$PACKAGE_TYPE")"
case "$PACKAGE_TYPE" in
python)
--python-install-data . \
--exclude "${PYTHON2_INSTALL_LIB#/}/tests" \
--depends "$PYTHON2_PACKAGE"
- # Fix --iteration for #9242.
- default_iteration_value=$(($default_iteration_value + 1))
;;
python3)
# fpm does not actually support a python3 package type. Instead
--python-install-data . \
--exclude "${PYTHON3_INSTALL_LIB#/}/tests" \
--depends "$PYTHON3_PACKAGE"
- # Fix --iteration for #9242.
- default_iteration_value=$(($default_iteration_value + 1))
;;
esac
COMMAND_ARR+=(--deb-ignore-iteration-in-dependencies)
fi
+ # 12271 - As FPM-generated packages don't include scripts by default, the
+ # packages cleanup on upgrade depends on files being listed on the %files
+ # section in the generated SPEC files. To remove DIRECTORIES, they need to
+ # be listed in that sectiontoo, so we need to add this parameter to properly
+ # remove lingering dirs.
+ if [[ rpm = "$FORMAT" ]]; then
+ COMMAND_ARR+=('--rpm-auto-add-directories')
+ fi
+
if [[ "${DEBUG:-0}" != "0" ]]; then
COMMAND_ARR+=('--verbose' '--log' 'info')
fi
FPM_EXIT_CODE=$?
fpm_verify $FPM_EXIT_CODE $FPM_RESULTS
+
+ # if something went wrong and debug is off, print out the fpm command that errored
+ if [[ 0 -ne $? ]] && [[ "$STDOUT_IF_DEBUG" == "/dev/null" ]]; then
+ echo -e "\n${COMMAND_ARR[@]}\n"
+ fi
}
# verify build results
if [[ "$FPM_PACKAGE_NAME" == "" ]]; then
EXITCODE=1
+ echo
echo "Error: $PACKAGE: Unable to figure out package name from fpm results:"
echo
echo $FPM_RESULTS
echo
+ return 1
elif [[ "$FPM_RESULTS" =~ "File already exists" ]]; then
echo "Package $FPM_PACKAGE_NAME exists, not rebuilding"
+ return 0
elif [[ 0 -ne "$FPM_EXIT_CODE" ]]; then
+ EXITCODE=1
echo "Error building package for $1:\n $FPM_RESULTS"
+ return 1
fi
}