argus-alm 0.15.9__tar.gz → 0.15.10__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 (423) hide show
  1. {argus_alm-0.15.9 → argus_alm-0.15.10}/PKG-INFO +2 -1
  2. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/_version.py +3 -3
  3. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/base.py +25 -2
  4. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/driver_matrix_tests/client.py +4 -2
  5. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/generic/client.py +4 -2
  6. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/sct/client.py +4 -2
  7. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/sirenada/client.py +4 -2
  8. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_alm.egg-info/PKG-INFO +2 -1
  9. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_alm.egg-info/SOURCES.txt +4 -2
  10. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_alm.egg-info/requires.txt +1 -0
  11. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_web.example.yaml +8 -0
  12. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/export_data.py +20 -2
  13. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/import_data.py +34 -1
  14. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/api_usage.md +8 -0
  15. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/dev-setup.md +4 -5
  16. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/generic_results.md +3 -0
  17. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Github/GithubIssue.svelte +20 -15
  18. argus_alm-0.15.9/frontend/Github/GithubIssues.svelte → argus_alm-0.15.10/frontend/Github/Issues.svelte +192 -50
  19. argus_alm-0.15.9/frontend/Github/GithubIssuesCopyModal.svelte → argus_alm-0.15.10/frontend/Github/IssuesCopyModal.svelte +21 -15
  20. argus_alm-0.15.10/frontend/Jira/JiraIssue.svelte +363 -0
  21. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/ReleaseDashboard.svelte +2 -2
  22. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/IssueTab.svelte +3 -3
  23. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/PytestWidget/PytestResultRow.svelte +1 -1
  24. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/SummaryWidget/RunIssues.svelte +3 -3
  25. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGithubIssues.svelte +2 -2
  26. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/argus.css +39 -0
  27. {argus_alm-0.15.9 → argus_alm-0.15.10}/pyproject.toml +2 -1
  28. {argus_alm-0.15.9 → argus_alm-0.15.10}/pytest-argus-reporter/pytest_argus_reporter.py +5 -1
  29. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/css/styles.css +17 -0
  30. argus_alm-0.15.10/templates/email/partials/generic_results.html.j2 +46 -0
  31. {argus_alm-0.15.9 → argus_alm-0.15.10}/uv.lock +62 -0
  32. {argus_alm-0.15.9 → argus_alm-0.15.10}/.dockerignore +0 -0
  33. {argus_alm-0.15.9 → argus_alm-0.15.10}/.envrc +0 -0
  34. {argus_alm-0.15.9 → argus_alm-0.15.10}/.eslintrc.js +0 -0
  35. {argus_alm-0.15.9 → argus_alm-0.15.10}/.github/workflows/.gitkeep +0 -0
  36. {argus_alm-0.15.9 → argus_alm-0.15.10}/.github/workflows/lint.yml +0 -0
  37. {argus_alm-0.15.9 → argus_alm-0.15.10}/.github/workflows/release.yml +0 -0
  38. {argus_alm-0.15.9 → argus_alm-0.15.10}/.github/workflows/test.yml +0 -0
  39. {argus_alm-0.15.9 → argus_alm-0.15.10}/.gitignore +0 -0
  40. {argus_alm-0.15.9 → argus_alm-0.15.10}/.pre-commit-config.yaml +0 -0
  41. {argus_alm-0.15.9 → argus_alm-0.15.10}/.prettierrc.js +0 -0
  42. {argus_alm-0.15.9 → argus_alm-0.15.10}/AGENTS.md +0 -0
  43. {argus_alm-0.15.9 → argus_alm-0.15.10}/Dockerfile +0 -0
  44. {argus_alm-0.15.9 → argus_alm-0.15.10}/LICENSE +0 -0
  45. {argus_alm-0.15.9 → argus_alm-0.15.10}/MANIFEST.in +0 -0
  46. {argus_alm-0.15.9 → argus_alm-0.15.10}/README.md +0 -0
  47. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/__init__.py +0 -0
  48. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/__init__.py +0 -0
  49. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/driver_matrix_tests/cli.py +0 -0
  50. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/generic/cli.py +0 -0
  51. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/generic_result.py +0 -0
  52. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/client/sct/types.py +0 -0
  53. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/common/__init__.py +0 -0
  54. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/common/email.py +0 -0
  55. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/common/enums.py +0 -0
  56. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/common/sct_types.py +0 -0
  57. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus/common/sirenada_types.py +0 -0
  58. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus.yaml +0 -0
  59. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/README.md +0 -0
  60. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/deployment/argusai_event_similarity_processor.service +0 -0
  61. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/event_similarity_processor.py +0 -0
  62. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/logs/.gitignore +0 -0
  63. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/pyproject.toml +0 -0
  64. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/utils/__init__.py +0 -0
  65. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/utils/event_message_sanitizer.py +0 -0
  66. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/utils/scylla_connection.py +0 -0
  67. {argus_alm-0.15.9 → argus_alm-0.15.10}/argusAI/uv.lock +0 -0
  68. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_alm.egg-info/dependency_links.txt +0 -0
  69. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_alm.egg-info/entry_points.txt +0 -0
  70. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_alm.egg-info/top_level.txt +0 -0
  71. {argus_alm-0.15.9 → argus_alm-0.15.10}/argus_backend.py +0 -0
  72. {argus_alm-0.15.9 → argus_alm-0.15.10}/commitlint.config.js +0 -0
  73. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/.gitignore +0 -0
  74. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/alpha-config/cassandra-rackdc.properties +0 -0
  75. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/alpha-config/machine_image_configured +0 -0
  76. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/alpha-config/scylla.yaml +0 -0
  77. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/alpha-data/.gitignore +0 -0
  78. {argus_alm-0.15.9 → argus_alm-0.15.10}/dev-db/docker-compose.yaml +0 -0
  79. {argus_alm-0.15.9 → argus_alm-0.15.10}/docker/config/nginx-docker.conf +0 -0
  80. {argus_alm-0.15.9 → argus_alm-0.15.10}/docker/config/supervisord.conf +0 -0
  81. {argus_alm-0.15.9 → argus_alm-0.15.10}/docker-entrypoint.sh +0 -0
  82. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/argus_status_page.md +0 -0
  83. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/argus_status_page_diagram.jpg +0 -0
  84. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/config/argus.nginx.conf +0 -0
  85. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/config/argus.service +0 -0
  86. {argus_alm-0.15.9 → argus_alm-0.15.10}/docs/pypi-guide.md +0 -0
  87. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/AdminPanel.svelte +0 -0
  88. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/AdminPanelWelcome.svelte +0 -0
  89. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/BatchTestMover.svelte +0 -0
  90. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/GroupCreator.svelte +0 -0
  91. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ReleaseCreator.svelte +0 -0
  92. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ReleaseDeletionConfirmationPopup.svelte +0 -0
  93. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ReleaseEditor.svelte +0 -0
  94. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ReleaseManager.svelte +0 -0
  95. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ReleaseManagerGroup.svelte +0 -0
  96. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ReleaseManagerTest.svelte +0 -0
  97. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/TestCreator.svelte +0 -0
  98. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/UserManager.svelte +0 -0
  99. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ViewListItem.svelte +0 -0
  100. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ViewSelectItem.svelte +0 -0
  101. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ViewWidget.svelte +0 -0
  102. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/AdminPanel/ViewsManager.svelte +0 -0
  103. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Alert.js +0 -0
  104. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Alerts/AlertMessage.svelte +0 -0
  105. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Alerts/AlertWidget.svelte +0 -0
  106. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/ApiUtils.js +0 -0
  107. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/ArgusNotification.ts +0 -0
  108. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/AssigneeSelector.svelte +0 -0
  109. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/AssigneeUtils.js +0 -0
  110. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/DateUtils.js +0 -0
  111. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/DriverMatrixTypes.ts +0 -0
  112. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/IssueDestinations.js +0 -0
  113. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/JenkinsSettingsHelp.js +0 -0
  114. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/ModalWindow.svelte +0 -0
  115. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/PluginDispatch.js +0 -0
  116. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/PluginNames.js +0 -0
  117. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/RunUtils.js +0 -0
  118. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/SelectUtils.js +0 -0
  119. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/StateManagement.js +0 -0
  120. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/TestStatus.js +0 -0
  121. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/TextUtils.js +0 -0
  122. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/UserTypes.ts +0 -0
  123. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/UserUtils.js +0 -0
  124. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Common/ViewTypes.js +0 -0
  125. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Debug/FlashDebugComponent.svelte +0 -0
  126. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Discussion/Comment.svelte +0 -0
  127. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Discussion/CommentEditor.svelte +0 -0
  128. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Discussion/MarkedMentionExtension.js +0 -0
  129. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Discussion/MentionSelector.svelte +0 -0
  130. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Discussion/UserProfile.svelte +0 -0
  131. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/JobsList.svelte +0 -0
  132. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/Login.svelte +0 -0
  133. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/Notification.svelte +0 -0
  134. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/NotificationCommentWrapper.svelte +0 -0
  135. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/NotificationCounter.svelte +0 -0
  136. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/NotificationSender.svelte +0 -0
  137. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/NotificationTestRunWrapper.svelte +0 -0
  138. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/NotificationsReader.svelte +0 -0
  139. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/PlannedJob.svelte +0 -0
  140. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/PlannedJobs.svelte +0 -0
  141. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/ProfileJob.svelte +0 -0
  142. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/ProfileJobs.svelte +0 -0
  143. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/ProfileJobsTab.svelte +0 -0
  144. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/ProfileSchedules.svelte +0 -0
  145. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/User.svelte +0 -0
  146. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/UserSelection.svelte +0 -0
  147. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Profile/ViewUserResolver.svelte +0 -0
  148. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/AssigneeFilter.svelte +0 -0
  149. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/FlatViewHelper.svelte +0 -0
  150. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/GroupedViewHelper.svelte +0 -0
  151. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/ReleaseActivity.svelte +0 -0
  152. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/ReleaseGithubIssues.svelte +0 -0
  153. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/TestDashboard.svelte +0 -0
  154. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/TestDashboardFlatView.svelte +0 -0
  155. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/TestDashboardGroup.svelte +0 -0
  156. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/TestDashboardTest.svelte +0 -0
  157. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/TestPopoutSelector.svelte +0 -0
  158. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleaseDashboard/TestWithIssuesCard.svelte +0 -0
  159. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/CommentTableRow.svelte +0 -0
  160. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/DutyPlanner.svelte +0 -0
  161. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/EntityReplacer.svelte +0 -0
  162. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleasePlan.svelte +0 -0
  163. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleasePlanCopyForm.svelte +0 -0
  164. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleasePlanCreator.svelte +0 -0
  165. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleasePlanEditor.svelte +0 -0
  166. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleasePlanTable.svelte +0 -0
  167. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleasePlanner.svelte +0 -0
  168. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleasePlannerGridView.svelte +0 -0
  169. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ReleaseScheduler.svelte +0 -0
  170. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/Schedule.svelte +0 -0
  171. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/ScheduleTable.svelte +0 -0
  172. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/ReleasePlanner/SearchBar.svelte +0 -0
  173. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stats/ChartStats.svelte +0 -0
  174. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stats/NumberStats.svelte +0 -0
  175. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stats/ProgressBarStats.svelte +0 -0
  176. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stats/ReleaseStats.svelte +0 -0
  177. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stats/StatsFetcher.svelte +0 -0
  178. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stores/AlertStore.js +0 -0
  179. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stores/AssigneeSubscriber.js +0 -0
  180. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stores/SingleTestRunSubscriber.js +0 -0
  181. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stores/TestRunsSubscriber.js +0 -0
  182. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stores/UserlistSubscriber.js +0 -0
  183. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Stores/WorkspaceStore.js +0 -0
  184. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Teams/TeamCreateForm.svelte +0 -0
  185. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Teams/TeamDetail.svelte +0 -0
  186. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Teams/TeamList.svelte +0 -0
  187. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Teams/TeamManager.svelte +0 -0
  188. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Teams/TeamMember.svelte +0 -0
  189. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Teams/TeamShort.svelte +0 -0
  190. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Teams/TeamUtils.ts +0 -0
  191. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/ActivityTab.svelte +0 -0
  192. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/ArtifactRow.svelte +0 -0
  193. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/ArtifactTab.svelte +0 -0
  194. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Components/Cell.svelte +0 -0
  195. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Components/Filters.svelte +0 -0
  196. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Components/GraphFilters.svelte +0 -0
  197. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Components/ResultTable.svelte +0 -0
  198. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Components/ScreenshotModal.svelte +0 -0
  199. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/DriverMatrixBreakdown.svelte +0 -0
  200. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/DriverMatrixRunInfo.svelte +0 -0
  201. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/DriverMatrixTestCollection.svelte +0 -0
  202. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/DriverMatrixTestRun.svelte +0 -0
  203. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/DriverMatrixTestSuites.svelte +0 -0
  204. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/EventsTab.svelte +0 -0
  205. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Generic/GenericTestRun.svelte +0 -0
  206. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Generic/GenericTestRunInfo.svelte +0 -0
  207. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Generic/Subtest.js +0 -0
  208. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/HeartbeatIndicator.svelte +0 -0
  209. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/IssueTemplate.svelte +0 -0
  210. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/Build.js +0 -0
  211. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/BuildConfirmationDialog.svelte +0 -0
  212. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/BuildStartPlaceholder.svelte +0 -0
  213. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/BuildSuccessPlaceholder.svelte +0 -0
  214. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/CheckParam.svelte +0 -0
  215. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/CloneCreatePlaceholder.svelte +0 -0
  216. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/CloneSuccess.svelte +0 -0
  217. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/CloneTargetSelector.svelte +0 -0
  218. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/DummyCheckParam.svelte +0 -0
  219. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/DummySelectParam.svelte +0 -0
  220. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/JenkinsBuildModal.svelte +0 -0
  221. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/JenkinsCloneModal.svelte +0 -0
  222. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/LoadTargetsPlaceholder.svelte +0 -0
  223. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/ModalError.svelte +0 -0
  224. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/ParamFetchPlaceholder.svelte +0 -0
  225. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/ParameterEditor.svelte +0 -0
  226. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/SCTParameterWizard.svelte +0 -0
  227. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/SelectParam.svelte +0 -0
  228. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/StringParam.svelte +0 -0
  229. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/TextParam.svelte +0 -0
  230. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Jenkins/WizardUnavailable.svelte +0 -0
  231. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/NemesisData.svelte +0 -0
  232. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/NemesisReason.svelte +0 -0
  233. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/NemesisTable.svelte +0 -0
  234. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/PackagesInfo.svelte +0 -0
  235. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Pytest/DtestTab.svelte +0 -0
  236. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Pytest/PytestItem.svelte +0 -0
  237. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Pytest/PytestRun.svelte +0 -0
  238. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Pytest/PytestTab.svelte +0 -0
  239. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Pytest/index.js +0 -0
  240. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Pytest/types.ts +0 -0
  241. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/RawEvent.svelte +0 -0
  242. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/ResourcesInfo.svelte +0 -0
  243. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/ResultsGraph.svelte +0 -0
  244. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/ResultsGraphs.svelte +0 -0
  245. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/ResultsTab.svelte +0 -0
  246. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/RunAssigneeSelector.svelte +0 -0
  247. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/RunInvestigationStatusButton.svelte +0 -0
  248. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/RunStatusButton.svelte +0 -0
  249. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCT/SctEvent.svelte +0 -0
  250. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCT/SctEvents.svelte +0 -0
  251. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCT/SctNemesis.svelte +0 -0
  252. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCTSubTests/Gemini/GeminiTabBodyComponent.svelte +0 -0
  253. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCTSubTests/Gemini/GeminiTabComponent.svelte +0 -0
  254. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCTSubTests/Performance/PerformanceTabBodyComponent.svelte +0 -0
  255. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCTSubTests/Performance/PerformanceTabComponent.svelte +0 -0
  256. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/SCTSubTests/Subtest.js +0 -0
  257. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Screenshots.svelte +0 -0
  258. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Sirenada/SirenadaIssueTemplate.svelte +0 -0
  259. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Sirenada/SirenadaRunInfo.svelte +0 -0
  260. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Sirenada/SirenadaTestBreakdown.svelte +0 -0
  261. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/Sirenada/SirenadaTestRun.svelte +0 -0
  262. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/StructuredEvent.svelte +0 -0
  263. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/TestRun.svelte +0 -0
  264. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/TestRunComments.svelte +0 -0
  265. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/TestRunInfo.svelte +0 -0
  266. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/jUnitChart.svelte +0 -0
  267. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/TestRun/jUnitResults.svelte +0 -0
  268. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Utils/IntersectionObserver.svelte +0 -0
  269. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/ViewDashboard.svelte +0 -0
  270. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/ViewSelect.svelte +0 -0
  271. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/WidgetSettingTypes/CheckValue.svelte +0 -0
  272. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/WidgetSettingTypes/IntegerValue.svelte +0 -0
  273. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/WidgetSettingTypes/MultiSelectValue.svelte +0 -0
  274. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/WidgetSettingTypes/MultiStringValue.svelte +0 -0
  275. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/WidgetSettingTypes/StringValue.svelte +0 -0
  276. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/GraphsWidget/GraphsWidget.svelte +0 -0
  277. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/PytestWidget/PytestCalendarSelector.svelte +0 -0
  278. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/PytestWidget/PytestCollapseHelper.svelte +0 -0
  279. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/PytestWidget/PytestFlatHelper.svelte +0 -0
  280. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/PytestWidget/PytestOverviewWidget.svelte +0 -0
  281. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/PytestWidget/PytestTableWidget.svelte +0 -0
  282. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/PytestWidget/ViewPytestOverview.svelte +0 -0
  283. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/SummaryWidget/SummaryWidget.svelte +0 -0
  284. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/AssigneeCell.svelte +0 -0
  285. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/Filters.svelte +0 -0
  286. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/Interfaces.ts +0 -0
  287. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/InvestigationStatusCell.svelte +0 -0
  288. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/IssuesCell.svelte +0 -0
  289. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/NemesisTable.svelte +0 -0
  290. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/PaginatedTable.svelte +0 -0
  291. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/StackTracePreview.svelte +0 -0
  292. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/StatusBadge.svelte +0 -0
  293. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/StatusCell.svelte +0 -0
  294. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats/TestRunTable.svelte +0 -0
  295. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewGraphedStats.svelte +0 -0
  296. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewHighlights/ActionItem.svelte +0 -0
  297. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewHighlights/Comment.svelte +0 -0
  298. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewHighlights/HighlightItem.svelte +0 -0
  299. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewHighlights/ViewHighlights.svelte +0 -0
  300. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewNemesisStats.svelte +0 -0
  301. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewReleaseStats.svelte +0 -0
  302. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewTestDashboard.svelte +0 -0
  303. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/Views/Widgets/ViewUnsupportedPlaceholder.svelte +0 -0
  304. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/AssigneeList.svelte +0 -0
  305. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/JobConfigureModal.svelte +0 -0
  306. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/RunGroup.svelte +0 -0
  307. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/RunRelease.svelte +0 -0
  308. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/Test.svelte +0 -0
  309. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/TestRunDispatcher.svelte +0 -0
  310. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/TestRuns.svelte +0 -0
  311. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/TestRunsMessage.svelte +0 -0
  312. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/TestRunsPanel.svelte +0 -0
  313. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/TestRunsSelector.svelte +0 -0
  314. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/UnknownTest.svelte +0 -0
  315. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/WorkArea/WorkArea.svelte +0 -0
  316. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/admin-panel.js +0 -0
  317. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/argus.js +0 -0
  318. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/duty-planner.js +0 -0
  319. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/flashDebug.js +0 -0
  320. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/font-awesome.css +0 -0
  321. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/font-awesome.js +0 -0
  322. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/fonts/NotoSans-Bold.ttf +0 -0
  323. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/fonts/NotoSans-BoldItalic.ttf +0 -0
  324. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/fonts/NotoSans-Italic.ttf +0 -0
  325. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/fonts/NotoSans-Regular.ttf +0 -0
  326. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/fonts/OFL.txt +0 -0
  327. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/fonts/noto.css +0 -0
  328. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/login.js +0 -0
  329. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/markdownOptions.js +0 -0
  330. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/notification-counter.js +0 -0
  331. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/plan.js +0 -0
  332. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/profile-jobs.js +0 -0
  333. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/profile-notifications.js +0 -0
  334. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/profile-schedules.js +0 -0
  335. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/release-dashboard.js +0 -0
  336. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/release-page.js +0 -0
  337. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/release-planner.js +0 -0
  338. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/release-scheduler.js +0 -0
  339. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/run-by-plugin.js +0 -0
  340. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/teams.js +0 -0
  341. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/test-run-details.js +0 -0
  342. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/test-runs-breakout.js +0 -0
  343. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/test-runs-standalone.js +0 -0
  344. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/view-dashboard.js +0 -0
  345. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/view-user-resolver.js +0 -0
  346. {argus_alm-0.15.9 → argus_alm-0.15.10}/frontend/work-area.js +0 -0
  347. {argus_alm-0.15.9 → argus_alm-0.15.10}/package.json +0 -0
  348. {argus_alm-0.15.9 → argus_alm-0.15.10}/profile/.gitkeep +0 -0
  349. {argus_alm-0.15.9 → argus_alm-0.15.10}/public/argus.png +0 -0
  350. {argus_alm-0.15.9 → argus_alm-0.15.10}/public/no-user-picture.png +0 -0
  351. {argus_alm-0.15.9 → argus_alm-0.15.10}/pytest-argus-reporter/.envrc +0 -0
  352. {argus_alm-0.15.9 → argus_alm-0.15.10}/pytest-argus-reporter/LICENSE +0 -0
  353. {argus_alm-0.15.9 → argus_alm-0.15.10}/pytest-argus-reporter/MANIFEST.in +0 -0
  354. {argus_alm-0.15.9 → argus_alm-0.15.10}/pytest-argus-reporter/README.md +0 -0
  355. {argus_alm-0.15.9 → argus_alm-0.15.10}/pytest-argus-reporter/noxfile.py +0 -0
  356. {argus_alm-0.15.9 → argus_alm-0.15.10}/pytest-argus-reporter/pyproject.toml +0 -0
  357. {argus_alm-0.15.9 → argus_alm-0.15.10}/rollup.config.js +0 -0
  358. {argus_alm-0.15.9 → argus_alm-0.15.10}/run_with_profiler.py +0 -0
  359. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/argus-status-page/index.html +0 -0
  360. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/argus-status-page/js/status.js +0 -0
  361. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/argus-status-page/static/app.css +0 -0
  362. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/argus-status-page/static/argus.png +0 -0
  363. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/argus-status-page/static/scylla.png +0 -0
  364. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/argus-status-page/status.json +0 -0
  365. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/migration/migration_2023-04-07.py +0 -0
  366. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/migration/migration_2024-04-14.py +0 -0
  367. {argus_alm-0.15.9 → argus_alm-0.15.10}/scripts/migration/migration_2025-07-18.py +0 -0
  368. {argus_alm-0.15.9 → argus_alm-0.15.10}/setup.cfg +0 -0
  369. {argus_alm-0.15.9 → argus_alm-0.15.10}/start_argus.sh +0 -0
  370. {argus_alm-0.15.9 → argus_alm-0.15.10}/storage/profile_pictures/.gitignore +0 -0
  371. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/admin/base.html.j2 +0 -0
  372. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/admin/index.html.j2 +0 -0
  373. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/auth/login.html.j2 +0 -0
  374. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/auth/register.html.j2 +0 -0
  375. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/base.html.j2 +0 -0
  376. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/dashboard.html.j2 +0 -0
  377. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/duty_planner.html.j2 +0 -0
  378. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/base.html.j2 +0 -0
  379. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/cloud.html.j2 +0 -0
  380. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/custom_html.html.j2 +0 -0
  381. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/custom_table.html.j2 +0 -0
  382. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/events.html.j2 +0 -0
  383. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/header.html.j2 +0 -0
  384. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/logs.html.j2 +0 -0
  385. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/main.html.j2 +0 -0
  386. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/nemesis.html.j2 +0 -0
  387. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/packages.html.j2 +0 -0
  388. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/screenshots.html.j2 +0 -0
  389. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/email/partials/unsupported.html.j2 +0 -0
  390. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/error.html.j2 +0 -0
  391. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/flash_debug.html.j2 +0 -0
  392. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/groups.html.j2 +0 -0
  393. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/home.html.j2 +0 -0
  394. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/assigned.html.j2 +0 -0
  395. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/assigned_email.html.j2 +0 -0
  396. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/email_mention.html.j2 +0 -0
  397. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/mention.html.j2 +0 -0
  398. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/view_action_item_assigned.html.j2 +0 -0
  399. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/view_action_item_assigned_email.html.j2 +0 -0
  400. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/view_highlight_mention.html.j2 +0 -0
  401. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/notifications/view_highlight_mention_email.html.j2 +0 -0
  402. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/partials/nav_bar.html.j2 +0 -0
  403. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/plan_dashboard.html.j2 +0 -0
  404. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/profile.html.j2 +0 -0
  405. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/profile_jobs.html.j2 +0 -0
  406. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/profile_notifications.html.j2 +0 -0
  407. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/profile_schedules.html.j2 +0 -0
  408. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/release_dashboard.html.j2 +0 -0
  409. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/release_planner.html.j2 +0 -0
  410. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/release_schedule.html.j2 +0 -0
  411. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/releases.html.j2 +0 -0
  412. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/run_view_by_plugin.html.j2 +0 -0
  413. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/runs.html.j2 +0 -0
  414. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/standalone_test_with_runs.html.j2 +0 -0
  415. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/teams.html.j2 +0 -0
  416. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/test_run.html.j2 +0 -0
  417. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/test_runs.html.j2 +0 -0
  418. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/tests.html.j2 +0 -0
  419. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/view_dashboard.html.j2 +0 -0
  420. {argus_alm-0.15.9 → argus_alm-0.15.10}/templates/views.html.j2 +0 -0
  421. {argus_alm-0.15.9 → argus_alm-0.15.10}/tsconfig.json +0 -0
  422. {argus_alm-0.15.9 → argus_alm-0.15.10}/uwsgi.ini +0 -0
  423. {argus_alm-0.15.9 → argus_alm-0.15.10}/yarn.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: argus-alm
