Merge "Correctly include license info"
[ric-plt/lib/rmr.git] / ci / ci_build.ksh
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
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.
48 #
49 function stash_pkgs {
50         mkdir -p $target_dir/exported
51
52         for pkg in deb rpm
53         do
54                 ls .build/*.$pkg 2>/dev/null | while read f
55                 do
56                         cp $f $target_dir/exported/${f##*/}
57                         echo "  - $target_dir/exported/${f##*/}" >>$yaml_file
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]"
77                         echo "   target dir defaults to /tmp and is where packages and lists are placed."
78                         exit 1
79                         ;;
80         esac
81
82         shift
83 done
84
85 if [[ ! -d $target_dir ]]
86 then
87         if ! -mkdir -p $target_dir
88         then
89                 echo "[FAIL] cannot find or create target directory: $target_dir"
90                 exit 1
91         fi
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
118 printf "---\nfiles:\n" >$yaml_file      # initialise the yaml file
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