#!/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.sh # 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