From fe2f200fe1d5d478ba640963b94b0e95de576f98 Mon Sep 17 00:00:00 2001 From: Garret Raziel Date: Wed, 28 Jan 2015 10:58:51 +0100 Subject: [PATCH] work on openqa_trigger.py --- openqa_trigger.py | 65 +++++++++++++++++++++++++++++++++-------------- 1 file changed, 46 insertions(+), 19 deletions(-) diff --git a/openqa_trigger.py b/openqa_trigger.py index 9004c9f..0f23be7 100644 --- a/openqa_trigger.py +++ b/openqa_trigger.py @@ -6,42 +6,69 @@ import re import urlgrabber import os.path import sys +import subprocess + +import jozuv_bomba_script PERSISTENT="/var/tmp/openqa_watcher.json" CURRENT_TEST="https://fedoraproject.org/wiki/Test_Results:Current_Installation_Test" -ISO_REGEX=re.compile(r'https://kojipkgs\.fedoraproject\.org/mash/(?Prawhide-(?P\d+))/rawhide/(?P(x86_64|i386))/os/images/boot\.iso') +ISO_REGEX=re.compile(r'https://kojipkgs\.fedoraproject\.org/mash/(?Prawhide-(?P\d+))/rawhide/(?Px86_64|i386)/os/images/boot\.iso') ISO_PATH="/var/lib/openqa/factory/iso/" RUN_COMMAND="/var/lib/openqa/script/client isos post ISO=%s DISTRI=fedora VERSION=rawhide FLAVOR=server ARCH=%s BUILD=%s" +VERSIONS = ['i386', 'x86_64'] # read last tested version from file def read_last(): + result = {} try: f = open(PERSISTENT, "r") json_raw = f.read() f.close() json_parsed = json.loads(json_raw) except IOError: - return None, None - return json_parsed["last_version"], json_all + return result, {} + + for version in VERSIONS: + result[version] = json_parsed.get(version, None) + return result, json_parsed # read current version from Current Installation Test page -def read_current(): +def read_currents(): page = urllib2.urlopen(CURRENT_TEST).read() - match = ISO_REGEX.search(page) + for match in ISO_REGEX.finditer(page): + yield match.group("build"), match.group(0), match.group("name"), match.group("arch") + +last_versions, json_parsed = read_last() +jobs = [] + +# for every architecture +for current_version, link, name, arch in read_currents(): + # don't run when there is newer version + last_version = last_versions.get(arch, None) + if last_version is not None and (last_version == current_version): + continue + + json_parsed[arch] = current_version + + isoname = "%s_%s.iso" % (name, arch) + filename = os.path.join(ISO_PATH, isoname) + urlgrabber.urlgrab(link, filename) + + command = RUN_COMMAND % (isoname, arch, current_version) + + output = subprocess.check_output(command.split()) + + # read ids from OpenQA to wait for + r = re.compile(r'ids => \[(?P\d+)( \.\. (?P\d+))?\]') + match = r.search(output) if match: - return match.group("build"), match.group(0), match.group("name"), match.group("arch") - else: - return None, None, None, None + from_i = int(match.group('from')) + to_i = int(match.group('to')) + 1 + jobs.append(tuple(range(from_i, to_i))) -last, json_all = read_last() -current, link, name, arch = read_current() +# write info about latest versions +f = open(PERSISTENT, "w") +f.write(json.dumps(json_parsed)) +f.close() -# don't run when there is newer version -if last is not None and (last == current): - sys.exit() - -isoname = "%s_%s.iso" % (name, arch) -filename = os.path.join(ISO_PATH, isoname) -urlgrabber.urlgrab(link, filename) - -command = RUN_COMMAND % (isoname, arch, current) +jozuv_bomba_script.vyres_problemy(jobs)