squad 1.89__tar.gz → 1.91__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (647) hide show
  1. {squad-1.89 → squad-1.91}/CHANGELOG.md +47 -0
  2. {squad-1.89 → squad-1.91}/MANIFEST.in +1 -1
  3. squad-1.91/PKG-INFO +14 -0
  4. {squad-1.89 → squad-1.91}/dev-docker +23 -10
  5. {squad-1.89 → squad-1.91}/doc/install.rst +7 -0
  6. {squad-1.89 → squad-1.91}/scripts/build +1 -4
  7. {squad-1.89 → squad-1.91}/scripts/release +4 -1
  8. {squad-1.89 → squad-1.91}/setup.py +1 -1
  9. {squad-1.89 → squad-1.91}/squad/api/ci.py +11 -6
  10. squad-1.91/squad/api/prometheus.py +52 -0
  11. {squad-1.89 → squad-1.91}/squad/api/urls.py +2 -0
  12. {squad-1.89 → squad-1.91}/squad/api/views.py +1 -1
  13. {squad-1.89 → squad-1.91}/squad/ci/backend/fake.py +3 -0
  14. {squad-1.89 → squad-1.91}/squad/ci/backend/lava.py +6 -1
  15. {squad-1.89 → squad-1.91}/squad/ci/backend/null.py +6 -0
  16. {squad-1.89 → squad-1.91}/squad/ci/backend/tuxsuite.py +38 -4
  17. {squad-1.89 → squad-1.91}/squad/core/management/commands/import_data.py +2 -1
  18. {squad-1.89 → squad-1.91}/squad/core/models.py +2 -2
  19. {squad-1.89 → squad-1.91}/squad/core/tasks/__init__.py +3 -3
  20. {squad-1.89 → squad-1.91}/squad/core/utils.py +7 -4
  21. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project.jinja2 +8 -0
  22. {squad-1.89 → squad-1.91}/squad/frontend/urls.py +1 -0
  23. squad-1.91/squad/plugins/lib/__init__.py +1 -0
  24. squad-1.91/squad/plugins/lib/base_log_parser.py +157 -0
  25. squad-1.91/squad/plugins/linux_log_parser.py +71 -0
  26. {squad-1.89 → squad-1.91}/squad/settings.py +17 -11
  27. squad-1.91/squad/version.py +1 -0
  28. squad-1.91/squad.egg-info/PKG-INFO +14 -0
  29. {squad-1.89 → squad-1.91}/squad.egg-info/SOURCES.txt +9 -4
  30. {squad-1.89 → squad-1.91}/squad.egg-info/entry_points.txt +1 -0
  31. {squad-1.89 → squad-1.91}/squad.egg-info/requires.txt +1 -1
  32. {squad-1.89 → squad-1.91}/test/api/test_ci.py +9 -0
  33. {squad-1.89 → squad-1.91}/test/ci/backend/test_lava.py +6 -0
  34. {squad-1.89 → squad-1.91}/test/ci/backend/test_tuxsuite.py +185 -3
  35. {squad-1.89 → squad-1.91}/test/frontend/test_tests.py +2 -0
  36. squad-1.91/test/plugins/linux_log_parser/internal-error-oops.log +1017 -0
  37. squad-1.91/test/plugins/linux_log_parser/kcsan_full_log.log +3120 -0
  38. squad-1.91/test/plugins/linux_log_parser/kcsan_simple.log +37 -0
  39. squad-1.91/test/plugins/linux_log_parser/kernelpanic-multiline.log +1742 -0
  40. {squad-1.89 → squad-1.91}/test/plugins/test_linux_log_parser.py +80 -52
  41. squad-1.91/test/plugins/test_log_parser_base.py +281 -0
  42. squad-1.89/.github/workflows/release.yml +0 -42
  43. squad-1.89/.github/workflows/test.yml +0 -100
  44. squad-1.89/PKG-INFO +0 -45
  45. squad-1.89/scripts/upload +0 -14
  46. squad-1.89/squad/plugins/linux_log_parser.py +0 -183
  47. squad-1.89/squad/version.py +0 -1
  48. squad-1.89/squad.egg-info/PKG-INFO +0 -45
  49. {squad-1.89 → squad-1.91}/.ackrc +0 -0
  50. {squad-1.89 → squad-1.91}/.coveragerc +0 -0
  51. {squad-1.89 → squad-1.91}/.ctags +0 -0
  52. {squad-1.89 → squad-1.91}/.dockerignore +0 -0
  53. {squad-1.89 → squad-1.91}/.gitignore +0 -0
  54. {squad-1.89 → squad-1.91}/.mailmap +0 -0
  55. {squad-1.89 → squad-1.91}/.readthedocs.yml +0 -0
  56. {squad-1.89 → squad-1.91}/.reuse/dep5 +0 -0
  57. {squad-1.89 → squad-1.91}/COPYING +0 -0
  58. {squad-1.89 → squad-1.91}/COPYRIGHTS +0 -0
  59. {squad-1.89 → squad-1.91}/Dockerfile +0 -0
  60. {squad-1.89 → squad-1.91}/LICENSES/GPL-3.0-or-later.txt +0 -0
  61. {squad-1.89 → squad-1.91}/LICENSES/MIT.txt +0 -0
  62. {squad-1.89 → squad-1.91}/LICENSES/OFL-1.1.txt +0 -0
  63. {squad-1.89 → squad-1.91}/Procfile +0 -0
  64. {squad-1.89 → squad-1.91}/README.rst +0 -0
  65. {squad-1.89 → squad-1.91}/babel.cfg +0 -0
  66. {squad-1.89 → squad-1.91}/doc/.gitignore +0 -0
  67. {squad-1.89 → squad-1.91}/doc/Makefile +0 -0
  68. {squad-1.89 → squad-1.91}/doc/api.rst +0 -0
  69. {squad-1.89 → squad-1.91}/doc/ci.rst +0 -0
  70. {squad-1.89 → squad-1.91}/doc/conf.py +0 -0
  71. {squad-1.89 → squad-1.91}/doc/hacking.rst +0 -0
  72. {squad-1.89 → squad-1.91}/doc/index.rst +0 -0
  73. {squad-1.89 → squad-1.91}/doc/intro.rst +0 -0
  74. {squad-1.89 → squad-1.91}/doc/lava_usecase.rst +0 -0
  75. {squad-1.89 → squad-1.91}/doc/plugins.rst +0 -0
  76. {squad-1.89 → squad-1.91}/doc/quickstart.rst +0 -0
  77. {squad-1.89 → squad-1.91}/doc/translating.rst +0 -0
  78. {squad-1.89 → squad-1.91}/doc/tuxsuite_usecase.rst +0 -0
  79. {squad-1.89 → squad-1.91}/docker/db-dumped +0 -0
  80. {squad-1.89 → squad-1.91}/docker/db-to-be-restored +0 -0
  81. {squad-1.89 → squad-1.91}/docker/docker-compose.yml +0 -0
  82. {squad-1.89 → squad-1.91}/docker/extra_settings.py +0 -0
  83. {squad-1.89 → squad-1.91}/docker/init-db.sh +0 -0
  84. {squad-1.89 → squad-1.91}/docker/rabbitmq.config +0 -0
  85. {squad-1.89 → squad-1.91}/docker/squad-apache.conf +0 -0
  86. {squad-1.89 → squad-1.91}/docker-compose.yaml +0 -0
  87. {squad-1.89 → squad-1.91}/manage.py +0 -0
  88. {squad-1.89 → squad-1.91}/package-lock.json +0 -0
  89. {squad-1.89 → squad-1.91}/package.json +0 -0
  90. {squad-1.89 → squad-1.91}/pytest.ini +0 -0
  91. {squad-1.89 → squad-1.91}/requirements-dev.txt +0 -0
  92. {squad-1.89 → squad-1.91}/requirements.txt +0 -0
  93. {squad-1.89 → squad-1.91}/scripts/check-ci +0 -0
  94. {squad-1.89 → squad-1.91}/scripts/check-ignore +0 -0
  95. {squad-1.89 → squad-1.91}/scripts/community_connector/main.js +0 -0
  96. {squad-1.89 → squad-1.91}/scripts/community_connector/manifest.json +0 -0
  97. {squad-1.89 → squad-1.91}/scripts/dogfood +0 -0
  98. {squad-1.89 → squad-1.91}/scripts/get-metrics +0 -0
  99. {squad-1.89 → squad-1.91}/scripts/get-tests +0 -0
  100. {squad-1.89 → squad-1.91}/scripts/git-build +0 -0
  101. {squad-1.89 → squad-1.91}/scripts/pytest +0 -0
  102. {squad-1.89 → squad-1.91}/scripts/rabbitmq-server +0 -0
  103. {squad-1.89 → squad-1.91}/scripts/release-docker +0 -0
  104. {squad-1.89 → squad-1.91}/scripts/squad-config +0 -0
  105. {squad-1.89 → squad-1.91}/scripts/test-ci +0 -0
  106. {squad-1.89 → squad-1.91}/scripts/test-docker +0 -0
  107. {squad-1.89 → squad-1.91}/scripts/testdata/gen-ci-jobs +0 -0
  108. {squad-1.89 → squad-1.91}/scripts/testdata/gen-metrics +0 -0
  109. {squad-1.89 → squad-1.91}/scripts/testdata/gen-test-data +0 -0
  110. {squad-1.89 → squad-1.91}/scripts/testdata/gen-tests +0 -0
  111. {squad-1.89 → squad-1.91}/scripts/testdata/setup-dev +0 -0
  112. {squad-1.89 → squad-1.91}/scripts/testdata/submit-ci-jobs +0 -0
  113. {squad-1.89 → squad-1.91}/scripts/testdata/submit-test-data +0 -0
  114. {squad-1.89 → squad-1.91}/scripts/translate +0 -0
  115. {squad-1.89 → squad-1.91}/scripts/travis-lava +0 -0
  116. {squad-1.89 → squad-1.91}/scripts/update-translation-files +0 -0
  117. {squad-1.89 → squad-1.91}/setup.cfg +0 -0
  118. {squad-1.89 → squad-1.91}/squad/__init__.py +0 -0
  119. {squad-1.89 → squad-1.91}/squad/admin.py +0 -0
  120. {squad-1.89 → squad-1.91}/squad/api/__init__.py +0 -0
  121. {squad-1.89 → squad-1.91}/squad/api/apps.py +0 -0
  122. {squad-1.89 → squad-1.91}/squad/api/data.py +0 -0
  123. {squad-1.89 → squad-1.91}/squad/api/filters.py +0 -0
  124. {squad-1.89 → squad-1.91}/squad/api/rest.py +0 -0
  125. {squad-1.89 → squad-1.91}/squad/api/utils.py +0 -0
  126. {squad-1.89 → squad-1.91}/squad/celery.py +0 -0
  127. {squad-1.89 → squad-1.91}/squad/ci/__init__.py +0 -0
  128. {squad-1.89 → squad-1.91}/squad/ci/admin.py +0 -0
  129. {squad-1.89 → squad-1.91}/squad/ci/apps.py +0 -0
  130. {squad-1.89 → squad-1.91}/squad/ci/backend/__init__.py +0 -0
  131. {squad-1.89 → squad-1.91}/squad/ci/exceptions.py +0 -0
  132. {squad-1.89 → squad-1.91}/squad/ci/management/__init__.py +0 -0
  133. {squad-1.89 → squad-1.91}/squad/ci/management/commands/__init__.py +0 -0
  134. {squad-1.89 → squad-1.91}/squad/ci/management/commands/create_tuxsuite_boot_tests.py +0 -0
  135. {squad-1.89 → squad-1.91}/squad/ci/management/commands/listen.py +0 -0
  136. {squad-1.89 → squad-1.91}/squad/ci/management/commands/testfetch.py +0 -0
  137. {squad-1.89 → squad-1.91}/squad/ci/migrations/0001_initial.py +0 -0
  138. {squad-1.89 → squad-1.91}/squad/ci/migrations/0002_auto_20170406_1252.py +0 -0
  139. {squad-1.89 → squad-1.91}/squad/ci/migrations/0003_backend_name.py +0 -0
  140. {squad-1.89 → squad-1.91}/squad/ci/migrations/0004_testjob_failure.py +0 -0
  141. {squad-1.89 → squad-1.91}/squad/ci/migrations/0005_remove_listener_data.py +0 -0
  142. {squad-1.89 → squad-1.91}/squad/ci/migrations/0006_simplify_backend_loading.py +0 -0
  143. {squad-1.89 → squad-1.91}/squad/ci/migrations/0007_auto_20170517_1736.py +0 -0
  144. {squad-1.89 → squad-1.91}/squad/ci/migrations/0008_testjob_testrun.py +0 -0
  145. {squad-1.89 → squad-1.91}/squad/ci/migrations/0009_slug_pattern.py +0 -0
  146. {squad-1.89 → squad-1.91}/squad/ci/migrations/0010_testjob_can_resubmit.py +0 -0
  147. {squad-1.89 → squad-1.91}/squad/ci/migrations/0011_testjob_resubmitted_count.py +0 -0
  148. {squad-1.89 → squad-1.91}/squad/ci/migrations/0012_testjob_build.py +0 -0
  149. {squad-1.89 → squad-1.91}/squad/ci/migrations/0013_testjob_name.py +0 -0
  150. {squad-1.89 → squad-1.91}/squad/ci/migrations/0014_testjob_target_build.py +0 -0
  151. {squad-1.89 → squad-1.91}/squad/ci/migrations/0015_testjob_populate_target_build.py +0 -0
  152. {squad-1.89 → squad-1.91}/squad/ci/migrations/0016_backend_max_fetch_attempts.py +0 -0
  153. {squad-1.89 → squad-1.91}/squad/ci/migrations/0017_testjob_fetch_attempts.py +0 -0
  154. {squad-1.89 → squad-1.91}/squad/ci/migrations/0018_testjob_dates.py +0 -0
  155. {squad-1.89 → squad-1.91}/squad/ci/migrations/0019_add_fake_backend.py +0 -0
  156. {squad-1.89 → squad-1.91}/squad/ci/migrations/0020_backend_settings_field.py +0 -0
  157. {squad-1.89 → squad-1.91}/squad/ci/migrations/0021_testjob_parent_job.py +0 -0
  158. {squad-1.89 → squad-1.91}/squad/ci/migrations/0022_backend_poll_enabled.py +0 -0
  159. {squad-1.89 → squad-1.91}/squad/ci/migrations/0023_remove_testjob_build.py +0 -0
  160. {squad-1.89 → squad-1.91}/squad/ci/migrations/0024_fix_testjob_environment_validation.py +0 -0
  161. {squad-1.89 → squad-1.91}/squad/ci/migrations/0025_backend_listen_enabled.py +0 -0
  162. {squad-1.89 → squad-1.91}/squad/ci/migrations/0026_job_start_end_time.py +0 -0
  163. {squad-1.89 → squad-1.91}/squad/ci/migrations/0027_add_tuxsuite_implementation_type.py +0 -0
  164. {squad-1.89 → squad-1.91}/squad/ci/migrations/0028_create_testjob_indexes.py +0 -0
  165. {squad-1.89 → squad-1.91}/squad/ci/migrations/0029_create_testjob_results_input.py +0 -0
  166. {squad-1.89 → squad-1.91}/squad/ci/migrations/0030_testjob_subtasks_count.py +0 -0
  167. {squad-1.89 → squad-1.91}/squad/ci/migrations/__init__.py +0 -0
  168. {squad-1.89 → squad-1.91}/squad/ci/models.py +0 -0
  169. {squad-1.89 → squad-1.91}/squad/ci/tasks.py +0 -0
  170. {squad-1.89 → squad-1.91}/squad/ci/templates/squad/ci/testjob_resubmit.html.jinja2 +0 -0
  171. {squad-1.89 → squad-1.91}/squad/ci/templates/squad/ci/testjob_resubmit.txt.jinja2 +0 -0
  172. {squad-1.89 → squad-1.91}/squad/ci/templatetags/__init__.py +0 -0
  173. {squad-1.89 → squad-1.91}/squad/ci/templatetags/filter_jobs.py +0 -0
  174. {squad-1.89 → squad-1.91}/squad/ci/utils.py +0 -0
  175. {squad-1.89 → squad-1.91}/squad/compat.py +0 -0
  176. {squad-1.89 → squad-1.91}/squad/container_settings.py +0 -0
  177. {squad-1.89 → squad-1.91}/squad/core/__init__.py +0 -0
  178. {squad-1.89 → squad-1.91}/squad/core/admin.py +0 -0
  179. {squad-1.89 → squad-1.91}/squad/core/apps.py +0 -0
  180. {squad-1.89 → squad-1.91}/squad/core/callback.py +0 -0
  181. {squad-1.89 → squad-1.91}/squad/core/comparison.py +0 -0
  182. {squad-1.89 → squad-1.91}/squad/core/data.py +0 -0
  183. {squad-1.89 → squad-1.91}/squad/core/failures.py +0 -0
  184. {squad-1.89 → squad-1.91}/squad/core/history.py +0 -0
  185. {squad-1.89 → squad-1.91}/squad/core/locale/django.pot +0 -0
  186. {squad-1.89 → squad-1.91}/squad/core/locale/es_MX/LC_MESSAGES/django.po +0 -0
  187. {squad-1.89 → squad-1.91}/squad/core/locale/pl/LC_MESSAGES/django.po +0 -0
  188. {squad-1.89 → squad-1.91}/squad/core/locale/pt/LC_MESSAGES/django.po +0 -0
  189. {squad-1.89 → squad-1.91}/squad/core/locale/pt_BR/LC_MESSAGES/django.po +0 -0
  190. {squad-1.89 → squad-1.91}/squad/core/management/__init__.py +0 -0
  191. {squad-1.89 → squad-1.91}/squad/core/management/commands/__init__.py +0 -0
  192. {squad-1.89 → squad-1.91}/squad/core/management/commands/compute_build_summaries.py +0 -0
  193. {squad-1.89 → squad-1.91}/squad/core/management/commands/compute_project_statuses.py +0 -0
  194. {squad-1.89 → squad-1.91}/squad/core/management/commands/fill_test_metadata.py +0 -0
  195. {squad-1.89 → squad-1.91}/squad/core/management/commands/fix_squadplugin_data.py +0 -0
  196. {squad-1.89 → squad-1.91}/squad/core/management/commands/import_data.rst +0 -0
  197. {squad-1.89 → squad-1.91}/squad/core/management/commands/migrate_test_runs.py +0 -0
  198. {squad-1.89 → squad-1.91}/squad/core/management/commands/populate_metric_build_and_environment.py +0 -0
  199. {squad-1.89 → squad-1.91}/squad/core/management/commands/populate_test_build_and_environment.py +0 -0
  200. {squad-1.89 → squad-1.91}/squad/core/management/commands/prepdump.py +0 -0
  201. {squad-1.89 → squad-1.91}/squad/core/management/commands/send-email.py +0 -0
  202. {squad-1.89 → squad-1.91}/squad/core/management/commands/update_project_statuses.py +0 -0
  203. {squad-1.89 → squad-1.91}/squad/core/management/commands/users.py +0 -0
  204. {squad-1.89 → squad-1.91}/squad/core/migrations/0001_initial.py +0 -0
  205. {squad-1.89 → squad-1.91}/squad/core/migrations/0002_auto_20160525_1403.py +0 -0
  206. {squad-1.89 → squad-1.91}/squad/core/migrations/0003_testrun_log_file.py +0 -0
  207. {squad-1.89 → squad-1.91}/squad/core/migrations/0004_group_user_groups.py +0 -0
  208. {squad-1.89 → squad-1.91}/squad/core/migrations/0005_token.py +0 -0
  209. {squad-1.89 → squad-1.91}/squad/core/migrations/0006_auto_20160826_2242.py +0 -0
  210. {squad-1.89 → squad-1.91}/squad/core/migrations/0007_testrun_data_processed.py +0 -0
  211. {squad-1.89 → squad-1.91}/squad/core/migrations/0008_status.py +0 -0
  212. {squad-1.89 → squad-1.91}/squad/core/migrations/0009_testrun_status_recorded.py +0 -0
  213. {squad-1.89 → squad-1.91}/squad/core/migrations/0010_testrun_datetime.py +0 -0
  214. {squad-1.89 → squad-1.91}/squad/core/migrations/0011_testrun_metadata_fields.py +0 -0
  215. {squad-1.89 → squad-1.91}/squad/core/migrations/0012_build_datetime.py +0 -0
  216. {squad-1.89 → squad-1.91}/squad/core/migrations/0013_testrun_resubmit_url.py +0 -0
  217. {squad-1.89 → squad-1.91}/squad/core/migrations/0014_testrun_metadata_file.py +0 -0
  218. {squad-1.89 → squad-1.91}/squad/core/migrations/0015_attachment.py +0 -0
  219. {squad-1.89 → squad-1.91}/squad/core/migrations/0016_project_is_public.py +0 -0
  220. {squad-1.89 → squad-1.91}/squad/core/migrations/0017_slug_validator.py +0 -0
  221. {squad-1.89 → squad-1.91}/squad/core/migrations/0018_build_name.py +0 -0
  222. {squad-1.89 → squad-1.91}/squad/core/migrations/0019_build_version.py +0 -0
  223. {squad-1.89 → squad-1.91}/squad/core/migrations/0020_build_ordering.py +0 -0
  224. {squad-1.89 → squad-1.91}/squad/core/migrations/0021_global_tokens.py +0 -0
  225. {squad-1.89 → squad-1.91}/squad/core/migrations/0022_projectstatus.py +0 -0
  226. {squad-1.89 → squad-1.91}/squad/core/migrations/0023_subscription.py +0 -0
  227. {squad-1.89 → squad-1.91}/squad/core/migrations/0024_project_build_completion_threshold.py +0 -0
  228. {squad-1.89 → squad-1.91}/squad/core/migrations/0025_unique_testrun_job_id.py +0 -0
  229. {squad-1.89 → squad-1.91}/squad/core/migrations/0026_testrun_result_accept_null.py +0 -0
  230. {squad-1.89 → squad-1.91}/squad/core/migrations/0027_project_notification_strategy.py +0 -0
  231. {squad-1.89 → squad-1.91}/squad/core/migrations/0028_suite_and_test_name_length.py +0 -0
  232. {squad-1.89 → squad-1.91}/squad/core/migrations/0029_subscription_email_formats.py +0 -0
  233. {squad-1.89 → squad-1.91}/squad/core/migrations/0030_remove_project_build_completion_threshold.py +0 -0
  234. {squad-1.89 → squad-1.91}/squad/core/migrations/0031_environment_expected_test_runs.py +0 -0
  235. {squad-1.89 → squad-1.91}/squad/core/migrations/0032_testrun_completed.py +0 -0
  236. {squad-1.89 → squad-1.91}/squad/core/migrations/0033_drop_debversion.py +0 -0
  237. {squad-1.89 → squad-1.91}/squad/core/migrations/0034_prepare_to_remove_build_name.py +0 -0
  238. {squad-1.89 → squad-1.91}/squad/core/migrations/0035_remove_build_name.py +0 -0
  239. {squad-1.89 → squad-1.91}/squad/core/migrations/0036_status_tests_skip.py +0 -0
  240. {squad-1.89 → squad-1.91}/squad/core/migrations/0037_project_status_test_summary_fields.py +0 -0
  241. {squad-1.89 → squad-1.91}/squad/core/migrations/0038_populate_project_status_cache.py +0 -0
  242. {squad-1.89 → squad-1.91}/squad/core/migrations/0039_orderings.py +0 -0
  243. {squad-1.89 → squad-1.91}/squad/core/migrations/0040_remove_subscription_html.py +0 -0
  244. {squad-1.89 → squad-1.91}/squad/core/migrations/0041_projectstatus_notified.py +0 -0
  245. {squad-1.89 → squad-1.91}/squad/core/migrations/0042_set_projectstatus_notified.py +0 -0
  246. {squad-1.89 → squad-1.91}/squad/core/migrations/0043_project_status_build.py +0 -0
  247. {squad-1.89 → squad-1.91}/squad/core/migrations/0044_project_html_mail.py +0 -0
  248. {squad-1.89 → squad-1.91}/squad/core/migrations/0045_adminsubscription.py +0 -0
  249. {squad-1.89 → squad-1.91}/squad/core/migrations/0046_projectstatus_last_updated.py +0 -0
  250. {squad-1.89 → squad-1.91}/squad/core/migrations/0047_populate_projectstatus_last_updated.py +0 -0
  251. {squad-1.89 → squad-1.91}/squad/core/migrations/0048_moderate_notifications.py +0 -0
  252. {squad-1.89 → squad-1.91}/squad/core/migrations/0049_projectstatus_plural.py +0 -0
  253. {squad-1.89 → squad-1.91}/squad/core/migrations/0050_projectstatus_finished.py +0 -0
  254. {squad-1.89 → squad-1.91}/squad/core/migrations/0051_build_status.py +0 -0
  255. {squad-1.89 → squad-1.91}/squad/core/migrations/0052_recreate_projectstatus_data.py +0 -0
  256. {squad-1.89 → squad-1.91}/squad/core/migrations/0053_remove_projectstatus_previous.py +0 -0
  257. {squad-1.89 → squad-1.91}/squad/core/migrations/0054_custom_email_template.py +0 -0
  258. {squad-1.89 → squad-1.91}/squad/core/migrations/0055_emailtemplate_subject.py +0 -0
  259. {squad-1.89 → squad-1.91}/squad/core/migrations/0056_project_description.py +0 -0
  260. {squad-1.89 → squad-1.91}/squad/core/migrations/0057_projectstatus_has_metrics.py +0 -0
  261. {squad-1.89 → squad-1.91}/squad/core/migrations/0058_populate_projectstatus_has_metrics.py +0 -0
  262. {squad-1.89 → squad-1.91}/squad/core/migrations/0059_project_important_metadata_keys.py +0 -0
  263. {squad-1.89 → squad-1.91}/squad/core/migrations/0060_test_log.py +0 -0
  264. {squad-1.89 → squad-1.91}/squad/core/migrations/0061_project_enabled_plugins_list.py +0 -0
  265. {squad-1.89 → squad-1.91}/squad/core/migrations/0062_project_allow_empty_enabled_plugin_list.py +0 -0
  266. {squad-1.89 → squad-1.91}/squad/core/migrations/0063_project_wait_before_notification.py +0 -0
  267. {squad-1.89 → squad-1.91}/squad/core/migrations/0064_project_notification_timeout.py +0 -0
  268. {squad-1.89 → squad-1.91}/squad/core/migrations/0065_projectstatus_notified_on_timeout.py +0 -0
  269. {squad-1.89 → squad-1.91}/squad/core/migrations/0066_environment_description.py +0 -0
  270. {squad-1.89 → squad-1.91}/squad/core/migrations/0067_accept_blank_suite_name.py +0 -0
  271. {squad-1.89 → squad-1.91}/squad/core/migrations/0068_suite_version.py +0 -0
  272. {squad-1.89 → squad-1.91}/squad/core/migrations/0069_suite_metadata.py +0 -0
  273. {squad-1.89 → squad-1.91}/squad/core/migrations/0070_create_suite_test_and_metric_metadata.py +0 -0
  274. {squad-1.89 → squad-1.91}/squad/core/migrations/0071_migrate_old_tokens.py +0 -0
  275. {squad-1.89 → squad-1.91}/squad/core/migrations/0072_group_description.py +0 -0
  276. {squad-1.89 → squad-1.91}/squad/core/migrations/0073_auto_20180420_1643.py +0 -0
  277. {squad-1.89 → squad-1.91}/squad/core/migrations/0074_add_indexes.py +0 -0
  278. {squad-1.89 → squad-1.91}/squad/core/migrations/0075_update_project_enabled_plugin_list.py +0 -0
  279. {squad-1.89 → squad-1.91}/squad/core/migrations/0076_patch_builds.py +0 -0
  280. {squad-1.89 → squad-1.91}/squad/core/migrations/0077_knownissue.py +0 -0
  281. {squad-1.89 → squad-1.91}/squad/core/migrations/0078_cache_test_run_counts.py +0 -0
  282. {squad-1.89 → squad-1.91}/squad/core/migrations/0079_init_cache_test_run_counts.py +0 -0
  283. {squad-1.89 → squad-1.91}/squad/core/migrations/0080_auto_20180810_0047.py +0 -0
  284. {squad-1.89 → squad-1.91}/squad/core/migrations/0081_status_has_metrics.py +0 -0
  285. {squad-1.89 → squad-1.91}/squad/core/migrations/0082_populate_status_has_metrics.py +0 -0
  286. {squad-1.89 → squad-1.91}/squad/core/migrations/0083_rename_knownissue_environments.py +0 -0
  287. {squad-1.89 → squad-1.91}/squad/core/migrations/0084_projectstatus_regressions_fixes.py +0 -0
  288. {squad-1.89 → squad-1.91}/squad/core/migrations/0085_projectstatus_defaults.py +0 -0
  289. {squad-1.89 → squad-1.91}/squad/core/migrations/0086_xfail.py +0 -0
  290. {squad-1.89 → squad-1.91}/squad/core/migrations/0087_test_known_issues.py +0 -0
  291. {squad-1.89 → squad-1.91}/squad/core/migrations/0088_user_subscriptions.py +0 -0
  292. {squad-1.89 → squad-1.91}/squad/core/migrations/0089_test_has_known_issues.py +0 -0
  293. {squad-1.89 → squad-1.91}/squad/core/migrations/0090_populate_test_has_known_issues.py +0 -0
  294. {squad-1.89 → squad-1.91}/squad/core/migrations/0091_notification_delivery_remove_unique_status.py +0 -0
  295. {squad-1.89 → squad-1.91}/squad/core/migrations/0092_annotation.py +0 -0
  296. {squad-1.89 → squad-1.91}/squad/core/migrations/0093_historicalemailtemplate.py +0 -0
  297. {squad-1.89 → squad-1.91}/squad/core/migrations/0094_populatehistoricalemailtemplate.py +0 -0
  298. {squad-1.89 → squad-1.91}/squad/core/migrations/0095_project_data_retention_days.py +0 -0
  299. {squad-1.89 → squad-1.91}/squad/core/migrations/0096_build_keep_data.py +0 -0
  300. {squad-1.89 → squad-1.91}/squad/core/migrations/0097_build_placeholder.py +0 -0
  301. {squad-1.89 → squad-1.91}/squad/core/migrations/0098_blank_annotation.py +0 -0
  302. {squad-1.89 → squad-1.91}/squad/core/migrations/0099_metricthreshold.py +0 -0
  303. {squad-1.89 → squad-1.91}/squad/core/migrations/0100_metric_is_outlier.py +0 -0
  304. {squad-1.89 → squad-1.91}/squad/core/migrations/0101_project_project_settings.py +0 -0
  305. {squad-1.89 → squad-1.91}/squad/core/migrations/0102_projectstatus_null_metric_summary.py +0 -0
  306. {squad-1.89 → squad-1.91}/squad/core/migrations/0103_populate_project_status.py +0 -0
  307. {squad-1.89 → squad-1.91}/squad/core/migrations/0104_delayedreport.py +0 -0
  308. {squad-1.89 → squad-1.91}/squad/core/migrations/0105_delayed_report_error_message.py +0 -0
  309. {squad-1.89 → squad-1.91}/squad/core/migrations/0106_delayedreport_output_subject.py +0 -0
  310. {squad-1.89 → squad-1.91}/squad/core/migrations/0107_move_notification_strategy.py +0 -0
  311. {squad-1.89 → squad-1.91}/squad/core/migrations/0108_add_email_template_validator.py +0 -0
  312. {squad-1.89 → squad-1.91}/squad/core/migrations/0109_group_member.py +0 -0
  313. {squad-1.89 → squad-1.91}/squad/core/migrations/0110_move_users_from_django_groups_to_squad_groups.py +0 -0
  314. {squad-1.89 → squad-1.91}/squad/core/migrations/0111_remove_group_user_groups.py +0 -0
  315. {squad-1.89 → squad-1.91}/squad/core/migrations/0112_user_namespaces.py +0 -0
  316. {squad-1.89 → squad-1.91}/squad/core/migrations/0113_group_project_blank_name_and_description.py +0 -0
  317. {squad-1.89 → squad-1.91}/squad/core/migrations/0114_project_enabled_plugin_list_can_be_blank.py +0 -0
  318. {squad-1.89 → squad-1.91}/squad/core/migrations/0115_fix_slug_validation.py +0 -0
  319. {squad-1.89 → squad-1.91}/squad/core/migrations/0116_make_group_membership_unique.py +0 -0
  320. {squad-1.89 → squad-1.91}/squad/core/migrations/0117_drop_obsolete_token_model.py +0 -0
  321. {squad-1.89 → squad-1.91}/squad/core/migrations/0118_project_is_archived.py +0 -0
  322. {squad-1.89 → squad-1.91}/squad/core/migrations/0119_i18n.py +0 -0
  323. {squad-1.89 → squad-1.91}/squad/core/migrations/0120_buildsummary.py +0 -0
  324. {squad-1.89 → squad-1.91}/squad/core/migrations/0121_add_password_patchsource.py +0 -0
  325. {squad-1.89 → squad-1.91}/squad/core/migrations/0122_fix_patchsource_url_and_token.py +0 -0
  326. {squad-1.89 → squad-1.91}/squad/core/migrations/0123_django_upgrade_missing_migrations.py +0 -0
  327. {squad-1.89 → squad-1.91}/squad/core/migrations/0124_set_default_expected_test_runs_to_zero.py +0 -0
  328. {squad-1.89 → squad-1.91}/squad/core/migrations/0125_fix_missing_status_has_metrics_for_testruns.py +0 -0
  329. {squad-1.89 → squad-1.91}/squad/core/migrations/0126_metricthreshold_environment.py +0 -0
  330. {squad-1.89 → squad-1.91}/squad/core/migrations/0127_metric_thresholds_migrate_data.py +0 -0
  331. {squad-1.89 → squad-1.91}/squad/core/migrations/0128_metric_thresholds_remove_proj_col.py +0 -0
  332. {squad-1.89 → squad-1.91}/squad/core/migrations/0129_projectstatus_nullable_notified_on_timeout.py +0 -0
  333. {squad-1.89 → squad-1.91}/squad/core/migrations/0130_project_status_baseline_next.py +0 -0
  334. {squad-1.89 → squad-1.91}/squad/core/migrations/0131_create_squad_auth_group_and_add_users.py +0 -0
  335. {squad-1.89 → squad-1.91}/squad/core/migrations/0132_attachment_mimetype.py +0 -0
  336. {squad-1.89 → squad-1.91}/squad/core/migrations/0133_append_project_permissions_to_squad_auth_group.py +0 -0
  337. {squad-1.89 → squad-1.91}/squad/core/migrations/0134_longer_metric_name.py +0 -0
  338. {squad-1.89 → squad-1.91}/squad/core/migrations/0135_add_privileged_access_level.py +0 -0
  339. {squad-1.89 → squad-1.91}/squad/core/migrations/0136_migrate_submitters_to_privileged.py +0 -0
  340. {squad-1.89 → squad-1.91}/squad/core/migrations/0137_patchsource_token_null.py +0 -0
  341. {squad-1.89 → squad-1.91}/squad/core/migrations/0138_metric_unit.py +0 -0
  342. {squad-1.89 → squad-1.91}/squad/core/migrations/0139_nullable_test_name.py +0 -0
  343. {squad-1.89 → squad-1.91}/squad/core/migrations/0140_increase_gerrit_password_length.py +0 -0
  344. {squad-1.89 → squad-1.91}/squad/core/migrations/0141_remove_test_name.py +0 -0
  345. {squad-1.89 → squad-1.91}/squad/core/migrations/0142_add_testrun_file_storage.py +0 -0
  346. {squad-1.89 → squad-1.91}/squad/core/migrations/0143_attachment_storage.py +0 -0
  347. {squad-1.89 → squad-1.91}/squad/core/migrations/0144_attachment_data_null.py +0 -0
  348. {squad-1.89 → squad-1.91}/squad/core/migrations/0145_pluginscratch.py +0 -0
  349. {squad-1.89 → squad-1.91}/squad/core/migrations/0146_deprecate_testrun_and_attachment_data_fields.py +0 -0
  350. {squad-1.89 → squad-1.91}/squad/core/migrations/0147_add_build_and_environment_to_test.py +0 -0
  351. {squad-1.89 → squad-1.91}/squad/core/migrations/0148_remove_legacy_storage_fields.py +0 -0
  352. {squad-1.89 → squad-1.91}/squad/core/migrations/0149_build_patch_url.py +0 -0
  353. {squad-1.89 → squad-1.91}/squad/core/migrations/0150_add_new_notification_strategy.py +0 -0
  354. {squad-1.89 → squad-1.91}/squad/core/migrations/0151_callback.py +0 -0
  355. {squad-1.89 → squad-1.91}/squad/core/migrations/0152_add_build_patch_notified.py +0 -0
  356. {squad-1.89 → squad-1.91}/squad/core/migrations/0153_callback_make_response_content_blob.py +0 -0
  357. {squad-1.89 → squad-1.91}/squad/core/migrations/0154_project_add_force_finishing_builds_field.py +0 -0
  358. {squad-1.89 → squad-1.91}/squad/core/migrations/0155_add_build_and_environment_to_metric.py +0 -0
  359. {squad-1.89 → squad-1.91}/squad/core/migrations/0156_nullable_metric_name.py +0 -0
  360. {squad-1.89 → squad-1.91}/squad/core/migrations/0157_remove_metric_name.py +0 -0
  361. {squad-1.89 → squad-1.91}/squad/core/migrations/0158_add_metric_comparison_to_projectstatus.py +0 -0
  362. {squad-1.89 → squad-1.91}/squad/core/migrations/0159_nullable_metricthreshold_value.py +0 -0
  363. {squad-1.89 → squad-1.91}/squad/core/migrations/0160_add_project_to_metricthreshold.py +0 -0
  364. {squad-1.89 → squad-1.91}/squad/core/migrations/0161_add_metricthreshold_perm_to_squad_group.py +0 -0
  365. {squad-1.89 → squad-1.91}/squad/core/migrations/0162_project_add_build_confidence_settings.py +0 -0
  366. {squad-1.89 → squad-1.91}/squad/core/migrations/0163_hirtoricalemailtemplate_update.py +0 -0
  367. {squad-1.89 → squad-1.91}/squad/core/migrations/0164_django_update.py +0 -0
  368. {squad-1.89 → squad-1.91}/squad/core/migrations/0165_buildsummary_uniqueness.py +0 -0
  369. {squad-1.89 → squad-1.91}/squad/core/migrations/0166_build_is_release.py +0 -0
  370. {squad-1.89 → squad-1.91}/squad/core/migrations/0167_add_project_datetime.py +0 -0
  371. {squad-1.89 → squad-1.91}/squad/core/migrations/0168_add_group_settings.py +0 -0
  372. {squad-1.89 → squad-1.91}/squad/core/migrations/0169_userpreferences.py +0 -0
  373. {squad-1.89 → squad-1.91}/squad/core/migrations/__init__.py +0 -0
  374. {squad-1.89 → squad-1.91}/squad/core/notification.py +0 -0
  375. {squad-1.89 → squad-1.91}/squad/core/plugins.py +0 -0
  376. {squad-1.89 → squad-1.91}/squad/core/queries.py +0 -0
  377. {squad-1.89 → squad-1.91}/squad/core/statistics.py +0 -0
  378. {squad-1.89 → squad-1.91}/squad/core/tasks/exceptions.py +0 -0
  379. {squad-1.89 → squad-1.91}/squad/core/tasks/notification.py +0 -0
  380. {squad-1.89 → squad-1.91}/squad/core/templates/squad/notification/base.jinja2 +0 -0
  381. {squad-1.89 → squad-1.91}/squad/core/templates/squad/notification/diff.html.jinja2 +0 -0
  382. {squad-1.89 → squad-1.91}/squad/core/templates/squad/notification/diff.txt.jinja2 +0 -0
  383. {squad-1.89 → squad-1.91}/squad/core/templates/squad/notification/failed_test_jobs.html.jinja2 +0 -0
  384. {squad-1.89 → squad-1.91}/squad/core/templates/squad/notification/failed_test_jobs.txt.jinja2 +0 -0
  385. {squad-1.89 → squad-1.91}/squad/core/templates/squad/notification/moderation.html.jinja2 +0 -0
  386. {squad-1.89 → squad-1.91}/squad/core/templates/squad/notification/moderation.txt.jinja2 +0 -0
  387. {squad-1.89 → squad-1.91}/squad/core/templatetags/__init__.py +0 -0
  388. {squad-1.89 → squad-1.91}/squad/core/templatetags/squad_notification.py +0 -0
  389. {squad-1.89 → squad-1.91}/squad/frontend/__init__.py +0 -0
  390. {squad-1.89 → squad-1.91}/squad/frontend/__main__.py +0 -0
  391. {squad-1.89 → squad-1.91}/squad/frontend/admin.py +0 -0
  392. {squad-1.89 → squad-1.91}/squad/frontend/apps.py +0 -0
  393. {squad-1.89 → squad-1.91}/squad/frontend/badges.py +0 -0
  394. {squad-1.89 → squad-1.91}/squad/frontend/build_settings.py +0 -0
  395. {squad-1.89 → squad-1.91}/squad/frontend/ci.py +0 -0
  396. {squad-1.89 → squad-1.91}/squad/frontend/comparison.py +0 -0
  397. {squad-1.89 → squad-1.91}/squad/frontend/extract.py +0 -0
  398. {squad-1.89 → squad-1.91}/squad/frontend/forms.py +0 -0
  399. {squad-1.89 → squad-1.91}/squad/frontend/group_settings.py +0 -0
  400. {squad-1.89 → squad-1.91}/squad/frontend/locale/django.pot +0 -0
  401. {squad-1.89 → squad-1.91}/squad/frontend/locale/pl/LC_MESSAGES/django.po +0 -0
  402. {squad-1.89 → squad-1.91}/squad/frontend/locale/pt/LC_MESSAGES/django.po +0 -0
  403. {squad-1.89 → squad-1.91}/squad/frontend/locale/pt_BR/LC_MESSAGES/django.po +0 -0
  404. {squad-1.89 → squad-1.91}/squad/frontend/management/__init__.py +0 -0
  405. {squad-1.89 → squad-1.91}/squad/frontend/management/commands/__init__.py +0 -0
  406. {squad-1.89 → squad-1.91}/squad/frontend/management/commands/get_token.py +0 -0
  407. {squad-1.89 → squad-1.91}/squad/frontend/metrics.py +0 -0
  408. {squad-1.89 → squad-1.91}/squad/frontend/project_settings.py +0 -0
  409. {squad-1.89 → squad-1.91}/squad/frontend/queries.py +0 -0
  410. {squad-1.89 → squad-1.91}/squad/frontend/setup.py +0 -0
  411. {squad-1.89 → squad-1.91}/squad/frontend/static/compare.css +0 -0
  412. {squad-1.89 → squad-1.91}/squad/frontend/static/download +0 -0
  413. {squad-1.89 → squad-1.91}/squad/frontend/static/download.conf +0 -0
  414. {squad-1.89 → squad-1.91}/squad/frontend/static/favicon.ico +0 -0
  415. {squad-1.89 → squad-1.91}/squad/frontend/static/main.css +0 -0
  416. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/attach_select2.js +0 -0
  417. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/build.js +0 -0
  418. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/build_compare.js +0 -0
  419. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/build_list.js +0 -0
  420. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/charts.js +0 -0
  421. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/common.js +0 -0
  422. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/compare.js +0 -0
  423. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/config.js +0 -0
  424. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/annotation.js +0 -0
  425. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/build_compare.js +0 -0
  426. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/build_list_compare.js +0 -0
  427. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/build_release.js +0 -0
  428. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/cancel.js +0 -0
  429. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/charts.js +0 -0
  430. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/compare.js +0 -0
  431. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/fetch.js +0 -0
  432. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/filter.js +0 -0
  433. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/metricThreshold.js +0 -0
  434. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/project_compare.js +0 -0
  435. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/resubmit.js +0 -0
  436. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/controllers/testjobs_progress.js +0 -0
  437. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/metric.threshold.js +0 -0
  438. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/project_compare.js +0 -0
  439. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/showHide.js +0 -0
  440. {squad-1.89 → squad-1.91}/squad/frontend/static/squad/table.js +0 -0
  441. {squad-1.89 → squad-1.91}/squad/frontend/static/squad_sign.svg +0 -0
  442. {squad-1.89 → squad-1.91}/squad/frontend/templates/401.jinja2 +0 -0
  443. {squad-1.89 → squad-1.91}/squad/frontend/templates/404.jinja2 +0 -0
  444. {squad-1.89 → squad-1.91}/squad/frontend/templates/django/rest_framework/api.html +0 -0
  445. {squad-1.89 → squad-1.91}/squad/frontend/templates/django/squad/_user_menu.html +0 -0
  446. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_builds_table.jinja2 +0 -0
  447. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_env_suite_data.jinja2 +0 -0
  448. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_metadata.jinja2 +0 -0
  449. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_pagination.jinja2 +0 -0
  450. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_permissions.jinja2 +0 -0
  451. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_project_list.jinja2 +0 -0
  452. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_regressions_and_fixes.jinja2 +0 -0
  453. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_results_table.jinja2 +0 -0
  454. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_results_transitions_filter.jinja2 +0 -0
  455. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_subscribe.jinja2 +0 -0
  456. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_test_results_envbox.jinja2 +0 -0
  457. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_test_results_suitebox.jinja2 +0 -0
  458. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_test_results_summary.jinja2 +0 -0
  459. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_test_results_table.jinja2 +0 -0
  460. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_test_run_metric.jinja2 +0 -0
  461. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_test_run_test.jinja2 +0 -0
  462. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_unfinished_build.jinja2 +0 -0
  463. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/_user_menu.jinja2 +0 -0
  464. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/base.jinja2 +0 -0
  465. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/build-nav.jinja2 +0 -0
  466. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/build.jinja2 +0 -0
  467. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/build_callbacks.jinja2 +0 -0
  468. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/build_metadata.jinja2 +0 -0
  469. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/build_metrics.jinja2 +0 -0
  470. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/build_settings.jinja2 +0 -0
  471. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/builds.jinja2 +0 -0
  472. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/compare.jinja2 +0 -0
  473. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/compare_builds.jinja2 +0 -0
  474. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/compare_projects.jinja2 +0 -0
  475. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group-nav.jinja2 +0 -0
  476. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group.jinja2 +0 -0
  477. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group_settings/advanced.jinja2 +0 -0
  478. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group_settings/base.jinja2 +0 -0
  479. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group_settings/delete.jinja2 +0 -0
  480. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group_settings/index.jinja2 +0 -0
  481. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group_settings/members.jinja2 +0 -0
  482. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group_settings/new_group.jinja2 +0 -0
  483. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/group_settings/new_project.jinja2 +0 -0
  484. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/index.jinja2 +0 -0
  485. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/knownissues.jinja2 +0 -0
  486. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/login.jinja2 +0 -0
  487. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/metrics.jinja2 +0 -0
  488. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project-nav.jinja2 +0 -0
  489. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/_threshold_table.jinja2 +0 -0
  490. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/advanced.jinja2 +0 -0
  491. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/base.jinja2 +0 -0
  492. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/build_confidence.jinja2 +0 -0
  493. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/delete.jinja2 +0 -0
  494. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/environments.jinja2 +0 -0
  495. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/index.jinja2 +0 -0
  496. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/project_settings/thresholds.jinja2 +0 -0
  497. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/test_history.jinja2 +0 -0
  498. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/test_run.jinja2 +0 -0
  499. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/test_run_suite_metrics.jinja2 +0 -0
  500. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/test_run_suite_test_details.jinja2 +0 -0
  501. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/test_run_suite_tests.jinja2 +0 -0
  502. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/testjob.jinja2 +0 -0
  503. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/testjobs.jinja2 +0 -0
  504. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/testjobs_progress.jinja2 +0 -0
  505. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/tests-details-nav.jinja2 +0 -0
  506. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/tests.jinja2 +0 -0
  507. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/user_settings/api_token.jinja2 +0 -0
  508. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/user_settings/base.jinja2 +0 -0
  509. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/user_settings/profile.jinja2 +0 -0
  510. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/user_settings/projects.jinja2 +0 -0
  511. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/user_settings/subscriptions.jinja2 +0 -0
  512. {squad-1.89 → squad-1.91}/squad/frontend/templates/squad/user_settings/user_preferences.jinja2 +0 -0
  513. {squad-1.89 → squad-1.91}/squad/frontend/templatetags/__init__.py +0 -0
  514. {squad-1.89 → squad-1.91}/squad/frontend/templatetags/squad.py +0 -0
  515. {squad-1.89 → squad-1.91}/squad/frontend/tests.py +0 -0
  516. {squad-1.89 → squad-1.91}/squad/frontend/user_settings.py +0 -0
  517. {squad-1.89 → squad-1.91}/squad/frontend/utils.py +0 -0
  518. {squad-1.89 → squad-1.91}/squad/frontend/views.py +0 -0
  519. {squad-1.89 → squad-1.91}/squad/http.py +0 -0
  520. {squad-1.89 → squad-1.91}/squad/jinja2.py +0 -0
  521. {squad-1.89 → squad-1.91}/squad/mail.py +0 -0
  522. {squad-1.89 → squad-1.91}/squad/manage.py +0 -0
  523. {squad-1.89 → squad-1.91}/squad/plugins/__init__.py +0 -0
  524. {squad-1.89 → squad-1.91}/squad/plugins/example.py +0 -0
  525. {squad-1.89 → squad-1.91}/squad/plugins/gerrit.py +0 -0
  526. {squad-1.89 → squad-1.91}/squad/plugins/github.py +0 -0
  527. {squad-1.89 → squad-1.91}/squad/run/__init__.py +0 -0
  528. {squad-1.89 → squad-1.91}/squad/run/__main__.py +0 -0
  529. {squad-1.89 → squad-1.91}/squad/run/listener.py +0 -0
  530. {squad-1.89 → squad-1.91}/squad/run/scheduler.py +0 -0
  531. {squad-1.89 → squad-1.91}/squad/run/worker.py +0 -0
  532. {squad-1.89 → squad-1.91}/squad/socialaccount.py +0 -0
  533. {squad-1.89 → squad-1.91}/squad/urls.py +0 -0
  534. {squad-1.89 → squad-1.91}/squad/wsgi.py +0 -0
  535. {squad-1.89 → squad-1.91}/squad.egg-info/dependency_links.txt +0 -0
  536. {squad-1.89 → squad-1.91}/squad.egg-info/top_level.txt +0 -0
  537. {squad-1.89 → squad-1.91}/squad.svg +0 -0
  538. {squad-1.89 → squad-1.91}/test/__init__.py +0 -0
  539. {squad-1.89 → squad-1.91}/test/api/__init__.py +0 -0
  540. {squad-1.89 → squad-1.91}/test/api/benchmarks.csv +0 -0
  541. {squad-1.89 → squad-1.91}/test/api/benchmarks.json +0 -0
  542. {squad-1.89 → squad-1.91}/test/api/definition.yaml +0 -0
  543. {squad-1.89 → squad-1.91}/test/api/metadata.json +0 -0
  544. {squad-1.89 → squad-1.91}/test/api/test_data.py +0 -0
  545. {squad-1.89 → squad-1.91}/test/api/test_rest.py +0 -0
  546. {squad-1.89 → squad-1.91}/test/api/test_run.log +0 -0
  547. {squad-1.89 → squad-1.91}/test/api/tests.csv +0 -0
  548. {squad-1.89 → squad-1.91}/test/api/tests.json +0 -0
  549. {squad-1.89 → squad-1.91}/test/api/tests.py +0 -0
  550. {squad-1.89 → squad-1.91}/test/api/tests_log.json +0 -0
  551. {squad-1.89 → squad-1.91}/test/api/tests_two.json +0 -0
  552. {squad-1.89 → squad-1.91}/test/api/twoline_definition.yaml +0 -0
  553. {squad-1.89 → squad-1.91}/test/ci/__init__.py +0 -0
  554. {squad-1.89 → squad-1.91}/test/ci/backend/__init__.py +0 -0
  555. {squad-1.89 → squad-1.91}/test/ci/backend/example-broken-log.yaml +0 -0
  556. {squad-1.89 → squad-1.91}/test/ci/backend/example-lava-log.yaml +0 -0
  557. {squad-1.89 → squad-1.91}/test/ci/backend/lava.json +0 -0
  558. {squad-1.89 → squad-1.91}/test/ci/backend/test_fake.py +0 -0
  559. {squad-1.89 → squad-1.91}/test/ci/backend/test_real_lava.py +0 -0
  560. {squad-1.89 → squad-1.91}/test/ci/backend/tuxsuite_test_failed_result_sample.json +0 -0
  561. {squad-1.89 → squad-1.91}/test/ci/backend/tuxsuite_test_result_sample.json +0 -0
  562. {squad-1.89 → squad-1.91}/test/ci/test_listen.py +0 -0
  563. {squad-1.89 → squad-1.91}/test/ci/test_models.py +0 -0
  564. {squad-1.89 → squad-1.91}/test/ci/test_tasks.py +0 -0
  565. {squad-1.89 → squad-1.91}/test/core/__init__.py +0 -0
  566. {squad-1.89 → squad-1.91}/test/core/test_attachment.py +0 -0
  567. {squad-1.89 → squad-1.91}/test/core/test_build.py +0 -0
  568. {squad-1.89 → squad-1.91}/test/core/test_build_summary.py +0 -0
  569. {squad-1.89 → squad-1.91}/test/core/test_callback.py +0 -0
  570. {squad-1.89 → squad-1.91}/test/core/test_emailtemplate.py +0 -0
  571. {squad-1.89 → squad-1.91}/test/core/test_failures.py +0 -0
  572. {squad-1.89 → squad-1.91}/test/core/test_group.py +0 -0
  573. {squad-1.89 → squad-1.91}/test/core/test_historical_emailtemplate.py +0 -0
  574. {squad-1.89 → squad-1.91}/test/core/test_history.py +0 -0
  575. {squad-1.89 → squad-1.91}/test/core/test_import_data.py +0 -0
  576. {squad-1.89 → squad-1.91}/test/core/test_import_data_input/1/default/1/metadata.json +0 -0
  577. {squad-1.89 → squad-1.91}/test/core/test_import_data_input/1/default/1/metrics.json +0 -0
  578. {squad-1.89 → squad-1.91}/test/core/test_import_data_input/2/default/2/metadata.json +0 -0
  579. {squad-1.89 → squad-1.91}/test/core/test_import_data_input/2/default/2/metrics.json +0 -0
  580. {squad-1.89 → squad-1.91}/test/core/test_import_data_input/2/default/2/screenshot.png +0 -0
  581. {squad-1.89 → squad-1.91}/test/core/test_import_data_input/2/default/2/tests.json +0 -0
  582. {squad-1.89 → squad-1.91}/test/core/test_import_data_missing_metadata/1/1/tests.json +0 -0
  583. {squad-1.89 → squad-1.91}/test/core/test_known_issues.py +0 -0
  584. {squad-1.89 → squad-1.91}/test/core/test_metric.py +0 -0
  585. {squad-1.89 → squad-1.91}/test/core/test_metric_comparison.py +0 -0
  586. {squad-1.89 → squad-1.91}/test/core/test_metric_threshold.py +0 -0
  587. {squad-1.89 → squad-1.91}/test/core/test_metrics_data.py +0 -0
  588. {squad-1.89 → squad-1.91}/test/core/test_metrics_summary.py +0 -0
  589. {squad-1.89 → squad-1.91}/test/core/test_notification.py +0 -0
  590. {squad-1.89 → squad-1.91}/test/core/test_notification_delivery.py +0 -0
  591. {squad-1.89 → squad-1.91}/test/core/test_patch_source.py +0 -0
  592. {squad-1.89 → squad-1.91}/test/core/test_project.py +0 -0
  593. {squad-1.89 → squad-1.91}/test/core/test_project_status.py +0 -0
  594. {squad-1.89 → squad-1.91}/test/core/test_statistics.py +0 -0
  595. {squad-1.89 → squad-1.91}/test/core/test_tasks.py +0 -0
  596. {squad-1.89 → squad-1.91}/test/core/test_tasks_notification.py +0 -0
  597. {squad-1.89 → squad-1.91}/test/core/test_test.py +0 -0
  598. {squad-1.89 → squad-1.91}/test/core/test_test_comparison.py +0 -0
  599. {squad-1.89 → squad-1.91}/test/core/test_test_data.py +0 -0
  600. {squad-1.89 → squad-1.91}/test/core/test_test_run.py +0 -0
  601. {squad-1.89 → squad-1.91}/test/core/test_test_summary.py +0 -0
  602. {squad-1.89 → squad-1.91}/test/core/test_update_project_statuses.py +0 -0
  603. {squad-1.89 → squad-1.91}/test/core/test_user_namespace.py +0 -0
  604. {squad-1.89 → squad-1.91}/test/core/test_utils.py +0 -0
  605. {squad-1.89 → squad-1.91}/test/frontend/__init__.py +0 -0
  606. {squad-1.89 → squad-1.91}/test/frontend/test_basics.py +0 -0
  607. {squad-1.89 → squad-1.91}/test/frontend/test_comparison.py +0 -0
  608. {squad-1.89 → squad-1.91}/test/frontend/test_get_token_command.py +0 -0
  609. {squad-1.89 → squad-1.91}/test/frontend/test_group_settings.py +0 -0
  610. {squad-1.89 → squad-1.91}/test/frontend/test_history.py +0 -0
  611. {squad-1.89 → squad-1.91}/test/frontend/test_template_tags.py +0 -0
  612. {squad-1.89 → squad-1.91}/test/frontend/test_test_job.py +0 -0
  613. {squad-1.89 → squad-1.91}/test/frontend/test_utils.py +0 -0
  614. {squad-1.89 → squad-1.91}/test/integration/__init__.py +0 -0
  615. {squad-1.89 → squad-1.91}/test/integration/plugins/test_tradefed.py +0 -0
  616. {squad-1.89 → squad-1.91}/test/integration/plugins/tradefed-output-20220608105250.tar.xz +0 -0
  617. {squad-1.89 → squad-1.91}/test/integration/test_build_notification_from_ci.py +0 -0
  618. {squad-1.89 → squad-1.91}/test/javascript.py +0 -0
  619. {squad-1.89 → squad-1.91}/test/karma.conf.js +0 -0
  620. {squad-1.89 → squad-1.91}/test/mock.py +0 -0
  621. {squad-1.89 → squad-1.91}/test/performance.py +0 -0
  622. {squad-1.89 → squad-1.91}/test/plugins/__init__.py +0 -0
  623. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/kasan.log +0 -0
  624. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/kernel_bug_and_invalid_opcode.log +0 -0
  625. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/kernelexceptiontrace.log +0 -0
  626. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/kernelexceptiontrace_without_squarebraces.log +0 -0
  627. /squad-1.89/test/plugins/linux_log_parser/kernelpanic.log → /squad-1.91/test/plugins/linux_log_parser/kernelpanic-single-and-multiline.log +0 -0
  628. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/kfence.log +0 -0
  629. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/multiple_issues_dmesg.log +0 -0
  630. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/oops.log +0 -0
  631. {squad-1.89 → squad-1.91}/test/plugins/linux_log_parser/rcu_warning.log +0 -0
  632. {squad-1.89 → squad-1.91}/test/plugins/test_gerrit.py +0 -0
  633. {squad-1.89 → squad-1.91}/test/plugins/test_github.py +0 -0
  634. {squad-1.89 → squad-1.91}/test/plugins/test_plugin.py +0 -0
  635. {squad-1.89 → squad-1.91}/test/settings.py +0 -0
  636. {squad-1.89 → squad-1.91}/test/test_architecture.py +0 -0
  637. {squad-1.89 → squad-1.91}/test/test_code_quality.py +0 -0
  638. {squad-1.89 → squad-1.91}/test/test_cors.py +0 -0
  639. {squad-1.89 → squad-1.91}/test/test_i18n.py +0 -0
  640. {squad-1.89 → squad-1.91}/test/test_mail.py +0 -0
  641. {squad-1.89 → squad-1.91}/test/test_pending_migrations.py +0 -0
  642. {squad-1.89 → squad-1.91}/test/unit/test_annotation.js +0 -0
  643. {squad-1.89 → squad-1.91}/test/unit/test_cancel.js +0 -0
  644. {squad-1.89 → squad-1.91}/test/unit/test_charts.js +0 -0
  645. {squad-1.89 → squad-1.91}/test/unit/test_compare.js +0 -0
  646. {squad-1.89 → squad-1.91}/test/unit/test_filter.js +0 -0
  647. {squad-1.89 → squad-1.91}/test/unit/test_resubmit.js +0 -0
