squidient 3.4.8__tar.gz → 4.0.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 (199) hide show
  1. squidient-4.0.0/PKG-INFO +49 -0
  2. squidient-4.0.0/README.md +31 -0
  3. {squidient-3.4.8 → squidient-4.0.0}/pyproject.toml +1 -1
  4. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/cli/monitoring.py +13 -0
  5. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/cli/staging.py +16 -0
  6. squidient-4.0.0/src/squidient/configuration/data_revision.py +92 -0
  7. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/configuration/generator.py +3 -1
  8. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/configure.py +9 -9
  9. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/definitions.py +1 -0
  10. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/deployment/initialization.py +3 -0
  11. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/exceptions.py +4 -0
  12. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/cases/instance.py +3 -1
  13. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/utils.py +0 -5
  14. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/workflows/base.py +3 -5
  15. squidient-3.4.8/PKG-INFO +0 -22
  16. squidient-3.4.8/README.md +0 -4
  17. squidient-3.4.8/src/squidient/data/version/version.json +0 -4
  18. {squidient-3.4.8 → squidient-4.0.0}/.gitignore +0 -0
  19. {squidient-3.4.8 → squidient-4.0.0}/LICENSE.txt +0 -0
  20. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/__init__.py +0 -0
  21. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/builds/benchmark_build_execution.py +0 -0
  22. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/builds/benchmark_build_orchestrator.py +0 -0
  23. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/builds/build_definition.py +0 -0
  24. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/builds/build_execution.py +0 -0
  25. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/builds/build_orchestrator.py +0 -0
  26. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/builds/build_presets.py +0 -0
  27. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/cli/__init__.py +0 -0
  28. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/cli/__main__.py +0 -0
  29. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/cli/main.py +0 -0
  30. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/cli/update.py +0 -0
  31. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/code_coverage/code_coverage.py +0 -0
  32. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/code_coverage/gcovr_code_coverage.py +0 -0
  33. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/code_coverage/intel_code_coverage.py +0 -0
  34. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/compare.py +0 -0
  35. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/compare_with_diff_table.py +0 -0
  36. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/absolute.py +0 -0
  37. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/close.py +0 -0
  38. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/diff.py +0 -0
  39. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/l1_norm.py +0 -0
  40. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/l1_relative.py +0 -0
  41. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/l2_norm.py +0 -0
  42. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/l2_relative.py +0 -0
  43. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/linf_norm.py +0 -0
  44. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/linf_relative.py +0 -0
  45. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/power.py +0 -0
  46. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/relative.py +0 -0
  47. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/scalar_tolerance.py +0 -0
  48. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/tolerance.py +0 -0
  49. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compare/methods/vector_tolerance.py +0 -0
  50. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/compilation/cmake_options.py +0 -0
  51. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/configuration/__init__.py +0 -0
  52. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/configuration/code_coverage.py +0 -0
  53. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/configuration/prompts.py +0 -0
  54. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/connection/job.py +0 -0
  55. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/connection/ssh.py +0 -0
  56. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/connection/ssh_config_checker.py +0 -0
  57. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/.squidient-initialized +0 -0
  58. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-alamak.json +0 -0
  59. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-chemint.json +0 -0
  60. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-clang.json +0 -0
  61. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-commdom.json +0 -0
  62. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-gnu.json +0 -0
  63. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-intel.json +0 -0
  64. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-mumps.json +0 -0
  65. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-nvhpc.json +0 -0
  66. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/alya-config/cmake-talp.json +0 -0
  67. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/benchmarks/benchmarks.json +0 -0
  68. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/builds/builds.json +0 -0
  69. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/builds/cc.json +0 -0
  70. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/builds/defaults.json +0 -0
  71. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/builds/predefined-old.json +0 -0
  72. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/builds/predefined.json +0 -0
  73. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/configurations/projects.json +0 -0
  74. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/configurations/systems.json +0 -0
  75. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/configurations/tests.json +0 -0
  76. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/email/report.html +0 -0
  77. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/icons/big.png +0 -0
  78. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/icons/small.png +0 -0
  79. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/index.html +0 -0
  80. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/.gitignore +0 -0
  81. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/.gitignore +0 -0
  82. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/cloud-init-slurm-fedora.sh +0 -0
  83. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/t3.small.tf +0 -0
  84. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small/t3.small/terraform.tfvars +0 -0
  85. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/.gitignore +0 -0
  86. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/cloud-init-slurm-fedora.sh +0 -0
  87. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/replace-var.sh +0 -0
  88. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/t3.small.tf +0 -0
  89. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x2/t3.small/terraform.tfvars +0 -0
  90. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/.gitignore +0 -0
  91. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/cloud-init-slurm-fedora.sh +0 -0
  92. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/t3.small.tf +0 -0
  93. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x3/t3.small/terraform.tfvars +0 -0
  94. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x6/t3.small/.gitignore +0 -0
  95. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x6/t3.small/cloud-init-slurm-fedora.sh +0 -0
  96. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x6/t3.small/t3.small.tf +0 -0
  97. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/terraform/aws-ec2-t3.small-x6/t3.small/terraform.tfvars +0 -0
  98. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/btest.html +0 -0
  99. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/cc-gcovr.html +0 -0
  100. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/cc-intel.html +0 -0
  101. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/files.html +0 -0
  102. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/canceled.png +0 -0
  103. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/created.png +0 -0
  104. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/failed.png +0 -0
  105. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/failed_black.png +0 -0
  106. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/failed_green.png +0 -0
  107. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/file_cloud.png +0 -0
  108. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/file_config.png +0 -0
  109. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/file_ko.png +0 -0
  110. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/file_ok.png +0 -0
  111. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/skipped.png +0 -0
  112. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/squidient_logo.png +0 -0
  113. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/success.png +0 -0
  114. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/success_black.png +0 -0
  115. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/timeout.png +0 -0
  116. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/tolerance.png +0 -0
  117. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/warning.png +0 -0
  118. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/warning_black.png +0 -0
  119. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/png/warning_green.png +0 -0
  120. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/canceled.svg +0 -0
  121. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/created.svg +0 -0
  122. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/failed.svg +0 -0
  123. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/failed_black.svg +0 -0
  124. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/failed_green.svg +0 -0
  125. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/manual.svg +0 -0
  126. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/running.svg +0 -0
  127. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/skipped.svg +0 -0
  128. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/success.svg +0 -0
  129. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/success_black.svg +0 -0
  130. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/warning.svg +0 -0
  131. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/warning_black.svg +0 -0
  132. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/img/svg/warning_green.svg +0 -0
  133. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/index.html +0 -0
  134. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/jquery.dynatable.css +0 -0
  135. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/jquery.dynatable.js +0 -0
  136. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/monitoring.html +0 -0
  137. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/monitoring_build.html +0 -0
  138. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/monitoring_test.html +0 -0
  139. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/perf.html +0 -0
  140. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/staging_build.html +0 -0
  141. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/staging_test.html +0 -0
  142. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/test.html +0 -0
  143. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/testsuite.css +0 -0
  144. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/data/web/testsuite.js +0 -0
  145. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/deployment/module_generator.py +0 -0
  146. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/monitoring/build_phase.py +0 -0
  147. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/monitoring/full_workflow.py +0 -0
  148. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/monitoring/monitoring.py +0 -0
  149. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/monitoring/monitoring_db.py +0 -0
  150. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/monitoring/notification_failures.py +0 -0
  151. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/monitoring/test_phase.py +0 -0
  152. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/__init__.py +0 -0
  153. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/cases/__init__.py +0 -0
  154. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/cases/base.py +0 -0
  155. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/cases/case.py +0 -0
  156. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/cases/detailed.py +0 -0
  157. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/cases/full.py +0 -0
  158. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/monitoring/__init__.py +0 -0
  159. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/monitoring/report.py +0 -0
  160. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/reports/report.py +0 -0
  161. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/build_phase.py +0 -0
  162. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/execution_warning.py +0 -0
  163. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/full_workflow.py +0 -0
  164. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/report_cleaner.py +0 -0
  165. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/report_transfer.py +0 -0
  166. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/staging.py +0 -0
  167. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/test_phase.py +0 -0
  168. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/staging/test_relauncher.py +0 -0
  169. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/systems/partition.py +0 -0
  170. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/systems/platform.py +0 -0
  171. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/systems/qos.py +0 -0
  172. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/systems/queue_tester.py +0 -0
  173. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/systems/reservation.py +0 -0
  174. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/systems/system.py +0 -0
  175. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/systems/system_manager.py +0 -0
  176. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/terraform/terraform.py +0 -0
  177. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/benchmarks/__init__.py +0 -0
  178. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/benchmarks/failure_notifier.py +0 -0
  179. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/benchmarks/instance.py +0 -0
  180. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/benchmarks/test_case.py +0 -0
  181. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/benchmarks/test_orchestrator.py +0 -0
  182. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/cases/__init__.py +0 -0
  183. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/cases/instance_merger.py +0 -0
  184. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/cases/test_case.py +0 -0
  185. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/testing/test_orchestrator.py +0 -0
  186. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/timers/__init__.py +0 -0
  187. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/timers/timer.py +0 -0
  188. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/arguments.py +0 -0
  189. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/gitlab.py +0 -0
  190. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/lock.py +0 -0
  191. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/log.py +0 -0
  192. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/message.py +0 -0
  193. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/package.py +0 -0
  194. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/utils/watchdog.py +0 -0
  195. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/version_control/__init__.py +0 -0
  196. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/version_control/git_repository.py +0 -0
  197. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/workflows/__init__.py +0 -0
  198. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/workflows/code_coverage.py +0 -0
  199. {squidient-3.4.8 → squidient-4.0.0}/src/squidient/workflows/locks.py +0 -0
