ci: test_plan: add tags based on manifest change
When manifest changes, add tags based on the changed project names.t Signed-off-by: Anas Nashif <anas.nashif@intel.com>
This commit is contained in:
parent
b9585ad96d
commit
d4169c93fd
1 changed files with 41 additions and 0 deletions
|
@ -14,6 +14,7 @@ import logging
|
||||||
import sys
|
import sys
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from git import Repo
|
from git import Repo
|
||||||
|
from west.manifest import Manifest
|
||||||
|
|
||||||
if "ZEPHYR_BASE" not in os.environ:
|
if "ZEPHYR_BASE" not in os.environ:
|
||||||
exit("$ZEPHYR_BASE environment variable undefined.")
|
exit("$ZEPHYR_BASE environment variable undefined.")
|
||||||
|
@ -96,6 +97,7 @@ class Filters:
|
||||||
self.default_run = False
|
self.default_run = False
|
||||||
|
|
||||||
def process(self):
|
def process(self):
|
||||||
|
self.find_modules()
|
||||||
self.find_tags()
|
self.find_tags()
|
||||||
self.find_tests()
|
self.find_tests()
|
||||||
if not self.platforms:
|
if not self.platforms:
|
||||||
|
@ -122,6 +124,44 @@ class Filters:
|
||||||
if os.path.exists(fname):
|
if os.path.exists(fname):
|
||||||
os.remove(fname)
|
os.remove(fname)
|
||||||
|
|
||||||
|
def find_modules(self):
|
||||||
|
if 'west.yml' in self.modified_files:
|
||||||
|
print(f"Manifest file 'west.yml' changed")
|
||||||
|
print("=========")
|
||||||
|
old_manifest_content = repo.git.show(f"{args.commits[:-2]}:west.yml")
|
||||||
|
with open("west_old.yml", "w") as manifest:
|
||||||
|
manifest.write(old_manifest_content)
|
||||||
|
old_manifest = Manifest.from_file("west_old.yml")
|
||||||
|
new_manifest = Manifest.from_file("west.yml")
|
||||||
|
old_projs = set((p.name, p.revision) for p in old_manifest.projects)
|
||||||
|
new_projs = set((p.name, p.revision) for p in new_manifest.projects)
|
||||||
|
logging.debug(f'old_projs: {old_projs}')
|
||||||
|
logging.debug(f'new_projs: {new_projs}')
|
||||||
|
# Removed projects
|
||||||
|
rprojs = set(filter(lambda p: p[0] not in list(p[0] for p in new_projs),
|
||||||
|
old_projs - new_projs))
|
||||||
|
# Updated projects
|
||||||
|
uprojs = set(filter(lambda p: p[0] in list(p[0] for p in old_projs),
|
||||||
|
new_projs - old_projs))
|
||||||
|
# Added projects
|
||||||
|
aprojs = new_projs - old_projs - uprojs
|
||||||
|
|
||||||
|
# All projs
|
||||||
|
projs = rprojs | uprojs | aprojs
|
||||||
|
projs_names = [name for name, rev in projs]
|
||||||
|
|
||||||
|
logging.info(f'rprojs: {rprojs}')
|
||||||
|
logging.info(f'uprojs: {uprojs}')
|
||||||
|
logging.info(f'aprojs: {aprojs}')
|
||||||
|
logging.info(f'project: {projs_names}')
|
||||||
|
|
||||||
|
_options = []
|
||||||
|
for p in projs_names:
|
||||||
|
_options.extend(["-t", p ])
|
||||||
|
|
||||||
|
self.get_plan(_options, True)
|
||||||
|
|
||||||
|
|
||||||
def find_archs(self):
|
def find_archs(self):
|
||||||
# we match both arch/<arch>/* and include/arch/<arch> and skip common.
|
# we match both arch/<arch>/* and include/arch/<arch> and skip common.
|
||||||
# Some architectures like riscv require special handling, i.e. riscv
|
# Some architectures like riscv require special handling, i.e. riscv
|
||||||
|
@ -331,6 +371,7 @@ if __name__ == "__main__":
|
||||||
print("\n".join(files))
|
print("\n".join(files))
|
||||||
print("=========")
|
print("=========")
|
||||||
|
|
||||||
|
|
||||||
f = Filters(files, args.pull_request, args.platform)
|
f = Filters(files, args.pull_request, args.platform)
|
||||||
f.process()
|
f.process()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue