blob: 8c3f699393c840749e1b76a7866e38e5389cd794 [file] [log] [blame]
#!/usr/bin/env ksh
# :vim ts=4 sw=4 noet:
#==================================================================================
# Copyright (c) 2019 Nokia
# Copyright (c) 2018-2019 AT&T Intellectual Property.
#
# 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.
#==================================================================================
#
# Mnemonic: ci_build.ksh
# Abstract: Script builds RMr, exececutes the unit and application based
# tests, then generates packages. The packages are left in /tmp
# unless -t target-dir is given on the command line. A YAML file
# is created which can be used to find all of the packages which
# were deposited in the target directory. In an environment which
# is also capable of generating RPM ppackages, there should be
# four packages: a run-time and development package for both
# debian (.deb) and rh (rpm) based systems.
#
# The intent of this script is for it to be executed as a part
# of a docker image build process such that the resulting image
# contains the RMr packages, and a YAML file which provides the
# paths to the package(s) in the image. Docker tools can then
# be used to extract the packages and push them to some external
# repository.
#
# Assumptions:
# We assume that this scirpt is executed at the 'root' of the
# RMr repo (i.e. the directory which has a subdirectory ci).
#
# Date: 14 June 2019
# --------------------------------------------------------------------------------
# stash a set of packages for a particular flavour ($1). Records what was kept
# in a yaml file for an external process to grab, and in a simple publication
# list for our internal publish script to gobble up.
#
function stash_pkgs {
mkdir -p $target_dir/exported
for pkg in deb rpm
do
ls .build/*.$pkg 2>/dev/null | while read f
do
cp $f $target_dir/exported/${f##*/}
echo " - $target_dir/exported/${f##*/}" >>$yaml_file
done
done
}
# ---------------------------------------------------------------------------
target_dir="/tmp"
verbose=0
while [[ $1 == -* ]]
do
case $1 in
-t) target_dir=$2; shift;;
-v) verbose=1;;
*) echo "$1 is not recognised"
echo ""
echo "usage: $0 [-t target-dir]"
echo " target dir defaults to /tmp and is where packages and lists are placed."
exit 1
;;
esac
shift
done
if [[ ! -d $target_dir ]]
then
if ! -mkdir -p $target_dir
then
echo "[FAIL] cannot find or create target directory: $target_dir"
exit 1
fi
fi
if [[ ! -d ./ci ]] # verify we are in the root of the RMr repo filesystem, abort if not
then
echo "[FAIL] current working directory does not seem right; should be RMr repo root: $PWD"
exit 1
fi
set -e # fail unconditionally on first issue
yaml_file=$target_dir/build_packages.yml
rm -f $yaml_file
mkdir -p .build
(
cd .build
rm -f *.deb *.rpm # these shouldn't be there, but take no chances
cmake .. -DBUILD_DOC=1 -DDEV_PKG=1 # set up dev config for unit test (requires dev stuff)
make package
)
(
cd test # execute tests
ksh unit_test.ksh # unit tests first
cd app_test
ksh run_all.ksh # application based tests if units pass
)
printf "---\nfiles:\n" >$yaml_file # initialise the yaml file
stash_pkgs development # testing good, stash dev packages built above
(
cd .build # now build the run-time packages
rm -f *.deb *.rpm # reconfig should delete these, but take no chances
cmake .. # configure run-time build
make package
)
stash_pkgs runtime # move packages to target and record in yaml file
echo "..." >>$yaml_file # terminate yaml file
set +e
if (( verbose ))
then
echo "generated yaml file:"
cat $yaml_file
echo ""
echo "------"
ls -al $target_dir/*.deb $target_dir/*.rpm
fi
exit 0