3
- Version: 0.15.9
3
+ Version: 0.15.10
4
4
  Summary: Argus
5
5
  Author-email: Alexey Kartashov <alexey.kartashov@scylladb.com>, Łukasz Sójka <lukasz.sojka@scylladb.com>
6
6
  License-Expression: Apache-2.0
@@ -24,6 +24,7 @@ Requires-Dist: python-jenkins>=1.7.0; extra == "web-backend"
24
24
  Requires-Dist: python-slugify~=6.1.1; extra == "web-backend"
25
25
  Requires-Dist: pygithub>=2.6.1; extra == "web-backend"
26
26
  Requires-Dist: boto3~=1.38.9; extra == "web-backend"
27
+ Requires-Dist: jira>=3.10.5; extra == "web-backend"
27
28
  Requires-Dist: prometheus-flask-exporter>=0.23.2; extra == "web-backend"
28
29
  Provides-Extra: docker-image
29
30
  Requires-Dist: supervisor~=4.2.4; extra == "docker-image"
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '0.15.9'
32
- __version_tuple__ = version_tuple = (0, 15, 9)
31
+ __version__ = version = '0.15.10'
32
+ __version_tuple__ = version_tuple = (0, 15, 10)
33
33
 
34
- __commit_id__ = commit_id = 'g18aee71c2'
34
+ __commit_id__ = commit_id = 'gfb79cf01d'
@@ -5,6 +5,8 @@ from typing import Any, Type
5
5
  from uuid import UUID
6
6
 
7
7
  import requests
8
+ from requests.adapters import HTTPAdapter
9
+ from urllib3.util.retry import Retry
8
10
 
9
11
  from argus.common.enums import TestStatus
10
12
  from argus.client.generic_result import GenericResultTable
@@ -33,11 +35,30 @@ class ArgusClient:
33
35
  FETCH_RESULTS = "/testrun/$type/$id/fetch_results"
34
36
  FINALIZE = "/testrun/$type/$id/finalize"
35
37
 
36
- def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
38
+ def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
39
+ timeout: int = 60, max_retries: int = 3) -> None:
37
40
  self._auth_token = auth_token
38
41
  self._base_url = base_url
39
42
  self._api_ver = api_version
43
+ self._timeout = timeout
40
44
  self.session = requests.Session()
45
+
46
+ # Configure retry strategy
47
+ retry_strategy = Retry(
48
+ total=max_retries,
49
+ connect=max_retries,
50
+ read=max_retries,
51
+ status=0,
52
+ backoff_factor=1,
53
+ status_forcelist=(),
54
+ allowed_methods=["GET"],
55
+ )
56
+
57
+ # Mount adapter with retry strategy for both http and https
58
+ adapter = HTTPAdapter(max_retries=retry_strategy)
59
+ self.session.mount("http://", adapter)
60
+ self.session.mount("https://", adapter)
61
+
41
62
  if extra_headers:
42
63
  self.session.headers.update(extra_headers)
43
64
 
@@ -101,7 +122,8 @@ class ArgusClient:
101
122
  response = self.session.get(
102
123
  url=url,
103
124
  params=params,
104
- headers=self.request_headers
125
+ headers=self.request_headers,
126
+ timeout=self._timeout
105
127
  )
106
128
  LOGGER.debug("GET Response: %s %s", response.status_code, response.url)
107
129
 
@@ -124,6 +146,7 @@ class ArgusClient:
124
146
  params=params,
125
147
  json=body,
126
148
  headers=self.request_headers,
149
+ timeout=self._timeout
127
150
  )
128
151
  LOGGER.debug("POST Response: %s %s", response.status_code, response.url)
129
152
 
@@ -12,8 +12,10 @@ class ArgusDriverMatrixClient(ArgusClient):
12
12
  SUBMIT_DRIVER_FAILURE = "/driver_matrix/result/fail"
13
13
  SUBMIT_ENV = "/driver_matrix/env/submit"
14
14
 
15
- def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
16
- super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
15
+ def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
16
+ timeout: int = 60, max_retries: int = 3) -> None:
17
+ super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
18
+ timeout=timeout, max_retries=max_retries)
17
19
  self.run_id = run_id
18
20
 