@@ -1,3 +1,50 @@
1
+ # 1.91
2
+
3
+ This 1.91 release brings a few changes worth pointing out separately:
4
+
5
+ * Tuxsuite backend: add support for changing environment name if "test_name" is present. Artificial boot tests
6
+ when jobs fail or get canceled. Also checks if the testjob's project contains a token allowing authenticated
7
+ urls in Tuxsuite.
8
+
9
+ * Log parser: Katie is putting a lot of work in improving linux-log-parser plugin. The idea is that it will
10
+ become its own project in the future
11
+
12
+ * Add support for performance tracking when supported (Sentry)
13
+
14
+ * Support for prometheus-like metrics output for supporting environments (AMQ)
15
+
16
+ Full set of changes going in:
17
+
18
+ * api/ci: check job id before accepting test job
19
+ * api/prometheus.py: add initial prometheus metrics endpoint
20
+ * ci/tuxsuite.py:
21
+ * add support for fetching authenticated tuxsuite urls
22
+ * change environment name if test_name is available
23
+ * create artificial boot test
24
+ * handle canceled tests
25
+ * ci: lava: fix login test name
26
+ * frontend/project.jinja2: add project description to project's home page
27
+ * frontend: urls: point test to details page
28
+ * plugins/linux_log_parser:
29
+ * Add a new multiline regex for KCSAN
30
+ * Add regex for capturing multiline kernel panic
31
+ * Ensure .* regex doesn't capture too much
32
+ * Extract reused regex components
33
+ * No longer create tests for passes
34
+ * Remove unhelpful information from test names
35
+ * Add support for PID after timestamp
36
+ * Add support for multiline oops message
37
+ * Improve log parser patterns
38
+ * setup: change package to psycopg2-binary
39
+
40
+
41
+ # 1.90
42
+
43
+ This 1.90 release makes linux-log-parser more plugable, meaning that it could be
44
+ moved away from SQUAD into its separate package.
45
+
46
+ This release also improves performance when uploading testrun attachments.
47
+
1
48
  # 1.89
