Improve test tag string parsing
[csit.git] / resources / tools / scripts / download_hc_build_pkgs.sh
1 #!/bin/bash
2
3 # Copyright (c) 2019 Cisco and/or its affiliates.
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at:
7 #
8 #     http://www.apache.org/licenses/LICENSE-2.0
9 #
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
15
16 set -ex
17
18 STREAM=$1
19 OS=$2
20 jvpp_commit_id=$3
21
22 # Figure out what system we are running on
23 if [[ -f /etc/os-release ]];then
24     source /etc/os-release
25 else
26     echo "Cannot determine OS version"
27     exit 1
28 fi
29 echo "----- OS INFO -----"
30 echo DISTRIB_ID: ${ID}
31 echo DISTRIB_RELEASE: ${VERSION_ID}
32 echo DISTRIB_CODENAME: ${VERSION_CODENAME}
33 echo DISTRIB_DESCRIPTION: ${PRETTY_NAME}
34
35 VERSION=`../vpp-version`
36 JVPP_VERSION=`../jvpp-version`
37
38 if [[ -n "${jvpp_commit_id}" ]]; then
39     # Skipping download of JVPP because it was built from source
40     VPP_DEB_NEW_ARTIFACTS="vpp libvppinfra vpp-plugin-core vpp-plugin-dpdk vpp-dev libvppinfra-dev vpp-api-python"
41     VPP_DEB_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-dev vpp-api-python"
42     VPP_RPM_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-devel vpp-api-python"
43 else
44     VPP_DEB_NEW_ARTIFACTS="vpp libvppinfra vpp-plugin-core vpp-plugin-dpdk vpp-api-java vpp-api-python"
45     VPP_DEB_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-api-java vpp-api-python"
46     VPP_RPM_ARTIFACTS="vpp vpp-lib vpp-plugins vpp-api-java vpp-api-python"
47 fi
48
49 IGNORE_DEPS=""
50 # Check OS and stream to set correct packages
51 if [[ "$ID" == "centos" ]]; then
52     VPP_ARTIFACTS=${VPP_RPM_ARTIFACTS}
53 elif [[ "$ID" == "ubuntu" ]]; then
54     if [[ "1807 1810 1901" =~ .*$STREAM.* ]]; then
55         VPP_ARTIFACTS=${VPP_DEB_ARTIFACTS}
56         IGNORE_DEPS="vpp,vpp-lib,vpp-plugins"
57     else
58         VPP_ARTIFACTS=${VPP_DEB_NEW_ARTIFACTS}
59         IGNORE_DEPS="vpp,libvppinfra,vpp-plugin-core"
60     fi
61 fi
62 VPP_DEB_PACKAGES=""
63 VPP_RPM_PACKAGES=""
64 for ART in ${VPP_ARTIFACTS}; do
65     if [[ "${VERSION}" != 'RELEASE' ]]; then
66         if [[ "$ART" == "vpp-api-java" ]]; then
67             VPP_DEB_PACKAGES="$VPP_DEB_PACKAGES $ART=$JVPP_VERSION"
68             VPP_RPM_PACKAGES="$VPP_RPM_PACKAGES $ART-$JVPP_VERSION"
69         else
70             VPP_DEB_PACKAGES="$VPP_DEB_PACKAGES $ART=$VERSION"
71             VPP_RPM_PACKAGES="$VPP_RPM_PACKAGES $ART-$VERSION"
72         fi
73     else
74         VPP_DEB_PACKAGES="$VPP_DEB_PACKAGES $ART"
75         VPP_RPM_PACKAGES="$VPP_RPM_PACKAGES $ART"
76     fi
77 done
78
79 echo "----- DOWNLOADING PACKAGES -----"
80 REPO_URL="https://packagecloud.io/fdio/${STREAM}"
81 echo "REPO_URL: ${REPO_URL}"
82 if [[ "$ID" == "ubuntu" ]]; then
83     if [[ -f /etc/apt/sources.list.d/99fd.io.list ]];then
84         echo "Deleting: /etc/apt/sources.list.d/99fd.io.list"
85         sudo rm /etc/apt/sources.list.d/99fd.io.list
86     fi
87     curl -s https://packagecloud.io/install/repositories/fdio/${STREAM}/script.deb.sh | sudo bash
88     apt-get download ${VPP_DEB_PACKAGES} || true
89 elif [[ "$ID" == "centos" ]]; then
90     if [[ -f /etc/yum.repos.d/fdio-master.repo ]]; then
91         echo "Deleting: /etc/yum.repos.d/fdio-master.repo"
92         sudo rm /etc/yum.repos.d/fdio-master.repo
93     fi
94     curl -s https://packagecloud.io/install/repositories/fdio/${STREAM}/script.rpm.sh | sudo bash
95     sudo yum -y install --downloadonly --downloaddir=./ ${VPP_RPM_PACKAGES} || true
96 fi
97 # TODO(CSIT-994): reenable NSH
98 # NSH_GROUP="io.fd.nsh_sfc"
99 # NSH_ARTIFACTS="vpp-nsh-plugin"
100
101 # If JVPP variable is set, clone and build JVPP from the specified commit
102 # Otherwise skip this step, hc2vpp will use JVPP snapshots from Nexus
103 if [[ -n "${jvpp_commit_id}" ]]; then
104     # first we need to install vpp and deps to be able to build jvpp
105     if [[ "$ID" == "centos" ]]; then
106         sudo rpm -i vpp-*.rpm
107     else
108         if [[ "$VERSION_CODENAME" == "xenial" ]]; then
109             sudo dpkg --ignore-depends=libmbedcrypto0,libmbedtls10,libmbedx509-0 -i vpp_*.deb vpp-dev_*.deb vpp-plugin-core_*.deb libvppinfra_*.deb libvppinfra-dev_*.deb
110         elif [[ "$VERSION_CODENAME" == "bionic" ]]; then
111             sudo dpkg --ignore-depends=libmbedcrypto1,libmbedtls10,libmbedx509-0 -i vpp_*.deb vpp-dev_*.deb vpp-plugin-core_*.deb libvppinfra_*.deb libvppinfra-dev_*.deb
112         else
113             echo "Error: Unsupported UBUNTU version."
114             exit 1
115         fi
116     fi
117     # create new dir for custom jvpp build (jvpp directory already exists in hc2vpp, therefore using jvpp_src)
118     mkdir jvpp_src
119     cd jvpp_src
120     git clone https://gerrit.fd.io/r/jvpp
121     cd jvpp
122     ref=`git ls-remote -q | grep ${jvpp_commit_id} | awk '{print $2}'`
123     git fetch origin ${ref} && git checkout FETCH_HEAD
124     ./clean.sh
125     if [[ "$ID" == "centos" ]]; then
126         cmake3 .
127     else
128         cmake .
129     fi
130     make package
131     if [[ $? != 0 ]]; then
132         echo "JVPP build failed."
133         exit 1
134     fi
135     cp build-root/packages/vpp-api-java* ${WORKSPACE}/csit
136     cd ${WORKSPACE}/csit
137     # Clean up when done.
138     if [[ "$ID" == "centos" ]]; then
139         sudo yum remove "*vpp*"
140     else
141         sudo apt -y remove "*vpp*"
142     fi
143     rm -rf jvpp_src
144 fi
145
146 # install vpp-api-java, this extracts jvpp .jar files into usr/share/java
147 if [[ "${OS}" == "centos7" ]]; then
148     sudo rpm --nodeps --install vpp-api-java*
149 else
150     sudo dpkg --ignore-depends=${IGNORE_DEPS} --install vpp-api-java*
151 fi
152
153 # install jvpp jars into maven repo, so that maven picks them up when building hc2vpp
154 version=`../jvpp/version`
155
156 current_dir=`pwd`
157 cd /usr/share/java
158
159 for item in jvpp*.jar; do
160     # Example filename: jvpp-registry-19.04.jar
161     # ArtifactId = jvpp-registry
162     # Version = 19.04 or 19.04-SNAPSHOT
163     basefile=$(basename -s .jar "$item")
164     artifactId=$(echo "$basefile" | cut -d '-' -f 1-2)
165     mvn install:install-file -Dfile=${item} -DgroupId=io.fd.jvpp -DartifactId=${artifactId} -Dversion=${version} -Dpackaging=jar -Dmaven.repo.local=/tmp/r -Dorg.ops4j.pax.url.mvn.localRepository=/tmp/r
166 done
167
168 # vpp-api-package is no longer necessary, breaks the installation of other packages that follow in next steps
169 if [[ "${OS}" == "centos7" ]]; then
170     sudo yum remove "*vpp-api-java*"
171 else
172     sudo apt -y remove "*vpp-api-java*"
173 fi
174
175 cd ${current_dir}