19
21
  def submit_driver_matrix_run(self, job_name: str, job_url: str) -> None:
@@ -12,8 +12,10 @@ class ArgusGenericClient(ArgusClient):
12
12
  class Routes(ArgusClient.Routes):
13
13
  TRIGGER_JOBS = "/planning/plan/trigger"
14
14
 
15
- def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
16
- super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
15
+ def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
16
+ timeout: int = 180, max_retries: int = 3) -> None:
17
+ super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
18
+ timeout=timeout, max_retries=max_retries)
17
19
 
18
20
  def submit_generic_run(self, build_id: str, run_id: str, started_by: str, build_url: str, sub_type: str = None, scylla_version: str | None = None):
19
21
  request_body = {
@@ -30,8 +30,10 @@ class ArgusSCTClient(ArgusClient):
30
30
  SUBMIT_JUNIT_REPORT = "/sct/$id/junit/submit"
31
31
  SUBMIT_EMAIL = "/testrun/report/email"
32
32
 
33
- def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
34
- super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
33
+ def __init__(self, run_id: UUID, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
34
+ timeout: int = 60, max_retries: int = 3) -> None:
35
+ super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
36
+ timeout=timeout, max_retries=max_retries)
35
37
  self.run_id = run_id
36
38
 
37
39
  def submit_sct_run(self, job_name: str, job_url: str, started_by: str, commit_id: str,
@@ -45,9 +45,11 @@ class ArgusSirenadaClient(ArgusClient):
45
45
  "skipped": "skipped"
46
46
  }
