@@ -53,7 +53,17 @@ def get_previous_tag(targetrepodir, version):
defaultbaseversion, _, _ = utils.get_version_from_string(subprocess.check_output(["git", "describe", "--abbrev=0"], cwd=targetrepodir).decode('utf-8').strip())
return utils.get_tag_from_version(defaultbaseversion, None)
-def get_regression_base_and_target(targetbranch, basebranch, release, targetrepodir):
+def get_last_tested_rev_on_branch(branch, log):
+ # Fetch latest test results revision on corresponding branch in test
+ # results repository
+ tags_list = subprocess.check_output(["git", "ls-remote", "--refs", "-t", TEST_RESULTS_REPOSITORY_URL, "refs/tags/" + branch + "/*"]).decode('utf-8').strip()
+ latest_test_tag=tags_list.splitlines()[-1].split()[1]
+ # From test results tag, extract Poky revision
+ tested_revision = re.match('refs\/tags\/.*\/\d+-g([a-f0-9]+)\/\d', latest_test_tag).group(1)
+ log.info(f"Last tested revision on branch {branch} is {tested_revision}")
+ return tested_revision
+
+def get_regression_base_and_target(targetbranch, basebranch, release, targetrepodir, log):
if not targetbranch:
# Targetbranch/basebranch is an arbitrary configuration (not defined in config.json): do not run regression reporting
return None, None
@@ -63,9 +73,11 @@ def get_regression_base_and_target(targetbranch, basebranch, release, targetrepo
# regression reporting must be done against previous tag
return get_previous_tag(targetrepodir, release), targetbranch
elif basebranch:
- # Targetbranch/basebranch is defined in config.json: regression
- # reporting must be done against branches as defined in config.json
- return basebranch, targetbranch
+ # Basebranch/targetbranch are defined in config.json: regression
+ # reporting must be done between latest test result available on base branch
+ # and latest result on targetbranch
+ latest_tested_rev_on_basebranch = get_last_tested_rev_on_branch(basebranch, log)
+ return latest_tested_rev_on_basebranch, targetbranch
#Default case: return previous tag as base
return get_previous_tag(targetrepodir, release), targetbranch
@@ -177,7 +189,7 @@ def send_qa_email():
log.warning("Test results not published on release version. Faulty AB configuration ?")
utils.printheader("Processing regression report")
- regression_base, regression_target = get_regression_base_and_target(targetbranch, basebranch, args.release, targetrepodir)
+ regression_base, regression_target = get_regression_base_and_target(targetbranch, basebranch, args.release, targetrepodir, log)
if regression_base and regression_target:
generate_regression_report(querytool, targetrepodir, regression_base, regression_target, tempdir, args.results_dir, log)
@@ -11,7 +11,10 @@ import os
import sys
import unittest
import send_qa_email
+import logging
+logging.basicConfig(level=logging.INFO, format="%(levelname)s: %(message)s")
+log = logging.getLogger('send-qa-email')
class TestVersion(unittest.TestCase):
test_data_get_version = [
@@ -45,9 +48,9 @@ class TestVersion(unittest.TestCase):
{"name": "Older release", "input": {"targetbranch": "kirkstone",
"basebranch": None, "release": "yocto-4.0.8.rc2"}, "expected": ("yocto-4.0.7", "kirkstone")},
{"name": "Master Next", "input": {"targetbranch": "master-next",
- "basebranch": "master", "release": None}, "expected": ("master", "master-next")},
+ "basebranch": "master", "release": None}, "expected": ("LAST_TESTED_REV", "master-next")},
{"name": "Fork Master Next", "input": {"targetbranch": "ross/mut",
- "basebranch": "master", "release": None}, "expected": ("master", "ross/mut")},
+ "basebranch": "master", "release": None}, "expected": ("LAST_TESTED_REV", "ross/mut")},
{"name": "Nightly a-quick", "input": {"targetbranch": "master",
"basebranch": None, "release": "20230322-2"}, "expected": ("LAST_TAG", "master")},
]
@@ -68,11 +71,11 @@ class TestVersion(unittest.TestCase):
for data in self.regression_inputs:
with self.subTest(data['name']):
base, target = send_qa_email.get_regression_base_and_target(
- data['input']['targetbranch'], data['input']['basebranch'], data['input']['release'], os.environ.get("POKY_PATH"))
+ data['input']['targetbranch'], data['input']['basebranch'], data['input']['release'], os.environ.get("POKY_PATH"), log)
expected_base, expected_target = data["expected"]
# The comparison base can not be set statically in tests when it is supposed to be the previous tag,
# since the result will depend on current tags
- if expected_base == "LAST_TAG":
+ if expected_base == "LAST_TAG" or expected_base == "LAST_TESTED_REV":
self.assertIsNotNone(base)
else:
self.assertEqual(base, expected_base)