@@ -0,0 +1,49 @@
1
+ Metadata-Version: 2.4
2
+ Name: squidient
3
+ Version: 4.0.0
4
+ Summary: CI/CD framework for alya
5
+ Project-URL: Homepage, https://alya.gitlab.bsc.es/alya/ci-cd/squidient
6
+ Project-URL: Bug Tracker, https://alya.gitlab.bsc.es/alya/ci-cd/squidient/issues
7
+ Author-email: Damien Dosimont <damien.dosimont@gmail.com>
8
+ License-File: LICENSE.txt
9
+ Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
10
+ Classifier: Operating System :: POSIX :: Linux
11
+ Classifier: Programming Language :: Python :: 3
12
+ Requires-Python: >=3.7
13
+ Requires-Dist: importlib-resources; python_version < '3.9'
14
+ Requires-Dist: lxml
15
+ Requires-Dist: mariasql>=5
16
+ Requires-Dist: packaging>=21.3
17
+ Description-Content-Type: text/markdown
18
+
19
+ # Squidient
20
+
21
+ Squidient is a scheduler for testing, benchmarking and deploying HPC programs on SLURM machines.
22
+
23
+ ## Refreshing Workspace Data
24
+
25
+ Squidient records a fingerprint of its packaged `data/` in `version/data.json`
26
+ when `squidient init .` completes. A completed full configuration records
27
+ that fingerprint in `configuration.json.dataRevision`. Staging and monitoring stop
28
+ with exit code 1 if either differs from the installed package, including for older
29
+ workspaces without this metadata. No confirmation prompt is displayed. The check
30
+ runs before Terraform provisioning, remote connections, or job submission.
31
+ A package release that leaves `data/` unchanged does not require a refresh.
32
+
33
+ Refreshing is explicit: back up any customized workspace files and configuration
34
+ first, then run:
35
+
36
+ ```sh
37
+ squidient init .
38
+ squidient configure --all
39
+ ```
40
+
41
+ `init` overwrites packaged workspace files but does not regenerate
42
+ `configuration.json`. `configure --all` regenerates the configuration; reapply
43
+ your local settings as necessary. Partial reconfiguration does not mark an old
44
+ configuration as current. The check never overwrites customizations automatically.
45
+ Help and cleanup commands, including `terraform stop`, remain available.
46
+ The former `fileFormat` counter and `version/version.json` are no longer used;
47
+ legacy configurations must be refreshed before workflow execution when their
48
+ data revision cannot be established.
49
+
@@ -0,0 +1,31 @@
1
+ # Squidient
2
+
3
+ Squidient is a scheduler for testing, benchmarking and deploying HPC programs on SLURM machines.
4
+
5
+ ## Refreshing Workspace Data
6
+
7
+ Squidient records a fingerprint of its packaged `data/` in `version/data.json`
8
+ when `squidient init .` completes. A completed full configuration records
9
+ that fingerprint in `configuration.json.dataRevision`. Staging and monitoring stop
10
+ with exit code 1 if either differs from the installed package, including for older
11
+ workspaces without this metadata. No confirmation prompt is displayed. The check
12
+ runs before Terraform provisioning, remote connections, or job submission.
13
+ A package release that leaves `data/` unchanged does not require a refresh.
14
+
15
+ Refreshing is explicit: back up any customized workspace files and configuration
16
+ first, then run:
17
+
18
+ ```sh
19
+ squidient init .
20
+ squidient configure --all
21
+ ```
22
+
23
+ `init` overwrites packaged workspace files but does not regenerate
24
+ `configuration.json`. `configure --all` regenerates the configuration; reapply
25
+ your local settings as necessary. Partial reconfiguration does not mark an old
26
+ configuration as current. The check never overwrites customizations automatically.
27
+ Help and cleanup commands, including `terraform stop`, remain available.
28
+ The former `fileFormat` counter and `version/version.json` are no longer used;
29
+ legacy configurations must be refreshed before workflow execution when their
30
+ data revision cannot be established.
31
+
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "squidient"
7
- version = "3.4.8"
7
+ version = "4.0.0"
8
8
  authors = [
9
9
  { name="Damien Dosimont", email="damien.dosimont@gmail.com" },
10
10
  ]
