X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/47e42f1129363c2565e69c36ff26ce9c42731fb8..1416b0952adc0bfee85e15d9c86a51c32fcfd003:/build/run-library.sh diff --git a/build/run-library.sh b/build/run-library.sh index 73a99dabd7..8ba14949d3 100755 --- a/build/run-library.sh +++ b/build/run-library.sh @@ -1,4 +1,7 @@ -#!/bin/bash +#!/bin/bash -xe +# 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. @@ -7,21 +10,29 @@ # older packages. LICENSE_PACKAGE_TS=20151208015500 +if [[ -z "$ARVADOS_BUILDING_VERSION" ]]; then + RAILS_PACKAGE_ITERATION=8 +else + RAILS_PACKAGE_ITERATION="$ARVADOS_BUILDING_ITERATION" +fi + 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" +find_python_program() { + prog="$1" + shift + for prog in "$@"; do + if "$prog" --version >/dev/null 2>&1; then + echo "$prog" return 0 fi done cat >&2 <package-build.version local scripts_dir="$(mktemp --tmpdir -d "$pkgname-XXXXXXXX.scripts")" && \ - local version_file="$(mktemp --tmpdir "$pkgname-XXXXXXXX.version")" && ( + ( set -e _build_rails_package_scripts "$pkgname" "$scripts_dir" cd "$srcdir" mkdir -p tmp - version_from_git >"$version_file" git rev-parse HEAD >git-commit.version bundle package --all ) if [[ 0 != "$?" ]] || ! cd "$WORKSPACE/packages/$TARGET"; then echo "ERROR: $pkgname package prep failed" >&2 - rm -rf "$scripts_dir" "$version_file" + rm -rf "$scripts_dir" EXITCODE=1 return 1 fi local railsdir="/var/www/${pkgname%-server}/current" - local -a pos_args=("$srcdir/=$railsdir" "$pkgname" "Curoverse, Inc." dir - "$(cat "$version_file")") + local -a pos_args=("$srcdir/=$railsdir" "$pkgname" "Curoverse, Inc." dir "$version") local license_arg="$license_path=$railsdir/$(basename "$license_path")" - local -a switches=(--iteration=6 - --after-install "$scripts_dir/postinst" + local -a switches=(--after-install "$scripts_dir/postinst" --before-remove "$scripts_dir/prerm" --after-remove "$scripts_dir/postrm") + if [[ -z "$ARVADOS_BUILDING_VERSION" ]]; then + switches+=(--iteration $RAILS_PACKAGE_ITERATION) + fi # For some reason fpm excludes need to not start with /. local exclude_root="${railsdir#/}" # .git and packages are for the SSO server, which is built from its @@ -177,8 +354,9 @@ handle_rails_package() { switches+=(-x "$exclude_root/$exclude") done fpm_build "${pos_args[@]}" "${switches[@]}" \ + -x "$exclude_root/vendor/cache-*" \ -x "$exclude_root/vendor/bundle" "$@" "$license_arg" - rm -rf "$scripts_dir" "$version_file" + rm -rf "$scripts_dir" } # Build packages for everything @@ -202,22 +380,26 @@ fpm_build () { VERSION=$1 shift - local default_iteration_value="$(default_iteration "$PACKAGE" "$VERSION")" + if [[ -n "$ONLY_BUILD" ]] && [[ "$PACKAGE_NAME" != "$ONLY_BUILD" ]] && [[ "$PACKAGE" != "$ONLY_BUILD" ]] ; then + return 0 + fi + + local default_iteration_value="$(default_iteration "$PACKAGE" "$VERSION" "$PACKAGE_TYPE")" + local python="" case "$PACKAGE_TYPE" in python) # All Arvados Python2 packages depend on Python 2.7. # Make sure we build with that for consistency. + python=python2.7 set -- "$@" --python-bin python2.7 \ - --python-easyinstall "$EASY_INSTALL2" \ + "${PYTHON_FPM_INSTALLER[@]}" \ --python-package-name-prefix "$PYTHON2_PKG_PREFIX" \ --prefix "$PYTHON2_PREFIX" \ --python-install-lib "$PYTHON2_INSTALL_LIB" \ --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 @@ -225,16 +407,15 @@ fpm_build () { # necessary arguments to fpm's command line later, after we're # done handling positional arguments. PACKAGE_TYPE=python + python=python3 set -- "$@" --python-bin python3 \ - --python-easyinstall "$EASY_INSTALL3" \ + "${PYTHON3_FPM_INSTALLER[@]}" \ --python-package-name-prefix "$PYTHON3_PKG_PREFIX" \ --prefix "$PYTHON3_PREFIX" \ --python-install-lib "$PYTHON3_INSTALL_LIB" \ --python-install-data . \ --exclude "${PYTHON3_INSTALL_LIB#/}/tests" \ --depends "$PYTHON3_PACKAGE" - # Fix --iteration for #9242. - default_iteration_value=$(($default_iteration_value + 1)) ;; esac @@ -246,6 +427,17 @@ fpm_build () { 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. But this only works for python2: if used on + # python33, it includes dirs like /opt/rh/python33 that belong to + # other packages. + if [[ "$FORMAT" = rpm ]] && [[ "$python" = python2.7 ]]; then + COMMAND_ARR+=('--rpm-auto-add-directories') + fi + if [[ "${DEBUG:-0}" != "0" ]]; then COMMAND_ARR+=('--verbose' '--log' 'info') fi @@ -261,9 +453,11 @@ fpm_build () { if [[ "$VERSION" != "" ]]; then COMMAND_ARR+=('-v' "$VERSION") fi - # We can always add an --iteration here. If another one is specified in $@, - # that will take precedence, as desired. - COMMAND_ARR+=(--iteration "$default_iteration_value") + if [[ -n "$default_iteration_value" ]]; then + # We can always add an --iteration here. If another one is specified in $@, + # that will take precedence, as desired. + COMMAND_ARR+=(--iteration "$default_iteration_value") + fi if [[ python = "$PACKAGE_TYPE" ]] && [[ -e "${PACKAGE}/${PACKAGE_NAME}.service" ]] then @@ -283,7 +477,7 @@ fpm_build () { declare -a fpm_dirs=( # source dir part of 'dir' package ("/source=/dest" => "/source"): "${PACKAGE%%=/*}" - # backports ("llfuse==0.41.1" => "backports/python-llfuse") + # backports ("llfuse>=1.0" => "backports/python-llfuse") "${WORKSPACE}/backports/${PACKAGE_TYPE}-${PACKAGE%%[<=>]*}") if [[ -n "$PACKAGE_NAME" ]]; then fpm_dirs+=("${WORKSPACE}/backports/${PACKAGE_NAME}") @@ -340,6 +534,11 @@ fpm_build () { 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 @@ -355,14 +554,19 @@ fpm_verify () { 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 }