47
47
 
48
- def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None) -> None:
48
+ def __init__(self, auth_token: str, base_url: str, api_version="v1", extra_headers: dict | None = None,
49
+ timeout: int = 60, max_retries: int = 3) -> None:
49
50
  self.results_path: Path | None = None
50
- super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers)
51
+ super().__init__(auth_token, base_url, api_version, extra_headers=extra_headers,
52
+ timeout=timeout, max_retries=max_retries)
51
53
 
52
54
  def _verify_required_files_exist(self, results_path: Path):
53
55
  assert (results_path / self._junit_xml_filename).exists(), "Missing jUnit XML results file!"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: argus-alm
3
- Version: 0.15.9
3
+ Version: 0.15.10
4
4
  Summary: Argus
5
5
  Author-email: Alexey Kartashov <alexey.kartashov@scylladb.com>, Łukasz Sójka <lukasz.sojka@scylladb.com>
6
6
  License-Expression: Apache-2.0
@@ -24,6 +24,7 @@ Requires-Dist: python-jenkins>=1.7.0; extra == "web-backend"
24
24
  Requires-Dist: python-slugify~=6.1.1; extra == "web-backend"
25
25
  Requires-Dist: pygithub>=2.6.1; extra == "web-backend"
26
26
  Requires-Dist: boto3~=1.38.9; extra == "web-backend"
27
+ Requires-Dist: jira>=3.10.5; extra == "web-backend"
27
28
  Requires-Dist: prometheus-flask-exporter>=0.23.2; extra == "web-backend"
28
29
  Provides-Extra: docker-image
29
30
  Requires-Dist: supervisor~=4.2.4; extra == "docker-image"
@@ -148,8 +148,9 @@ frontend/Discussion/MarkedMentionExtension.js
148
148
  frontend/Discussion/MentionSelector.svelte
149
149
  frontend/Discussion/UserProfile.svelte
150
150
  frontend/Github/GithubIssue.svelte
151
- frontend/Github/GithubIssues.svelte
152
- frontend/Github/GithubIssuesCopyModal.svelte
151
+ frontend/Github/Issues.svelte
152
+ frontend/Github/IssuesCopyModal.svelte
153
+ frontend/Jira/JiraIssue.svelte
153
154
  frontend/Profile/JobsList.svelte
154
155
  frontend/Profile/Login.svelte
155
156
  frontend/Profile/Notification.svelte
@@ -401,6 +402,7 @@ templates/email/partials/cloud.html.j2
401
402
  templates/email/partials/custom_html.html.j2
402
403
  templates/email/partials/custom_table.html.j2
403
404
  templates/email/partials/events.html.j2
405
+ templates/email/partials/generic_results.html.j2
404
406
  templates/email/partials/header.html.j2
405
407
  templates/email/partials/logs.html.j2
406
408
  templates/email/partials/main.html.j2
@@ -33,4 +33,5 @@ python-jenkins>=1.7.0
33
33
  python-slugify~=6.1.1
34
34
  pygithub>=2.6.1
35
35
  boto3~=1.38.9
36
+ jira>=3.10.5
36
37
  prometheus-flask-exporter>=0.23.2
@@ -50,6 +50,14 @@ GITHUB_REQUIRED_ORGANIZATIONS:
50
50
  # at least one is required for user to successfully authenticate
51
51
  - myorg
52
52
  - otherorg
53
+
54
+ # JIRA Server address
55
+ JIRA_SERVER: https://your.jira.instance
56
+ # Email of the service user
57
+ JIRA_EMAIL: user@your.jira.instance
58
+ # API Token of the service user
59
+ JIRA_TOKEN: base64Token
60
+
53
61
  JENKINS_URL: https://your_jenkins_hostname
54
62
  JENKINS_USER: user
55
63
  JENKINS_API_TOKEN_NAME: Optional
@@ -3,7 +3,7 @@ from pathlib import Path
3
3
  from collections import defaultdict
4
4
 
5
5
  from argus.backend.models.web import ArgusRelease, ArgusTest, ArgusGroup
6
- from argus.backend.plugins.sct.testrun import SCTTestRun
6
+ from argus.backend.plugins.sct.testrun import SCTTestRun, SCTEvent
7
7
  from argus.backend.db import ScyllaCluster
8
8
  from argus.backend.util.encoders import ArgusJSONEncoder
