17498: Build metapackages to ease the migration from python 2 to
authorWard Vandewege <ward@curii.com>
Tue, 13 Apr 2021 14:57:25 +0000 (10:57 -0400)
committerWard Vandewege <ward@curii.com>
Tue, 13 Apr 2021 14:57:25 +0000 (10:57 -0400)
       python3.

Arvados-DCO-1.1-Signed-off-by: Ward Vandewege <ward@curii.com>

build/package-build-dockerfiles/debian10/Dockerfile
build/run-build-packages.sh
build/run-library.sh

index d38af4664fb69e1667ff3d479325d2e456b27421..f32093332a1f9c52a54759685cd113e9f3c97842 100644 (file)
@@ -9,7 +9,7 @@ MAINTAINER Arvados Package Maintainers <packaging@arvados.org>
 ENV DEBIAN_FRONTEND noninteractive
 
 # Install dependencies.
-RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python3 python3-setuptools python3-pip libcurl4-gnutls-dev curl git procps libattr1-dev libfuse-dev libgnutls28-dev libpq-dev unzip python3-venv python3-dev libpam-dev
+RUN /usr/bin/apt-get update && /usr/bin/apt-get install -q -y python3 python3-setuptools python3-pip libcurl4-gnutls-dev curl git procps libattr1-dev libfuse-dev libgnutls28-dev libpq-dev unzip python3-venv python3-dev libpam-dev equivs
 
 # Install virtualenv
 RUN /usr/bin/pip3 install 'virtualenv<20'
index 9030072d59970186506c38e63ee5887e52e9519f..99905dc0f0ab12d1b68432d7a06fbd99879b8900 100755 (executable)
@@ -328,6 +328,14 @@ fpm_build_virtualenv "arvados-docker-cleaner" "services/dockercleaner" "python3"
 # The Arvados user activity tool
 fpm_build_virtualenv "arvados-user-activity" "tools/user-activity" "python3"
 
+# The python->python3 metapackages
+build_metapackage "arvados-fuse" "services/fuse"
+build_metapackage "arvados-python-client" "services/fuse"
+build_metapackage "arvados-cwl-runner" "sdk/cwl"
+build_metapackage "crunchstat-summary" "tools/crunchstat-summary"
+build_metapackage "arvados-docker-cleanere" "services/dockercleaner"
+build_metapackage "arvados-user-activity" "tools/user-activity"
+
 # The cwltest package, which lives out of tree
 cd "$WORKSPACE"
 if [[ -e "$WORKSPACE/cwltest" ]]; then
@@ -337,6 +345,9 @@ git clone https://github.com/common-workflow-language/cwltest.git
 # signal to our build script that we want a cwltest executable installed in /usr/bin/
 mkdir cwltest/bin && touch cwltest/bin/cwltest
 fpm_build_virtualenv "cwltest" "cwltest" "python3"
+# The python->python3 metapackage
+build_metapackage "cwltest" "cwltest"
+cd "$WORKSPACE"
 rm -rf "$WORKSPACE/cwltest"
 
 calculate_go_package_version arvados_server_version cmd/arvados-server
