aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/functions.sh
blob: e5484b02e9afff0c202a24555f9020f0a5086fad (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# Copyright (c) 2021 Cisco 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:
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

#!/bin/bash
set -euxo pipefail

APT_PATH=$(which apt-get) || true
apt_get=${APT_PATH:-"/usr/local/bin/apt-get"}

# Cmake executable
CMAKE_INSTALL_DIR="/opt/cmake"
export PATH=:${CMAKE_INSTALL_DIR}/bin:${PATH}

# Figure out what system we are running on
if [ -f /etc/os-release ]; then
  . /etc/os-release
else
  echo "ERROR: System configuration not recognized. Build failed"
  exit 1
fi

COLLECTD_SOURCE="https://github.com/collectd/collectd/releases/download/collectd-5.12.0/collectd-5.12.0.tar.bz2"

function install_collectd_headers() {
  curl -OL ${COLLECTD_SOURCE}
  tar -xf collectd-5.12.0.tar.bz2

  pushd collectd-5.12.0
  ./configure && make -j$(nproc)
  popd

  export COLLECTD_HOME=${PWD}/collectd-5.12.0/src
}

# Call a function once
function call_once() {
  # OP_NAME is the name of the function
  OP_NAME=${1}
  # If function was already called return
  [[ -f /tmp/${OP_NAME} ]] && return 0
  # Otherwise call the function
  ${@}
  # And mark the function as called if no error occurred
  echo ${OP_NAME} >/tmp/${OP_NAME}
}

# Install dependencies
function install_deps() {
  make -C ${SCRIPT_PATH}/.. deps
}

function setup() {
  echo DISTRIBUTION: ${PRETTY_NAME}
  # export variables depending on the platform we are running
  call_once install_deps
  call_once install_collectd_headers
}

function setup_extras() {
  echo DISTRIBUTION: ${PRETTY_NAME}
  # export variables depending on the platform we are running

  call_once install_deps
  call_once install_collectd_headers
}

# Download artifacts of this patchset from jenkins
function download_artifacts() {
  if [[ -n ${GERRIT_HOST:-} ]] &&
    [[ -n ${GERRIT_CHANGE_NUMBER:-} ]] &&
    [[ -n ${GERRIT_PATCHSET_NUMBER:-} ]]; then

    # Retrieve the Jenkins URL of the build relative to this PATCHSET
    JENKINS_URL=$(
      curl -s "https://${GERRIT_HOST}/r/changes/${GERRIT_CHANGE_NUMBER}/detail" |
        tail -n +2 | jq '.messages[].message?' |
        grep -E "Patch Set ${GERRIT_PATCHSET_NUMBER}:.*hicn-verify-build.*build_success-hicn-ubuntu2004-$(uname -m)" |
        grep -Eo "https?://jenkins.fd.io/job/hicn-verify-build-hicn-ubuntu2004-$(uname -m)[^ ]+"
    )
    ARTIFACTS_URL="${JENKINS_URL}/artifact/packages/*zip*/packages.zip"

    # Download artifacts
    curl -o "${SCRIPT_PATH}/../packages.zip" -L "${ARTIFACTS_URL}"

    # Unzip them
    unzip "${SCRIPT_PATH}/../packages.zip" -d "${SCRIPT_PATH}/.."

    return 0
  fi

  # Fall back to image re-build if artifacts cannot be downloaded
  echo "GERRIT_* environment is not set. Image will be rebuilt from scratch" >&2
  return 1
}

# Run functional tests
function functional_test() {
  echo "*******************************************************************"
  echo "********************* STARTING FUNCTIONAL TESTS *******************"
  echo "*******************************************************************"

  if download_artifacts; then
    local build_sw=0
    local dockerfile_path="tests/Dockerfile.ci"
  else
    local build_sw=1
    local dockerfile_path="Dockerfile.dev"
  fi

  # Run functional tests
  pushd ${SCRIPT_PATH}/../tests
    BUILD_SOFTWARE=${build_sw} DOCKERFILE=${dockerfile_path} bash ./run-functional.sh
  popd

  echo "*******************************************************************"
  echo "**********  FUNCTIONAL TESTS COMPLETED SUCCESSFULLY ***************"
  echo "*******************************************************************"
}