9
9
  from argus.backend.models.result import (
@@ -12,10 +12,11 @@ from argus.backend.models.result import (
12
12
  ArgusBestResultData,
13
13
  ArgusGraphView,
14
14
  )
15
+ from argus.backend.models.github_issue import GithubIssue, IssueLink
15
16
 
16
17
  db = ScyllaCluster.get()
17
18
 
18
- release_name = "scylla-enterprise" # change name here
19
+ release_name = "scylla-2025.4" # change name here
19
20
  dest = Path(__file__).parent / "sample_data" / release_name
20
21
  dest.mkdir(parents=True, exist_ok=True)
21
22
  release = ArgusRelease.get(name=release_name)
@@ -77,3 +78,20 @@ for run in SCTTestRun.filter(release_id=release.id).all():
77
78
  for partition_key, results in result_data_by_partition.items():
78
79
  print(f"Saving generic result data for partition {partition_key}")
79
80
  (dest / f"generic_result_data_{partition_key}.json").write_text(json.dumps(results, cls=ArgusJSONEncoder))
81
+ # Export SCTEvent for each run
82
+ events = list(SCTEvent.filter(run_id=run.id).allow_filtering().all())
83
+ if events:
84
+ print(f"Saving {len(events)} SCT events for run {run.id}")
85
+ (dest / f"sct_event_{run.id}.json").write_text(json.dumps(events, cls=ArgusJSONEncoder))
86
+
87
+ # Export IssueLink for each run
88
+ issue_links = list(IssueLink.filter(run_id=run.id).allow_filtering().all())
89
+ if issue_links:
90
+ print(f"Saving {len(issue_links)} issue links for run {run.id}")
91
+ (dest / f"issue_link_{run.id}.json").write_text(json.dumps(issue_links, cls=ArgusJSONEncoder))
92
+
93
+ print("getting github issues data (full table)")
94
+ all_issues = list(GithubIssue.all())
95
+ if all_issues:
96
+ print(f"Saving {len(all_issues)} GitHub issues")
97
+ (dest / "github_issues.json").write_text(json.dumps(all_issues, cls=ArgusJSONEncoder))
@@ -9,7 +9,7 @@ db = ScyllaCluster.get()
9
9
  if "127.0.0.10" in Config.CONFIG.get("SCYLLA_CONTACT_POINTS"):
10
10
  raise Exception("This script should not be run on local DB!")
11
11
 
12
- release_name = "scylla-enterprise" # change name here
12
+ release_name = "scylla-2025.4" # change name here
13
13
  dest = Path(__file__).parent / "sample_data" / release_name
14
14
 
15
15
  print("importing releases")
@@ -90,3 +90,36 @@ for file in dest.glob("generic_result_data_*.json"):
90
90
  print(
91
91
  f"Saved generic result data for run {result_data['run_id']}, test {result_data['test_id']}, name {result_data['name']}"
92
92
  )
93
+
94
+ print("importing SCT events")
95
+ statement = db.prepare("INSERT INTO sct_event JSON ?")
96
+ for file in dest.glob("sct_event_*.json"):
97
+ with file.open(mode="rt", encoding="utf-8") as src:
98
+ events = json.loads(src.read())
99
+ for event in events:
100
+ event_raw = json.dumps(event)
101
+ db.session.execute(statement, parameters=(event_raw,))
102
+ run_id = file.stem.replace("sct_event_", "")
103
+ print(f"Saved {len(events)} SCT events for run {run_id}")
104
+
105
+ print("importing issue links")
106
+ statement = db.prepare("INSERT INTO issue_link JSON ?")
107
+ for file in dest.glob("issue_link_*.json"):
108
+ with file.open(mode="rt", encoding="utf-8") as src:
109
+ issue_links = json.loads(src.read())
110
+ for issue_link in issue_links:
111
+ issue_link_raw = json.dumps(issue_link)
112
+ db.session.execute(statement, parameters=(issue_link_raw,))
113
+ run_id = file.stem.replace("issue_link_", "")
114
+ print(f"Saved {len(issue_links)} issue links for run {run_id}")
115
+
116
+ print("importing GitHub issues (full table)")
117
+ github_issues_file = dest / "github_issues.json"
118
+ if github_issues_file.exists():
119
+ statement = db.prepare("INSERT INTO github_issue JSON ?")
120
+ with github_issues_file.open(mode="rt", encoding="utf-8") as src:
121
+ github_issues = json.loads(src.read())
122
+ for github_issue in github_issues:
123
+ github_issue_raw = json.dumps(github_issue)
124
+ db.session.execute(statement, parameters=(github_issue_raw,))
125
+ print(f"Saved {len(github_issues)} GitHub issues")
@@ -161,6 +161,7 @@ Supported sections are:
161
161
  | logs| List of links to the log files stored on S3 for this run |
162
162
  | cloud| Contains active remaining resources running at the end the test. Table |
163
163
  | nemesis| Table of nemeses in the run with their status and durations |
164
+ | generic_results| Generic Result API results, formatted as tables |
164
165
  | events| Event block of most recent events sorted by timestamp |
165
166
  | screenshots| Grafana screenshot gallery |
166
167
  | custom_table| Custom table element. Can be used to display arbitrary tables. HTML in cells is **not** supported |
@@ -181,6 +182,13 @@ The `section` block can be provided as empty array to use the default template.
181
182
  |amount_per_severity| number | Amount of events per severity to display (default 10)|
182
183
  |severity_filter| string[] | Names of severities to include in the email (default [CRITICAL, ERROR]). Available severities: CRITICAL, ERROR, WARNING, NORMAL, DEBUG (case-sensitive)|
183
184
 
185
+ ###### Generic Results
186
+
187
+ |Option|Type|Description|
188
+ |------|----|-----------|
189
+ |table_filter| string[] | Array of regexes to filter tables by. Default: [] - all tables will be shown|
190
+ |section_name| string | Heading value for the results tables|
191
+
184
192
  ###### Nemesis
185
193
 
186
194
  |Option|Type|Description|
@@ -3,11 +3,10 @@
3
3
  Minimal local dev setup with one db node (adjust accordingly if needed more nodes)
4
4
 
5
5
  ## Prerequisites
6
- 1. Python >=3.10.0 (system-wide or pyenv)
7
- 2. NodeJS >=16 (with npm)
8
- 3. Yarn (can be installed globally with `npm -g install yarn`)
9
- 4. uv (https://docs.astral.sh/uv/getting-started/installation/)
10
- 5. docker-compose
6
+ 1. NodeJS >=16 (with npm)
7
+ 2. Yarn (can be installed globally with `npm -g install yarn`)
8
+ 3. uv (https://docs.astral.sh/uv/getting-started/installation/)
9
+ 4. docker-compose
11
10
 
12
11
  ## Installing argus dependencies
13
12
  ```bash
@@ -38,6 +38,9 @@ Generic results are stored in Argus database and can be accessed via Argus API a
38
38
  To send generic results to Argus, you need to create `ResultTable` class basing on `GenericResultTable` available in Argus Client library
39
39
  and send it using `ArgusClient` class (or it's child class like `ArgusSCTClient`).
40
40
 
41
+ Note: Argus client requests use a 60s timeout by default. `ArgusGenericClient` defaults to 180s to accommodate larger payloads. Only GET
42
+ requests are retried, and only on timeouts; POST submissions surface timeouts to the caller so clients can handle retries explicitly.
43
+
41
44
  Child class of `GenericResultTable` needs to define `Meta` class with `name` and `description` fields. It also needs to define `Columns`
42
45
  field that will describe available columns details for given result: as a list of `ColumnMetadata` objects. Each `ColumnMetadata` object
43
46
  needs to have `name`, `unit` and `type` and optionally `higher_is_better` fields. `type` field can be one of `ResultType` enum values.
@@ -14,16 +14,16 @@
14
14
  import { sendMessage } from "../Stores/AlertStore";
15
15
  import { userList } from "../Stores/UserlistSubscriber";
16
16
  import { timestampToISODate } from "../Common/DateUtils";
17
- import { apiMethodCall } from "../Common/ApiUtils";
18
- import { determineLuma } from "../Common/TextUtils";
19
17
  import { stateEncoder } from "../Common/StateManagement";
18
+ import type { GithubSubtype, Link, TestRun } from './Issues.svelte';
19
+ import { getUser } from '../Common/UserUtils';
20
20
 
21
21
  const dispatch = createEventDispatcher();
22
22
  let users = $state({});
23
23
  run_1(() => {
24
24
  users = $userList;
25
25
  });
26
- let githubToken;
26
+
27
27
  const IssueColorMap = {
28
28
  open: "issue-open",
29
29
  closed: "issue-closed",
@@ -35,8 +35,8 @@
35
35
  };
36
36
 
37
37
  interface Props {
38
- issue?: any;
39
- runId: any;
38
+ issue?: GithubSubtype;
39
+ runId: string;
40
40
  deleteEnabled?: boolean;
41
41
  aggregated?: boolean;
42
42
  }
@@ -44,14 +44,16 @@
44
44
  let {
45
45
  issue = $bindable({
46
46
  id: "",
47
- number: -1,
48
- state: "unknown",
47
+ subtype: "github",
48
+ number: "-1",
49
+ state: "open",
49
50
  owner: "nobody",
50
51
  repo: "no-repo",
51
52
  title: "NO ISSUE",
52
53
  links: [],
53
54
  labels: [],
54
55
  type: "issues",
56
+ assignees: [],
55
57
  url: "https://github.com/",
56
58
  user_id: "",
57
59
  added_on: "Mon, 1 Jan 1970 9:00:00 GMT",
@@ -64,9 +66,11 @@
64
66
  let deleting = $state(false);
65
67
  let showRuns = $state(false);
66
68
 
67
- let resolvedRuns;
69
+ let resolvedRuns: {
70
+ [key: string]: TestRun,
71
+ };
68
72
 
69
- const resolveRuns = async function(runs) {
73
+ const resolveRuns = async function(links: Link[]) {
70
74
  if (resolvedRuns) return resolvedRuns;
71
75
  let response = await fetch("/api/v1/get_runs_by_test_id_run_id",
72
76
  {
@@ -74,7 +78,7 @@
74
78
  headers: {
75
79
  "Content-Type": "application/json",
76
80
  },
77
- body: JSON.stringify(runs.map(v => [v.test_id, v.run_id]))
81
+ body: JSON.stringify(links.map(v => [v.test_id, v.run_id]))
78
82
  }
79
83
  );
80
84
 
@@ -86,7 +90,7 @@
86
90
  return data.response.runs;
87
91
  };
88
92
 
89
- const resolveFirstUserForAggregation = function(issue) {
93
+ const resolveFirstUserForAggregation = function(issue: GithubSubtype) {
90
94
  if (!issue.links) return {
91
95
  id: issue.user_id,
92
96
  date: issue.added_on,
@@ -129,10 +133,10 @@
129
133
  throw apiJson;
130
134
  }
131
135
  } catch (error) {
132
- if (error?.status === "error") {
136
+ if ((error as {status: string, response: { arguments: string[] }})?.status === "error") {
133
137
  sendMessage(
134
138
  "error",
135
- `Unable to delete an issue.\nAPI Response: ${error.response.arguments[0]}`,
139
+ `Unable to delete an issue.\nAPI Response: ${(error as {status: string, response: { arguments: string[] }}).response.arguments[0]}`,
136
140
  "GithubIssue::delete"
137
141
  );
138
142
  } else {
@@ -182,7 +186,7 @@
182
186
  class="text-muted d-flex align-items-center"
183
187
  title={new Date(issue.added_on).toISOString()}
184
188
  >
185
- <div>Added by <span class="fw-bold">@{users?.[resolveFirstUserForAggregation(issue).id]?.username ?? "ghost"}</span> on {timestampToISODate(new Date(resolveFirstUserForAggregation(issue).date))}</div>
189
+ <div>Added by <span class="fw-bold">@{ getUser(resolveFirstUserForAggregation(issue).id, users).username }</span> on {timestampToISODate(new Date(resolveFirstUserForAggregation(issue).date))}</div>
186
190
  {#if deleteEnabled && !aggregated}
187
191
  <div class="ms-2 text-muted">
188
192
  {#if deleting}
@@ -190,6 +194,7 @@
190
194
  class="btn btn-sm btn-danger"
191
195
  title="Please wait"
192
196
  type="button"
197
+ aria-label="progress spinner"
193
198
  >
194
199
  <span class="spinner-border spinner-border-sm"></span>
195
200
  </button>
@@ -233,7 +238,7 @@
233
238
  onclick={() => {
234
239
  showRuns = false;
235
240
  }}
236
- ></button>
241
+ >X</button>
237
242
  </div>
238
243
  </div>
239
244
  <div>