E. Scott Daniels | d4f18ba | 2019-06-17 15:08:17 -0400 | [diff] [blame] | 1 | #!/usr/bin/env ksh |
| 2 | # :vim ts=4 sw=4 noet: |
| 3 | #================================================================================== |
| 4 | # Copyright (c) 2019 Nokia |
| 5 | # Copyright (c) 2018-2019 AT&T Intellectual Property. |
| 6 | # |
| 7 | # Licensed under the Apache License, Version 2.0 (the "License"); |
| 8 | # you may not use this file except in compliance with the License. |
| 9 | # You may obtain a copy of the License at |
| 10 | # |
| 11 | # http://www.apache.org/licenses/LICENSE-2.0 |
| 12 | # |
| 13 | # Unless required by applicable law or agreed to in writing, software |
| 14 | # distributed under the License is distributed on an "AS IS" BASIS, |
| 15 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 16 | # See the License for the specific language governing permissions and |
| 17 | # limitations under the License. |
| 18 | #================================================================================== |
| 19 | # |
| 20 | |
| 21 | # Mnemonic: ci_build.ksh |
| 22 | # Abstract: Script builds RMr, exececutes the unit and application based |
| 23 | # tests, then generates packages. The packages are left in /tmp |
| 24 | # unless -t target-dir is given on the command line. A YAML file |
| 25 | # is created which can be used to find all of the packages which |
| 26 | # were deposited in the target directory. In an environment which |
| 27 | # is also capable of generating RPM ppackages, there should be |
| 28 | # four packages: a run-time and development package for both |
| 29 | # debian (.deb) and rh (rpm) based systems. |
| 30 | # |
| 31 | # The intent of this script is for it to be executed as a part |
| 32 | # of a docker image build process such that the resulting image |
| 33 | # contains the RMr packages, and a YAML file which provides the |
| 34 | # paths to the package(s) in the image. Docker tools can then |
| 35 | # be used to extract the packages and push them to some external |
| 36 | # repository. |
| 37 | # |
| 38 | # Assumptions: |
| 39 | # We assume that this scirpt is executed at the 'root' of the |
| 40 | # RMr repo (i.e. the directory which has a subdirectory ci). |
| 41 | # |
| 42 | # Date: 14 June 2019 |
| 43 | # -------------------------------------------------------------------------------- |
| 44 | |
E. Scott Daniels | 9535930 | 2019-07-30 12:37:48 -0400 | [diff] [blame] | 45 | # stash a set of packages for a particular flavour ($1). Records what was kept |
| 46 | # in a yaml file for an external process to grab, and in a simple publication |
| 47 | # list for our internal publish script to gobble up. |
E. Scott Daniels | d4f18ba | 2019-06-17 15:08:17 -0400 | [diff] [blame] | 48 | # |
| 49 | function stash_pkgs { |
E. Scott Daniels | 9535930 | 2019-07-30 12:37:48 -0400 | [diff] [blame] | 50 | mkdir -p $target_dir/exported |
| 51 | |
E. Scott Daniels | d4f18ba | 2019-06-17 15:08:17 -0400 | [diff] [blame] | 52 | for pkg in deb rpm |
| 53 | do |
| 54 | ls .build/*.$pkg 2>/dev/null | while read f |
| 55 | do |
E. Scott Daniels | 9535930 | 2019-07-30 12:37:48 -0400 | [diff] [blame] | 56 | cp $f $target_dir/exported/${f##*/} |
| 57 | echo " - $target_dir/exported/${f##*/}" >>$yaml_file |
E. Scott Daniels | d4f18ba | 2019-06-17 15:08:17 -0400 | [diff] [blame] | 58 | done |
| 59 | |
| 60 | done |
| 61 | } |
| 62 | |
| 63 | # --------------------------------------------------------------------------- |
| 64 | |
| 65 | target_dir="/tmp" |
| 66 | verbose=0 |
| 67 | |
| 68 | while [[ $1 == -* ]] |
| 69 | do |
| 70 | case $1 in |
| 71 | -t) target_dir=$2; shift;; |
| 72 | -v) verbose=1;; |
| 73 | |
| 74 | *) echo "$1 is not recognised" |
| 75 | echo "" |
| 76 | echo "usage: $0 [-t target-dir]" |
E. Scott Daniels | 9535930 | 2019-07-30 12:37:48 -0400 | [diff] [blame] | 77 | echo " target dir defaults to /tmp and is where packages and lists are placed." |
E. Scott Daniels | d4f18ba | 2019-06-17 15:08:17 -0400 | [diff] [blame] | 78 | exit 1 |
| 79 | ;; |
| 80 | esac |
| 81 | |
| 82 | shift |
| 83 | done |
| 84 | |
| 85 | if [[ ! -d $target_dir ]] |
| 86 | then |
E. Scott Daniels | 9535930 | 2019-07-30 12:37:48 -0400 | [diff] [blame] | 87 | if ! -mkdir -p $target_dir |
| 88 | then |
| 89 | echo "[FAIL] cannot find or create target directory: $target_dir" |
| 90 | exit 1 |
| 91 | fi |
E. Scott Daniels | d4f18ba | 2019-06-17 15:08:17 -0400 | [diff] [blame] | 92 | fi |
| 93 | |
| 94 | if [[ ! -d ./ci ]] # verify we are in the root of the RMr repo filesystem, abort if not |
| 95 | then |
| 96 | echo "[FAIL] current working directory does not seem right; should be RMr repo root: $PWD" |
| 97 | exit 1 |
| 98 | fi |
| 99 | |
| 100 | set -e # fail unconditionally on first issue |
| 101 | yaml_file=$target_dir/build_packages.yml |
| 102 | rm -f $yaml_file |
| 103 | |
| 104 | mkdir -p .build |
| 105 | ( |
| 106 | cd .build |
| 107 | rm -f *.deb *.rpm # these shouldn't be there, but take no chances |
| 108 | cmake .. -DBUILD_DOC=1 -DDEV_PKG=1 # set up dev config for unit test (requires dev stuff) |
| 109 | make package |
| 110 | ) |
| 111 | ( |
| 112 | cd test # execute tests |
| 113 | ksh unit_test.ksh # unit tests first |
| 114 | cd app_test |
| 115 | ksh run_all.ksh # application based tests if units pass |
| 116 | ) |
| 117 | |
E. Scott Daniels | f6f4f12 | 2019-06-18 16:02:17 -0400 | [diff] [blame] | 118 | printf "---\nfiles:\n" >$yaml_file # initialise the yaml file |
E. Scott Daniels | d4f18ba | 2019-06-17 15:08:17 -0400 | [diff] [blame] | 119 | |
| 120 | stash_pkgs development # testing good, stash dev packages built above |
| 121 | |
| 122 | ( |
| 123 | cd .build # now build the run-time packages |
| 124 | rm -f *.deb *.rpm # reconfig should delete these, but take no chances |
| 125 | cmake .. # configure run-time build |
| 126 | make package |
| 127 | ) |
| 128 | stash_pkgs runtime # move packages to target and record in yaml file |
| 129 | |
| 130 | echo "..." >>$yaml_file # terminate yaml file |
| 131 | |
| 132 | set +e |
| 133 | if (( verbose )) |
| 134 | then |
| 135 | echo "generated yaml file:" |
| 136 | cat $yaml_file |
| 137 | echo "" |
| 138 | echo "------" |
| 139 | ls -al $target_dir/*.deb $target_dir/*.rpm |
| 140 | fi |
| 141 | |
| 142 | exit 0 |