squidient 2.6.1__tar.gz → 2.7.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {squidient-2.6.1 → squidient-2.7.0}/PKG-INFO +1 -1
- {squidient-2.6.1 → squidient-2.7.0}/pyproject.toml +1 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/benchmarkbuilder.py +3 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/builder.py +31 -20
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/cli.py +12 -16
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/codecoverage/codecoverage.py +1 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/codecoverage/intelcodecoverage.py +5 -3
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/tolerance.py +1 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/configure.py +57 -54
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/job.py +6 -4
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/git.py +3 -6
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/init.py +1 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/monitor/monitor.py +34 -28
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/monitor/monitordb.py +1 -4
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientbasereport.py +2 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientcasereport.py +1 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientdetailedreport.py +6 -4
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientfullreport.py +1 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/squidient.py +31 -35
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/squidientmonitor.py +14 -16
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/staging/staging.py +92 -73
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/platform.py +2 -1
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/queuetester.py +11 -6
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/terraform/terraform.py +13 -10
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarktester.py +33 -12
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/instance.py +4 -2
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/test.py +2 -4
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/tester.py +35 -22
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/message.py +45 -30
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/utils.py +2 -2
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/watchdog.py +9 -6
- {squidient-2.6.1 → squidient-2.7.0}/.gitignore +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/LICENSE.txt +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/README.md +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/__init__.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/benchmarkbuild.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/build.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/executablebuild.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/predefinedbuild.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/codecoverage/gcovrcodecoverage.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/compare.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/comparewithdifftable.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/absolute.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/close.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/diff.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l1norm.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l1relative.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l2norm.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l2relative.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/linfnorm.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/linfrelative.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/power.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/relative.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/scalartolerance.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/vectortolerance.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compilation/cmakeoptions.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/buildlock.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/ssh.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/sshconfigchecker.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/.squidient-initialized +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-alamak.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-chemint.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-clang.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-commdom.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-gnu.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-intel.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-mumps.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-nvhpc.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-talp.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/benchmarks/benchmarks.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/builds.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/cc.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/defaults.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/predefined-old.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/predefined.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/configurations/projects.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/configurations/systems.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/configurations/tests.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/email/report.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/icons/big.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/icons/small.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/index.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/.gitignore +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small/.gitignore +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/cloud-init-slurm-fedora.sh +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/t3.small.tf +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/terraform.tfvars +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/.gitignore +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/cloud-init-slurm-fedora.sh +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/replace-var.sh +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/t3.small.tf +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/terraform.tfvars +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/.gitignore +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/cloud-init-slurm-fedora.sh +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/t3.small.tf +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/terraform.tfvars +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/version/version.json +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/bb.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/benchmarks.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/btest.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/btests.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/builds.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/cc-gcovr.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/cc-intel.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/files.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/canceled.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/created.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/failed.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/failed_black.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/failed_green.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_cloud.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_config.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_ko.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_ok.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/skipped.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/squidient_logo.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/success.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/success_black.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/timeout.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/tolerance.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/warning.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/warning_black.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/warning_green.png +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/canceled.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/created.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/failed.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/failed_black.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/failed_green.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/manual.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/running.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/skipped.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/success.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/success_black.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/warning.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/warning_black.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/warning_green.svg +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/index.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/jquery.dynatable.css +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/jquery.dynatable.js +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/perf.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/test.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/tests.html +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/testsuite.css +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/testsuite.js +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/definitions.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/deployment/modulegenerator.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/reports/monitorreport.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/reports/report.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/__init__.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/partition.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/qos.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/reservation.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/system.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/systemmanager.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarkfailurenotifier.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarkinstance.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarktest.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/instancemerger.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/timers/__init__.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/timers/timer.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/arguments.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/lock.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/log.py +0 -0
- {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/package.py +0 -0
|
@@ -50,9 +50,11 @@ class BenchmarkBuilder(Builder):
|
|
|
50
50
|
db=self._db)
|
|
51
51
|
|
|
52
52
|
def build_report(self):
|
|
53
|
-
console.section("Building
|
|
53
|
+
console.section("Building benchmark build report")
|
|
54
54
|
report = {}
|
|
55
|
+
console.step("Building per-build reports")
|
|
55
56
|
for b in self._builds:
|
|
57
|
+
console.group("Build " + b, level=2)
|
|
56
58
|
self._builds[b].build_report()
|
|
57
59
|
report[b] = self._builds[b].get_report()
|
|
58
60
|
f = self._report_dir+"/benchmark_builds.json"
|
|
@@ -82,7 +82,7 @@ class Builder:
|
|
|
82
82
|
os.chdir(self._p)
|
|
83
83
|
except:
|
|
84
84
|
logger.error("Changing directory back failed")
|
|
85
|
-
raise RuntimeError("An internal error happened
|
|
85
|
+
raise RuntimeError("An internal error happened")
|
|
86
86
|
|
|
87
87
|
def set_build_list(self):
|
|
88
88
|
self._build_list = self._config["staging"]["builds"]
|
|
@@ -102,10 +102,12 @@ class Builder:
|
|
|
102
102
|
sorted_builds[system] = {}
|
|
103
103
|
for platform in self._systemManager.get_platforms(system):
|
|
104
104
|
sorted_builds[system][platform] = []
|
|
105
|
+
console.section("Preparing builds")
|
|
105
106
|
for b in self._build_list:
|
|
106
107
|
bui = self.init_build(b)
|
|
107
108
|
self._unlaunched_builds[b] = bui
|
|
108
109
|
sorted_builds[bui.get_system()][bui.get_platform()].append(b)
|
|
110
|
+
console.section("Submitting build jobs")
|
|
109
111
|
while len(self._unlaunched_builds) > 0:
|
|
110
112
|
for system in self._systemManager.get_systems():
|
|
111
113
|
for platform in self._systemManager.get_platforms(system):
|
|
@@ -121,7 +123,6 @@ class Builder:
|
|
|
121
123
|
raise Exception
|
|
122
124
|
sorted_builds[system][platform] = []
|
|
123
125
|
time.sleep(60)
|
|
124
|
-
print_line()
|
|
125
126
|
|
|
126
127
|
def terminate_builds(self):
|
|
127
128
|
with self.timer("builds.wait", local=False):
|
|
@@ -147,14 +148,15 @@ class Builder:
|
|
|
147
148
|
def get_total(self):
|
|
148
149
|
return len(self._builds)
|
|
149
150
|
|
|
150
|
-
def next_valid_build(self, show_progress=True, single_snapshot=None, stop_on_error=False):
|
|
151
|
+
def next_valid_build(self, show_progress=True, single_snapshot=None, stop_on_error=False, output_level=1):
|
|
151
152
|
display_status = show_progress
|
|
152
153
|
while len(self._pending_builds) == 0:
|
|
153
154
|
if self.check_builds(
|
|
154
155
|
show_progress=display_status,
|
|
155
156
|
show_elapsed=display_status,
|
|
156
157
|
rewind=False,
|
|
157
|
-
single_snapshot=single_snapshot
|
|
158
|
+
single_snapshot=single_snapshot,
|
|
159
|
+
output_level=output_level):
|
|
158
160
|
if self.get_failed() > 1 and stop_on_error:
|
|
159
161
|
return None
|
|
160
162
|
break
|
|
@@ -194,8 +196,10 @@ class Builder:
|
|
|
194
196
|
with self.timer("builds.report"):
|
|
195
197
|
console.section("Building build report")
|
|
196
198
|
report = {}
|
|
199
|
+
console.step("Building per-build reports")
|
|
197
200
|
for b in self._builds:
|
|
198
201
|
if b in self._finished_builds:
|
|
202
|
+
console.group("Build " + b, level=2)
|
|
199
203
|
self._builds[b].build_report()
|
|
200
204
|
report[b] = self._builds[b].get_report()
|
|
201
205
|
f = self._report_dir+"/builds.json"
|
|
@@ -214,7 +218,7 @@ class Builder:
|
|
|
214
218
|
status = self._builds[build].check_build_status()
|
|
215
219
|
return status
|
|
216
220
|
|
|
217
|
-
def check_builds(self, show_progress=True, show_elapsed=True, rewind=True, single_snapshot=None):
|
|
221
|
+
def check_builds(self, show_progress=True, show_elapsed=True, rewind=True, single_snapshot=None, output_level=1):
|
|
218
222
|
line_count = len(self._builds) + (1 if show_elapsed else 0)
|
|
219
223
|
live = LiveOutput(
|
|
220
224
|
line_count,
|
|
@@ -250,9 +254,9 @@ class Builder:
|
|
|
250
254
|
test = False
|
|
251
255
|
check = check and test
|
|
252
256
|
if live.should_print():
|
|
253
|
-
console.status(b, status["status"])
|
|
257
|
+
console.status(b, status["status"], level=output_level)
|
|
254
258
|
if live.should_print() and show_elapsed:
|
|
255
|
-
console.
|
|
259
|
+
console.elapsed_time(int((time.time() - self._start_time) / 60), level=output_level)
|
|
256
260
|
live.printed()
|
|
257
261
|
self._build_status_printed = True
|
|
258
262
|
elif live.should_print():
|
|
@@ -276,9 +280,12 @@ class Builder:
|
|
|
276
280
|
force_https=force_https)
|
|
277
281
|
if fetch:
|
|
278
282
|
console.section("Cloning or updating the alya git repository")
|
|
283
|
+
console.step("Fetching Alya source tree")
|
|
279
284
|
self._alya_repository.clone_or_update_tests()
|
|
280
285
|
self._revision = self._alya_repository.revision_short()
|
|
281
286
|
self._revision_long = self._alya_repository.revision_long()
|
|
287
|
+
if fetch:
|
|
288
|
+
console.step("Fetched revision " + self._revision, level=2)
|
|
282
289
|
return self._alya_repository
|
|
283
290
|
|
|
284
291
|
def download_alamak(self, user="", token=""):
|
|
@@ -286,6 +293,7 @@ class Builder:
|
|
|
286
293
|
if self._config["alamak"]["enable"]:
|
|
287
294
|
console.section("Cloning alamak")
|
|
288
295
|
self.cd_push(self._config["alamak"]["path"])
|
|
296
|
+
console.step("Cleaning alamak workspace")
|
|
289
297
|
critical_command("./alamak.sh --clean")
|
|
290
298
|
if self._config["alamak"]["revision"] is not None:
|
|
291
299
|
ref = "--revision " + shell_quote(self._config["alamak"]["revision"])
|
|
@@ -301,14 +309,16 @@ class Builder:
|
|
|
301
309
|
+ " --token "
|
|
302
310
|
+ shell_quote(url_quote(token, safe=""))
|
|
303
311
|
)
|
|
312
|
+
console.step("Downloading alamak through HTTPS")
|
|
304
313
|
else:
|
|
305
314
|
alamak_command = "./alamak.sh --ssh " + ref
|
|
315
|
+
console.step("Downloading alamak through SSH")
|
|
306
316
|
try:
|
|
307
317
|
critical_command(alamak_command, silent=True)
|
|
308
318
|
except:
|
|
309
|
-
console.error("The cloning of alamak has failed")
|
|
319
|
+
console.error("The cloning of alamak has failed", level=1)
|
|
310
320
|
command("./alamak.sh --clean")
|
|
311
|
-
console.
|
|
321
|
+
console.detail(command(alamak_command, silent=True).stdout, level=2)
|
|
312
322
|
raise Exception
|
|
313
323
|
self.cd_pop()
|
|
314
324
|
|
|
@@ -320,17 +330,17 @@ class Builder:
|
|
|
320
330
|
console.section("Uploading alya")
|
|
321
331
|
for system in self._systemManager.get_systems():
|
|
322
332
|
with self.timer("builds.send_alya.system", local=False, system=system):
|
|
323
|
-
console.
|
|
324
|
-
console.step("Cleaning the remote build directory")
|
|
333
|
+
console.group("System " + system)
|
|
334
|
+
console.step("Cleaning the remote build directory", level=2)
|
|
325
335
|
self._ssh.rmdir(system=system, path=remote_bin_dir, server_path=True)
|
|
326
336
|
if self._config["clean"]:
|
|
327
337
|
self._ssh.rmdir(system=system, path=remote_build_dir, server_path=True)
|
|
328
338
|
self._ssh.rmdir(system=system, path=remote_cc_dir, server_path=True)
|
|
329
|
-
console.step("Creating the remote build directory infrastructure")
|
|
339
|
+
console.step("Creating the remote build directory infrastructure", level=2)
|
|
330
340
|
self._ssh.mkdir(system=system, path=remote_bin_dir, server_path=True)
|
|
331
341
|
self._ssh.mkdir(system=system, path=remote_build_dir, server_path=True)
|
|
332
342
|
self._ssh.mkdir(system=system, path=remote_cc_dir, server_path=True)
|
|
333
|
-
console.step("Uploading alya source tree")
|
|
343
|
+
console.step("Uploading alya source tree", level=2)
|
|
334
344
|
self._ssh.rsync_send(system=system, local=alya_dir, options="--exclude .git/", delete=True, server_path=True, critical=True)
|
|
335
345
|
|
|
336
346
|
def create_build(self, build):
|
|
@@ -339,13 +349,13 @@ class Builder:
|
|
|
339
349
|
|
|
340
350
|
def init_build(self, build):
|
|
341
351
|
with self.timer("builds.prepare_build", comment=build):
|
|
342
|
-
console.
|
|
352
|
+
console.group("Build " + build)
|
|
343
353
|
b = self.create_build(build)
|
|
344
|
-
console.step("Generating alya configuration file")
|
|
354
|
+
console.step("Generating alya configuration file", level=2)
|
|
345
355
|
b.generate_configuration()
|
|
346
|
-
console.step("Generating job file")
|
|
356
|
+
console.step("Generating job file", level=2)
|
|
347
357
|
b.generate_job()
|
|
348
|
-
console.step("Uploading files")
|
|
358
|
+
console.step("Uploading files", level=2)
|
|
349
359
|
with self.timer("builds.prepare_build.upload", local=False, system=b.get_system(), platform=b.get_platform(), comment=build):
|
|
350
360
|
b.send_files()
|
|
351
361
|
return b
|
|
@@ -353,12 +363,13 @@ class Builder:
|
|
|
353
363
|
def run_build(self, b):
|
|
354
364
|
with self.timer("builds.submit_job", local=False, system=b.get_system(), platform=b.get_platform(), comment=b.get_build_id()):
|
|
355
365
|
time.sleep(5)
|
|
356
|
-
console.
|
|
366
|
+
console.group("Build " + b.get_build_id())
|
|
367
|
+
console.step("Submitting build job", level=2)
|
|
357
368
|
job_id = b.launch_job()
|
|
358
369
|
if job_id == -1:
|
|
359
|
-
console.error("Job submission has failed")
|
|
370
|
+
console.error("Job submission has failed", level=3)
|
|
360
371
|
else:
|
|
361
|
-
console.success("Job id: " + str(job_id))
|
|
372
|
+
console.success("Job id: " + str(job_id), level=3)
|
|
362
373
|
|
|
363
374
|
def get_builds(self):
|
|
364
375
|
return self._builds
|
|
@@ -30,22 +30,17 @@ from .squidientmonitor import main as mmain
|
|
|
30
30
|
from .utils.package import check_latest_package_any_index
|
|
31
31
|
|
|
32
32
|
def help():
|
|
33
|
-
console.
|
|
34
|
-
console.
|
|
35
|
-
console.
|
|
36
|
-
console.
|
|
37
|
-
console.
|
|
38
|
-
console.
|
|
39
|
-
console.blank()
|
|
40
|
-
console.write("\tConfiguration options:")
|
|
41
|
-
console.write("\tsquidient configure [options] Configure squidient")
|
|
33
|
+
console.section("squidient")
|
|
34
|
+
console.option("squidient help", "Print this help")
|
|
35
|
+
console.section("Initialization options")
|
|
36
|
+
console.option("squidient init [directory]", "Initialize the directory")
|
|
37
|
+
console.section("Configuration options")
|
|
38
|
+
console.option("squidient configure [options]", "Configure squidient")
|
|
42
39
|
chelp()
|
|
43
|
-
console.
|
|
44
|
-
console.
|
|
45
|
-
console.write("\tsquidient run [options]")
|
|
40
|
+
console.section("Build and test options")
|
|
41
|
+
console.option("squidient run [options]", "Run the staging workflow")
|
|
46
42
|
shelp()
|
|
47
|
-
console.
|
|
48
|
-
console.write("\tsquidient monitor [options]")
|
|
43
|
+
console.option("squidient monitor [options]", "Run the monitor workflow")
|
|
49
44
|
mhelp()
|
|
50
45
|
|
|
51
46
|
def main():
|
|
@@ -90,8 +85,9 @@ def main():
|
|
|
90
85
|
return 1
|
|
91
86
|
|
|
92
87
|
except Exception as e:
|
|
93
|
-
console.error
|
|
94
|
-
console.error(
|
|
88
|
+
console.section("Command error")
|
|
89
|
+
console.error(str(e), level=1)
|
|
90
|
+
console.error("Exception", level=1)
|
|
95
91
|
return 1
|
|
96
92
|
|
|
97
93
|
|
|
@@ -98,6 +98,7 @@ class CodeCoverage(ABC):
|
|
|
98
98
|
def build_report(self):
|
|
99
99
|
with self.timer("code_coverage.report", comment=self._tool):
|
|
100
100
|
console.section("Building code coverage report")
|
|
101
|
+
console.step("Writing code coverage report files")
|
|
101
102
|
f = cc_report_dir + "/cc.json"
|
|
102
103
|
save_json(self._report, f)
|
|
103
104
|
json2js("cc", f)
|
|
@@ -107,11 +107,13 @@ class IntelCodeCoverage(CodeCoverage):
|
|
|
107
107
|
with self.platform_timer("code_coverage.process", comment=self._tool):
|
|
108
108
|
console.step("Merging code coverage files")
|
|
109
109
|
if not self.merge():
|
|
110
|
-
console.
|
|
110
|
+
console.section("Code coverage result")
|
|
111
|
+
console.error("Merging has failed", level=1)
|
|
111
112
|
return False
|
|
112
113
|
console.step("Generating code coverage html files")
|
|
113
114
|
if not self.codecov():
|
|
114
|
-
console.
|
|
115
|
+
console.section("Code coverage result")
|
|
116
|
+
console.error("Code coverage has failed", level=1)
|
|
115
117
|
return False
|
|
116
118
|
return True
|
|
117
119
|
|
|
@@ -210,7 +212,7 @@ class IntelCodeCoverage(CodeCoverage):
|
|
|
210
212
|
continue
|
|
211
213
|
f["name"] = rows[i]["file"]
|
|
212
214
|
if show_details:
|
|
213
|
-
console.
|
|
215
|
+
console.group("File " + f["name"], level=2)
|
|
214
216
|
path = rows[i]["path"].split("alya/", 1)[1]
|
|
215
217
|
f["path"] = path
|
|
216
218
|
realPath = self.alya_realpath(path)
|
|
@@ -107,7 +107,7 @@ class Tolerance(ABC):
|
|
|
107
107
|
rows = range(len(self._refContent))
|
|
108
108
|
logger.debug("There are " + str(len(self._refContent)) + " rows")
|
|
109
109
|
if len(self._refContent) == 0:
|
|
110
|
-
logger.warning("Base does not have rows
|
|
110
|
+
logger.warning("Base does not have rows")
|
|
111
111
|
self._status = False
|
|
112
112
|
self._error = "empty base"
|
|
113
113
|
|
|
@@ -223,15 +223,15 @@ def set_builds(com=""):
|
|
|
223
223
|
if com == "":
|
|
224
224
|
console.section("Available builds")
|
|
225
225
|
if is_bsc_system():
|
|
226
|
-
console.
|
|
227
|
-
console.
|
|
228
|
-
console.
|
|
229
|
-
console.
|
|
230
|
-
console.
|
|
231
|
-
console.
|
|
232
|
-
console.
|
|
226
|
+
console.detail("Presets", level=1)
|
|
227
|
+
console.option("all", "all the builds required to validate alya", level=2)
|
|
228
|
+
console.option("gpp", "all the marenostrum 5 GPP builds required to validate alya", level=2)
|
|
229
|
+
console.option("gnu", "all the gnu builds (gpp only)", level=2)
|
|
230
|
+
console.option("oneapi", "all the oneapi builds (gpp only)", level=2)
|
|
231
|
+
console.option("benchmarks", "all the benchmarks builds", level=2)
|
|
232
|
+
console.detail("Unitary", level=1)
|
|
233
233
|
for build in selectedBuilds:
|
|
234
|
-
console.
|
|
234
|
+
console.option(build, "", level=2)
|
|
235
235
|
line_jump()
|
|
236
236
|
b = input("Choose one or more builds:\n")
|
|
237
237
|
else:
|
|
@@ -246,13 +246,14 @@ def set_builds(com=""):
|
|
|
246
246
|
if a in b:
|
|
247
247
|
b.extend(predefined_builds[a])
|
|
248
248
|
b = set(b)
|
|
249
|
+
console.section("Build selection result")
|
|
249
250
|
for build in b:
|
|
250
251
|
if build in predefined_builds:
|
|
251
252
|
continue
|
|
252
253
|
if build not in builds:
|
|
253
|
-
console.error(build + " is not a valid option")
|
|
254
|
+
console.error(build + " is not a valid option", level=1)
|
|
254
255
|
else:
|
|
255
|
-
console.success("Build " + build + " added correctly")
|
|
256
|
+
console.success("Build " + build + " added correctly", level=1)
|
|
256
257
|
config["staging"]["builds"].append(build)
|
|
257
258
|
line_jump()
|
|
258
259
|
save_json(config, config_file)
|
|
@@ -268,7 +269,7 @@ def set_cc(com=""):
|
|
|
268
269
|
if com == "":
|
|
269
270
|
console.section("Available code coverage configurations")
|
|
270
271
|
for cc in ccs:
|
|
271
|
-
console.
|
|
272
|
+
console.option(cc, "", level=2)
|
|
272
273
|
line_jump()
|
|
273
274
|
c = input("Choose a code coverage configuration:\n")
|
|
274
275
|
else:
|
|
@@ -292,7 +293,7 @@ def set_systems(com=""):
|
|
|
292
293
|
if com == "":
|
|
293
294
|
console.section("Available systems")
|
|
294
295
|
for system in config["systems"]:
|
|
295
|
-
console.
|
|
296
|
+
console.option(system, "", level=2)
|
|
296
297
|
line_jump()
|
|
297
298
|
s = input("Choose one or more systems:\n")
|
|
298
299
|
else:
|
|
@@ -301,11 +302,12 @@ def set_systems(com=""):
|
|
|
301
302
|
if s[0] == '':
|
|
302
303
|
s[0] = "bsc"
|
|
303
304
|
|
|
305
|
+
console.section("System selection result")
|
|
304
306
|
for system in s:
|
|
305
307
|
if system not in config["systems"]:
|
|
306
|
-
console.error(system + " is not a valid option")
|
|
308
|
+
console.error(system + " is not a valid option", level=1)
|
|
307
309
|
else:
|
|
308
|
-
console.success("System " + system + " added correctly")
|
|
310
|
+
console.success("System " + system + " added correctly", level=1)
|
|
309
311
|
systems[system] = config["systems"][system]
|
|
310
312
|
line_jump()
|
|
311
313
|
config["systems"] = systems
|
|
@@ -496,7 +498,7 @@ def gitlab_config(pipeline, directory, alya_ref, alya_branch, flex=False, system
|
|
|
496
498
|
if project is not None:
|
|
497
499
|
config_project = open_json(project_file)
|
|
498
500
|
if project not in config_project:
|
|
499
|
-
console.error("Project " + project + " not found")
|
|
501
|
+
console.error("Project " + project + " not found", level=1)
|
|
500
502
|
raise RuntimeError("Project " + project + " not found")
|
|
501
503
|
config_project = config_project[project]
|
|
502
504
|
for platform in config_project["systems"][system]["platforms"]:
|
|
@@ -562,42 +564,41 @@ def ensure_initialized(root: Path = Path.cwd()) -> None:
|
|
|
562
564
|
)
|
|
563
565
|
|
|
564
566
|
def configure_help():
|
|
565
|
-
console.
|
|
566
|
-
console.
|
|
567
|
-
|
|
568
|
-
console.
|
|
569
|
-
console.
|
|
570
|
-
console.
|
|
571
|
-
console.
|
|
572
|
-
console.
|
|
573
|
-
console.
|
|
574
|
-
console.
|
|
575
|
-
console.
|
|
576
|
-
console.
|
|
577
|
-
console.
|
|
578
|
-
console.
|
|
579
|
-
console.
|
|
580
|
-
console.
|
|
581
|
-
console.
|
|
582
|
-
console.
|
|
583
|
-
console.
|
|
584
|
-
console.
|
|
585
|
-
console.
|
|
586
|
-
console.
|
|
587
|
-
console.
|
|
588
|
-
console.
|
|
589
|
-
console.
|
|
590
|
-
console.
|
|
591
|
-
console.
|
|
592
|
-
console.
|
|
593
|
-
console.
|
|
594
|
-
console.
|
|
595
|
-
console.
|
|
596
|
-
console.
|
|
597
|
-
console.
|
|
598
|
-
console.
|
|
599
|
-
console.
|
|
600
|
-
console.write("\t--reservation Enable reservation")
|
|
567
|
+
console.section("squidient configuration options")
|
|
568
|
+
console.detail("[argument] between brackets are optional")
|
|
569
|
+
console.option("-h | --help", "Show this information")
|
|
570
|
+
console.section("Global configuration")
|
|
571
|
+
console.option("-a | --all", "Configure the main options")
|
|
572
|
+
console.option("-r | --re", "Reconfigure the main options")
|
|
573
|
+
console.option("-A | --ALL", "Configure all the options")
|
|
574
|
+
console.option("-s | --systems [systems]", "Change the set of systems")
|
|
575
|
+
console.option("-b | --builds [builds]", "Change the set of builds")
|
|
576
|
+
console.option("-p | --path [path]", "Change the server path")
|
|
577
|
+
console.option("-k | --ssh-key [ssh-key]", "Define the SSH key path for the configured systems")
|
|
578
|
+
console.section("Alamak")
|
|
579
|
+
console.option("--alamak", "Enable alamak")
|
|
580
|
+
console.section("Git configuration")
|
|
581
|
+
console.option("-u | --git-user [git-user]", "Set up the git user (gitlab/https user)")
|
|
582
|
+
console.option("-br | --git-branch [git-branch]", "Select alya git branch/commit/tag")
|
|
583
|
+
console.section("Coverage configuration")
|
|
584
|
+
console.option("-c | --cc [tool]", "Define code coverage tool")
|
|
585
|
+
console.option("-cc-ref | --cc-ref [git-commit]", "Define code coverage reference commit")
|
|
586
|
+
console.section("GitLab configuration")
|
|
587
|
+
console.option("--gitlab", "Enable GitLab features")
|
|
588
|
+
console.option("--pipeline:[pipeline]", "Pipeline number")
|
|
589
|
+
console.option("--directory:[directory]", "Change directory name")
|
|
590
|
+
console.option("--branch:[reference]", "alya reference")
|
|
591
|
+
console.option("--alya:[reference]", "alya reference (priority inferior to branch)")
|
|
592
|
+
console.option("--flex", "Enable flex queue")
|
|
593
|
+
console.option("--install", "Enable install mode")
|
|
594
|
+
console.option("--system:[system]", "Choose system")
|
|
595
|
+
console.option("--platform:[platform]", "Choose platform for fast build")
|
|
596
|
+
console.option("--type:[type]", "Choose execution type")
|
|
597
|
+
console.option("--api:[api]", "Define GitLab API")
|
|
598
|
+
console.option("--alamak-branch:[branch]", "Define which alamak branch to use")
|
|
599
|
+
console.option("--alamak-revision:[revision]", "Define which alamak revision to use")
|
|
600
|
+
console.option("--notify-failures", "Notify benchmark authors when a benchmark fails")
|
|
601
|
+
console.option("--reservation", "Enable reservation")
|
|
601
602
|
line_jump()
|
|
602
603
|
|
|
603
604
|
|
|
@@ -613,11 +614,12 @@ def _run_cli(argv: Sequence[str]) -> int:
|
|
|
613
614
|
argument = ""
|
|
614
615
|
|
|
615
616
|
if base_config["fileFormat"] == -1:
|
|
616
|
-
console.
|
|
617
|
+
console.section("First use configuration")
|
|
618
|
+
console.warning("This is your first use of squidient; it requires a full configuration", level=1)
|
|
617
619
|
if len(argv) < 1:
|
|
618
620
|
option = "--all"
|
|
619
621
|
elif not is_option(argv[0], "-A", "--ALL") and not is_option(argv[0], "--gitlab", "--gitlab"):
|
|
620
|
-
console.warning("Ignoring arguments")
|
|
622
|
+
console.warning("Ignoring arguments", level=1)
|
|
621
623
|
option = "--all"
|
|
622
624
|
else:
|
|
623
625
|
option = argv[0]
|
|
@@ -797,7 +799,8 @@ def _run_cli(argv: Sequence[str]) -> int:
|
|
|
797
799
|
configure_help()
|
|
798
800
|
|
|
799
801
|
else:
|
|
800
|
-
console.
|
|
802
|
+
console.section("Configuration error")
|
|
803
|
+
console.error(option + " is not a valid argument", level=1)
|
|
801
804
|
configure_help()
|
|
802
805
|
|
|
803
806
|
return 0
|
|
@@ -111,10 +111,10 @@ class JobThread (threading.Thread):
|
|
|
111
111
|
def get_job_numbers(self):
|
|
112
112
|
job_number = 0
|
|
113
113
|
try:
|
|
114
|
-
#job_number = int(self._ssh.ssh("squeue | wc -l", system=self._system, platform=self._platform).stdout.strip()) - 1
|
|
115
114
|
job_number = max(len(self._ssh.ssh("squeue", system=self._system, platform=self._platform).stdout.split("\n")) - 2, 0)
|
|
116
115
|
except:
|
|
117
|
-
console.
|
|
116
|
+
console.group("System " + self._system + ", platform " + self._platform)
|
|
117
|
+
console.warning("Cannot determine running jobs", level=2)
|
|
118
118
|
logger.warning("Cannot determine job number")
|
|
119
119
|
logger.debug("Job number of " + self._platform + " retrieved with squeue: " + str(job_number))
|
|
120
120
|
return job_number
|
|
@@ -158,7 +158,8 @@ class Job:
|
|
|
158
158
|
dep = ""
|
|
159
159
|
if key_lock != "":
|
|
160
160
|
if asynchronous:
|
|
161
|
-
console.
|
|
161
|
+
console.section("Job submission")
|
|
162
|
+
console.error("You cannot launch an asynchronous job with a dependency", level=1)
|
|
162
163
|
raise Exception
|
|
163
164
|
lock_id = self._build_lock.get_lock(key_lock)
|
|
164
165
|
if lock_id != -1:
|
|
@@ -168,7 +169,8 @@ class Job:
|
|
|
168
169
|
self._output_queues[system][platform] = queue.Queue()
|
|
169
170
|
self._job_threads[system][platform] = []
|
|
170
171
|
if self._thread_number[system][platform] < 1:
|
|
171
|
-
console.
|
|
172
|
+
console.section("Job submission")
|
|
173
|
+
console.error("Thread number must be greater than 0", level=1)
|
|
172
174
|
raise Exception
|
|
173
175
|
for i in range(self._thread_number[system][platform]):
|
|
174
176
|
self._job_threads[system][platform].append(JobThread(self._ssh, system, platform,
|
|
@@ -82,7 +82,7 @@ class Git:
|
|
|
82
82
|
os.chdir(self._path)
|
|
83
83
|
except:
|
|
84
84
|
logger.error("Changing directory back failed")
|
|
85
|
-
raise RuntimeError("An internal error happened
|
|
85
|
+
raise RuntimeError("An internal error happened")
|
|
86
86
|
|
|
87
87
|
def clone_ssh(self):
|
|
88
88
|
self.cd_pop()
|
|
@@ -242,25 +242,22 @@ class Git:
|
|
|
242
242
|
"""
|
|
243
243
|
Clone or update the repository
|
|
244
244
|
"""
|
|
245
|
-
#print("Updating the repository")
|
|
246
245
|
self.test_git()
|
|
247
246
|
if not self._force_https:
|
|
248
247
|
if not self.update_ssh():
|
|
249
248
|
logger.info("SSH update failed")
|
|
250
|
-
#print("Update failed, cloning the tests repository")
|
|
251
249
|
if not self.clone_ssh():
|
|
252
250
|
logger.info("SSH clone failed")
|
|
253
|
-
raise RuntimeError("Git repository cannot be cloned using the ssh protocol
|
|
251
|
+
raise RuntimeError("Git repository cannot be cloned using the ssh protocol\nUse the option --https during the execution of squidient")
|
|
254
252
|
else:
|
|
255
253
|
if not self.update_https():
|
|
256
254
|
logger.info("HTTPS update failed")
|
|
257
|
-
# print("Update failed, cloning the tests repository")
|
|
258
255
|
if not self.clone_https():
|
|
259
256
|
logger.info("HTTPS clone failed")
|
|
260
257
|
raise RuntimeError("Git repository cannot be cloned")
|
|
261
258
|
console.step("Switching git directory to branch " + self._branch)
|
|
262
259
|
if not self.branch():
|
|
263
|
-
raise RuntimeError("Cannot switch to " + self._branch + " and rebase it
|
|
260
|
+
raise RuntimeError("Cannot switch to " + self._branch + " and rebase it")
|
|
264
261
|
|
|
265
262
|
def revision_short(self):
|
|
266
263
|
revision = ""
|