3 from logging
import Logger
5 from pathlib
import Path
6 from typing
import List, Optional
10 from .Helpers
import get_release_setup, list_changed_packages
11 from .Inputs
import references_CVMFS_path, references_override_url
12 from .References
import references_map
37 if reference
and validation:
40 self.
logger.
info(f
"WARNING: You have specified a dedicated release as reference {reference} and as validation {validation} release.")
41 self.
logger.
info(
"Your local setup area will not be considered!!!")
42 self.
logger.
info(
"this option is mainly designed for comparing release versions!!")
46 self.
logger.
info(f
"You have specified a dedicated release as reference {reference}.")
53 self.
logger.warning(
"Cannot list changed packages...\n")
66 Generation =
"Generation"
69 HitsMerge =
"HitsMerge"
70 HitsFilter =
"HitsFilter"
71 MCOverlay =
"MCOverlay"
72 DataOverlay =
"DataOverlay"
73 DataOverlayChain =
"DataOverlayChain"
74 DataOverlayReco =
"DataOverlayReco"
76 MCPileUpReco =
"MCPileUpReco"
78 PileUpPresampling =
"PileUpPresampling"
79 MinbiasPreprocessing =
"MinbiasPreprocessing"
80 Derivation =
"Derivation"
87 """Workflow check base class."""
93 def reference_file(self, test:
"WorkflowTest", file_name: str) -> Optional[Path]:
94 reference_path: Path = test.reference_path
95 reference_file = reference_path / file_name
98 if self.
setup.validation_only:
100 reference_revision = references_map[f
"{test.ID}"]
101 cvmfs_path = Path(references_CVMFS_path)
102 rel_path = Path(self.
setup.release_ID) / test.ID / reference_revision
103 reference_path = cvmfs_path / rel_path
104 reference_file = reference_path / file_name
106 if not reference_path.exists():
107 self.
logger.
error(f
"CVMFS reference location {reference_path} does not exist!")
110 if references_override_url
is not None:
113 url = references_override_url
114 if not url.endswith(
"/"): url +=
"/"
115 url +=
str(rel_path / file_name)
116 self.
logger.
info(
"Checking for reference override at %s", url)
117 if requests.head(url).ok:
118 reference_file = Path.cwd() / f
"reference_{file_name}"
119 self.
logger.
info(
"Downloading reference from %s to %s", url, reference_file)
120 r = requests.get(url, stream=
True)
121 with reference_file.open(
'wb')
as f:
122 for chunk
in r.iter_content(chunk_size=1024):
126 self.
logger.
info(
"No reference override found")
128 return reference_file
132 """Workflow test base class."""
134 def __init__(self, ID: str, run: WorkflowRun, type: WorkflowType, steps: List[str], setup: TestSetup) ->
None:
135 if not hasattr(self,
"ID"):
138 if not hasattr(self,
"tag"):
141 if not hasattr(self,
"steps"):
145 raise NotImplementedError(
"Command needs to be defined")
147 if not hasattr(self,
"output_checks"):
150 if not hasattr(self,
"digest_checks"):
153 if not hasattr(self,
"skip_performance_checks"):
160 self.validation_path: Path = self.
setup.validation_run_path / f
"run_{self.ID}"
161 self.reference_path: Path = self.
setup.reference_run_path / f
"run_{self.ID}"
164 self.
logger.
info(f
"Running reference in rel {self.setup.release_reference}")
167 self.reference_path.
mkdir(parents=
True, exist_ok=
True)
169 cmd = (f
"cd {self.reference_path};"
170 f
"source $AtlasSetup/scripts/asetup.sh {self.setup.release_reference} >& /dev/null;")
171 cmd += f
"TRF_NOECHO=1 {self.command} > {self.ID}.log 2>&1"
173 subprocess.call(cmd, shell=
True)
175 self.
logger.
info(f
"Finished clean in rel {self.setup.release_reference}")
179 self.
logger.
info(f
"Running validation in rel {self.setup.release_validation}")
182 self.validation_path.
mkdir(parents=
True, exist_ok=
True)
184 cmd = f
"cd {self.validation_path};"
185 if self.
setup.disable_release_setup
or not self.
setup.release_validation:
187 elif "WorkDir_DIR" in environ:
188 cmake_build_dir = environ[
"WorkDir_DIR"]
189 cmd += (f
"source $AtlasSetup/scripts/asetup.sh {self.setup.release_validation} >& /dev/null;"
190 f
"source {cmake_build_dir}/setup.sh;")
192 cmd += f
"source $AtlasSetup/scripts/asetup.sh {self.setup.release_validation} >& /dev/null;"
193 cmd += f
"TRF_NOECHO=1 {self.command} > {self.ID}.log 2>&1"
195 subprocess.call(cmd, shell=
True)
197 self.
logger.
info(f
"Finished validation in rel {self.setup.release_validation}")
200 def run_checks(self, performance_checks: List[WorkflowCheck]) -> bool:
201 self.
logger.
info(
"-----------------------------------------------------")
202 self.
logger.
info(f
"----------- Post-processing of {self.ID} Test -----------")
207 result = check.run(self)
and result
210 if not self.
setup.disable_output_checks:
212 result = check.run(self)
and result
218 for check
in performance_checks:
219 result = check.run(self)
and result