2
49
 
3
50
  This 1.89 release comes with quite several changes:
@@ -21,7 +21,6 @@ include .mailmap
21
21
  include .readthedocs.yml
22
22
  include .coveragerc
23
23
  include squad.svg
24
- include .github/workflows/*.yml
25
24
  include test/integration/plugins/tradefed-output-20220608105250.tar.xz
26
25
 
27
26
  include squad/core/management/commands/import_data.rst
@@ -37,6 +36,7 @@ recursive-include .reuse/ *
37
36
  include babel.cfg
38
37
  recursive-include squad/ *.mo *.po *.pot
39
38
 
39
+ exclude .gitlab-ci.yml
40
40
  exclude squad/local_settings.py
41
41
  exclude squad/local_settings.py.off
42
42
  recursive-exclude squad/frontend/static/vendor/ *
squad-1.91/PKG-INFO ADDED
@@ -0,0 +1,14 @@
1
+ Metadata-Version: 2.1
2
+ Name: squad
3
+ Version: 1.91
4
+ Summary: Software Quality Dashboard
5
+ Home-page: https://github.com/Linaro/squad
6
+ Author: Antonio Terceiro
7
+ Author-email: antonio.terceiro@linaro.org
8
+ License: GPLv3+
9
+ Platform: any
10
+ Provides-Extra: postgres
11
+ License-File: COPYING
12
+
13
+ Software Quality Dashboard
14
+
@@ -8,6 +8,20 @@ tmpdir="$basedir"/tmp
8
8
  datadir="$tmpdir"/data
9
9
  mkdir -p "$datadir"
10
10
 
11
+ has_input=
12
+ TTY="-i"
13
+ if [ -t 1 ];
14
+ then
15
+ TTY="-it"
16
+ has_input=yes
17
+ fi
18
+
19
+ user=squad
20
+ if [ ! -z "${USER-}" ]
21
+ then
22
+ user=${USER}
23
+ fi
24
+
11
25
  dockerfile="$datadir"/../Dockerfile.dev
12
26
  (
13
27
  sed -e '1,/# Prepare the environment/!d' "$basedir"/Dockerfile
@@ -25,11 +39,16 @@ dockerfile="$datadir"/../Dockerfile.dev
25
39
  nodejs \
26
40
  ruby-foreman \
27
41
  procps && \'
28
- echo " groupadd -g $(id -g) $(id -gn) && \\"
29
- echo " useradd -m -u $(id -u) -g $(id -g) -s /bin/bash ${USER}"
30
- echo "RUN pip3 install --no-dependencies django-bootstrap3"
42
+ echo " pip3 install --no-dependencies django-bootstrap3"
43
+
44
+ if [ ! -z "${has_input}" ]
45
+ then
46
+ echo "RUN groupadd -g $(id -g) $(id -gn) && \\"
47
+ echo " useradd -m -u $(id -u) -g $(id -g) -s /bin/bash ${user}"
48
+ echo "USER ${user}"
49
+ fi
50
+
31
51
  echo "WORKDIR /app"
32
- echo "USER ${USER}"
33
52
  echo 'CMD ["bash"]'
34
53
  ) > "$dockerfile"
35
54
 
@@ -44,12 +63,6 @@ for v in $HOME/.gitconfig $HOME/.config/git; do
44
63
  fi
45
64
  done
46
65
 
47
- TTY="-i"
48
- if [ -t 1 ];
49
- then
50
- TTY="-it"
51
- fi
52
-
53
66
  PORT=${PORT:-8000}
54
67
 
55
68
  exec docker run \
@@ -214,6 +214,13 @@ __ https://docs.djangoproject.com/en/1.11/topics/email/
214
214
  it's recommended to disable sending admin notifications by setting
215
215
  ``SQUAD_SEND_ADMIN_ERROR_EMAIL = False``.
216
216
 
217
+ * ``SENTRY_TRACES_SAMPLE_RATE``: Specifies the rate at which traces
218
+ (for performance monitoring) are sampled by Sentry. This value must be a
219
+ float between 0.0 and 1.0, where 1.0 represents 100% of traces being
220
+ captured. If not set, it defaults to 0. This option is used to configure
221
+ Sentry's performance monitoring, allowing you to control how much tracing
222
+ data is sent to Sentry. It works alongside the SENTRY_DSN setting.
223
+
217
224
  * ``SQUAD_STATIC_DIR``: Directory where SQUAD will find it's preprocessed
218
225
  static assets. This usually does not need to be set manually, and exists
219
226
  mostly for use in the Docker image.
@@ -23,11 +23,8 @@ cleanup() {
23
23
  mv "$local_settings".off "$local_settings"
24
24
  fi
25
25
  }
26
- git ls-tree -r --name-only HEAD | grep -v '\.tar$' | sort > "$git"
26
+ git ls-tree -r --name-only HEAD | grep -v '\(\.tar\|\.gitlab-ci.yml\)$' | sort > "$git"
27
27
 
28
28
  downloads=$(awk '{ if ($1 && $1 !~ /^#/) { print($1)} }' squad/frontend/static/download.conf | xargs printf '%s\|')
29
29
  tar taf dist/squad-${v}.tar.gz | cut -d / -f 2- | grep -v '\(/$\|^$\|PKG-INFO\|egg-info\|static\/\('$downloads'download.status\)\|.mo$\)' | sort > "$tar"
30
30
  diff -u "$tar" "$git"
31
-
32
- # Build docker container
33
- docker build -t squadproject/squad:$v .
@@ -40,10 +40,13 @@ if [ "${TEST:-yes}" != "no" ]; then
40
40
  ./dev-docker ./manage.py test
41
41
  fi
42
42
 
43
- # Build squad pip package and docker container
43
+ # Check squad pip package build
44
44
  ./scripts/build "v$v"
45
45
  rm -rf build/ dist/ *.egg-info/
46
46
 
47
+ # Check docker container build
48
+ docker build -t squadproject/squad:$v .
49
+
47
50
  # Commit changes and push the new tag
48
51
  git commit --message "New release: ${v}" CHANGELOG.md squad/version.py || true
49
52
  git tag -s -m "SQUAD release $v" "v$v"
@@ -18,7 +18,7 @@ if os.getenv('REQ_IGNORE_VERSIONS'):
18
18
  requirements = [req.split('>=')[0] for req in requirements]
19
19
 
20
20
  extras_require = {
21
- 'postgres': 'psycopg2',
21
+ 'postgres': 'psycopg2-binary',
22
22
  }
23
23
 
24
24
 
@@ -73,15 +73,26 @@ def submit_job(request, group_slug, project_slug, version, environment_slug):
73
73
  @csrf_exempt
74
74
  @auth_privileged
75
75
  def watch_job(request, group_slug, project_slug, version, environment_slug):
76
+
77
+ # testjob_id points to the backend's test job
78
+ testjob_id = request.POST.get('testjob_id', None)
79
+ if testjob_id is None:
80
+ return HttpResponseBadRequest("testjob_id is required")
81
+
76
82
  backend_name = request.POST.get('backend')
77
83
  if backend_name is None:
78
84
  return HttpResponseBadRequest("backend field is required")
85
+
79
86
  backend = None
80
87
  try:
81
88
  backend = Backend.objects.get(name=request.POST.get('backend'))
82
89
  except Backend.DoesNotExist:
83
90
  return HttpResponseBadRequest("requested backend does not exist")
84
91
 
92
+ check = backend.get_implementation().check_job_id(testjob_id)
93
+ if check is not True:
94
+ return HttpResponseBadRequest(check)
95
+
85
96
  # project has to exist or request will result with 400
86
97
  project = request.project
87
98
  if backend is None or project is None:
@@ -90,12 +101,6 @@ def watch_job(request, group_slug, project_slug, version, environment_slug):
90
101
  # create Build object
91
102
  build, _ = project.builds.get_or_create(version=version)
92
103
 
93
- # testjob_id points to the backend's test job
94
- testjob_id = request.POST.get('testjob_id', None)
95
-
96
- if testjob_id is None:
97
- return HttpResponseBadRequest("testjob_id is required")
98
-
99
104
  # create TestJob object
100
105
  test_job = TestJob(
101
106
  backend=backend,
@@ -0,0 +1,52 @@
1
+ import re
2
+ import requests
3
+ import celery
4
+
5
+ from django.conf import settings
6
+ from django.http import HttpResponse, HttpResponseForbidden
7
+ from django.views.decorators.csrf import csrf_exempt
8
+ from django.views.decorators.http import require_http_methods
9
+
10
+ from squad.http import auth_user_from_request
11
+
12
+
13
+ @csrf_exempt
14
+ @require_http_methods(['GET'])
15
+ def metrics(request):
16
+ user = auth_user_from_request(request, request.user)
17
+ if not user.is_authenticated:
18
+ return HttpResponseForbidden()
19
+
20
+ output = ''
21
+ available_queues = None
22
+
23
+ active_queues = celery.current_app.control.inspect().active_queues()
24
+ if active_queues is not None:
25
+ active_workers = set()
26
+ available_queues = set()
27
+ for worker_name, queues in active_queues.items():
28
+ active_workers.add(worker_name)
29
+ available_queues |= set([q['name'] for q in queues])
30
+
31
+ output += '# TYPE workers_count counter\n'
32
+ output += f'workers_count {len(active_workers)}\n'
33
+
34
+ # TODO: check how to get metrics for non-RabbitMQ brokers
35
+ if settings.CELERY_BROKER_URL:
36
+ rabbitmq_url = settings.CELERY_BROKER_URL.replace('amqps://', 'https://').replace('amqp://', 'http://')
37
+ rabbitmq_url = re.sub(r':\d+$', '', rabbitmq_url)
38
+ rabbitmq_url += '/api/queues'
39
+
40
+ response = requests.get(rabbitmq_url)
41
+ queues = response.json()
42
+ available_queues = {r["queue"] for r in settings.CELERY_TASK_ROUTES.values()}
43
+
44
+ for queue in queues:
45
+ if queue['name'] in available_queues:
46
+ metric_name = f'queue_{queue["name"]}_length'
47
+ length = queue['messages_ready']
48
+
49
+ output += f'\n# TYPE {metric_name} counter'
50
+ output += f'\n{metric_name} {length}'
51
+
52
+ return HttpResponse(output, status=200, content_type="text/plain;")
@@ -5,6 +5,7 @@ from rest_framework.schemas import get_schema_view
5
5
  from . import views
6
6
  from . import data
7
7
  from . import ci
8
+ from . import prometheus
8
9
  from . import rest
9
10
 
10
11
 
@@ -26,4 +27,5 @@ urlpatterns = [
26
27
  url(r'^resubmit/([0-9]+)', ci.resubmit_job),
27
28
  url(r'^forceresubmit/([0-9]+)', ci.force_resubmit_job),
28
29
  url(r'^version/', views.version),
30
+ url(r'^prometheus/', prometheus.metrics),
29
31
  ]
@@ -105,7 +105,7 @@ def add_test_run(request, group_slug, project_slug, version, environment_slug):
105
105
  if 'attachment' in request.FILES:
106
106
  attachments = {}
107
107
  for f in request.FILES.getlist('attachment'):
108
- attachments[f.name] = read_file_upload(f)
108
+ attachments[f.name] = f
109
109
  test_run_data['attachments'] = attachments
110
110
 
111
111
  receive = ReceiveTestRun(project)
@@ -72,6 +72,9 @@ class Backend(object):
72
72
  def check_job_definition(self, definition):
73
73
  return True
74
74
 
75
+ def check_job_id(self, job_id):
76
+ return True
77
+
75
78
  def get_job_definition(self, test_job):
76
79
  return "sample job definition"
77
80
 
@@ -683,7 +683,7 @@ class Backend(BaseBackend):
683
683
  if clone_measurements_to_tests:
684
684
  res_value = result['result']
685
685
  results.update({res_name: res_value})
686
- elif result['name'] == 'auto-login-action' and handle_lava_boot:
686
+ elif 'login-action' in result['name'] and handle_lava_boot:
687
687
  # add artificial 'boot' test result for each test job
688
688
  # by default the boot test is named after the device_type
689
689
  boot = "boot-%s" % test_job.name
@@ -785,6 +785,11 @@ class Backend(BaseBackend):
785
785
  except yaml.YAMLError as e:
786
786
  return str(e)
787
787
 
788
+ def check_job_id(self, job_id):
789
+ if re.match(r"^\d+$", str(job_id)) is not None:
790
+ return True
791
+ return "LAVA job id should be an integer"
792
+
788
793
  def get_job_definition(self, job_id):
789
794
  if self.use_xml_rpc:
790
795
  return self.proxy.scheduler.jobs.definition(job_id)
@@ -143,6 +143,12 @@ class Backend:
143
143
  """
144
144
  raise NotImplementedError
145
145
 
146
+ def check_job_id(self, job_id):
147
+ """
148
+ Returns True if job id matches what the backend expect, else returns the error message
149
+ """
150
+ raise NotImplementedError
151
+
146
152
  def format_message(self, msg):
147
153
  if self.data and hasattr(self.data, "name"):
148
154
  return self.data.name + ': ' + msg
@@ -120,6 +120,13 @@ class Backend(BaseBackend):
120
120
  # The regex below is supposed to find only one match
121
121
  return matches[0]
122
122
 
123
+ def check_job_id(self, job_id):
124
+ try:
125
+ self.parse_job_id(job_id)
126
+ return True
127
+ except FetchIssue as e:
128
+ return str(e)
129
+
123
130
  def generate_job_id(self, result_type, result):
124
131
  """
125
132
  The job id for TuxSuite results is generated using 3 pieces of info:
@@ -144,7 +151,11 @@ class Backend(BaseBackend):
144
151
  url = reduce(urljoin, urlbits)
145
152
 
146
153
  try:
147
- response = Backend.get_session().request("GET", url)
154
+ headers = {}
155
+ if hasattr(self, 'auth_token') and self.auth_token is not None:
156
+ headers = {'Authorization': self.auth_token}
157
+
158
+ response = Backend.get_session().request("GET", url, headers=headers)
148
159
  except Exception as e:
149
160
  raise TemporaryFetchIssue(f"Can't retrieve from {url}: {e}")
150
161
 
@@ -224,6 +235,11 @@ class Backend(BaseBackend):
224
235
  if 'toolchain' in build_metadata_keys and 'kconfig' in build_metadata_keys and metadata['build_name'] in [None, '']:
225
236
  metadata['build_name'] = self.generate_test_name(build_metadata)
226
237
 
238
+ def add_skip_boot_test(self, tests, metadata):
239
+ # Create an artificial boot test and mark it as skip
240
+ boot_test_name = 'boot/' + (metadata.get('build_name') or 'boot')
241
+ tests[boot_test_name] = None
242
+
227
243
  def parse_build_results(self, test_job, job_url, results, settings):
228
244
  required_keys = ['build_status', 'warnings_count', 'download_url', 'retry']
229
245
  self.__check_required_keys__(required_keys, results)
@@ -318,6 +334,11 @@ class Backend(BaseBackend):
318
334
  metadata_keys = settings.get('TEST_METADATA_KEYS', [])
319
335
  metadata = {k: results.get(k) for k in metadata_keys}
320
336
 
337
+ # Change environment name
338
+ if 'test_name' in results and results.get('test_name') is not None:
339
+ test_job.environment = results.get('test_name')
340
+ test_job.save()
341
+
321
342
  # Add extra metadata from metadata file if it exists
322
343
  self.update_metadata_from_file(results=results, metadata=metadata)
323
344
 
@@ -340,6 +361,8 @@ class Backend(BaseBackend):
340
361
  else:
341
362
  test_job.failure = 'sanity test failed'
342
363
 
364
+ self.add_skip_boot_test(tests, metadata)
365
+
343
366
  return status, completed, metadata, tests, metrics, logs
344
367
 
345
368
  # Fetch results even if the job fails, but has results
@@ -348,8 +371,14 @@ class Backend(BaseBackend):
348
371
 
349
372
  elif results['result'] == 'error':
350
373
  test_job.failure = 'tuxsuite infrastructure error'
374
+ self.add_skip_boot_test(tests, metadata)
351
375
  return 'Incomplete', completed, metadata, tests, metrics, logs
352
376
 
377
+ elif results['result'] == 'canceled':
378
+ test_job.failure = 'tuxsuite job canceled'
379
+ self.add_skip_boot_test(tests, metadata)
380
+ return 'Canceled', completed, metadata, tests, metrics, logs
381
+
353
382
  # If boot result is unkown, a retry is needed, otherwise, it either passed or failed
354
383
  if 'unknown' == results['results']['boot']:
355
384
  return None
@@ -384,6 +413,10 @@ class Backend(BaseBackend):
384
413
 
385
414
  def fetch(self, test_job):
386
415
  url = self.job_url(test_job)
416
+
417
+ settings = self.__resolve_settings__(test_job)
418
+ self.auth_token = settings.get('TUXSUITE_TOKEN', None)
419
+
387
420
  if test_job.input:
388
421
  results = self.fetch_from_results_input(test_job)
389
422
  test_job.input = None
@@ -393,11 +426,12 @@ class Backend(BaseBackend):
393
426
  if results.get('state') != 'finished':
394
427
  return None
395
428
 
396
- settings = self.__resolve_settings__(test_job)
397
-
398
429
  result_type = self.parse_job_id(test_job.job_id)[0]
399
430
  parse_results = getattr(self, f'parse_{result_type.lower()}_results')
400
- return parse_results(test_job, url, results, settings)
431
+ parsed = parse_results(test_job, url, results, settings)
432
+
433
+ self.auth_token = None
434
+ return parsed
401
435
 
402
436
  def job_url(self, test_job):
403
437
  result_type, tux_project, tux_uid = self.parse_job_id(test_job.job_id)
@@ -2,6 +2,7 @@ from glob import glob
2
2
  import os
3
3
  import re
4
4
  from django.core.management.base import BaseCommand
5
+ from django.core.files import File
5
6
 
6
7
 
7
8
  from squad.core.models import Build
@@ -123,7 +124,7 @@ class Command(BaseCommand):
123
124
  for f in glob(os.path.join(directory, '*')):
124
125
  name = os.path.basename(f)
125
126
  if name not in ['metrics.json', 'metadata.json', 'tests.json']:
126
- attachments[name] = open(f, 'rb').read()
127
+ attachments[name] = File(open(f, 'rb'))
127
128
 
128
129
  if not self.options['silent']:
129
130
  print("Importing test run: %s" % directory)
@@ -909,8 +909,8 @@ class Attachment(models.Model):
909
909
  self.__data__ = b''
910
910
  return self.__data__
911
911
 
912
- def save_file(self, filename, contents):
913
- storage_save(self, self.storage, filename, contents)
912
+ def save_file(self, filename, file):
913
+ storage_save(self, self.storage, filename, file)
914
914
 
915
915
 
916
916
  class SuiteMetadata(models.Model):
@@ -172,9 +172,9 @@ class ReceiveTestRun(object):
172
172
  if log_file is not None:
173
173
  testrun.save_log_file(log_file)
174
174
 
175
- for filename, data in attachments.items():
176
- attachment = testrun.attachments.create(filename=filename, length=len(data))
177
- attachment.save_file(filename, data)
175
+ for filename, file in attachments.items():
176
+ attachment = testrun.attachments.create(filename=filename, length=file.size)
177
+ attachment.save_file(filename, file)
178
178
 
179
179
  testrun.refresh_from_db()
180
180
 
@@ -169,8 +169,11 @@ def log_deletion(request, object, message):
169
169
 
170
170
 
171
171
  def storage_save(obj, storage_field, filename, content):
172
- content_bytes = content or ''
173
- if type(content_bytes) is str:
174
- content_bytes = content_bytes.encode()
175
172
  filename = '%s/%s/%s' % (obj.__class__.__name__.lower(), obj.pk, filename)
176
- storage_field.save(filename, ContentFile(content_bytes))
173
+ if type(content) in [bytes, str]:
174
+ content_bytes = content or ''
175
+ if type(content_bytes) is str:
176
+ content_bytes = content_bytes.encode()
177
+ storage_field.save(filename, ContentFile(content_bytes))
178
+ else:
179
+ storage_field.save(filename, content)
@@ -6,6 +6,14 @@
6
6
 
7
7
  {% include "squad/project-nav.jinja2" %}
8
8
 
9
+
10
+ {% if project.description%}
11
+ <h2>{{ _('Description') }}</h2>
12
+ <div class='description-{{project.id}}'>
13
+ {{project.description}}
14
+ </div>
15
+ {% endif %}
16
+
9
17
  {% if last_build %}
10
18
  <div>
11
19
  <h2>
@@ -52,6 +52,7 @@ urlpatterns = [
52
52
  url(r'^(%s)/(%s)/build/([^/]+)/attachments/testrun/([^/]+)/([^/]+)$' % group_and_project, views.build_attachment, name='build_attachments'),
53
53
  url(r'^(%s)/(%s)/build/([^/]+)/testrun/([^/]+)/suite/([^/]+)/tests/$' % group_and_project, views.test_run_suite_tests, name='testrun_suite_tests'),
54
54
  url(r'^(%s)/(%s)/build/([^/]+)/testrun/([^/]+)/suite/([^/]+)/test/([^/]+)/history/$' % group_and_project, tests.test_history, name='test_history'),
55
+ url(r'^(%s)/(%s)/build/([^/]+)/testrun/([^/]+)/suite/([^/]+)/test/([^/]+)/$' % group_and_project, views.test_run_suite_test_details, name='testrun_suite_test_details'),
55
56
  url(r'^(%s)/(%s)/build/([^/]+)/testrun/([^/]+)/suite/([^/]+)/test/([^/]+)/details/$' % group_and_project, views.test_run_suite_test_details, name='testrun_suite_test_details'),
56
57
  url(r'^(%s)/(%s)/build/([^/]+)/testrun/([^/]+)/suite/([^/]+)/metrics/$' % group_and_project, views.test_run_suite_metrics, name='testrun_suite_metrics'),
57
58
  url(r'^(%s)/(%s)/build/([^/]+)/testrun/([^/]+)/suite/([^/]+)/test/([^/]+)/log$' % group_and_project, views.test_details_log, name='test_details_log'),
@@ -0,0 +1 @@
1
+ from squad.plugins import Plugin # noqa