ATLAS Offline Software
Loading...
Searching...
No Matches
Tools/WorkflowTestRunner/python/Helpers.py
Go to the documentation of this file.
1# Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
2from glob import glob
3from logging import Logger
4from os import environ, path
5from pathlib import Path
6
7
8def get_release_setup(logger: Logger, no_setup=False) -> str:
9 """Get release setup."""
10 if no_setup:
11 logger.info("No release information is available when a release is not set-up.\n")
12 return ""
13
14 current_nightly = environ["AtlasBuildStamp"]
15 release_base = environ["AtlasBuildBranch"]
16 release_head = environ["AtlasVersion"]
17 platform = environ["LCG_PLATFORM"]
18 project = environ["AtlasProject"]
19 builds_dir_search_str = f"/cvmfs/atlas-nightlies.cern.ch/repo/sw/{release_base}_{project}_{platform}/[!latest_]*/{project}/{release_head}"
20 # finds all directories matching above search pattern, and sorts by modification time
21 # suggest to use latest opt over dbg
22 sorted_list = sorted(glob(builds_dir_search_str), key=path.getmtime)
23 latest_nightly = ""
24 for folder in reversed(sorted_list):
25 if not glob(f"{folder}/../../{release_base}__{project}*-opt*.log"):
26 continue
27 latest_nightly = folder.split("/")[-3]
28 break
29
30 if current_nightly != latest_nightly:
31 logger.info(f"Please be aware that you are not testing your tags in the latest available nightly, which is {latest_nightly}")
32
33 setup = "{},{},{},Athena".format(release_base, platform.replace("-", ","), current_nightly)
34
35 logger.info(f"Your tags will be tested in environment {setup}")
36
37 return setup
38
39
40def list_changed_packages(logger: Logger, no_setup=False) -> None:
41 """List packages that have changed."""
42 if no_setup:
43 logger.info("The list of changed packages is not available when the relase is not set-up.\n")
44 return
45
46 if "WorkDir_DIR" in environ:
47 logger.info("Changed packages in your build to be tested:\n")
48 file_path = Path(environ["WorkDir_DIR"])
49 fname = file_path / "packages.txt"
50 with fname.open() as fp:
51 lines = fp.readlines()
52 last_line = lines[-1].strip() if lines else None
53 for line in lines:
54 line = line.strip()
55 if "#" not in line:
56 if line == last_line:
57 logger.info(f"{line}\n")
58 else:
59 logger.info(line)
60 else:
61 logger.warning("A release area with locally installed packages has not been setup.")
62 logger.warning("quit by executing <CONTROL-C> if this is not your intention, and")
63 logger.warning("source <YOUR_CMake_BUILD_AREA>/setup.sh")
64 logger.warning("to pickup locally built packages in your environment.\n")
65
66
67def warnings_count(file_name: Path) -> list[str]:
68 """Run a WARNING helper function."""
69 warnings = []
70 with file_name.open() as file:
71 for line in file:
72 if "WARNING" in line and "| WARNING |" not in line:
73 warnings.append(line)
74 return warnings
None list_changed_packages(Logger logger, no_setup=False)
str get_release_setup(Logger logger, no_setup=False)
list[str] warnings_count(Path file_name)