squad 1.96__tar.gz → 1.97__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 (667) hide show
  1. {squad-1.96 → squad-1.97}/CHANGELOG.md +10 -0
  2. {squad-1.96/squad.egg-info → squad-1.97}/PKG-INFO +1 -1
  3. {squad-1.96 → squad-1.97}/squad/ci/backend/tuxsuite.py +32 -8
  4. {squad-1.96 → squad-1.97}/squad/ci/management/commands/testfetch.py +8 -1
  5. {squad-1.96 → squad-1.97}/squad/frontend/views.py +8 -1
  6. {squad-1.96 → squad-1.97}/squad/plugins/linux_log_parser.py +15 -8
  7. {squad-1.96 → squad-1.97}/squad/settings.py +3 -0
  8. squad-1.97/squad/version.py +1 -0
  9. {squad-1.96 → squad-1.97/squad.egg-info}/PKG-INFO +1 -1
  10. {squad-1.96 → squad-1.97}/test/ci/backend/test_tuxsuite.py +37 -8
  11. {squad-1.96 → squad-1.97}/test/ci/backend/tuxsuite_test_result_sample.json +25 -13
  12. {squad-1.96 → squad-1.97}/test/frontend/test_basics.py +6 -0
  13. {squad-1.96 → squad-1.97}/test/plugins/test_linux_log_parser.py +18 -18
  14. {squad-1.96 → squad-1.97}/test/plugins/test_log_parser_base.py +1 -1
  15. squad-1.96/squad/version.py +0 -1
  16. {squad-1.96 → squad-1.97}/.ackrc +0 -0
  17. {squad-1.96 → squad-1.97}/.coveragerc +0 -0
  18. {squad-1.96 → squad-1.97}/.ctags +0 -0
  19. {squad-1.96 → squad-1.97}/.dockerignore +0 -0
  20. {squad-1.96 → squad-1.97}/.gitignore +0 -0
  21. {squad-1.96 → squad-1.97}/.mailmap +0 -0
  22. {squad-1.96 → squad-1.97}/.readthedocs.yml +0 -0
  23. {squad-1.96 → squad-1.97}/.reuse/dep5 +0 -0
  24. {squad-1.96 → squad-1.97}/COPYING +0 -0
  25. {squad-1.96 → squad-1.97}/COPYRIGHTS +0 -0
  26. {squad-1.96 → squad-1.97}/Dockerfile +0 -0
  27. {squad-1.96 → squad-1.97}/LICENSES/GPL-3.0-or-later.txt +0 -0
  28. {squad-1.96 → squad-1.97}/LICENSES/MIT.txt +0 -0
  29. {squad-1.96 → squad-1.97}/LICENSES/OFL-1.1.txt +0 -0
  30. {squad-1.96 → squad-1.97}/MANIFEST.in +0 -0
  31. {squad-1.96 → squad-1.97}/Procfile +0 -0
  32. {squad-1.96 → squad-1.97}/README.rst +0 -0
  33. {squad-1.96 → squad-1.97}/babel.cfg +0 -0
  34. {squad-1.96 → squad-1.97}/dev-docker +0 -0
  35. {squad-1.96 → squad-1.97}/doc/.gitignore +0 -0
  36. {squad-1.96 → squad-1.97}/doc/Makefile +0 -0
  37. {squad-1.96 → squad-1.97}/doc/api.rst +0 -0
  38. {squad-1.96 → squad-1.97}/doc/ci.rst +0 -0
  39. {squad-1.96 → squad-1.97}/doc/conf.py +0 -0
  40. {squad-1.96 → squad-1.97}/doc/hacking.rst +0 -0
  41. {squad-1.96 → squad-1.97}/doc/index.rst +0 -0
  42. {squad-1.96 → squad-1.97}/doc/install.rst +0 -0
  43. {squad-1.96 → squad-1.97}/doc/intro.rst +0 -0
  44. {squad-1.96 → squad-1.97}/doc/lava_usecase.rst +0 -0
  45. {squad-1.96 → squad-1.97}/doc/plugins.rst +0 -0
  46. {squad-1.96 → squad-1.97}/doc/quickstart.rst +0 -0
  47. {squad-1.96 → squad-1.97}/doc/translating.rst +0 -0
  48. {squad-1.96 → squad-1.97}/doc/tuxsuite_usecase.rst +0 -0
  49. {squad-1.96 → squad-1.97}/docker/db-dumped +0 -0
  50. {squad-1.96 → squad-1.97}/docker/db-to-be-restored +0 -0
  51. {squad-1.96 → squad-1.97}/docker/docker-compose.yml +0 -0
  52. {squad-1.96 → squad-1.97}/docker/extra_settings.py +0 -0
  53. {squad-1.96 → squad-1.97}/docker/init-db.sh +0 -0
  54. {squad-1.96 → squad-1.97}/docker/rabbitmq.config +0 -0
  55. {squad-1.96 → squad-1.97}/docker/squad-apache.conf +0 -0
  56. {squad-1.96 → squad-1.97}/docker-compose.yaml +0 -0
  57. {squad-1.96 → squad-1.97}/manage.py +0 -0
  58. {squad-1.96 → squad-1.97}/package-lock.json +0 -0
  59. {squad-1.96 → squad-1.97}/package.json +0 -0
  60. {squad-1.96 → squad-1.97}/pytest.ini +0 -0
  61. {squad-1.96 → squad-1.97}/requirements-dev.txt +0 -0
  62. {squad-1.96 → squad-1.97}/requirements.txt +0 -0
  63. {squad-1.96 → squad-1.97}/scripts/build +0 -0
  64. {squad-1.96 → squad-1.97}/scripts/check-ci +0 -0
  65. {squad-1.96 → squad-1.97}/scripts/check-ignore +0 -0
  66. {squad-1.96 → squad-1.97}/scripts/community_connector/main.js +0 -0
  67. {squad-1.96 → squad-1.97}/scripts/community_connector/manifest.json +0 -0
  68. {squad-1.96 → squad-1.97}/scripts/dogfood +0 -0
  69. {squad-1.96 → squad-1.97}/scripts/get-metrics +0 -0
  70. {squad-1.96 → squad-1.97}/scripts/get-tests +0 -0
  71. {squad-1.96 → squad-1.97}/scripts/git-build +0 -0
  72. {squad-1.96 → squad-1.97}/scripts/pytest +0 -0
  73. {squad-1.96 → squad-1.97}/scripts/rabbitmq-server +0 -0
  74. {squad-1.96 → squad-1.97}/scripts/release +0 -0
  75. {squad-1.96 → squad-1.97}/scripts/release-docker +0 -0
  76. {squad-1.96 → squad-1.97}/scripts/squad-config +0 -0
  77. {squad-1.96 → squad-1.97}/scripts/test-ci +0 -0
  78. {squad-1.96 → squad-1.97}/scripts/test-docker +0 -0
  79. {squad-1.96 → squad-1.97}/scripts/testdata/gen-ci-jobs +0 -0
  80. {squad-1.96 → squad-1.97}/scripts/testdata/gen-metrics +0 -0
  81. {squad-1.96 → squad-1.97}/scripts/testdata/gen-test-data +0 -0
  82. {squad-1.96 → squad-1.97}/scripts/testdata/gen-tests +0 -0
  83. {squad-1.96 → squad-1.97}/scripts/testdata/setup-dev +0 -0
  84. {squad-1.96 → squad-1.97}/scripts/testdata/submit-ci-jobs +0 -0
  85. {squad-1.96 → squad-1.97}/scripts/testdata/submit-test-data +0 -0
  86. {squad-1.96 → squad-1.97}/scripts/translate +0 -0
  87. {squad-1.96 → squad-1.97}/scripts/travis-lava +0 -0
  88. {squad-1.96 → squad-1.97}/scripts/update-translation-files +0 -0
  89. {squad-1.96 → squad-1.97}/setup.cfg +0 -0
  90. {squad-1.96 → squad-1.97}/setup.py +0 -0
  91. {squad-1.96 → squad-1.97}/squad/__init__.py +0 -0
  92. {squad-1.96 → squad-1.97}/squad/admin.py +0 -0
  93. {squad-1.96 → squad-1.97}/squad/api/__init__.py +0 -0
  94. {squad-1.96 → squad-1.97}/squad/api/apps.py +0 -0
  95. {squad-1.96 → squad-1.97}/squad/api/ci.py +0 -0
  96. {squad-1.96 → squad-1.97}/squad/api/data.py +0 -0
  97. {squad-1.96 → squad-1.97}/squad/api/filters.py +0 -0
  98. {squad-1.96 → squad-1.97}/squad/api/prometheus.py +0 -0
  99. {squad-1.96 → squad-1.97}/squad/api/rest.py +0 -0
  100. {squad-1.96 → squad-1.97}/squad/api/urls.py +0 -0
  101. {squad-1.96 → squad-1.97}/squad/api/utils.py +0 -0
  102. {squad-1.96 → squad-1.97}/squad/api/views.py +0 -0
  103. {squad-1.96 → squad-1.97}/squad/celery.py +0 -0
  104. {squad-1.96 → squad-1.97}/squad/ci/__init__.py +0 -0
  105. {squad-1.96 → squad-1.97}/squad/ci/admin.py +0 -0
  106. {squad-1.96 → squad-1.97}/squad/ci/apps.py +0 -0
  107. {squad-1.96 → squad-1.97}/squad/ci/backend/__init__.py +0 -0
  108. {squad-1.96 → squad-1.97}/squad/ci/backend/fake.py +0 -0
  109. {squad-1.96 → squad-1.97}/squad/ci/backend/lava.py +0 -0
  110. {squad-1.96 → squad-1.97}/squad/ci/backend/null.py +0 -0
  111. {squad-1.96 → squad-1.97}/squad/ci/exceptions.py +0 -0
  112. {squad-1.96 → squad-1.97}/squad/ci/management/__init__.py +0 -0
  113. {squad-1.96 → squad-1.97}/squad/ci/management/commands/__init__.py +0 -0
  114. {squad-1.96 → squad-1.97}/squad/ci/management/commands/create_tuxsuite_boot_tests.py +0 -0
  115. {squad-1.96 → squad-1.97}/squad/ci/management/commands/listen.py +0 -0
  116. {squad-1.96 → squad-1.97}/squad/ci/migrations/0001_initial.py +0 -0
  117. {squad-1.96 → squad-1.97}/squad/ci/migrations/0002_auto_20170406_1252.py +0 -0
  118. {squad-1.96 → squad-1.97}/squad/ci/migrations/0003_backend_name.py +0 -0
  119. {squad-1.96 → squad-1.97}/squad/ci/migrations/0004_testjob_failure.py +0 -0
  120. {squad-1.96 → squad-1.97}/squad/ci/migrations/0005_remove_listener_data.py +0 -0
  121. {squad-1.96 → squad-1.97}/squad/ci/migrations/0006_simplify_backend_loading.py +0 -0
  122. {squad-1.96 → squad-1.97}/squad/ci/migrations/0007_auto_20170517_1736.py +0 -0
  123. {squad-1.96 → squad-1.97}/squad/ci/migrations/0008_testjob_testrun.py +0 -0
  124. {squad-1.96 → squad-1.97}/squad/ci/migrations/0009_slug_pattern.py +0 -0
  125. {squad-1.96 → squad-1.97}/squad/ci/migrations/0010_testjob_can_resubmit.py +0 -0
  126. {squad-1.96 → squad-1.97}/squad/ci/migrations/0011_testjob_resubmitted_count.py +0 -0
  127. {squad-1.96 → squad-1.97}/squad/ci/migrations/0012_testjob_build.py +0 -0
  128. {squad-1.96 → squad-1.97}/squad/ci/migrations/0013_testjob_name.py +0 -0
  129. {squad-1.96 → squad-1.97}/squad/ci/migrations/0014_testjob_target_build.py +0 -0
  130. {squad-1.96 → squad-1.97}/squad/ci/migrations/0015_testjob_populate_target_build.py +0 -0
  131. {squad-1.96 → squad-1.97}/squad/ci/migrations/0016_backend_max_fetch_attempts.py +0 -0
  132. {squad-1.96 → squad-1.97}/squad/ci/migrations/0017_testjob_fetch_attempts.py +0 -0
  133. {squad-1.96 → squad-1.97}/squad/ci/migrations/0018_testjob_dates.py +0 -0
  134. {squad-1.96 → squad-1.97}/squad/ci/migrations/0019_add_fake_backend.py +0 -0
  135. {squad-1.96 → squad-1.97}/squad/ci/migrations/0020_backend_settings_field.py +0 -0
  136. {squad-1.96 → squad-1.97}/squad/ci/migrations/0021_testjob_parent_job.py +0 -0
  137. {squad-1.96 → squad-1.97}/squad/ci/migrations/0022_backend_poll_enabled.py +0 -0
  138. {squad-1.96 → squad-1.97}/squad/ci/migrations/0023_remove_testjob_build.py +0 -0
  139. {squad-1.96 → squad-1.97}/squad/ci/migrations/0024_fix_testjob_environment_validation.py +0 -0
  140. {squad-1.96 → squad-1.97}/squad/ci/migrations/0025_backend_listen_enabled.py +0 -0
  141. {squad-1.96 → squad-1.97}/squad/ci/migrations/0026_job_start_end_time.py +0 -0
  142. {squad-1.96 → squad-1.97}/squad/ci/migrations/0027_add_tuxsuite_implementation_type.py +0 -0
  143. {squad-1.96 → squad-1.97}/squad/ci/migrations/0028_create_testjob_indexes.py +0 -0
  144. {squad-1.96 → squad-1.97}/squad/ci/migrations/0029_create_testjob_results_input.py +0 -0
  145. {squad-1.96 → squad-1.97}/squad/ci/migrations/0030_testjob_subtasks_count.py +0 -0
  146. {squad-1.96 → squad-1.97}/squad/ci/migrations/__init__.py +0 -0
  147. {squad-1.96 → squad-1.97}/squad/ci/models.py +0 -0
  148. {squad-1.96 → squad-1.97}/squad/ci/tasks.py +0 -0
  149. {squad-1.96 → squad-1.97}/squad/ci/templates/squad/ci/testjob_resubmit.html.jinja2 +0 -0
  150. {squad-1.96 → squad-1.97}/squad/ci/templates/squad/ci/testjob_resubmit.txt.jinja2 +0 -0
  151. {squad-1.96 → squad-1.97}/squad/ci/templatetags/__init__.py +0 -0
  152. {squad-1.96 → squad-1.97}/squad/ci/templatetags/filter_jobs.py +0 -0
  153. {squad-1.96 → squad-1.97}/squad/ci/utils.py +0 -0
  154. {squad-1.96 → squad-1.97}/squad/compat.py +0 -0
  155. {squad-1.96 → squad-1.97}/squad/container_settings.py +0 -0
  156. {squad-1.96 → squad-1.97}/squad/core/__init__.py +0 -0
  157. {squad-1.96 → squad-1.97}/squad/core/admin.py +0 -0
  158. {squad-1.96 → squad-1.97}/squad/core/apps.py +0 -0
  159. {squad-1.96 → squad-1.97}/squad/core/callback.py +0 -0
  160. {squad-1.96 → squad-1.97}/squad/core/comparison.py +0 -0
  161. {squad-1.96 → squad-1.97}/squad/core/data.py +0 -0
  162. {squad-1.96 → squad-1.97}/squad/core/failures.py +0 -0
  163. {squad-1.96 → squad-1.97}/squad/core/history.py +0 -0
  164. {squad-1.96 → squad-1.97}/squad/core/locale/django.pot +0 -0
  165. {squad-1.96 → squad-1.97}/squad/core/locale/es_MX/LC_MESSAGES/django.po +0 -0
  166. {squad-1.96 → squad-1.97}/squad/core/locale/pl/LC_MESSAGES/django.po +0 -0
  167. {squad-1.96 → squad-1.97}/squad/core/locale/pt/LC_MESSAGES/django.po +0 -0
  168. {squad-1.96 → squad-1.97}/squad/core/locale/pt_BR/LC_MESSAGES/django.po +0 -0
  169. {squad-1.96 → squad-1.97}/squad/core/management/__init__.py +0 -0
  170. {squad-1.96 → squad-1.97}/squad/core/management/commands/__init__.py +0 -0
  171. {squad-1.96 → squad-1.97}/squad/core/management/commands/compute_build_summaries.py +0 -0
  172. {squad-1.96 → squad-1.97}/squad/core/management/commands/compute_project_statuses.py +0 -0
  173. {squad-1.96 → squad-1.97}/squad/core/management/commands/fill_test_metadata.py +0 -0
  174. {squad-1.96 → squad-1.97}/squad/core/management/commands/fix_squadplugin_data.py +0 -0
  175. {squad-1.96 → squad-1.97}/squad/core/management/commands/import_data.py +0 -0
  176. {squad-1.96 → squad-1.97}/squad/core/management/commands/import_data.rst +0 -0
  177. {squad-1.96 → squad-1.97}/squad/core/management/commands/migrate_test_runs.py +0 -0
  178. {squad-1.96 → squad-1.97}/squad/core/management/commands/populate_metric_build_and_environment.py +0 -0
  179. {squad-1.96 → squad-1.97}/squad/core/management/commands/populate_test_build_and_environment.py +0 -0
  180. {squad-1.96 → squad-1.97}/squad/core/management/commands/prepdump.py +0 -0
  181. {squad-1.96 → squad-1.97}/squad/core/management/commands/run_log_parser.py +0 -0
  182. {squad-1.96 → squad-1.97}/squad/core/management/commands/send-email.py +0 -0
  183. {squad-1.96 → squad-1.97}/squad/core/management/commands/update_project_statuses.py +0 -0
  184. {squad-1.96 → squad-1.97}/squad/core/management/commands/users.py +0 -0
  185. {squad-1.96 → squad-1.97}/squad/core/migrations/0001_initial.py +0 -0
  186. {squad-1.96 → squad-1.97}/squad/core/migrations/0002_auto_20160525_1403.py +0 -0
  187. {squad-1.96 → squad-1.97}/squad/core/migrations/0003_testrun_log_file.py +0 -0
  188. {squad-1.96 → squad-1.97}/squad/core/migrations/0004_group_user_groups.py +0 -0
  189. {squad-1.96 → squad-1.97}/squad/core/migrations/0005_token.py +0 -0
  190. {squad-1.96 → squad-1.97}/squad/core/migrations/0006_auto_20160826_2242.py +0 -0
  191. {squad-1.96 → squad-1.97}/squad/core/migrations/0007_testrun_data_processed.py +0 -0
  192. {squad-1.96 → squad-1.97}/squad/core/migrations/0008_status.py +0 -0
  193. {squad-1.96 → squad-1.97}/squad/core/migrations/0009_testrun_status_recorded.py +0 -0
  194. {squad-1.96 → squad-1.97}/squad/core/migrations/0010_testrun_datetime.py +0 -0
  195. {squad-1.96 → squad-1.97}/squad/core/migrations/0011_testrun_metadata_fields.py +0 -0
  196. {squad-1.96 → squad-1.97}/squad/core/migrations/0012_build_datetime.py +0 -0
  197. {squad-1.96 → squad-1.97}/squad/core/migrations/0013_testrun_resubmit_url.py +0 -0
  198. {squad-1.96 → squad-1.97}/squad/core/migrations/0014_testrun_metadata_file.py +0 -0
  199. {squad-1.96 → squad-1.97}/squad/core/migrations/0015_attachment.py +0 -0
  200. {squad-1.96 → squad-1.97}/squad/core/migrations/0016_project_is_public.py +0 -0
  201. {squad-1.96 → squad-1.97}/squad/core/migrations/0017_slug_validator.py +0 -0
  202. {squad-1.96 → squad-1.97}/squad/core/migrations/0018_build_name.py +0 -0
  203. {squad-1.96 → squad-1.97}/squad/core/migrations/0019_build_version.py +0 -0
  204. {squad-1.96 → squad-1.97}/squad/core/migrations/0020_build_ordering.py +0 -0
  205. {squad-1.96 → squad-1.97}/squad/core/migrations/0021_global_tokens.py +0 -0
  206. {squad-1.96 → squad-1.97}/squad/core/migrations/0022_projectstatus.py +0 -0
  207. {squad-1.96 → squad-1.97}/squad/core/migrations/0023_subscription.py +0 -0
  208. {squad-1.96 → squad-1.97}/squad/core/migrations/0024_project_build_completion_threshold.py +0 -0
  209. {squad-1.96 → squad-1.97}/squad/core/migrations/0025_unique_testrun_job_id.py +0 -0
  210. {squad-1.96 → squad-1.97}/squad/core/migrations/0026_testrun_result_accept_null.py +0 -0
  211. {squad-1.96 → squad-1.97}/squad/core/migrations/0027_project_notification_strategy.py +0 -0
  212. {squad-1.96 → squad-1.97}/squad/core/migrations/0028_suite_and_test_name_length.py +0 -0
  213. {squad-1.96 → squad-1.97}/squad/core/migrations/0029_subscription_email_formats.py +0 -0
  214. {squad-1.96 → squad-1.97}/squad/core/migrations/0030_remove_project_build_completion_threshold.py +0 -0
  215. {squad-1.96 → squad-1.97}/squad/core/migrations/0031_environment_expected_test_runs.py +0 -0
  216. {squad-1.96 → squad-1.97}/squad/core/migrations/0032_testrun_completed.py +0 -0
  217. {squad-1.96 → squad-1.97}/squad/core/migrations/0033_drop_debversion.py +0 -0
  218. {squad-1.96 → squad-1.97}/squad/core/migrations/0034_prepare_to_remove_build_name.py +0 -0
  219. {squad-1.96 → squad-1.97}/squad/core/migrations/0035_remove_build_name.py +0 -0
  220. {squad-1.96 → squad-1.97}/squad/core/migrations/0036_status_tests_skip.py +0 -0
  221. {squad-1.96 → squad-1.97}/squad/core/migrations/0037_project_status_test_summary_fields.py +0 -0
  222. {squad-1.96 → squad-1.97}/squad/core/migrations/0038_populate_project_status_cache.py +0 -0
  223. {squad-1.96 → squad-1.97}/squad/core/migrations/0039_orderings.py +0 -0
  224. {squad-1.96 → squad-1.97}/squad/core/migrations/0040_remove_subscription_html.py +0 -0
  225. {squad-1.96 → squad-1.97}/squad/core/migrations/0041_projectstatus_notified.py +0 -0
  226. {squad-1.96 → squad-1.97}/squad/core/migrations/0042_set_projectstatus_notified.py +0 -0
  227. {squad-1.96 → squad-1.97}/squad/core/migrations/0043_project_status_build.py +0 -0
  228. {squad-1.96 → squad-1.97}/squad/core/migrations/0044_project_html_mail.py +0 -0
  229. {squad-1.96 → squad-1.97}/squad/core/migrations/0045_adminsubscription.py +0 -0
  230. {squad-1.96 → squad-1.97}/squad/core/migrations/0046_projectstatus_last_updated.py +0 -0
  231. {squad-1.96 → squad-1.97}/squad/core/migrations/0047_populate_projectstatus_last_updated.py +0 -0
  232. {squad-1.96 → squad-1.97}/squad/core/migrations/0048_moderate_notifications.py +0 -0
  233. {squad-1.96 → squad-1.97}/squad/core/migrations/0049_projectstatus_plural.py +0 -0
  234. {squad-1.96 → squad-1.97}/squad/core/migrations/0050_projectstatus_finished.py +0 -0
  235. {squad-1.96 → squad-1.97}/squad/core/migrations/0051_build_status.py +0 -0
  236. {squad-1.96 → squad-1.97}/squad/core/migrations/0052_recreate_projectstatus_data.py +0 -0
  237. {squad-1.96 → squad-1.97}/squad/core/migrations/0053_remove_projectstatus_previous.py +0 -0
  238. {squad-1.96 → squad-1.97}/squad/core/migrations/0054_custom_email_template.py +0 -0
  239. {squad-1.96 → squad-1.97}/squad/core/migrations/0055_emailtemplate_subject.py +0 -0
  240. {squad-1.96 → squad-1.97}/squad/core/migrations/0056_project_description.py +0 -0
  241. {squad-1.96 → squad-1.97}/squad/core/migrations/0057_projectstatus_has_metrics.py +0 -0
  242. {squad-1.96 → squad-1.97}/squad/core/migrations/0058_populate_projectstatus_has_metrics.py +0 -0
  243. {squad-1.96 → squad-1.97}/squad/core/migrations/0059_project_important_metadata_keys.py +0 -0
  244. {squad-1.96 → squad-1.97}/squad/core/migrations/0060_test_log.py +0 -0
  245. {squad-1.96 → squad-1.97}/squad/core/migrations/0061_project_enabled_plugins_list.py +0 -0
  246. {squad-1.96 → squad-1.97}/squad/core/migrations/0062_project_allow_empty_enabled_plugin_list.py +0 -0
  247. {squad-1.96 → squad-1.97}/squad/core/migrations/0063_project_wait_before_notification.py +0 -0
  248. {squad-1.96 → squad-1.97}/squad/core/migrations/0064_project_notification_timeout.py +0 -0
  249. {squad-1.96 → squad-1.97}/squad/core/migrations/0065_projectstatus_notified_on_timeout.py +0 -0
  250. {squad-1.96 → squad-1.97}/squad/core/migrations/0066_environment_description.py +0 -0
  251. {squad-1.96 → squad-1.97}/squad/core/migrations/0067_accept_blank_suite_name.py +0 -0
  252. {squad-1.96 → squad-1.97}/squad/core/migrations/0068_suite_version.py +0 -0
  253. {squad-1.96 → squad-1.97}/squad/core/migrations/0069_suite_metadata.py +0 -0
  254. {squad-1.96 → squad-1.97}/squad/core/migrations/0070_create_suite_test_and_metric_metadata.py +0 -0
  255. {squad-1.96 → squad-1.97}/squad/core/migrations/0071_migrate_old_tokens.py +0 -0
  256. {squad-1.96 → squad-1.97}/squad/core/migrations/0072_group_description.py +0 -0
  257. {squad-1.96 → squad-1.97}/squad/core/migrations/0073_auto_20180420_1643.py +0 -0
  258. {squad-1.96 → squad-1.97}/squad/core/migrations/0074_add_indexes.py +0 -0
  259. {squad-1.96 → squad-1.97}/squad/core/migrations/0075_update_project_enabled_plugin_list.py +0 -0
  260. {squad-1.96 → squad-1.97}/squad/core/migrations/0076_patch_builds.py +0 -0
  261. {squad-1.96 → squad-1.97}/squad/core/migrations/0077_knownissue.py +0 -0
  262. {squad-1.96 → squad-1.97}/squad/core/migrations/0078_cache_test_run_counts.py +0 -0
  263. {squad-1.96 → squad-1.97}/squad/core/migrations/0079_init_cache_test_run_counts.py +0 -0
  264. {squad-1.96 → squad-1.97}/squad/core/migrations/0080_auto_20180810_0047.py +0 -0
  265. {squad-1.96 → squad-1.97}/squad/core/migrations/0081_status_has_metrics.py +0 -0
  266. {squad-1.96 → squad-1.97}/squad/core/migrations/0082_populate_status_has_metrics.py +0 -0
  267. {squad-1.96 → squad-1.97}/squad/core/migrations/0083_rename_knownissue_environments.py +0 -0
  268. {squad-1.96 → squad-1.97}/squad/core/migrations/0084_projectstatus_regressions_fixes.py +0 -0
  269. {squad-1.96 → squad-1.97}/squad/core/migrations/0085_projectstatus_defaults.py +0 -0
  270. {squad-1.96 → squad-1.97}/squad/core/migrations/0086_xfail.py +0 -0
  271. {squad-1.96 → squad-1.97}/squad/core/migrations/0087_test_known_issues.py +0 -0
  272. {squad-1.96 → squad-1.97}/squad/core/migrations/0088_user_subscriptions.py +0 -0
  273. {squad-1.96 → squad-1.97}/squad/core/migrations/0089_test_has_known_issues.py +0 -0
  274. {squad-1.96 → squad-1.97}/squad/core/migrations/0090_populate_test_has_known_issues.py +0 -0
  275. {squad-1.96 → squad-1.97}/squad/core/migrations/0091_notification_delivery_remove_unique_status.py +0 -0
  276. {squad-1.96 → squad-1.97}/squad/core/migrations/0092_annotation.py +0 -0
  277. {squad-1.96 → squad-1.97}/squad/core/migrations/0093_historicalemailtemplate.py +0 -0
  278. {squad-1.96 → squad-1.97}/squad/core/migrations/0094_populatehistoricalemailtemplate.py +0 -0
  279. {squad-1.96 → squad-1.97}/squad/core/migrations/0095_project_data_retention_days.py +0 -0
  280. {squad-1.96 → squad-1.97}/squad/core/migrations/0096_build_keep_data.py +0 -0
  281. {squad-1.96 → squad-1.97}/squad/core/migrations/0097_build_placeholder.py +0 -0
  282. {squad-1.96 → squad-1.97}/squad/core/migrations/0098_blank_annotation.py +0 -0
  283. {squad-1.96 → squad-1.97}/squad/core/migrations/0099_metricthreshold.py +0 -0
  284. {squad-1.96 → squad-1.97}/squad/core/migrations/0100_metric_is_outlier.py +0 -0
  285. {squad-1.96 → squad-1.97}/squad/core/migrations/0101_project_project_settings.py +0 -0
  286. {squad-1.96 → squad-1.97}/squad/core/migrations/0102_projectstatus_null_metric_summary.py +0 -0
  287. {squad-1.96 → squad-1.97}/squad/core/migrations/0103_populate_project_status.py +0 -0
  288. {squad-1.96 → squad-1.97}/squad/core/migrations/0104_delayedreport.py +0 -0
  289. {squad-1.96 → squad-1.97}/squad/core/migrations/0105_delayed_report_error_message.py +0 -0
  290. {squad-1.96 → squad-1.97}/squad/core/migrations/0106_delayedreport_output_subject.py +0 -0
  291. {squad-1.96 → squad-1.97}/squad/core/migrations/0107_move_notification_strategy.py +0 -0
  292. {squad-1.96 → squad-1.97}/squad/core/migrations/0108_add_email_template_validator.py +0 -0
  293. {squad-1.96 → squad-1.97}/squad/core/migrations/0109_group_member.py +0 -0
  294. {squad-1.96 → squad-1.97}/squad/core/migrations/0110_move_users_from_django_groups_to_squad_groups.py +0 -0
  295. {squad-1.96 → squad-1.97}/squad/core/migrations/0111_remove_group_user_groups.py +0 -0
  296. {squad-1.96 → squad-1.97}/squad/core/migrations/0112_user_namespaces.py +0 -0
  297. {squad-1.96 → squad-1.97}/squad/core/migrations/0113_group_project_blank_name_and_description.py +0 -0
  298. {squad-1.96 → squad-1.97}/squad/core/migrations/0114_project_enabled_plugin_list_can_be_blank.py +0 -0
  299. {squad-1.96 → squad-1.97}/squad/core/migrations/0115_fix_slug_validation.py +0 -0
  300. {squad-1.96 → squad-1.97}/squad/core/migrations/0116_make_group_membership_unique.py +0 -0
  301. {squad-1.96 → squad-1.97}/squad/core/migrations/0117_drop_obsolete_token_model.py +0 -0
  302. {squad-1.96 → squad-1.97}/squad/core/migrations/0118_project_is_archived.py +0 -0
  303. {squad-1.96 → squad-1.97}/squad/core/migrations/0119_i18n.py +0 -0
  304. {squad-1.96 → squad-1.97}/squad/core/migrations/0120_buildsummary.py +0 -0
  305. {squad-1.96 → squad-1.97}/squad/core/migrations/0121_add_password_patchsource.py +0 -0
  306. {squad-1.96 → squad-1.97}/squad/core/migrations/0122_fix_patchsource_url_and_token.py +0 -0
  307. {squad-1.96 → squad-1.97}/squad/core/migrations/0123_django_upgrade_missing_migrations.py +0 -0
  308. {squad-1.96 → squad-1.97}/squad/core/migrations/0124_set_default_expected_test_runs_to_zero.py +0 -0
  309. {squad-1.96 → squad-1.97}/squad/core/migrations/0125_fix_missing_status_has_metrics_for_testruns.py +0 -0
  310. {squad-1.96 → squad-1.97}/squad/core/migrations/0126_metricthreshold_environment.py +0 -0
  311. {squad-1.96 → squad-1.97}/squad/core/migrations/0127_metric_thresholds_migrate_data.py +0 -0
  312. {squad-1.96 → squad-1.97}/squad/core/migrations/0128_metric_thresholds_remove_proj_col.py +0 -0
  313. {squad-1.96 → squad-1.97}/squad/core/migrations/0129_projectstatus_nullable_notified_on_timeout.py +0 -0
  314. {squad-1.96 → squad-1.97}/squad/core/migrations/0130_project_status_baseline_next.py +0 -0
  315. {squad-1.96 → squad-1.97}/squad/core/migrations/0131_create_squad_auth_group_and_add_users.py +0 -0
  316. {squad-1.96 → squad-1.97}/squad/core/migrations/0132_attachment_mimetype.py +0 -0
  317. {squad-1.96 → squad-1.97}/squad/core/migrations/0133_append_project_permissions_to_squad_auth_group.py +0 -0
  318. {squad-1.96 → squad-1.97}/squad/core/migrations/0134_longer_metric_name.py +0 -0
  319. {squad-1.96 → squad-1.97}/squad/core/migrations/0135_add_privileged_access_level.py +0 -0
  320. {squad-1.96 → squad-1.97}/squad/core/migrations/0136_migrate_submitters_to_privileged.py +0 -0
  321. {squad-1.96 → squad-1.97}/squad/core/migrations/0137_patchsource_token_null.py +0 -0
  322. {squad-1.96 → squad-1.97}/squad/core/migrations/0138_metric_unit.py +0 -0
  323. {squad-1.96 → squad-1.97}/squad/core/migrations/0139_nullable_test_name.py +0 -0
  324. {squad-1.96 → squad-1.97}/squad/core/migrations/0140_increase_gerrit_password_length.py +0 -0
  325. {squad-1.96 → squad-1.97}/squad/core/migrations/0141_remove_test_name.py +0 -0
  326. {squad-1.96 → squad-1.97}/squad/core/migrations/0142_add_testrun_file_storage.py +0 -0
  327. {squad-1.96 → squad-1.97}/squad/core/migrations/0143_attachment_storage.py +0 -0
  328. {squad-1.96 → squad-1.97}/squad/core/migrations/0144_attachment_data_null.py +0 -0
  329. {squad-1.96 → squad-1.97}/squad/core/migrations/0145_pluginscratch.py +0 -0
  330. {squad-1.96 → squad-1.97}/squad/core/migrations/0146_deprecate_testrun_and_attachment_data_fields.py +0 -0
  331. {squad-1.96 → squad-1.97}/squad/core/migrations/0147_add_build_and_environment_to_test.py +0 -0
  332. {squad-1.96 → squad-1.97}/squad/core/migrations/0148_remove_legacy_storage_fields.py +0 -0
  333. {squad-1.96 → squad-1.97}/squad/core/migrations/0149_build_patch_url.py +0 -0
  334. {squad-1.96 → squad-1.97}/squad/core/migrations/0150_add_new_notification_strategy.py +0 -0
  335. {squad-1.96 → squad-1.97}/squad/core/migrations/0151_callback.py +0 -0
  336. {squad-1.96 → squad-1.97}/squad/core/migrations/0152_add_build_patch_notified.py +0 -0
  337. {squad-1.96 → squad-1.97}/squad/core/migrations/0153_callback_make_response_content_blob.py +0 -0
  338. {squad-1.96 → squad-1.97}/squad/core/migrations/0154_project_add_force_finishing_builds_field.py +0 -0
  339. {squad-1.96 → squad-1.97}/squad/core/migrations/0155_add_build_and_environment_to_metric.py +0 -0
  340. {squad-1.96 → squad-1.97}/squad/core/migrations/0156_nullable_metric_name.py +0 -0
  341. {squad-1.96 → squad-1.97}/squad/core/migrations/0157_remove_metric_name.py +0 -0
  342. {squad-1.96 → squad-1.97}/squad/core/migrations/0158_add_metric_comparison_to_projectstatus.py +0 -0
  343. {squad-1.96 → squad-1.97}/squad/core/migrations/0159_nullable_metricthreshold_value.py +0 -0
  344. {squad-1.96 → squad-1.97}/squad/core/migrations/0160_add_project_to_metricthreshold.py +0 -0
  345. {squad-1.96 → squad-1.97}/squad/core/migrations/0161_add_metricthreshold_perm_to_squad_group.py +0 -0
  346. {squad-1.96 → squad-1.97}/squad/core/migrations/0162_project_add_build_confidence_settings.py +0 -0
  347. {squad-1.96 → squad-1.97}/squad/core/migrations/0163_hirtoricalemailtemplate_update.py +0 -0
  348. {squad-1.96 → squad-1.97}/squad/core/migrations/0164_django_update.py +0 -0
  349. {squad-1.96 → squad-1.97}/squad/core/migrations/0165_buildsummary_uniqueness.py +0 -0
  350. {squad-1.96 → squad-1.97}/squad/core/migrations/0166_build_is_release.py +0 -0
  351. {squad-1.96 → squad-1.97}/squad/core/migrations/0167_add_project_datetime.py +0 -0
  352. {squad-1.96 → squad-1.97}/squad/core/migrations/0168_add_group_settings.py +0 -0
  353. {squad-1.96 → squad-1.97}/squad/core/migrations/0169_userpreferences.py +0 -0
  354. {squad-1.96 → squad-1.97}/squad/core/migrations/__init__.py +0 -0
  355. {squad-1.96 → squad-1.97}/squad/core/models.py +0 -0
  356. {squad-1.96 → squad-1.97}/squad/core/notification.py +0 -0
  357. {squad-1.96 → squad-1.97}/squad/core/plugins.py +0 -0
  358. {squad-1.96 → squad-1.97}/squad/core/queries.py +0 -0
  359. {squad-1.96 → squad-1.97}/squad/core/statistics.py +0 -0
  360. {squad-1.96 → squad-1.97}/squad/core/tasks/__init__.py +0 -0
  361. {squad-1.96 → squad-1.97}/squad/core/tasks/exceptions.py +0 -0
  362. {squad-1.96 → squad-1.97}/squad/core/tasks/notification.py +0 -0
  363. {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/base.jinja2 +0 -0
  364. {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/diff.html.jinja2 +0 -0
  365. {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/diff.txt.jinja2 +0 -0
  366. {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/failed_test_jobs.html.jinja2 +0 -0
  367. {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/failed_test_jobs.txt.jinja2 +0 -0
  368. {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/moderation.html.jinja2 +0 -0
  369. {squad-1.96 → squad-1.97}/squad/core/templates/squad/notification/moderation.txt.jinja2 +0 -0
  370. {squad-1.96 → squad-1.97}/squad/core/templatetags/__init__.py +0 -0
  371. {squad-1.96 → squad-1.97}/squad/core/templatetags/squad_notification.py +0 -0
  372. {squad-1.96 → squad-1.97}/squad/core/utils.py +0 -0
  373. {squad-1.96 → squad-1.97}/squad/frontend/__init__.py +0 -0
  374. {squad-1.96 → squad-1.97}/squad/frontend/__main__.py +0 -0
  375. {squad-1.96 → squad-1.97}/squad/frontend/admin.py +0 -0
  376. {squad-1.96 → squad-1.97}/squad/frontend/apps.py +0 -0
  377. {squad-1.96 → squad-1.97}/squad/frontend/badges.py +0 -0
  378. {squad-1.96 → squad-1.97}/squad/frontend/build_settings.py +0 -0
  379. {squad-1.96 → squad-1.97}/squad/frontend/ci.py +0 -0
  380. {squad-1.96 → squad-1.97}/squad/frontend/comparison.py +0 -0
  381. {squad-1.96 → squad-1.97}/squad/frontend/extract.py +0 -0
  382. {squad-1.96 → squad-1.97}/squad/frontend/forms.py +0 -0
  383. {squad-1.96 → squad-1.97}/squad/frontend/group_settings.py +0 -0
  384. {squad-1.96 → squad-1.97}/squad/frontend/locale/django.pot +0 -0
  385. {squad-1.96 → squad-1.97}/squad/frontend/locale/pl/LC_MESSAGES/django.po +0 -0
  386. {squad-1.96 → squad-1.97}/squad/frontend/locale/pt/LC_MESSAGES/django.po +0 -0
  387. {squad-1.96 → squad-1.97}/squad/frontend/locale/pt_BR/LC_MESSAGES/django.po +0 -0
  388. {squad-1.96 → squad-1.97}/squad/frontend/management/__init__.py +0 -0
  389. {squad-1.96 → squad-1.97}/squad/frontend/management/commands/__init__.py +0 -0
  390. {squad-1.96 → squad-1.97}/squad/frontend/management/commands/get_token.py +0 -0
  391. {squad-1.96 → squad-1.97}/squad/frontend/metrics.py +0 -0
  392. {squad-1.96 → squad-1.97}/squad/frontend/project_settings.py +0 -0
  393. {squad-1.96 → squad-1.97}/squad/frontend/queries.py +0 -0
  394. {squad-1.96 → squad-1.97}/squad/frontend/setup.py +0 -0
  395. {squad-1.96 → squad-1.97}/squad/frontend/static/compare.css +0 -0
  396. {squad-1.96 → squad-1.97}/squad/frontend/static/download +0 -0
  397. {squad-1.96 → squad-1.97}/squad/frontend/static/download.conf +0 -0
  398. {squad-1.96 → squad-1.97}/squad/frontend/static/favicon.ico +0 -0
  399. {squad-1.96 → squad-1.97}/squad/frontend/static/main.css +0 -0
  400. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/attach_select2.js +0 -0
  401. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/build.js +0 -0
  402. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/build_compare.js +0 -0
  403. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/build_list.js +0 -0
  404. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/charts.js +0 -0
  405. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/common.js +0 -0
  406. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/compare.js +0 -0
  407. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/config.js +0 -0
  408. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/annotation.js +0 -0
  409. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/build_compare.js +0 -0
  410. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/build_list_compare.js +0 -0
  411. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/build_release.js +0 -0
  412. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/cancel.js +0 -0
  413. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/charts.js +0 -0
  414. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/compare.js +0 -0
  415. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/fetch.js +0 -0
  416. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/filter.js +0 -0
  417. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/metricThreshold.js +0 -0
  418. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/project_compare.js +0 -0
  419. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/resubmit.js +0 -0
  420. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/controllers/testjobs_progress.js +0 -0
  421. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/metric.threshold.js +0 -0
  422. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/project_compare.js +0 -0
  423. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/showHide.js +0 -0
  424. {squad-1.96 → squad-1.97}/squad/frontend/static/squad/table.js +0 -0
  425. {squad-1.96 → squad-1.97}/squad/frontend/static/squad_sign.svg +0 -0
  426. {squad-1.96 → squad-1.97}/squad/frontend/templates/401.jinja2 +0 -0
  427. {squad-1.96 → squad-1.97}/squad/frontend/templates/404.jinja2 +0 -0
  428. {squad-1.96 → squad-1.97}/squad/frontend/templates/django/rest_framework/api.html +0 -0
  429. {squad-1.96 → squad-1.97}/squad/frontend/templates/django/squad/_user_menu.html +0 -0
  430. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_builds_table.jinja2 +0 -0
  431. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_env_suite_data.jinja2 +0 -0
  432. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_metadata.jinja2 +0 -0
  433. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_pagination.jinja2 +0 -0
  434. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_permissions.jinja2 +0 -0
  435. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_project_list.jinja2 +0 -0
  436. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_regressions_and_fixes.jinja2 +0 -0
  437. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_results_table.jinja2 +0 -0
  438. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_results_transitions_filter.jinja2 +0 -0
  439. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_subscribe.jinja2 +0 -0
  440. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_envbox.jinja2 +0 -0
  441. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_suitebox.jinja2 +0 -0
  442. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_summary.jinja2 +0 -0
  443. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_results_table.jinja2 +0 -0
  444. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_run_metric.jinja2 +0 -0
  445. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_test_run_test.jinja2 +0 -0
  446. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_unfinished_build.jinja2 +0 -0
  447. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/_user_menu.jinja2 +0 -0
  448. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/base.jinja2 +0 -0
  449. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build-nav.jinja2 +0 -0
  450. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build.jinja2 +0 -0
  451. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_callbacks.jinja2 +0 -0
  452. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_metadata.jinja2 +0 -0
  453. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_metrics.jinja2 +0 -0
  454. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/build_settings.jinja2 +0 -0
  455. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/builds.jinja2 +0 -0
  456. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/compare.jinja2 +0 -0
  457. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/compare_builds.jinja2 +0 -0
  458. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/compare_projects.jinja2 +0 -0
  459. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group-nav.jinja2 +0 -0
  460. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group.jinja2 +0 -0
  461. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/advanced.jinja2 +0 -0
  462. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/base.jinja2 +0 -0
  463. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/delete.jinja2 +0 -0
  464. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/index.jinja2 +0 -0
  465. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/members.jinja2 +0 -0
  466. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/new_group.jinja2 +0 -0
  467. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/group_settings/new_project.jinja2 +0 -0
  468. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/index.jinja2 +0 -0
  469. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/knownissues.jinja2 +0 -0
  470. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/login.jinja2 +0 -0
  471. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/metrics.jinja2 +0 -0
  472. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project-nav.jinja2 +0 -0
  473. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project.jinja2 +0 -0
  474. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/_threshold_table.jinja2 +0 -0
  475. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/advanced.jinja2 +0 -0
  476. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/base.jinja2 +0 -0
  477. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/build_confidence.jinja2 +0 -0
  478. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/delete.jinja2 +0 -0
  479. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/environments.jinja2 +0 -0
  480. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/index.jinja2 +0 -0
  481. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/project_settings/thresholds.jinja2 +0 -0
  482. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_history.jinja2 +0 -0
  483. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run.jinja2 +0 -0
  484. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run_suite_metrics.jinja2 +0 -0
  485. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run_suite_test_details.jinja2 +0 -0
  486. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/test_run_suite_tests.jinja2 +0 -0
  487. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/testjob.jinja2 +0 -0
  488. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/testjobs.jinja2 +0 -0
  489. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/testjobs_progress.jinja2 +0 -0
  490. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/tests-details-nav.jinja2 +0 -0
  491. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/tests.jinja2 +0 -0
  492. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/api_token.jinja2 +0 -0
  493. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/base.jinja2 +0 -0
  494. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/profile.jinja2 +0 -0
  495. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/projects.jinja2 +0 -0
  496. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/subscriptions.jinja2 +0 -0
  497. {squad-1.96 → squad-1.97}/squad/frontend/templates/squad/user_settings/user_preferences.jinja2 +0 -0
  498. {squad-1.96 → squad-1.97}/squad/frontend/templatetags/__init__.py +0 -0
  499. {squad-1.96 → squad-1.97}/squad/frontend/templatetags/squad.py +0 -0
  500. {squad-1.96 → squad-1.97}/squad/frontend/tests.py +0 -0
  501. {squad-1.96 → squad-1.97}/squad/frontend/urls.py +0 -0
  502. {squad-1.96 → squad-1.97}/squad/frontend/user_settings.py +0 -0
  503. {squad-1.96 → squad-1.97}/squad/frontend/utils.py +0 -0
  504. {squad-1.96 → squad-1.97}/squad/http.py +0 -0
  505. {squad-1.96 → squad-1.97}/squad/jinja2.py +0 -0
  506. {squad-1.96 → squad-1.97}/squad/mail.py +0 -0
  507. {squad-1.96 → squad-1.97}/squad/manage.py +0 -0
  508. {squad-1.96 → squad-1.97}/squad/plugins/__init__.py +0 -0
  509. {squad-1.96 → squad-1.97}/squad/plugins/example.py +0 -0
  510. {squad-1.96 → squad-1.97}/squad/plugins/gerrit.py +0 -0
  511. {squad-1.96 → squad-1.97}/squad/plugins/github.py +0 -0
  512. {squad-1.96 → squad-1.97}/squad/plugins/lib/__init__.py +0 -0
  513. {squad-1.96 → squad-1.97}/squad/plugins/lib/base_log_parser.py +0 -0
  514. {squad-1.96 → squad-1.97}/squad/plugins/linux_log_parser_build.py +0 -0
  515. {squad-1.96 → squad-1.97}/squad/run/__init__.py +0 -0
  516. {squad-1.96 → squad-1.97}/squad/run/__main__.py +0 -0
  517. {squad-1.96 → squad-1.97}/squad/run/listener.py +0 -0
  518. {squad-1.96 → squad-1.97}/squad/run/scheduler.py +0 -0
  519. {squad-1.96 → squad-1.97}/squad/run/worker.py +0 -0
  520. {squad-1.96 → squad-1.97}/squad/socialaccount.py +0 -0
  521. {squad-1.96 → squad-1.97}/squad/urls.py +0 -0
  522. {squad-1.96 → squad-1.97}/squad/wsgi.py +0 -0
  523. {squad-1.96 → squad-1.97}/squad.egg-info/SOURCES.txt +0 -0
  524. {squad-1.96 → squad-1.97}/squad.egg-info/dependency_links.txt +0 -0
  525. {squad-1.96 → squad-1.97}/squad.egg-info/entry_points.txt +0 -0
  526. {squad-1.96 → squad-1.97}/squad.egg-info/requires.txt +0 -0
  527. {squad-1.96 → squad-1.97}/squad.egg-info/top_level.txt +0 -0
  528. {squad-1.96 → squad-1.97}/squad.svg +0 -0
  529. {squad-1.96 → squad-1.97}/test/__init__.py +0 -0
  530. {squad-1.96 → squad-1.97}/test/api/__init__.py +0 -0
  531. {squad-1.96 → squad-1.97}/test/api/benchmarks.csv +0 -0
  532. {squad-1.96 → squad-1.97}/test/api/benchmarks.json +0 -0
  533. {squad-1.96 → squad-1.97}/test/api/definition.yaml +0 -0
  534. {squad-1.96 → squad-1.97}/test/api/metadata.json +0 -0
  535. {squad-1.96 → squad-1.97}/test/api/test_ci.py +0 -0
  536. {squad-1.96 → squad-1.97}/test/api/test_data.py +0 -0
  537. {squad-1.96 → squad-1.97}/test/api/test_rest.py +0 -0
  538. {squad-1.96 → squad-1.97}/test/api/test_run.log +0 -0
  539. {squad-1.96 → squad-1.97}/test/api/tests.csv +0 -0
  540. {squad-1.96 → squad-1.97}/test/api/tests.json +0 -0
  541. {squad-1.96 → squad-1.97}/test/api/tests.py +0 -0
  542. {squad-1.96 → squad-1.97}/test/api/tests_log.json +0 -0
  543. {squad-1.96 → squad-1.97}/test/api/tests_two.json +0 -0
  544. {squad-1.96 → squad-1.97}/test/api/twoline_definition.yaml +0 -0
  545. {squad-1.96 → squad-1.97}/test/ci/__init__.py +0 -0
  546. {squad-1.96 → squad-1.97}/test/ci/backend/__init__.py +0 -0
  547. {squad-1.96 → squad-1.97}/test/ci/backend/example-broken-log.yaml +0 -0
  548. {squad-1.96 → squad-1.97}/test/ci/backend/example-lava-log.yaml +0 -0
  549. {squad-1.96 → squad-1.97}/test/ci/backend/lava.json +0 -0
  550. {squad-1.96 → squad-1.97}/test/ci/backend/test_fake.py +0 -0
  551. {squad-1.96 → squad-1.97}/test/ci/backend/test_lava.py +0 -0
  552. {squad-1.96 → squad-1.97}/test/ci/backend/test_real_lava.py +0 -0
  553. {squad-1.96 → squad-1.97}/test/ci/backend/tuxsuite_test_failed_result_sample.json +0 -0
  554. {squad-1.96 → squad-1.97}/test/ci/test_listen.py +0 -0
  555. {squad-1.96 → squad-1.97}/test/ci/test_models.py +0 -0
  556. {squad-1.96 → squad-1.97}/test/ci/test_tasks.py +0 -0
  557. {squad-1.96 → squad-1.97}/test/core/__init__.py +0 -0
  558. {squad-1.96 → squad-1.97}/test/core/test_attachment.py +0 -0
  559. {squad-1.96 → squad-1.97}/test/core/test_build.py +0 -0
  560. {squad-1.96 → squad-1.97}/test/core/test_build_summary.py +0 -0
  561. {squad-1.96 → squad-1.97}/test/core/test_callback.py +0 -0
  562. {squad-1.96 → squad-1.97}/test/core/test_emailtemplate.py +0 -0
  563. {squad-1.96 → squad-1.97}/test/core/test_failures.py +0 -0
  564. {squad-1.96 → squad-1.97}/test/core/test_group.py +0 -0
  565. {squad-1.96 → squad-1.97}/test/core/test_historical_emailtemplate.py +0 -0
  566. {squad-1.96 → squad-1.97}/test/core/test_history.py +0 -0
  567. {squad-1.96 → squad-1.97}/test/core/test_import_data.py +0 -0
  568. {squad-1.96 → squad-1.97}/test/core/test_import_data_input/1/default/1/metadata.json +0 -0
  569. {squad-1.96 → squad-1.97}/test/core/test_import_data_input/1/default/1/metrics.json +0 -0
  570. {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/metadata.json +0 -0
  571. {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/metrics.json +0 -0
  572. {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/screenshot.png +0 -0
  573. {squad-1.96 → squad-1.97}/test/core/test_import_data_input/2/default/2/tests.json +0 -0
  574. {squad-1.96 → squad-1.97}/test/core/test_import_data_missing_metadata/1/1/tests.json +0 -0
  575. {squad-1.96 → squad-1.97}/test/core/test_known_issues.py +0 -0
  576. {squad-1.96 → squad-1.97}/test/core/test_metric.py +0 -0
  577. {squad-1.96 → squad-1.97}/test/core/test_metric_comparison.py +0 -0
  578. {squad-1.96 → squad-1.97}/test/core/test_metric_threshold.py +0 -0
  579. {squad-1.96 → squad-1.97}/test/core/test_metrics_data.py +0 -0
  580. {squad-1.96 → squad-1.97}/test/core/test_metrics_summary.py +0 -0
  581. {squad-1.96 → squad-1.97}/test/core/test_notification.py +0 -0
  582. {squad-1.96 → squad-1.97}/test/core/test_notification_delivery.py +0 -0
  583. {squad-1.96 → squad-1.97}/test/core/test_patch_source.py +0 -0
  584. {squad-1.96 → squad-1.97}/test/core/test_project.py +0 -0
  585. {squad-1.96 → squad-1.97}/test/core/test_project_status.py +0 -0
  586. {squad-1.96 → squad-1.97}/test/core/test_statistics.py +0 -0
  587. {squad-1.96 → squad-1.97}/test/core/test_tasks.py +0 -0
  588. {squad-1.96 → squad-1.97}/test/core/test_tasks_notification.py +0 -0
  589. {squad-1.96 → squad-1.97}/test/core/test_test.py +0 -0
  590. {squad-1.96 → squad-1.97}/test/core/test_test_comparison.py +0 -0
  591. {squad-1.96 → squad-1.97}/test/core/test_test_data.py +0 -0
  592. {squad-1.96 → squad-1.97}/test/core/test_test_run.py +0 -0
  593. {squad-1.96 → squad-1.97}/test/core/test_test_summary.py +0 -0
  594. {squad-1.96 → squad-1.97}/test/core/test_update_project_statuses.py +0 -0
  595. {squad-1.96 → squad-1.97}/test/core/test_user_namespace.py +0 -0
  596. {squad-1.96 → squad-1.97}/test/core/test_utils.py +0 -0
  597. {squad-1.96 → squad-1.97}/test/frontend/__init__.py +0 -0
  598. {squad-1.96 → squad-1.97}/test/frontend/test_comparison.py +0 -0
  599. {squad-1.96 → squad-1.97}/test/frontend/test_get_token_command.py +0 -0
  600. {squad-1.96 → squad-1.97}/test/frontend/test_group_settings.py +0 -0
  601. {squad-1.96 → squad-1.97}/test/frontend/test_history.py +0 -0
  602. {squad-1.96 → squad-1.97}/test/frontend/test_template_tags.py +0 -0
  603. {squad-1.96 → squad-1.97}/test/frontend/test_test_job.py +0 -0
  604. {squad-1.96 → squad-1.97}/test/frontend/test_tests.py +0 -0
  605. {squad-1.96 → squad-1.97}/test/frontend/test_utils.py +0 -0
  606. {squad-1.96 → squad-1.97}/test/integration/__init__.py +0 -0
  607. {squad-1.96 → squad-1.97}/test/integration/test_build_notification_from_ci.py +0 -0
  608. {squad-1.96 → squad-1.97}/test/javascript.py +0 -0
  609. {squad-1.96 → squad-1.97}/test/karma.conf.js +0 -0
  610. {squad-1.96 → squad-1.97}/test/mock.py +0 -0
  611. {squad-1.96 → squad-1.97}/test/performance.py +0 -0
  612. {squad-1.96 → squad-1.97}/test/plugins/__init__.py +0 -0
  613. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/different-numbers-in-function-name-oops.log +0 -0
  614. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/duplicated-oops.log +0 -0
  615. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/internal-error-oops.log +0 -0
  616. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kasan.log +0 -0
  617. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kcsan_full_log.log +0 -0
  618. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kcsan_simple.log +0 -0
  619. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernel_bug_and_invalid_opcode.log +0 -0
  620. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelexceptiontrace.log +0 -0
  621. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelexceptiontrace_without_squarebraces.log +0 -0
  622. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelpanic-multiline.log +0 -0
  623. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kernelpanic-single-and-multiline.log +0 -0
  624. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/kfence.log +0 -0
  625. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/multiple_issues_dmesg.log +0 -0
  626. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/oops.log +0 -0
  627. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser/rcu_warning.log +0 -0
  628. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm64_25103120.log +0 -0
  629. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm64_2957859.log +0 -0
  630. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm_24958120.log +0 -0
  631. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_arm_26001178.log +0 -0
  632. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_i386_25043392.log +0 -0
  633. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_i386_25431539.log +0 -0
  634. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_riscv_24688299.log +0 -0
  635. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_x86_64_25086964.log +0 -0
  636. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/clang_x86_64_26103794.log +0 -0
  637. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm64_24934206.log +0 -0
  638. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm_24951924.log +0 -0
  639. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm_25044425.log +0 -0
  640. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_arm_25078650.log +0 -0
  641. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_i386_25044475.log +0 -0
  642. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_riscv_24715191.log +0 -0
  643. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_s390_26103313.log +0 -0
  644. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_sh_26103296.log +0 -0
  645. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_24932905.log +0 -0
  646. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_26103833.log +0 -0
  647. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_26788931.log +0 -0
  648. {squad-1.96 → squad-1.97}/test/plugins/linux_log_parser_build/gcc_x86_64_26861563.log +0 -0
  649. {squad-1.96 → squad-1.97}/test/plugins/log_parser_base/kfence-seconds-expected.log +0 -0
  650. {squad-1.96 → squad-1.97}/test/plugins/log_parser_base/kfence-seconds.log +0 -0
  651. {squad-1.96 → squad-1.97}/test/plugins/test_gerrit.py +0 -0
  652. {squad-1.96 → squad-1.97}/test/plugins/test_github.py +0 -0
  653. {squad-1.96 → squad-1.97}/test/plugins/test_linux_log_parser_build.py +0 -0
  654. {squad-1.96 → squad-1.97}/test/plugins/test_plugin.py +0 -0
  655. {squad-1.96 → squad-1.97}/test/settings.py +0 -0
  656. {squad-1.96 → squad-1.97}/test/test_architecture.py +0 -0
  657. {squad-1.96 → squad-1.97}/test/test_code_quality.py +0 -0
  658. {squad-1.96 → squad-1.97}/test/test_cors.py +0 -0
  659. {squad-1.96 → squad-1.97}/test/test_i18n.py +0 -0
  660. {squad-1.96 → squad-1.97}/test/test_mail.py +0 -0
  661. {squad-1.96 → squad-1.97}/test/test_pending_migrations.py +0 -0
  662. {squad-1.96 → squad-1.97}/test/unit/test_annotation.js +0 -0
  663. {squad-1.96 → squad-1.97}/test/unit/test_cancel.js +0 -0
  664. {squad-1.96 → squad-1.97}/test/unit/test_charts.js +0 -0
  665. {squad-1.96 → squad-1.97}/test/unit/test_compare.js +0 -0
  666. {squad-1.96 → squad-1.97}/test/unit/test_filter.js +0 -0
  667. {squad-1.96 → squad-1.97}/test/unit/test_resubmit.js +0 -0
@@ -1,3 +1,13 @@
1
+ # 1.97
2
+
3
+ This release adds an optional feature for checking authentication on the home page. This can
4
+ be helpful on installations that get hit by crawlers.
5
+
6
+ # 1.96.1
7
+
8
+ This release fixes small bugs in the previous release regarding picking up log snippets
9
+ from Tuxsuite jobs.
10
+
1
11
  # 1.96
2
12
 
3
13
  This release takes in LAVA logs in Tuxsuite.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: squad
3
- Version: 1.96
3
+ Version: 1.97
4
4
  Summary: Software Quality Dashboard
5
5
  Home-page: https://gitlab.com/Linaro/squad/squad
6
6
  Author: Antonio Terceiro
@@ -392,9 +392,12 @@ class Backend(BaseBackend):
392
392
  if 'unknown' == results['results']['boot']:
393
393
  return None
394
394
 
395
- # Retrieve TuxRun log
395
+ # Retrieve plain text log
396
396
  logs = self.fetch_url(job_url + '/', 'logs?format=txt').text
397
- log_lines = logs.splitlines()
397
+
398
+ # Retrieve YAML log
399
+ log_structured = self.fetch_url(results["download_url"], 'lava-logs.yaml').text
400
+ log_data = yaml.safe_load(log_structured)
398
401
 
399
402
  attachment_list = ["reproducer", "tux_plan.yaml"]
400
403
  attachments = {}
@@ -410,6 +413,13 @@ class Backend(BaseBackend):
410
413
  boot_test_name = 'boot/' + (metadata.get('build_name') or 'boot')
411
414
  tests[boot_test_name] = {'result': results['results']['boot']}
412
415
 
416
+ lava_signal = re.compile("^<LAVA_SIGNAL_")
417
+
418
+ def filter_log(line):
419
+ return type(line["msg"]) is str \
420
+ and line["lvl"] == "target" \
421
+ and not lava_signal.match(line["msg"])
422
+
413
423
  # Really fetch test results
414
424
  tests_results = self.fetch_url(job_url + '/', 'results').json()
415
425
  if tests_results.get('error', None) is None:
@@ -417,16 +427,30 @@ class Backend(BaseBackend):
417
427
  suite_name = re.sub(r'^[0-9]+_', '', suite)
418
428
  for name, test_data in suite_tests.items():
419
429
  test_name = f'{suite_name}/{name}'
420
- result = test_data['result']
430
+ result = test_data.get('result')
431
+ if not result:
432
+ continue
421
433
  if "starttc" in test_data:
422
- starttc = test_data["starttc"] - 1 # LAVA data counts from 1, we count from 0
434
+ try:
435
+ # LAVA data counts from 1, we count from 0
436
+ starttc = int(test_data["starttc"]) - 1
437
+ except ValueError:
438
+ continue
423
439
  if "endtc" in test_data:
424
- # no -1 as the second index of the slice needs to be
425
- # greater than the first to get at least one item.
426
- endtc = test_data["endtc"]
440
+ try:
441
+ # no -1 as the second index of the slice needs to be
442
+ # greater than the first to get at least one item.
443
+ endtc = int(test_data["endtc"])
444
+ except ValueError:
445
+ endtc = starttc + 2
427
446
  else:
428
447
  endtc = starttc + 2
429
- log_snippet = "\n".join(log_lines[starttc:endtc])
448
+ log_lines = [
449
+ line["msg"].replace("\x00", "")
450
+ for line in log_data[starttc:endtc]
451
+ if filter_log(line)
452
+ ]
453
+ log_snippet = "\n".join(log_lines)
430
454
  else:
431
455
  log_snippet = None
432
456
  tests[test_name] = {"result": result, "log": log_snippet}
@@ -31,17 +31,24 @@ class Command(BaseCommand):
31
31
  type=str,
32
32
  help='Project to fetch the data into (Format: foo/bar)',
33
33
  )
34
+ parser.add_argument(
35
+ 'BUILD',
36
+ type=str,
37
+ nargs="?",
38
+ help='Build to fetch the data into',
39
+ )
34
40
 
35
41
  def handle(self, *args, **options):
36
42
  backend_name = options.get("BACKEND")
37
43
  job_id = options.get("JOBID")
38
44
  group_slug, project_slug = options.get("PROJECT").split('/')
45
+ _build = options.get("BUILD") or str(time.time())
39
46
 
40
47
  backend = Backend.objects.get(name=backend_name)
41
48
 
42
49
  group, _ = Group.objects.get_or_create(slug=group_slug)
43
50
  project, _ = group.projects.get_or_create(slug=project_slug)
44
- build = project.builds.create(version=str(time.time()))
51
+ build, _ = project.builds.get_or_create(version=_build)
45
52
 
46
53
  testjob = backend.test_jobs.create(target=project, job_id=job_id, target_build=build)
47
54
 
@@ -2,7 +2,9 @@ import json
2
2
  import mimetypes
3
3
 
4
4
  from django.db.models import Case, When, Prefetch, Max
5
+ from django.core.exceptions import PermissionDenied
5
6
  from django.core.paginator import Paginator, EmptyPage
7
+ from django.conf import settings
6
8
  from django.contrib.auth.decorators import login_required
7
9
  from django.http import HttpResponse, Http404
8
10
  from django.shortcuts import render, get_object_or_404, redirect, reverse
@@ -16,7 +18,7 @@ from squad.core.models import Build, Subscription, TestRun, SuiteMetadata, UserP
16
18
  from squad.core.queries import get_metric_data, test_confidence
17
19
  from squad.frontend.queries import get_metrics_list
18
20
  from squad.frontend.utils import file_type, alphanum_sort
19
- from squad.http import auth
21
+ from squad.http import auth, auth_user_from_request
20
22
  from collections import OrderedDict
21
23
 
22
24
 
@@ -76,6 +78,11 @@ def get_build_testrun_or_404(build, test_run_id):
76
78
 
77
79
  def home(request):
78
80
 
81
+ if settings.LOCK_HOME_PAGE:
82
+ user = auth_user_from_request(request, request.user)
83
+ if not user.is_authenticated:
84
+ raise PermissionDenied()
85
+
79
86
  ordering = request.GET.get('order')
80
87
  if ordering not in ['by_name', 'last_updated']:
81
88
  ordering = 'last_updated'
@@ -29,16 +29,23 @@ REGEXES = MULTILINERS + ONELINERS
29
29
 
30
30
  class Plugin(BasePlugin, BaseLogParser):
31
31
  def __cutoff_boot_log(self, log):
32
- # Attempt to split the log in " login:"
33
- logs = log.split(' login:', 1)
32
+ split_patterns = [r" login:", r"console:/", r"root@(.*):[/~]#"]
33
+ split_index = None
34
34
 
35
- # 1 string means no split was done, consider all logs as test log
36
- if len(logs) == 1:
37
- return '', log
35
+ for pattern in split_patterns:
36
+ match = re.search(pattern, log)
37
+ if match:
38
+ # Find the earliest split point
39
+ if split_index is None or match.start() < split_index:
40
+ split_index = match.start()
38
41
 
39
- boot_log = logs[0]
40
- test_log = logs[1]
41
- return boot_log, test_log
42
+ if split_index is not None:
43
+ boot_log = log[:split_index]
44
+ test_log = log[split_index:]
45
+ return boot_log, test_log
46
+
47
+ # No match found; return whole log as boot log
48
+ return log, ""
42
49
 
43
50
  def __kernel_msgs_only(self, log):
44
51
  kernel_msgs = re.findall(f'({tstamp}{pid}? .*?)$', log, re.S | re.M) # noqa
@@ -444,6 +444,9 @@ DATA_UPLOAD_MAX_MEMORY_SIZE = 10485760 # 10MB
444
444
  # Django requires that this specification is present in settings.py
445
445
  DEFAULT_AUTO_FIELD = 'django.db.models.AutoField'
446
446
 
447
+ # Force SQUAD to require login to access home page. This should reduce the risk of crawlers bots.
448
+ LOCK_HOME_PAGE = False
449
+
447
450
  try:
448
451
  from squad.local_settings import * # noqa: F401,F403
449
452
  except ImportError:
@@ -0,0 +1 @@
1
+ __version__ = '1.97'
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: squad
3
- Version: 1.96
3
+ Version: 1.97
4
4
  Summary: Software Quality Dashboard
5
5
  Home-page: https://gitlab.com/Linaro/squad/squad
6
6
  Author: Antonio Terceiro
@@ -893,6 +893,7 @@ class TuxSuiteTest(TestCase):
893
893
  testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
894
894
  test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
895
895
  build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
896
+ storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
896
897
 
897
898
  # Only fetch when finished
898
899
  with requests_mock.Mocker() as fake_request:
@@ -901,6 +902,7 @@ class TuxSuiteTest(TestCase):
901
902
  self.assertEqual(None, results)
902
903
 
903
904
  test_logs = "\n".join([f"line {i}" for i in range(1, 1000)])
905
+ yaml_logs = "\n".join([f"- {{\"dt\": \"2025-04-09T13:15:59.421673\", \"lvl\": \"target\", \"msg\": \"line {i}\\0\"}}" for i in range(1, 1000)])
904
906
  test_results = {
905
907
  'project': 'tuxgroup/tuxproject',
906
908
  'device': 'qemu-armv7',
@@ -929,7 +931,8 @@ class TuxSuiteTest(TestCase):
929
931
  'finished_time': '2022-03-25T15:52:42.672483',
930
932
  'retries': 0,
931
933
  'retries_messages': [],
932
- 'duration': 151
934
+ 'duration': 151,
935
+ 'download_url': storage_url,
933
936
  }
934
937
  build_results = {
935
938
  'toolchain': 'gcc-10',
@@ -974,6 +977,7 @@ class TuxSuiteTest(TestCase):
974
977
  fake_request.get(test_url, json=test_results)
975
978
  fake_request.get(build_url, json=build_results)
976
979
  fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
980
+ fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
977
981
  fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
978
982
  fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
979
983
  fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
@@ -995,6 +999,7 @@ class TuxSuiteTest(TestCase):
995
999
  testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
996
1000
  test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
997
1001
  build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
1002
+ storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
998
1003
 
999
1004
  # Only fetch when finished
1000
1005
  with requests_mock.Mocker() as fake_request:
@@ -1003,6 +1008,7 @@ class TuxSuiteTest(TestCase):
1003
1008
  self.assertEqual(None, results)
1004
1009
 
1005
1010
  test_logs = 'dummy test log'
1011
+ yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
1006
1012
  test_results = {
1007
1013
  'project': 'tuxgroup/tuxproject',
1008
1014
  'device': 'qemu-armv7',
@@ -1032,7 +1038,8 @@ class TuxSuiteTest(TestCase):
1032
1038
  'finished_time': '2022-03-25T15:52:42.672483',
1033
1039
  'retries': 0,
1034
1040
  'retries_messages': [],
1035
- 'duration': 151
1041
+ 'duration': 151,
1042
+ 'download_url': storage_url,
1036
1043
  }
1037
1044
  build_results = {
1038
1045
  'toolchain': 'gcc-10',
@@ -1077,6 +1084,7 @@ class TuxSuiteTest(TestCase):
1077
1084
  fake_request.get(test_url, json=test_results)
1078
1085
  fake_request.get(build_url, json=build_results)
1079
1086
  fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
1087
+ fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
1080
1088
  fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
1081
1089
  fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
1082
1090
  fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
@@ -1097,8 +1105,10 @@ class TuxSuiteTest(TestCase):
1097
1105
  job_id = 'TEST:tuxgroup@tuxproject#1234'
1098
1106
  testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
1099
1107
  test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/1234')
1108
+ storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
1100
1109
 
1101
1110
  test_logs = 'dummy test log'
1111
+ yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
1102
1112
  test_results = {
1103
1113
  'project': 'tuxgroup/tuxproject',
1104
1114
  'device': 'qemu-armv7',
@@ -1127,7 +1137,8 @@ class TuxSuiteTest(TestCase):
1127
1137
  'finished_time': '2022-03-25T15:52:42.672483',
1128
1138
  'retries': 0,
1129
1139
  'retries_messages': [],
1130
- 'duration': 151
1140
+ 'duration': 151,
1141
+ 'download_url': storage_url,
1131
1142
  }
1132
1143
 
1133
1144
  expected_metadata = {
@@ -1163,6 +1174,7 @@ class TuxSuiteTest(TestCase):
1163
1174
  with requests_mock.Mocker() as fake_request:
1164
1175
  fake_request.get(test_url, json=test_results)
1165
1176
  fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
1177
+ fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
1166
1178
  fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
1167
1179
  fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
1168
1180
  fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
@@ -1183,8 +1195,10 @@ class TuxSuiteTest(TestCase):
1183
1195
  testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
1184
1196
  test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
1185
1197
  build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
1198
+ storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
1186
1199
 
1187
1200
  test_logs = 'dummy test log'
1201
+ yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
1188
1202
  test_results = {
1189
1203
  'project': 'tuxgroup/tuxproject',
1190
1204
  'device': 'qemu-armv7',
@@ -1213,7 +1227,8 @@ class TuxSuiteTest(TestCase):
1213
1227
  'finished_time': '2022-03-25T15:52:42.672483',
1214
1228
  'retries': 0,
1215
1229
  'retries_messages': [],
1216
- 'duration': 151
1230
+ 'duration': 151,
1231
+ 'download_url': storage_url,
1217
1232
  }
1218
1233
  build_results = {
1219
1234
  'toolchain': 'gcc-10',
@@ -1262,6 +1277,7 @@ class TuxSuiteTest(TestCase):
1262
1277
  with requests_mock.Mocker() as fake_request:
1263
1278
  fake_request.get(build_url, json=build_results)
1264
1279
  fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
1280
+ fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
1265
1281
  fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
1266
1282
  fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
1267
1283
  fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
@@ -1283,6 +1299,7 @@ class TuxSuiteTest(TestCase):
1283
1299
  testjob = self.build.test_jobs.create(target=self.project, backend=self.backend, job_id=job_id)
1284
1300
  test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/125')
1285
1301
  build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/567')
1302
+ storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
1286
1303
 
1287
1304
  # Only fetch when finished
1288
1305
  with requests_mock.Mocker() as fake_request:
@@ -1291,6 +1308,7 @@ class TuxSuiteTest(TestCase):
1291
1308
  self.assertEqual(None, results)
1292
1309
 
1293
1310
  test_logs = 'dummy test log'
1311
+ yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
1294
1312
  test_results = {
1295
1313
  'project': 'tuxgroup/tuxproject',
1296
1314
  'device': 'qemu-armv7',
@@ -1319,7 +1337,8 @@ class TuxSuiteTest(TestCase):
1319
1337
  'finished_time': '2022-03-25T15:52:42.672483',
1320
1338
  'retries': 0,
1321
1339
  'retries_messages': [],
1322
- 'duration': 151
1340
+ 'duration': 151,
1341
+ 'download_url': storage_url,
1323
1342
  }
1324
1343
  build_results = {
1325
1344
  'toolchain': 'gcc-10',
@@ -1365,6 +1384,7 @@ class TuxSuiteTest(TestCase):
1365
1384
  fake_request.get(test_url, json=test_results)
1366
1385
  fake_request.get(build_url, json=build_results)
1367
1386
  fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
1387
+ fake_request.get(urljoin(storage_url + '/', 'lava-logs.yaml'), text=yaml_logs)
1368
1388
  fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
1369
1389
  fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
1370
1390
  fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
@@ -1585,8 +1605,10 @@ class TuxSuiteTest(TestCase):
1585
1605
  test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/124')
1586
1606
  sanity_test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/123')
1587
1607
  build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
1608
+ storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
1588
1609
 
1589
1610
  test_logs = 'dummy test log'
1611
+ yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dumumy test log"}'
1590
1612
  test_results = {
1591
1613
  'project': 'tuxgroup/tuxproject',
1592
1614
  'uid': '124',
@@ -1596,6 +1618,7 @@ class TuxSuiteTest(TestCase):
1596
1618
  'results': {'boot': 'pass', 'ltp-smoke': 'pass'},
1597
1619
  'plan': None,
1598
1620
  'waiting_for': 'TEST#123',
1621
+ 'download_url': storage_url,
1599
1622
  }
1600
1623
  sanity_test_results = {
1601
1624
  'project': 'tuxgroup/tuxproject',
@@ -1646,6 +1669,7 @@ class TuxSuiteTest(TestCase):
1646
1669
  fake_request.get(sanity_test_url, json=sanity_test_results)
1647
1670
  fake_request.get(build_url, json=build_results)
1648
1671
  fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
1672
+ fake_request.get(urljoin(storage_url, 'lava-logs.yaml'), text=yaml_logs)
1649
1673
  fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
1650
1674
  fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
1651
1675
  fake_request.get(urljoin(test_url + '/', 'tux_plan.yaml'), text='tux_plan.yaml contents')
@@ -1659,7 +1683,7 @@ class TuxSuiteTest(TestCase):
1659
1683
  self.assertEqual(sorted(expected_metrics.items()), sorted(metrics.items()))
1660
1684
  self.assertEqual(test_logs, logs)
1661
1685
 
1662
- self.assertEqual(7, fake_request.call_count)
1686
+ self.assertEqual(9, fake_request.call_count)
1663
1687
 
1664
1688
  self.assertEqual('ltp-smoke', testjob.name)
1665
1689
 
@@ -1671,8 +1695,10 @@ class TuxSuiteTest(TestCase):
1671
1695
  test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/124')
1672
1696
  sanity_test_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/tests/112233')
1673
1697
  build_url = urljoin(TUXSUITE_URL, '/groups/tuxgroup/projects/tuxproject/builds/456')
1698
+ storage_url = "https://storage.example.com/tuxgroup/tuxproject/123/"
1674
1699
 
1675
1700
  test_logs = 'dummy test log'
1701
+ yaml_logs = '- {"dt": "2025-04-09T13:15:59.421673", "lvl": "info", "msg": "dummy test log"}'
1676
1702
  test_results = {
1677
1703
  'project': 'tuxgroup/tuxproject',
1678
1704
  'uid': '124',
@@ -1682,6 +1708,7 @@ class TuxSuiteTest(TestCase):
1682
1708
  'results': {'boot': 'pass', 'ltp-smoke': 'pass'},
1683
1709
  'plan': None,
1684
1710
  'waiting_for': 'TEST#112233',
1711
+ 'download_url': storage_url,
1685
1712
  }
1686
1713
  sanity_test_results = {
1687
1714
  'project': 'tuxgroup/tuxproject',
@@ -1693,6 +1720,7 @@ class TuxSuiteTest(TestCase):
1693
1720
  'result': 'pass',
1694
1721
  'results': {'boot': 'pass', 'ltp-smoke': 'pass'},
1695
1722
  'plan': None,
1723
+ 'download_url': storage_url,
1696
1724
  }
1697
1725
  build_results = {
1698
1726
  'toolchain': 'gcc-10',
@@ -1711,6 +1739,7 @@ class TuxSuiteTest(TestCase):
1711
1739
  fake_request.get(build_url, json=build_results)
1712
1740
  fake_request.get(urljoin(test_url + '/', 'logs'), text=test_logs)
1713
1741
  fake_request.get(urljoin(sanity_test_url + '/', 'logs'), text=test_logs)
1742
+ fake_request.get(urljoin(storage_url, 'lava-logs.yaml'), text=yaml_logs)
1714
1743
  fake_request.get(urljoin(test_url + '/', 'results'), json=test_results_json)
1715
1744
  fake_request.get(urljoin(sanity_test_url + '/', 'results'), json=test_results_json)
1716
1745
  fake_request.get(urljoin(test_url + '/', 'reproducer'), text='reproducer contents')
@@ -1731,12 +1760,12 @@ class TuxSuiteTest(TestCase):
1731
1760
  completed=completed,
1732
1761
  attachments=attachments,
1733
1762
  )
1734
- self.assertEqual(6, fake_request.call_count)
1763
+ self.assertEqual(8, fake_request.call_count)
1735
1764
 
1736
1765
  # Now fetch test, and make sure no extra requests were made
1737
1766
  _, _, metadata, _, _, _, _ = self.tuxsuite.fetch(testjob)
1738
1767
  self.assertEqual(build_name, metadata['build_name'])
1739
- self.assertEqual(11, fake_request.call_count)
1768
+ self.assertEqual(15, fake_request.call_count)
1740
1769
 
1741
1770
  self.assertEqual('ltp-smoke', testjob.name)
1742
1771
 
@@ -4,18 +4,30 @@
4
4
  "result": "pass"
5
5
  },
6
6
  "file-download": {
7
- "duration": "9.95",
8
- "extra": {
9
- "label": "rootfs",
10
- "md5sum": "89e4eea0fecf498dcc97e37b17daad5f",
11
- "sha256sum": "d0bd412d3c540d821447e39a94bba91864f7b143b966c80f247857fa708057db",
12
- "sha512sum": "c36c5ed44ab8b207e1250c770f6ba4f5f67f4d40d53d450589cd567c070a38ff2f626d0322f18acfcdc29db73774821f181ffb731010c334e2b0ab1c36daa673",
13
- "size": 48628967
7
+ "url_repo": {
8
+ "namespace": "common",
9
+ "level": "1.1.3.1.1.1",
10
+ "duration": "0.44",
11
+ "result": "pass",
12
+ "extra": {
13
+ "label": "url_repo",
14
+ "size": 13697125,
15
+ "sha256sum": "2b93882efdc3ea9db81de6e9aeeabab6d35dcf95a898aeaa995db44583b29062"
16
+ }
14
17
  },
15
- "level": "1.5.1",
16
- "namespace": "common",
17
- "result": "pass"
18
- },
18
+ "rootfs": {
19
+ "namespace": "common",
20
+ "level": "1.5.1",
21
+ "duration": "8.99",
22
+ "result": "pass",
23
+ "extra": {
24
+ "label": "rootfs",
25
+ "size": 111407012,
26
+ "sha256sum": "71bcc7bc8dbd4ac7d02d52aed8886662999d6e6c790f9b9e5220beaf580ccfc1"
27
+ },
28
+ "url": "https://storage.tuxboot.com/debian/trixie/arm64/rootfs.ext4.xz"
29
+ }
30
+ },
19
31
  "test-overlay": {
20
32
  "duration": "0.00",
21
33
  "extra": {
@@ -183,9 +195,9 @@
183
195
  "starttc": 994
184
196
  },
185
197
  "ping602": {
186
- "endtc": 997,
198
+ "endtc": "997",
187
199
  "result": "skip",
188
- "starttc": 997
200
+ "starttc": "997"
189
201
  }
190
202
  }
191
203
  }
@@ -77,6 +77,12 @@ class FrontendTest(TestCase):
77
77
  self.assertContains(response, '<strong>mygroup</strong>', html=True, count=1)
78
78
  self.assertIsNotNone(re.search(r'2</span>\s*projects', response.content.decode()))
79
79
 
80
+ def test_home_unauthenticated(self):
81
+ client = Client()
82
+ with self.settings(LOCK_HOME_PAGE=True):
83
+ response = client.get('/')
84
+ self.assertEqual(401, response.status_code)
85
+
80
86
  def test_home_project_count(self):
81
87
  # Test with a logged in user that is not part of the group
82
88
  client = Client()
@@ -33,7 +33,7 @@ class TestLinuxLogParser(TestCase):
33
33
 
34
34
  with self.assertRaises(Exception) as ctx:
35
35
  testrun.tests.get(suite__slug='log-parser-boot')
36
- testrun.tests.get(suite__slug='log-parser-test')
36
+ testrun.tests.get(suite__slug='log-parser-boot')
37
37
 
38
38
  self.assertEqual("Test matching query does not exist.", str(ctx.exception))
39
39
 
@@ -64,7 +64,7 @@ class TestLinuxLogParser(TestCase):
64
64
  testrun = self.new_testrun('kernelexceptiontrace.log')
65
65
  self.plugin.postprocess_testrun(testrun)
66
66
 
67
- test = testrun.tests.get(suite__slug='log-parser-test', metadata__name='exception-warning-cpu-pid-at-kernelsmp-smp_call_function_many_cond')
67
+ test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-kernelsmp-smp_call_function_many_cond')
68
68
  self.assertFalse(test.result)
69
69
  self.assertIsNotNone(test.log)
70
70
  self.assertNotIn('Booting Linux', test.log)
@@ -76,7 +76,7 @@ class TestLinuxLogParser(TestCase):
76
76
  testrun = self.new_testrun('kernelexceptiontrace_without_squarebraces.log')
77
77
  self.plugin.postprocess_testrun(testrun)
78
78
 
79
- test = testrun.tests.get(suite__slug='log-parser-test', metadata__name='exception-warning-cpu-pid-at-kernelsmp-smp_call_function_many_cond')
79
+ test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-kernelsmp-smp_call_function_many_cond')
80
80
  self.assertFalse(test.result)
81
81
  self.assertIsNotNone(test.log)
82
82
  self.assertNotIn('Booting Linux', test.log)
@@ -88,7 +88,7 @@ class TestLinuxLogParser(TestCase):
88
88
  testrun = self.new_testrun('kasan.log')
89
89
  self.plugin.postprocess_testrun(testrun)
90
90
 
91
- test = testrun.tests.get(suite__slug='log-parser-test', metadata__name='kasan-bug-kasan-slab-out-of-bounds-in-kmalloc_oob_right')
91
+ test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='kasan-bug-kasan-slab-out-of-bounds-in-kmalloc_oob_right')
92
92
  self.assertFalse(test.result)
93
93
  self.assertIsNotNone(test.log)
94
94
  self.assertNotIn('Booting Linux', test.log)
@@ -101,7 +101,7 @@ class TestLinuxLogParser(TestCase):
101
101
  testrun = self.new_testrun('kcsan_simple.log')
102
102
  self.plugin.postprocess_testrun(testrun)
103
103
 
104
- test = testrun.tests.get(suite__slug='log-parser-test', metadata__name='kcsan-bug-kcsan-data-race-in-do_page_fault-spectre_v4_enable_task_mitigation')
104
+ test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='kcsan-bug-kcsan-data-race-in-do_page_fault-spectre_v4_enable_task_mitigation')
105
105
 
106
106
  self.assertFalse(test.result)
107
107
  self.assertIsNotNone(test.log)
@@ -128,7 +128,7 @@ class TestLinuxLogParser(TestCase):
128
128
  testrun = self.new_testrun('kernelpanic-multiline.log')
129
129
  self.plugin.postprocess_testrun(testrun)
130
130
 
131
- test = testrun.tests.get(suite__slug='log-parser-test', metadata__name='panic-multiline-kernel-panic-not-syncing-attempted-to-kill-init-exitcode')
131
+ test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='panic-multiline-kernel-panic-not-syncing-attempted-to-kill-init-exitcode')
132
132
  self.assertFalse(test.result)
133
133
  self.assertIsNotNone(test.log)
134
134
  self.assertNotIn('Booting Linux', test.log)
@@ -200,11 +200,11 @@ class TestLinuxLogParser(TestCase):
200
200
  self.plugin.postprocess_testrun(testrun)
201
201
 
202
202
  tests = testrun.tests
203
- test_panic = tests.get(suite__slug='log-parser-test', metadata__name='panic-multiline-kernel-panic-not-syncing-stack-protector-kernel-stack-is-corrupted-in')
204
- test_exception = tests.get(suite__slug='log-parser-test', metadata__name='exception-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy')
205
- test_warning = tests.get(suite__slug='log-parser-test', metadata__name='warning-warning-cpu-pid-at-driversregulatorcore-_regulator_putpart')
206
- test_oops = tests.get(suite__slug='log-parser-test', metadata__name='oops-oops-preempt-smp')
207
- test_fault = tests.get(suite__slug='log-parser-test', metadata__name='fault-unhandled-fault-external-abort-on-non-linefetch-at')
203
+ test_panic = tests.get(suite__slug='log-parser-boot', metadata__name='panic-multiline-kernel-panic-not-syncing-stack-protector-kernel-stack-is-corrupted-in')
204
+ test_exception = tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy')
205
+ test_warning = tests.get(suite__slug='log-parser-boot', metadata__name='warning-warning-cpu-pid-at-driversregulatorcore-_regulator_putpart')
206
+ test_oops = tests.get(suite__slug='log-parser-boot', metadata__name='oops-oops-preempt-smp')
207
+ test_fault = tests.get(suite__slug='log-parser-boot', metadata__name='fault-unhandled-fault-external-abort-on-non-linefetch-at')
208
208
 
209
209
  self.assertFalse(test_panic.result)
210
210
  self.assertNotIn('Boot CPU', test_panic.log)
@@ -252,7 +252,7 @@ class TestLinuxLogParser(TestCase):
252
252
  self.plugin.postprocess_testrun(testrun)
253
253
 
254
254
  tests = testrun.tests
255
- test_warning = tests.get(suite__slug='log-parser-test', metadata__name='warning-warning-suspicious-rcu-usage')
255
+ test_warning = tests.get(suite__slug='log-parser-boot', metadata__name='warning-warning-suspicious-rcu-usage')
256
256
 
257
257
  self.assertFalse(test_warning.result)
258
258
 
@@ -271,7 +271,7 @@ class TestLinuxLogParser(TestCase):
271
271
  testrun.save_log_file(log)
272
272
  self.plugin.postprocess_testrun(testrun)
273
273
 
274
- test = testrun.tests.get(suite__slug='log-parser-test', metadata__name='panic-kernel-panic-not-syncing')
274
+ test = testrun.tests.get(suite__slug='log-parser-boot', metadata__name='panic-kernel-panic-not-syncing')
275
275
  self.assertIsNotNone(test.metadata)
276
276
 
277
277
  def test_boot_log(self):
@@ -309,11 +309,11 @@ class TestLinuxLogParser(TestCase):
309
309
 
310
310
  tests = testrun.tests
311
311
 
312
- test_panic = tests.get(suite__slug='log-parser-test', metadata__name='panic-multiline-kernel-panic-not-syncing-stack-protector-kernel-stack-is-corrupted-in-630e6949dbf4d18f6ab71c0864524cf3e60da1380fe7fd5acbb99d8f5d01ab21')
313
- test_exception = tests.get(suite__slug='log-parser-test', metadata__name='exception-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy-51fc34b6c857dfc70f7ee985b21731cc1745e97a216193a258a1ad90a6cbb9c8')
314
- test_warning = tests.get(suite__slug='log-parser-test', metadata__name='warning-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy-dc992cca96cada94f4930abe87d60c6de25d404f11313bd64f2217d9408e15ef')
315
- test_oops = tests.get(suite__slug='log-parser-test', metadata__name='oops-oops-preempt-smp-4e1ddddb2c142178a8977e7d973c2a13db2bb978aa471c0049ee39fe3fe4d74c')
316
- test_fault = tests.get(suite__slug='log-parser-test', metadata__name='fault-unhandled-fault-external-abort-on-non-linefetch-at-6f9e3ab8f97e35c1e9167fed1e01c6149986819c54451064322b7d4208528e07')
312
+ test_panic = tests.get(suite__slug='log-parser-boot', metadata__name='panic-multiline-kernel-panic-not-syncing-stack-protector-kernel-stack-is-corrupted-in-630e6949dbf4d18f6ab71c0864524cf3e60da1380fe7fd5acbb99d8f5d01ab21')
313
+ test_exception = tests.get(suite__slug='log-parser-boot', metadata__name='exception-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy-51fc34b6c857dfc70f7ee985b21731cc1745e97a216193a258a1ad90a6cbb9c8')
314
+ test_warning = tests.get(suite__slug='log-parser-boot', metadata__name='warning-warning-cpu-pid-at-driversgpudrmradeonradeon_object-radeon_ttm_bo_destroy-dc992cca96cada94f4930abe87d60c6de25d404f11313bd64f2217d9408e15ef')
315
+ test_oops = tests.get(suite__slug='log-parser-boot', metadata__name='oops-oops-preempt-smp-4e1ddddb2c142178a8977e7d973c2a13db2bb978aa471c0049ee39fe3fe4d74c')
316
+ test_fault = tests.get(suite__slug='log-parser-boot', metadata__name='fault-unhandled-fault-external-abort-on-non-linefetch-at-6f9e3ab8f97e35c1e9167fed1e01c6149986819c54451064322b7d4208528e07')
317
317
 
318
318
  self.assertFalse(test_panic.result)
319
319
  self.assertNotIn('Boot CPU', test_panic.log)
@@ -362,7 +362,7 @@ class TestBaseLogParser(TestCase):
362
362
  tests = testrun.tests
363
363
  expected_output = read_sample_file('kfence-seconds-expected.log')
364
364
 
365
- test_kfence_seconds = tests.get(suite__slug='log-parser-test', metadata__name='kfence-bug-kfence-use-after-free-read-in-test_use_after_free_read-12cdfd85b20ffda2c398b1d6f97a7d5230cd4f2caf19ef0fb38bbc98469d3bde')
365
+ test_kfence_seconds = tests.get(suite__slug='log-parser-boot', metadata__name='kfence-bug-kfence-use-after-free-read-in-test_use_after_free_read-12cdfd85b20ffda2c398b1d6f97a7d5230cd4f2caf19ef0fb38bbc98469d3bde')
366
366
  numbers_and_time_removed = self.log_parser.remove_numbers_and_time(test_kfence_seconds.log)
367
367
 
368
368
  self.assertEqual(numbers_and_time_removed.strip(), expected_output.strip())
@@ -1 +0,0 @@
1
- __version__ = '1.96'
File without changes
File without changes
File without changes
File without changes