summaryrefslogtreecommitdiffstats
path: root/jjb/armband/build.sh
blob: 81917f6de1695a18c7909979a86dd8c8fc258ddb (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
#!/bin/bash
##############################################################################
# Copyright (c) 2016 Ericsson AB and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Apache License, Version 2.0
# which accompanies this distribution, and is available at
# http://www.apache.org/licenses/LICENSE-2.0
##############################################################################
set -o errexit
set -o nounset
set -o pipefail

cd $WORKSPACE

# get current SHA1
CURRENT_SHA1=$(git rev-parse HEAD)

# log info to console
echo "Starting the build of Armband. This could take some time..."
echo "-----------------------------------------------------------"
echo

# set OPNFV_ARTIFACT_VERSION
if [[ "$JOB_NAME" =~ "merge" ]]; then
    echo "Building Fuel ISO for a merged change"
    export OPNFV_ARTIFACT_VERSION="gerrit-$GERRIT_CHANGE_NUMBER"
    echo "Not supported"
    exit 1
else
    export OPNFV_ARTIFACT_VERSION=$(date -u +"%Y-%m-%d_%H-%M-%S")
fi

NOCACHE_PATTERN="verify: no-cache"
if [[ "$JOB_NAME" =~ "verify" && "$GERRIT_CHANGE_COMMIT_MESSAGE" =~ "$NOCACHE_PATTERN" ]]; then
    echo "The cache will not be used for this build!"
    NOCACHE_ARG="-f P"
fi
NOCACHE_ARG=${NOCACHE_ARG:-}

# start the build
cd $WORKSPACE/ci
./build.sh $BUILD_DIRECTORY

# list the build artifacts
ls -al $BUILD_DIRECTORY

# save information regarding artifact into file
(
    echo "OPNFV_ARTIFACT_VERSION=$OPNFV_ARTIFACT_VERSION"
    echo "OPNFV_GIT_URL=$(git config --get remote.origin.url)"
    echo "OPNFV_GIT_SHA1=$(git rev-parse HEAD)"
    echo "OPNFV_ARTIFACT_URL=$GS_URL/opnfv-$OPNFV_ARTIFACT_VERSION.iso"
    echo "OPNFV_BUILD_URL=$BUILD_URL"
) > $WORKSPACE/opnfv.properties

echo
echo "--------------------------------------------------------"
echo "Done!"
, interface, class_name) Those method are stateless static members. """ import os from os import sys import imp import fnmatch import logging from conf import settings class LoaderServant(object): """Class implements basic dynamic import operations. """ _class_name = None _path = None _interface = None def __init__(self, path, class_name, interface): """LoaderServant constructor Intializes all data needed for import operations. Attributes: path: path to directory which contains implementations derived from interface. class_name: Class name which will be returned in get_class method, if such definition exists in directory represented by path, interface: interface type. Every object which doesn't implement this particular interface will be filtered out. """ self._class_name = class_name self._path = path self._interface = interface def get_class(self): """Returns class type based on parameters passed in __init__. :return: Type of the found class. None if class hasn't been found """ return self.load_module(path=self._path, interface=self._interface, class_name=self._class_name) def get_classes(self): """Returns all classes in path derived from interface :return: Dictionary with following data: - key: String representing class name, - value: Class type. """ return self.load_modules(path=self._path, interface=self._interface) def get_classes_printable(self): """Returns all classes derived from _interface found in path :return: String - list of classes in printable format. """ out = self.load_modules(path=self._path, interface=self._interface) results = [] for (name, mod) in list(out.items()): desc = (mod.__doc__ or 'No description').strip().split('\n')[0] results.append((name, desc)) header = 'Classes derived from: ' + self._interface.__name__ output = [header + '\n' + '=' * len(header) + '\n'] for (name, desc) in results: output.append('* %-18s%s' % ('%s:' % name, desc)) output.append('') output.append('') return '\n'.join(output) @staticmethod def load_module(path, interface, class_name): """Imports everything from given path and returns class type This is based on following conditions: - Class is derived from interface, - Class type name matches class_name. :return: Type of the found class. None if class hasn't been found """ results = LoaderServant.load_modules( path=path, interface=interface) if class_name in results: logging.info( "Class found: " + class_name + ".") return results.get(class_name) return None @staticmethod def load_modules(path, interface): """Returns dictionary of class name/class type found in path This is based on following conditions: - classes found under path are derived from interface. - class is not interface itself. :return: Dictionary with following data: - key: String representing class name, - value: Class type. """ result = {} for _, mod in LoaderServant._load_all_modules(path): # find all classes derived from given interface, but suppress # interface itself and any abstract class starting with iface name gens = dict((k, v) for (k, v) in list(mod.__dict__.items()) if type(v) == type and issubclass(v, interface) and not k.startswith(interface.__name__)) if gens: for (genname, gen) in list(gens.items()): result[genname] = gen return result @staticmethod def _load_all_modules(path): """Load all modules from ``path`` directory. This is based on the design used by OFTest: https://github.com/floodlight/oftest/blob/master/oft :param path: Path to a folder of modules. :return: List of modules in a folder. """ mods = [] for root, _, filenames in os.walk(path): # Iterate over each python file for filename in fnmatch.filter(filenames, '[!.]*.py'): modname = os.path.splitext(os.path.basename(filename))[0] # skip module load if it is excluded by configuration if modname in settings.getValue('EXCLUDE_MODULES'): continue try: if modname in sys.modules: mod = sys.modules[modname] else: mod = imp.load_module( modname, *imp.find_module(modname, [root])) except ImportError: logging.error('Could not import file ' + filename) raise mods.append((modname, mod)) return mods