@@ -28,6 +28,8 @@ from ..monitoring.monitoring import Monitoring
28
28
  from ..terraform.terraform import Terraform
29
29
  from .staging import IgnoredKeyboardInterrupt, darwin_bad_ssh, additional_options, install_interrupt_handlers
30
30
  from ..connection.ssh_config_checker import test_darwin_ssh_config, darwin_ssh_config_file
31
+ from ..configuration.data_revision import require_current_data
32
+ from ..exceptions import ConfigurationDataError
31
33
  from ..utils.message import console, error
32
34
  from ..utils.utils import write_text_file
33
35
 
@@ -62,6 +64,9 @@ def _run_cli(argv: Sequence[str]) -> int:
62
64
 
63
65
  arguments.parse(args)
64
66
 
67
+ if not (len(argv) >= 2 and argv[0] == "terraform" and argv[1] == "stop"):
68
+ require_current_data()
69
+
65
70
  terraform = Terraform()
66
71
  destroy_terraform = False
67
72
 
@@ -108,6 +113,14 @@ def _run_cli(argv: Sequence[str]) -> int:
108
113
 
109
114
  return 0
110
115
 
116
+ except ConfigurationDataError as failure:
117
+ console.section("Configuration error")
118
+ message, *instructions = str(failure).splitlines()
119
+ console.error(message, level=1)
120
+ for instruction in instructions:
121
+ console.detail(instruction, level=2)
122
+ return 1
123
+
111
124
  except KeyboardInterrupt:
112
125
  with IgnoredKeyboardInterrupt():
113
126
  try:
@@ -28,6 +28,8 @@ from typing import Optional, Sequence
28
28
  from ..utils.arguments import Arguments
29
29
  from ..staging.staging import Staging
30
30
  from ..connection.ssh_config_checker import test_darwin_ssh_config, darwin_ssh_config_file
31
+ from ..configuration.data_revision import require_current_data
32
+ from ..exceptions import ConfigurationDataError
31
33
  from ..terraform.terraform import Terraform
32
34
  from ..timers import Timer
33
35
  from ..utils.message import console, error
@@ -112,6 +114,12 @@ def _run_cli(argv: Sequence[str]) -> int:
112
114
 
113
115
  arguments.parse(args)
114
116
 
117
+ is_cleanup = argv[0] == "clean" or (
118
+ len(argv) >= 2 and argv[0] == "terraform" and argv[1] == "stop"
119
+ )
120
+ if not is_cleanup:
121
+ require_current_data()
122
+
115
123
  terraform = Terraform()
116
124
  destroy_terraform = False
117
125
 
@@ -183,6 +191,14 @@ def _run_cli(argv: Sequence[str]) -> int:
183
191
 
184
192
  return 0
185
193
 
194
+ except ConfigurationDataError as failure:
195
+ console.section("Configuration error")
196
+ message, *instructions = str(failure).splitlines()
197
+ console.error(message, level=1)
198
+ for instruction in instructions:
199
+ console.detail(instruction, level=2)
200
+ return 1
201
+
186
202
  except KeyboardInterrupt:
187
203
  # Try to mimic the original cleanup, but keep it safe if cicd/terraform is None.
188
204
  with IgnoredKeyboardInterrupt():
@@ -0,0 +1,92 @@
1
+ """Track the packaged data used to initialize and configure a workspace."""
2
+
3
+ import hashlib
4
+ import json
5
+ import logging
6
+ from pathlib import Path
7
+
8
+ import squidient
9
+
10
+ from ..definitions import config_file, data_revision_file
11
+ from ..exceptions import ConfigurationDataError
12
+
13
+ try:
14
+ from importlib.resources import files as ir_files
15
+ except ImportError:
16
+ from importlib_resources import files as ir_files
17
+
18
+
19
+ DATA_REVISION_CONFIG_KEY = "dataRevision"
20
+ logger = logging.getLogger("squidient")
21
+
22
+
23
+ def packaged_data_revision():
24
+ root = ir_files(squidient).joinpath("data")
25
+ pending = [(root, "")]
26
+ resources = []
27
+ while pending:
28
+ node, relative = pending.pop()
29
+ if node.is_dir():
30
+ pending.extend(
31
+ (child, relative + "/" + child.name)
32
+ for child in node.iterdir()
33
+ if child.name != "__pycache__" and not child.name.endswith((".pyc", ".pyo"))
34
+ )
35
+ else:
36
+ resources.append((relative, node))
37
+ digest = hashlib.sha256()
38
+ for relative, resource in sorted(resources, key=lambda item: item[0]):
39
+ file_digest = hashlib.sha256()
40
+ with resource.open("rb") as stream:
41
+ for block in iter(lambda: stream.read(1024 * 1024), b""):
42
+ file_digest.update(block)
43
+ digest.update(relative.encode("utf-8") + b"\0" + file_digest.digest())
44
+ return "sha256:" + digest.hexdigest()
45
+
46
+
47
+ def workspace_data_revision(directory="."):
48
+ try:
49
+ with (Path(directory) / data_revision_file).open(encoding="utf-8") as stream:
50
+ metadata = json.load(stream)
51
+ except (OSError, ValueError):
52
+ return None
53
+ if not isinstance(metadata, dict):
54
+ return None
55
+ revision = metadata.get(DATA_REVISION_CONFIG_KEY)
56
+ if not isinstance(revision, str) or not revision.startswith("sha256:"):
57
+ return None
58
+ if len(revision) != 71 or any(character not in "0123456789abcdef" for character in revision[7:]):
59
+ return None
60
+ return revision
61
+
62
+
63
+ def record_workspace_data_revision(directory, revision):
64
+ path = Path(directory) / data_revision_file
65
+ path.parent.mkdir(parents=True, exist_ok=True)
66
+ temporary = path.with_suffix(".json.tmp")
67
+ temporary.write_text(json.dumps({DATA_REVISION_CONFIG_KEY: revision}, indent=4) + "\n", encoding="utf-8")
68
+ temporary.replace(path)
69
+
70
+
71
+ def require_current_data(config=None, directory="."):
72
+ if config is None:
73
+ from ..utils.utils import open_critical_json
74
+ config = open_critical_json(Path(directory) / config_file)
75
+ installed_revision = packaged_data_revision()
76
+ initialized_revision = workspace_data_revision(directory)
77
+ configured_revision = config.get(DATA_REVISION_CONFIG_KEY)
78
+ logger.debug("Configuration data revisions: installed=%s, initialized=%s, configured=%s",
79
+ installed_revision, initialized_revision, configured_revision)
80
+ if initialized_revision != installed_revision:
81
+ raise ConfigurationDataError(
82
+ "Workspace data are outdated or unversioned for the installed squidient. Execution stopped.\n"
83
+ "Back up customized workspace files and configuration.json before refreshing:\n"
84
+ "squidient init .\n"
85
+ "squidient configure --all"
86
+ )
87
+ if configured_revision != installed_revision:
88
+ raise ConfigurationDataError(
89
+ "configuration.json was generated from outdated or unversioned data. Execution stopped.\n"
90
+ "Back up configuration.json, then regenerate it with:\n"
91
+ "squidient configure --all"
92
+ )
@@ -1,4 +1,5 @@
1
1
  from .code_coverage import CODE_COVERAGE_CONFIG_KEY
