FIX: Selecting VPP packages
[csit.git] / resources / libraries / bash / function / artifacts.sh
index b6b5bc5..c113561 100644 (file)
@@ -1,6 +1,7 @@
 #!/usr/bin/env bash
 
-# Copyright (c) 2018 Cisco and/or its affiliates.
+# Copyright (c) 2019 Cisco and/or its affiliates.
+# Copyright (c) 2019 PANTHEON.tech and/or its affiliates.
 # Licensed under the Apache License, Version 2.0 (the "License");
 # you may not use this file except in compliance with the License.
 # You may obtain a copy of the License at:
@@ -64,14 +65,51 @@ function download_ubuntu_artifacts () {
     }
     # If version is set we will add suffix.
     artifacts=()
-    vpp=(vpp vpp-dbg vpp-dev vpp-api-python libvppinfra libvppinfra-dev
-         vpp-plugin-core vpp-plugin-dpdk)
+    BOTH_QUOTES='"'"'"
+    MATCH="[^${BOTH_QUOTES}]*"
+    QMATCH="[${BOTH_QUOTES}]\?"
+    SED_COMMAND="s#.*apt_source_path=${QMATCH}\(${MATCH}\)${QMATCH}#\1#p"
+    APT_FDIO_REPO_FILE=$(curl -s "${REPO_URL}"/script.deb.sh | \
+                         sed -n ${SED_COMMAND}) || {
+                             die "Local fdio repo file path fetch failed."
+                         }
+
+    if [ ! -f ${APT_FDIO_REPO_FILE} ]; then
+        die "${APT_FDIO_REPO_FILE} not found, \
+            repository installation was not successful."
+    fi
+
+    packages=$(apt-cache -o Dir::Etc::SourceList=${APT_FDIO_REPO_FILE} \
+               -o Dir::Etc::SourceParts=${APT_FDIO_REPO_FILE} dumpavail \
+               | grep Package: | cut -d " " -f 2) || {
+                   die "Retrieval of available VPP packages failed."
+               }
     if [ -z "${VPP_VERSION-}" ]; then
-        artifacts+=(${vpp[@]})
-    else
-        artifacts+=(${vpp[@]/%/=${VPP_VERSION-}})
+        # If version is not specified, find out the most recent version
+        VPP_VERSION=$(apt-cache --no-all-versions show vpp | grep Version: | \
+                      cut -d " " -f 2) || {
+                          die "Retrieval of most recent VPP version failed."
+                      }
     fi
 
+    set +x
+    for package in ${packages}; do
+        # Filter packages with given version
+        pkg_info=$(apt-cache show ${package}) || {
+            die "apt-cache show on ${package} failed."
+        }
+        ver=$(echo ${pkg_info} | grep -o "Version: ${VPP_VERSION-}[^ ]*" | \
+              head -1) || true
+        if [ -n "${ver-}" ]; then
+            echo "Found '${VPP_VERSION-}' among '${package}' versions."
+            ver=$(echo "$ver" | cut -d " " -f 2)
+            artifacts+=(${package[@]/%/=${ver-}})
+        else
+            echo "Didn't find '${VPP_VERSION-}' among '${package}' versions."
+        fi
+    done
+    set -x
+
     if [ "${INSTALL:-false}" = true ]; then
         sudo apt-get -y install "${artifacts[@]}" || {
             die "Install VPP artifacts failed."
@@ -98,11 +136,11 @@ function download_centos_artifacts () {
     }
     # If version is set we will add suffix.
     artifacts=()
-    vpp=(vpp vpp-selinux-policy vpp-devel vpp-lib vpp-plugins vpp-api-python)
+    packages=(vpp vpp-selinux-policy vpp-devel vpp-lib vpp-plugins vpp-api-python)
     if [ -z "${VPP_VERSION-}" ]; then
-        artifacts+=(${vpp[@]})
+        artifacts+=(${packages[@]})
     else
-        artifacts+=(${vpp[@]/%/-${VPP_VERSION-}})
+        artifacts+=(${packages[@]/%/-${VPP_VERSION-}})
     fi
 
     if [ "${INSTALL:-false}" = true ]; then
@@ -131,11 +169,11 @@ function download_opensuse_artifacts () {
     }
     # If version is set we will add suffix.
     artifacts=()
-    vpp=(vpp vpp-devel vpp-lib vpp-plugins libvpp0)
+    packages=(vpp vpp-devel vpp-lib vpp-plugins libvpp0)
     if [ -z "${VPP_VERSION-}" ]; then
-        artifacts+=(${vpp[@]})
+        artifacts+=(${packages[@]})
     else
-        artifacts+=(${vpp[@]/%/-${VPP_VERSION-}})
+        artifacts+=(${packages[@]/%/-${VPP_VERSION-}})
     fi
 
     if [ "${INSTALL:-false}" = true ]; then
@@ -148,4 +186,3 @@ function download_opensuse_artifacts () {
         }
     fi
 }
-