From 788b31a122c3823d5e756524187975a2ad14cac6 Mon Sep 17 00:00:00 2001 From: Loys Ollivier Date: Wed, 3 Jan 2018 14:53:55 +0100 Subject: utils: change the url / build behavior scheme This is the first patch of the serie to differentiate builds and urls. As of now we were using the --url option to specify a build-type. Add a new option --build-type which specifies which type of build it is. From this build-type if no url is specified, the url can be defaulted by a configuration file. This configuration file is specific per user, e.g. AGL, others... Change-Id: I9ce801a7518b78ee859c6c3bbcad3a89e884e832 Signed-off-by: Loys Ollivier --- README.md | 13 +++++++------ utils/agljobtemplate.py | 22 ++++++++++++++-------- utils/create-jobs.py | 25 ++++++++++--------------- 3 files changed, 31 insertions(+), 29 deletions(-) diff --git a/README.md b/README.md index 5c0c8fd..dd978c9 100644 --- a/README.md +++ b/README.md @@ -86,13 +86,14 @@ _Examples:_ ```bash ./utils/create-jobs.py --machine m3ulcb ./utils/create-jobs.py --machine qemux86-64 -./utils/create-jobs.py --url release --branch eel --version 4.99.1 --machine m3ulcb -./utils/create-jobs.py --url release --branch eel --version 4.99.1 --machine qemux86-64 -./utils/create-jobs.py --url daily --branch master --version latest --machine m3ulcb -./utils/create-jobs.py --url daily --branch master --version latest --machine raspberrypi3 -./utils/create-jobs.py --url ci --changeid 11533 --patchset 2 --machine raspberrypi3 -./utils/create-jobs.py --url ci --changeid 11533 --patchset 2 --machine m3ulcb +./utils/create-jobs.py --build-type release --branch eel --version 4.99.1 --machine m3ulcb +./utils/create-jobs.py --build-type release --branch eel --version 4.99.1 --machine qemux86-64 +./utils/create-jobs.py --build-type daily --branch master --version latest --machine m3ulcb +./utils/create-jobs.py --build-type daily --branch master --version latest --machine raspberrypi3 +./utils/create-jobs.py --build-type ci --changeid 13079 --patchset 1 --machine raspberrypi3 +./utils/create-jobs.py --build-type ci --changeid 13079 --patchset 1 --machine m3ulcb ./utils/create-jobs.py --url http://baylibre.com/pub/agl/ci/raspberrypi3 --machine raspberrypi3 +./utils/create-jobs.py --url http://baylibre.com/pub/agl/ci/raspberrypi3 --build-type release --machine raspberrypi3 ``` The full list of arguments with default values is available using the helper:\ `$ ./utils/create-jobs.py --help` diff --git a/utils/agljobtemplate.py b/utils/agljobtemplate.py index f41dded..25efab6 100644 --- a/utils/agljobtemplate.py +++ b/utils/agljobtemplate.py @@ -11,13 +11,18 @@ def get_extension(path): return path.split('.')[-1] -def parse_url_file(template_path, url_file, url_type): +def parse_url_file(template_path, url_file, build_type): url_file_path = template_path + '/URLs/' + url_file try: with open(url_file_path): cfg = ConfigParser.ConfigParser() cfg.read(url_file_path) - return cfg.get(url_type, 'urlbase'), cfg.get('infra', 'style') + config = cfg.items(build_type) + for section in config: + if section[0] == "test_plan": + print section[1] + print build_type + return cfg.get(build_type, 'urlbase'), cfg.get('infra', 'style') except IOError as err: raise err @@ -86,6 +91,7 @@ class Agljobtemplate(object): job_name="AGL-short-smoke", priority="medium", tests=[], rfs_type=None, lava_callback=None, kci_callback=None, rfs_image=None, kernel_image=None, dtb_image=None, modules_image=None, + build_type=None, build_version=None): test_templates = [] @@ -104,16 +110,16 @@ class Agljobtemplate(object): job['yocto_machine'] = machine job['priority'] = priority - if url[:4] != 'http': - # If not a full url, read from config file - url_base, infra = parse_url_file(self._template_path, 'default.cfg', url) + # If the user doesn't specify an URL, use the default one from the build-type + if url is None: + url_base, infra = parse_url_file(self._template_path, 'default.cfg', build_type) if infra == 'AGL': # If not set, create a build_version from other args if (not build_version) and (url_branch) and (url_version): - build_version = 'AGL-' + url + '-' + url_branch + '-' + url_version + build_version = 'AGL-' + build_type + '-' + url_branch + '-' + url_version url_fragment = '' - if (url != 'default'): + if (build_type != 'default'): url_fragment += url_branch + '/' + url_version + '/' if (machine == 'm3ulcb') or (machine == 'porter'): @@ -121,7 +127,7 @@ class Agljobtemplate(object): else: url_fragment += machine - if (url != 'ci'): + if (build_type != 'ci'): url_fragment += '/deploy/images/' + machine url = urlparse.urljoin(url_base, url_fragment) diff --git a/utils/create-jobs.py b/utils/create-jobs.py index e9701a5..28fefa4 100755 --- a/utils/create-jobs.py +++ b/utils/create-jobs.py @@ -17,12 +17,14 @@ def parse_cmdline(machines, tests, rfs_types): help="job priority", default='medium') parser.add_argument('--url', '-u', action='store', dest='url', - help="url fetch base", - default='release') + help="If using a custom URL specify it there. The files will be fetched from this URL.") + parser.add_argument('--build-type', dest='build_type', action='store', + help="The type of build, can be one of: {'ci', 'daily', 'weekly', 'release'}.", + default="default") parser.add_argument('--branch', '--changeid', dest='url_branch', action='store', - help='The branch (or changeid) to generate the job for.') + help='The build branch (or changeid).') parser.add_argument('--version', '--patchset', dest='url_version', action='store', - help='The version (or patchset) to generate the job for.') + help='The build version (or patchset).') parser.add_argument('--boot', action='store', dest='rfs_type', choices=rfs_types, help='select boot type') parser.add_argument('--callback-from', action='store', dest='callback_from', @@ -46,24 +48,16 @@ def parse_cmdline(machines, tests, rfs_types): parser.add_argument('--modules-img', dest='modules_img', action='store', help="The name of the modules to use (such as modules.tar.xz)") parser.add_argument('--build-version', dest='build_version', action='store', - help="the version number of the AGL build.") + help="the version number of the build.") args = parser.parse_args() if (bool(args.callback_from) ^ bool(args.callback_to)): parser.error("To specify callbacks both '--callback-to' and '--callback-from' are mandatory.") - if (args.url == 'release'): - if (args.url_branch is None) and (args.url_version is None): - args.url = 'default' - elif (args.url_branch is not None) != (args.url_version is not None): - parser.error("Both arguments: '--branch' and '--version' needs to be set") - elif (args.url == 'daily'): + if (args.build_type is not "default") and (args.url is None): if (not args.url_branch) or (not args.url_version): - parser.error("The argument '--url daily' requires '--branch' and '--version' to be set") - elif (args.url == 'ci'): - if (not args.url_branch) or (not args.url_version): - parser.error("The argument '--url ci' requires '--changeid' and '--patchset' to be set.") + parser.error("when using '--build-type' either '--url' or '--branch' and '--version' arguments needs to be set.") return args @@ -85,6 +79,7 @@ def main(): kernel_image=args.kernel_img, dtb_image=args.dtb_img, modules_image=args.modules_img, + build_type=args.build_type, build_version=args.build_version) if args.job_file is None: -- cgit 1.2.3-korg