2
+ from .data_revision import DATA_REVISION_CONFIG_KEY
2
3
 
3
4
 
4
5
  def build_default_configuration(
@@ -38,7 +39,8 @@ def build_default_configuration(
38
39
  config["staging"] = {}
39
40
  config["staging"]["builds"] = build_presets["fast"]["gpp"]
40
41
  # various
41
- config["fileFormat"] = -1
42
+ # Record the data revision only after full configuration succeeds.
43
+ config[DATA_REVISION_CONFIG_KEY] = None
42
44
  config["tag"] = "master"
43
45
  config["installation"] = False
44
46
  config["flex"] = False
@@ -27,6 +27,7 @@ from typing import Optional, Sequence, Dict, Any
27
27
  from .builds.build_definition import BuildDefinition
28
28
  from .builds.build_presets import BuildPresets
29
29
  from .configuration.code_coverage import get_code_coverage_config, set_code_coverage_config
30
+ from .configuration.data_revision import DATA_REVISION_CONFIG_KEY, workspace_data_revision
30
31
  from .configuration.generator import generate_default_configuration
31
32
  from .configuration.prompts import (
32
33
  ask,
@@ -48,7 +49,7 @@ from .definitions import (
48
49
  system_file,
49
50
  )
50
51
  from .utils.message import console
51
- from .utils.utils import config_file_format, exist_json, is_option, open_json, save_json
52
+ from .utils.utils import exist_json, is_option, open_json, save_json
52
53
 
53
54
  from pathlib import Path
54
55
 
@@ -332,9 +333,9 @@ def set_benchmarks(provided_value=""):
332
333
  save_json(config, config_file)
333
334
 
334
335
 
335
- def set_version():
336
+ def complete_configuration():
336
337
  config = open_json(config_file)
337
- config["fileFormat"] = config_file_format()
338
+ config[DATA_REVISION_CONFIG_KEY] = workspace_data_revision() or "unknown"
338
339
  save_json(config, config_file)
339
340
 
340
341
 
@@ -476,8 +477,8 @@ def gitlab_config(pipeline, directory, alya_ref, alya_branch, flex=False, system
476
477
  console.section("Setting reservation")
477
478
  set_reservation(reservation)
478
479
 
479
- console.section("Setting version")
480
- set_version()
480
+ console.section("Recording configuration data revision")
481
+ complete_configuration()
481
482
 
482
483
 
483
484
  def _project_benchmark_queues_are_enabled(project_name, build_selection_type):
@@ -612,7 +613,7 @@ def _run_cli(argv: Sequence[str]) -> int:
612
613
  base_config = open_json(config_file)
613
614
  argument = ""
614
615
 
615
- if base_config["fileFormat"] == -1:
616
+ if DATA_REVISION_CONFIG_KEY in base_config and base_config[DATA_REVISION_CONFIG_KEY] is None:
616
617
  console.section("First use configuration")
617
618
  console.warning("This is your first use of squidient; it requires a full configuration", level=1)
618
619
  if len(argv) < 1:
@@ -770,7 +771,7 @@ def _run_cli(argv: Sequence[str]) -> int:
770
771
  set_builds()
771
772
  set_code_coverage()
772
773
  set_benchmarks()
773
- set_version()
774
+ complete_configuration()
774
775
 
775
776
  elif is_option(option, "-r", "--re"):
776
777
  set_alya_git_branch()
@@ -778,7 +779,6 @@ def _run_cli(argv: Sequence[str]) -> int:
778
779
  set_builds()
779
780
  set_code_coverage()
780
781
  set_benchmarks()
781
- set_version()
782
782
 
783
783
  elif is_option(option, "-A", "--ALL"):
784
784
  generate_json()
@@ -794,7 +794,7 @@ def _run_cli(argv: Sequence[str]) -> int:
794
794
  set_builds()
795
795
  set_code_coverage()
796
796
  set_benchmarks()
797
- set_version()
797
+ complete_configuration()
798
798
 
799
799
  elif is_option(option, "--alamak", "--alamak"):
800
800
  set_alamak(True)
@@ -41,6 +41,7 @@ max_jobs_staging = 100
41
41
  max_jobs_monitoring = 50
42
42
  check_jobs_every_normal = 30
43
43
  config_file = "configuration.json"
44
+ data_revision_file = "version/data.json"
44
45
  build_file = "builds/builds.json"
45
46
  default_file = "builds/defaults.json"
46
47
  cc_file = "builds/cc.json"
@@ -6,6 +6,7 @@ from typing import Union
6
6
 
7
7
  import squidient
8
8
 
9
+ from ..configuration.data_revision import packaged_data_revision, record_workspace_data_revision
9
10
  from ..utils.message import console
10
11
 
11
12
  try:
@@ -75,11 +76,13 @@ def _copy_traversable_tree(src, dst: Path, overwrite: bool = False) -> None:
75
76
  shutil.copyfileobj(src_f, dst_f)
76
77
 
77
78
  def init_squidient(dist_dir: str = ".") -> None:
79
+ revision = packaged_data_revision()
78
80
  Path(dist_dir + "/squidient").mkdir(parents=True, exist_ok=True)
79
81
  copy_packaged_tree(squidient, "data", dist_dir + "/.", overwrite=True)
80
82
  copy_packaged_tree(squidient, "reports", dist_dir + "/squidient/reports", overwrite=True)
81
83
  copy_packaged_tree(squidient, "compare", dist_dir + "/squidient/compare", overwrite=True)
82
84
  copy_packaged_tree(squidient, "utils", dist_dir + "/squidient/utils", overwrite=True)
85
+ record_workspace_data_revision(dist_dir, revision)
83
86
 
84
87
 
85
88
  if __name__ == "__main__":
@@ -20,3 +20,7 @@
20
20
 
21
21
  class WorkflowFailure(RuntimeError):
22
22
  pass
23
+
24
+
25
+ class ConfigurationDataError(RuntimeError):
26
+ """Workspace data must be refreshed before executing a workflow."""
@@ -101,7 +101,9 @@ class Instance:
101
101
 
102
102
  try:
103
103
  if self.eval_timeout(self._timeout):
104
- raise RuntimeError
104
+ logger.debug("Clamping test %s timeout from %s to %s",
105
+ self._id, self._timeout, test_max_timeout)
106
+ self._timeout = test_max_timeout
105
107
  except (RuntimeError, ValueError):
106
108
  self._timeout = test_default_timeout
107
109
 
@@ -298,11 +298,6 @@ def copy_json(source, destination):
298
298
  copyfile(source, destination)
299
299
 
300
300
 
301
- def config_file_format():
302
- data = open_json("version/version.json")
303
- return data["fileFormat"]
304
-
305
-
306
301
  def json2js(variable, json):
307
302
  js = json.replace(".json", ".js")
308
303
  with open(json) as source, open(js, "w") as destination:
@@ -26,6 +26,7 @@ import os
26
26
  from ..connection.job import Job
27
27
  from ..connection.ssh import SSH
28
28
  from ..configuration.code_coverage import normalize_code_coverage_config
29
+ from ..configuration.data_revision import require_current_data
29
30
  from ..definitions import benchmark_file, config_file
30
31
  from ..reports.report import Report
31
32
  from ..systems.system_manager import SystemManager
@@ -33,7 +34,7 @@ from ..timers import Timer
33
34
  from ..utils.lock import Lock
34
35
  from ..utils.log import logging_context
35
36
  from ..utils.message import console, print_line, stagingbanner
36
- from ..utils.utils import config_file_format, open_critical_json
37
+ from ..utils.utils import open_critical_json
37
38
  from ..utils.watchdog import Watchdog
38
39
 
39
40
 
@@ -108,10 +109,7 @@ class Workflow:
108
109
 
109
110
  def check_configuration_status(self):
110
111
  console.section("Checking configuration file")
111
- if self._config["fileFormat"] != config_file_format():
112
- console.error("Your " + config_file + " version is obsolete; please configure squidient again", level=1)
113
- from ..exceptions import WorkflowFailure
114
- raise WorkflowFailure("Configuration file version is obsolete")
112
+ require_current_data(self._config)
115
113
  console.success(config_file + " is compatible", level=1)
116
114
 
117
115
  def clean_locks(self):
squidient-3.4.8/PKG-INFO DELETED
@@ -1,22 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: squidient
3
- Version: 3.4.8
4
- Summary: CI/CD framework for alya
5
- Project-URL: Homepage, https://alya.gitlab.bsc.es/alya/ci-cd/squidient
6
- Project-URL: Bug Tracker, https://alya.gitlab.bsc.es/alya/ci-cd/squidient/issues
7
- Author-email: Damien Dosimont <damien.dosimont@gmail.com>
8
- License-File: LICENSE.txt
9
- Classifier: License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)
10
- Classifier: Operating System :: POSIX :: Linux
11
- Classifier: Programming Language :: Python :: 3
12
- Requires-Python: >=3.7
13
- Requires-Dist: importlib-resources; python_version < '3.9'
14
- Requires-Dist: lxml
15
- Requires-Dist: mariasql>=5
16
- Requires-Dist: packaging>=21.3
17
- Description-Content-Type: text/markdown
18
-
19
- # Squidient
20
-
21
- Squidient is a scheduler for testing, benchmarking and deploying HPC programs on SLURM machines.
22
-
squidient-3.4.8/README.md DELETED
@@ -1,4 +0,0 @@
1
- # Squidient
2
-
3
- Squidient is a scheduler for testing, benchmarking and deploying HPC programs on SLURM machines.
4
-
@@ -1,4 +0,0 @@
1
- {
2
- "fileFormat": 20,
3
- "version": "2"
4
- }
File without changes
File without changes