index 513e8624ee723d769514a2194f2a19e7e291bf26..59a9e4f47de15dabafb1aaaac85478befb2c45a2 100755 (executable)
@@ -621,9 +621,9 @@ fpm_build_virtualenv () {
   LICENSE_STRING=`grep license $WORKSPACE/$PKG_DIR/setup.py|cut -f2 -d=|sed -e "s/[',\\"]//g"`
   COMMAND_ARR+=('--license' "$LICENSE_STRING")
 
-  if [[ "$FORMAT" != "rpm" ]]; then
-    COMMAND_ARR+=('--conflicts' "python-$PKG")
-  fi
+  #if [[ "$FORMAT" != "rpm" ]]; then
+  #  COMMAND_ARR+=('--conflicts' "python-$PKG")
+  #fi
 
   if [[ "$DEBUG" != "0" ]]; then
     COMMAND_ARR+=('--verbose' '--log' 'info')
@@ -708,6 +708,132 @@ fpm_build_virtualenv () {
   echo
 }
 
+# build_metapackage builds meta packages that help with the python to python 3 package migration
+build_metapackage() {
+  # base package name (e.g. arvados-python-client)
+  BASE_NAME=$1
+  shift
+  PKG_DIR=$1
+  shift
+
+  if [[ -n "$ONLY_BUILD" ]] && [[ "python-$BASE_NAME" != "$ONLY_BUILD" ]]; then
+    return 0
+  fi
+
+  if [[ -z "$ARVADOS_BUILDING_VERSION" ]]; then
+    cd $WORKSPACE/$PKG_DIR
+    pwd
+    rm -rf dist/*
+
+    # Get the latest setuptools
+    if ! $pip install $DASHQ_UNLESS_DEBUG $CACHE_FLAG -U 'setuptools<45'; then
+      echo "Error, unable to upgrade setuptools with"
+      echo "  $pip install $DASHQ_UNLESS_DEBUG $CACHE_FLAG -U 'setuptools<45'"
+      exit 1
+    fi
+    # filter a useless warning (when building the cwltest package) from the stderr output
+    if ! python3 setup.py $DASHQ_UNLESS_DEBUG sdist 2> >(grep -v 'warning: no previously-included files matching'); then
+      echo "Error, unable to run python3 setup.py sdist for $PKG"
+      exit 1
+    fi
+
+    PYTHON_VERSION=$(awk '($1 == "Version:"){print $2}' *.egg-info/PKG-INFO)
+    UNFILTERED_PYTHON_VERSION=$(echo -n $PYTHON_VERSION | sed s/\.dev/~dev/g |sed 's/\([0-9]\)rc/\1~rc/g')
+
+  else
+    UNFILTERED_PYTHON_VERSION=$ARVADOS_BUILDING_VERSION
+    PYTHON_VERSION=$(echo -n $ARVADOS_BUILDING_VERSION | sed s/~dev/.dev/g | sed s/~rc/rc/g)
+  fi
+
+  cd - >$STDOUT_IF_DEBUG
+  if [[ -d "$BASE_NAME" ]]; then
+    rm -rf $BASE_NAME
+  fi
+  mkdir $BASE_NAME
+  cd $BASE_NAME
+
+  if [[ "$FORMAT" == "deb" ]]; then
+    cat >ns-control <<EOF
+Section: misc
+Priority: optional
+Standards-Version: 3.9.2
+
+Package: python-${BASE_NAME}
+Version: ${PYTHON_VERSION}-${ARVADOS_BUILDING_ITERATION}
+Maintainer: Arvados Package Maintainers <packaging@arvados.org>
+Depends: python3-${BASE_NAME}
+Description: metapackage to ease the upgrade to the Pyhon 3 version of ${BASE_NAME}
+ This package is a metapackage that will automatically install the new version of
+ ${BASE_NAME} which is Python 3 based and has a different name.
+EOF
+
+    /usr/bin/equivs-build ns-control
+    if [[ $? -ne 0 ]]; then
+      echo "Error running 'equivs-build ns-control', is the 'equivs' package installed?"
+      return 1
+    fi
+  elif [[ "$FORMAT" == "rpm" ]]; then
+    cat >meta.spec <<EOF
+Summary: metapackage to ease the upgrade to the Python 3 version of ${BASE_NAME}
+Name: python-${BASE_NAME}
+Version: ${PYTHON_VERSION}
+Release: ${ARVADOS_BUILDING_ITERATION}
+License: distributable
+
+Requires: python3-${BASE_NAME}
+
+%description
+This package is a metapackage that will automatically install the new version of
+python-${BASE_NAME} which is Python 3 based and has a different name.
+
+%prep
+
+%build
+
+%clean
+
+%install
+
+%post
+
+%files
+
+
+%changelog
+* Mon Apr 12 2021 Arvados Package Maintainers <packaging@arvados.org>
+- initial release
+EOF
+
+    /usr/bin/rpmbuild -ba meta.spec
+    if [[ $? -ne 0 ]]; then
+      echo "Error running 'rpmbuild -ba meta.spec', is the 'rpm-build' package installed?"
+      return 1
+    else
+      mv /root/rpmbuild/RPMS/x86_64/python-${BASE_NAME}*.${FORMAT} .
+      if [[ $? -ne 0 ]]; then
+        echo "Error finding rpm file output of 'rpmbuild -ba meta.spec'"
+        return 1
+      fi
+    fi
+  else
+    echo "Unknown format"
+    return 1
+  fi
+
+  if [[ $EXITCODE -ne 0 ]]; then
+    return 1
+  else
+    echo `ls *$FORMAT`
+    mv *$FORMAT $WORKSPACE/packages/$TARGET/
+  fi
+
+  # clean up
+  cd - >$STDOUT_IF_DEBUG
+  if [[ -d "$BASE_NAME" ]]; then
+    rm -rf $BASE_NAME
+  fi
+}
+
 # Build packages for everything
 fpm_build () {
   # Source dir where fpm-info.sh (if any) will be found.