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.
Files changed (164) hide show
  1. {squidient-2.6.1 → squidient-2.7.0}/PKG-INFO +1 -1
  2. {squidient-2.6.1 → squidient-2.7.0}/pyproject.toml +1 -1
  3. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/benchmarkbuilder.py +3 -1
  4. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/builder.py +31 -20
  5. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/cli.py +12 -16
  6. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/codecoverage/codecoverage.py +1 -0
  7. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/codecoverage/intelcodecoverage.py +5 -3
  8. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/tolerance.py +1 -1
  9. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/configure.py +57 -54
  10. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/job.py +6 -4
  11. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/git.py +3 -6
  12. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/init.py +1 -1
  13. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/monitor/monitor.py +34 -28
  14. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/monitor/monitordb.py +1 -4
  15. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientbasereport.py +2 -1
  16. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientcasereport.py +1 -1
  17. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientdetailedreport.py +6 -4
  18. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/squidientfullreport.py +1 -1
  19. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/squidient.py +31 -35
  20. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/squidientmonitor.py +14 -16
  21. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/staging/staging.py +92 -73
  22. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/platform.py +2 -1
  23. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/queuetester.py +11 -6
  24. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/terraform/terraform.py +13 -10
  25. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarktester.py +33 -12
  26. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/instance.py +4 -2
  27. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/test.py +2 -4
  28. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/tester.py +35 -22
  29. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/message.py +45 -30
  30. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/utils.py +2 -2
  31. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/watchdog.py +9 -6
  32. {squidient-2.6.1 → squidient-2.7.0}/.gitignore +0 -0
  33. {squidient-2.6.1 → squidient-2.7.0}/LICENSE.txt +0 -0
  34. {squidient-2.6.1 → squidient-2.7.0}/README.md +0 -0
  35. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/__init__.py +0 -0
  36. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/benchmarkbuild.py +0 -0
  37. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/build.py +0 -0
  38. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/executablebuild.py +0 -0
  39. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/builds/predefinedbuild.py +0 -0
  40. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/codecoverage/gcovrcodecoverage.py +0 -0
  41. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/compare.py +0 -0
  42. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/comparewithdifftable.py +0 -0
  43. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/absolute.py +0 -0
  44. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/close.py +0 -0
  45. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/diff.py +0 -0
  46. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l1norm.py +0 -0
  47. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l1relative.py +0 -0
  48. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l2norm.py +0 -0
  49. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/l2relative.py +0 -0
  50. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/linfnorm.py +0 -0
  51. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/linfrelative.py +0 -0
  52. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/power.py +0 -0
  53. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/relative.py +0 -0
  54. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/scalartolerance.py +0 -0
  55. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compare/methods/vectortolerance.py +0 -0
  56. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/compilation/cmakeoptions.py +0 -0
  57. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/buildlock.py +0 -0
  58. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/ssh.py +0 -0
  59. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/connection/sshconfigchecker.py +0 -0
  60. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/.squidient-initialized +0 -0
  61. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-alamak.json +0 -0
  62. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-chemint.json +0 -0
  63. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-clang.json +0 -0
  64. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-commdom.json +0 -0
  65. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-gnu.json +0 -0
  66. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-intel.json +0 -0
  67. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-mumps.json +0 -0
  68. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-nvhpc.json +0 -0
  69. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/alya-config/cmake-talp.json +0 -0
  70. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/benchmarks/benchmarks.json +0 -0
  71. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/builds.json +0 -0
  72. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/cc.json +0 -0
  73. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/defaults.json +0 -0
  74. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/predefined-old.json +0 -0
  75. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/builds/predefined.json +0 -0
  76. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/configurations/projects.json +0 -0
  77. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/configurations/systems.json +0 -0
  78. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/configurations/tests.json +0 -0
  79. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/email/report.html +0 -0
  80. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/icons/big.png +0 -0
  81. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/icons/small.png +0 -0
  82. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/index.html +0 -0
  83. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/.gitignore +0 -0
  84. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small/.gitignore +0 -0
  85. {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
  86. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/t3.small.tf +0 -0
  87. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/terraform.tfvars +0 -0
  88. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/.gitignore +0 -0
  89. {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
  90. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/replace-var.sh +0 -0
  91. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/t3.small.tf +0 -0
  92. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/terraform.tfvars +0 -0
  93. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/.gitignore +0 -0
  94. {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
  95. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/t3.small.tf +0 -0
  96. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/terraform.tfvars +0 -0
  97. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/version/version.json +0 -0
  98. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/bb.html +0 -0
  99. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/benchmarks.html +0 -0
  100. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/btest.html +0 -0
  101. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/btests.html +0 -0
  102. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/builds.html +0 -0
  103. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/cc-gcovr.html +0 -0
  104. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/cc-intel.html +0 -0
  105. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/files.html +0 -0
  106. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/canceled.png +0 -0
  107. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/created.png +0 -0
  108. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/failed.png +0 -0
  109. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/failed_black.png +0 -0
  110. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/failed_green.png +0 -0
  111. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_cloud.png +0 -0
  112. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_config.png +0 -0
  113. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_ko.png +0 -0
  114. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/file_ok.png +0 -0
  115. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/skipped.png +0 -0
  116. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/squidient_logo.png +0 -0
  117. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/success.png +0 -0
  118. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/success_black.png +0 -0
  119. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/timeout.png +0 -0
  120. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/tolerance.png +0 -0
  121. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/warning.png +0 -0
  122. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/warning_black.png +0 -0
  123. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/png/warning_green.png +0 -0
  124. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/canceled.svg +0 -0
  125. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/created.svg +0 -0
  126. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/failed.svg +0 -0
  127. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/failed_black.svg +0 -0
  128. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/failed_green.svg +0 -0
  129. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/manual.svg +0 -0
  130. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/running.svg +0 -0
  131. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/skipped.svg +0 -0
  132. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/success.svg +0 -0
  133. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/success_black.svg +0 -0
  134. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/warning.svg +0 -0
  135. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/warning_black.svg +0 -0
  136. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/img/svg/warning_green.svg +0 -0
  137. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/index.html +0 -0
  138. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/jquery.dynatable.css +0 -0
  139. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/jquery.dynatable.js +0 -0
  140. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/perf.html +0 -0
  141. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/test.html +0 -0
  142. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/tests.html +0 -0
  143. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/testsuite.css +0 -0
  144. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/data/web/testsuite.js +0 -0
  145. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/definitions.py +0 -0
  146. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/deployment/modulegenerator.py +0 -0
  147. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/reports/monitorreport.py +0 -0
  148. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/reports/report.py +0 -0
  149. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/sqreport/__init__.py +0 -0
  150. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/partition.py +0 -0
  151. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/qos.py +0 -0
  152. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/reservation.py +0 -0
  153. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/system.py +0 -0
  154. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/systems/systemmanager.py +0 -0
  155. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarkfailurenotifier.py +0 -0
  156. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarkinstance.py +0 -0
  157. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/benchmarktest.py +0 -0
  158. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/testing/instancemerger.py +0 -0
  159. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/timers/__init__.py +0 -0
  160. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/timers/timer.py +0 -0
  161. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/arguments.py +0 -0
  162. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/lock.py +0 -0
  163. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/log.py +0 -0
  164. {squidient-2.6.1 → squidient-2.7.0}/src/squidient/utils/package.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: squidient
3
- Version: 2.6.1
3
+ Version: 2.7.0
4
4
  Summary: CI/CD framework for alya
5
5
  Project-URL: Homepage, https://alya.gitlab.bsc.es/alya/ci-cd/squidient
6
6
  Project-URL: Bug Tracker, https://alya.gitlab.bsc.es/alya/ci-cd/squidient/issues
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "squidient"
7
- version = "2.6.1"
7
+ version = "2.7.0"
8
8
  authors = [
9
9
  { name="Damien Dosimont", email="damien.dosimont@gmail.com" },
10
10
  ]
@@ -50,9 +50,11 @@ class BenchmarkBuilder(Builder):
50
50
  db=self._db)
51
51
 
52
52
  def build_report(self):
53
- console.section("Building monitor build report")
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.write("Elapsed time: {} minutes".format(int((time.time() - self._start_time) / 60)))
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.write(command(alamak_command, silent=True).stdout)
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.step("System " + system)
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.section("Preparing build " + build)
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.step("Submitting job")
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.write("squidient [option]")
34
- console.blank()
35
- console.write("\tsquidient help Print this help")
36
- console.blank()
37
- console.write("\tInitialization options:")
38
- console.write("\tsquidient init [directory] Initialize the directory")
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.blank()
44
- console.write("\tBuild and test options:")
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.blank()
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(str(e))
94
- console.error("Exception")
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.error("Merging has failed")
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.error("Code coverage has failed")
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.step("File " + f["name"])
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.write("Presets:")
227
- console.write("\t- all \n\t\tall the builds required to validate alya")
228
- console.write("\t- gpp \n\t\tall the marenostrum 5 GPP builds required to validate alya")
229
- console.write("\t- gnu \n\t\tall the gnu builds (gpp only)")
230
- console.write("\t- oneapi \n\t\tall the oneapi builds (gpp only)")
231
- console.write("\t- benchmarks \n\t\tall the benchmarks builds")
232
- console.write("Unitary:")
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.write("\t- " + build)
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.write("\t- " + cc)
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.write("\t- " + system)
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.write("squidient configuration options:")
566
- console.write("[argument] between brackets are optional")
567
- line_jump()
568
- console.write("\t-h | --help Show this information")
569
- console.write("Global Configuration")
570
- console.write("\t-a | --all Configure the main options")
571
- console.write("\t-r | --re Reconfigure the main options")
572
- console.write("\t-A | --ALL Configure all the options")
573
- console.write("\t-s | --systems [systems] Change the set of systems")
574
- console.write("\t-b | --builds [builds] Change the set of builds")
575
- console.write("\t-p | --path [path] Change the server path")
576
- console.write("\t-k | --ssh-key [ssh-key] Define the SSH key path for the configured systems")
577
- console.write("Alamak")
578
- console.write("\t--alamak Enable alamak")
579
- console.write("Git configuration")
580
- console.write("\t-u | --git-user [git-user] Set up the git user (gitlab/https user)")
581
- console.write("\t-br | --git-branch [git-branch] Select alya git branch/commit/tag")
582
- console.write("Coverage configuration")
583
- console.write("\t-c | -c [tool] Define code coverage tool")
584
- console.write("\t-cc-ref | --cc-ref [git-commit] Define code coverage reference commit")
585
- console.write("GitLab configuration")
586
- console.write("\t--gitlab Enable GitLab features")
587
- console.write("\t--pipeline:[pipeline] Pipeline number")
588
- console.write("\t--directory:[directory] Change directory name")
589
- console.write("\t--branch:[reference] alya reference")
590
- console.write("\t--alya:[reference] alya reference (priority inferior to branch)")
591
- console.write("\t--flex Enable flex queue")
592
- console.write("\t--install Enable install mode")
593
- console.write("\t--system:[system] Choose system")
594
- console.write("\t--platform:[platform] Choose platform for fast build")
595
- console.write("\t--type:[type] Choose execution type")
596
- console.write("\t--api:[api] Define GitLab API")
597
- console.write("\t--alamak-branch:[branch] Define which alamak branch to use")
598
- console.write("\t--alamak-revision:[revision] Define which alamak revision to use")
599
- console.write("\t--notify-failures Notify benchmark authors when a benchmark fails")
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.warning("This is your first use of squidient; it requires a full configuration")
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.error(option + " is not a valid argument")
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.warning("Cannot determine running jobs")
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.error("You cannot launch an asynchronous job with a dependency")
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.error("Thread number must be greater than 0")
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!\nUse the option --https during the execution of squidient.")
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 = ""
@@ -84,4 +84,4 @@ def init_squidient(dist_dir: str=".") -> None:
84
84
 
85
85
  if __name__ == "__main__":
86
86
  init_squidient()
87
- console.success("Copied squidient/data/* into current directory")
87
+ console.success("Copied squidient/data/* into current directory", level=1)