squad 1.83__tar.gz → 1.85__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (635) hide show
  1. {squad-1.83 → squad-1.85}/.readthedocs.yml +1 -1
  2. {squad-1.83 → squad-1.85}/CHANGELOG.md +28 -0
  3. {squad-1.83 → squad-1.85}/MANIFEST.in +1 -0
  4. {squad-1.83 → squad-1.85}/PKG-INFO +1 -1
  5. {squad-1.83 → squad-1.85}/doc/ci.rst +3 -3
  6. {squad-1.83 → squad-1.85}/doc/install.rst +68 -2
  7. {squad-1.83 → squad-1.85}/doc/intro.rst +3 -3
  8. {squad-1.83 → squad-1.85}/doc/lava_usecase.rst +1 -1
  9. {squad-1.83 → squad-1.85}/doc/plugins.rst +2 -2
  10. {squad-1.83 → squad-1.85}/doc/tuxsuite_usecase.rst +1 -1
  11. squad-1.85/docker/docker-compose.yml +147 -0
  12. squad-1.85/docker/init-db.sh +10 -0
  13. squad-1.85/docker/rabbitmq.config +8 -0
  14. squad-1.85/docker/squad-apache.conf +64 -0
  15. {squad-1.83 → squad-1.85}/squad/api/ci.py +10 -0
  16. {squad-1.83 → squad-1.85}/squad/api/rest.py +4 -3
  17. {squad-1.83 → squad-1.85}/squad/ci/backend/fake.py +9 -0
  18. {squad-1.83 → squad-1.85}/squad/ci/backend/lava.py +17 -0
  19. {squad-1.83 → squad-1.85}/squad/ci/backend/null.py +23 -3
  20. {squad-1.83 → squad-1.85}/squad/ci/backend/tuxsuite.py +5 -0
  21. {squad-1.83 → squad-1.85}/squad/ci/models.py +4 -1
  22. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/testjobs.jinja2 +8 -6
  23. squad-1.85/squad/version.py +1 -0
  24. {squad-1.83 → squad-1.85}/squad.egg-info/PKG-INFO +1 -1
  25. {squad-1.83 → squad-1.85}/squad.egg-info/SOURCES.txt +7 -0
  26. {squad-1.83 → squad-1.85}/test/api/test_ci.py +2 -0
  27. {squad-1.83 → squad-1.85}/test/api/test_rest.py +28 -0
  28. squad-1.85/test/frontend/__init__.py +0 -0
  29. squad-1.85/test/integration/__init__.py +0 -0
  30. squad-1.85/test/plugins/__init__.py +0 -0
  31. squad-1.83/squad/version.py +0 -1
  32. {squad-1.83 → squad-1.85}/.ackrc +0 -0
  33. {squad-1.83 → squad-1.85}/.coveragerc +0 -0
  34. {squad-1.83 → squad-1.85}/.ctags +0 -0
  35. {squad-1.83 → squad-1.85}/.dockerignore +0 -0
  36. {squad-1.83 → squad-1.85}/.github/workflows/release.yml +0 -0
  37. {squad-1.83 → squad-1.85}/.github/workflows/test.yml +0 -0
  38. {squad-1.83 → squad-1.85}/.gitignore +0 -0
  39. {squad-1.83 → squad-1.85}/.mailmap +0 -0
  40. {squad-1.83 → squad-1.85}/.reuse/dep5 +0 -0
  41. {squad-1.83 → squad-1.85}/COPYING +0 -0
  42. {squad-1.83 → squad-1.85}/COPYRIGHTS +0 -0
  43. {squad-1.83 → squad-1.85}/Dockerfile +0 -0
  44. {squad-1.83 → squad-1.85}/LICENSES/GPL-3.0-or-later.txt +0 -0
  45. {squad-1.83 → squad-1.85}/LICENSES/MIT.txt +0 -0
  46. {squad-1.83 → squad-1.85}/LICENSES/OFL-1.1.txt +0 -0
  47. {squad-1.83 → squad-1.85}/Procfile +0 -0
  48. {squad-1.83 → squad-1.85}/README.rst +0 -0
  49. {squad-1.83 → squad-1.85}/babel.cfg +0 -0
  50. {squad-1.83 → squad-1.85}/dev-docker +0 -0
  51. {squad-1.83 → squad-1.85}/doc/.gitignore +0 -0
  52. {squad-1.83 → squad-1.85}/doc/Makefile +0 -0
  53. {squad-1.83 → squad-1.85}/doc/api.rst +0 -0
  54. {squad-1.83 → squad-1.85}/doc/conf.py +0 -0
  55. {squad-1.83 → squad-1.85}/doc/hacking.rst +0 -0
  56. {squad-1.83 → squad-1.85}/doc/index.rst +0 -0
  57. {squad-1.83 → squad-1.85}/doc/quickstart.rst +0 -0
  58. {squad-1.83 → squad-1.85}/doc/translating.rst +0 -0
  59. /squad-1.83/squad/api/__init__.py → /squad-1.85/docker/db-dumped +0 -0
  60. /squad-1.83/squad/ci/__init__.py → /squad-1.85/docker/db-to-be-restored +0 -0
  61. /squad-1.83/squad/ci/management/__init__.py → /squad-1.85/docker/extra_settings.py +0 -0
  62. {squad-1.83 → squad-1.85}/docker-compose.yaml +0 -0
  63. {squad-1.83 → squad-1.85}/manage.py +0 -0
  64. {squad-1.83 → squad-1.85}/package-lock.json +0 -0
  65. {squad-1.83 → squad-1.85}/package.json +0 -0
  66. {squad-1.83 → squad-1.85}/pytest.ini +0 -0
  67. {squad-1.83 → squad-1.85}/requirements-dev.txt +0 -0
  68. {squad-1.83 → squad-1.85}/requirements.txt +0 -0
  69. {squad-1.83 → squad-1.85}/scripts/build +0 -0
  70. {squad-1.83 → squad-1.85}/scripts/check-ci +0 -0
  71. {squad-1.83 → squad-1.85}/scripts/check-ignore +0 -0
  72. {squad-1.83 → squad-1.85}/scripts/community_connector/main.js +0 -0
  73. {squad-1.83 → squad-1.85}/scripts/community_connector/manifest.json +0 -0
  74. {squad-1.83 → squad-1.85}/scripts/dogfood +0 -0
  75. {squad-1.83 → squad-1.85}/scripts/get-metrics +0 -0
  76. {squad-1.83 → squad-1.85}/scripts/get-tests +0 -0
  77. {squad-1.83 → squad-1.85}/scripts/git-build +0 -0
  78. {squad-1.83 → squad-1.85}/scripts/pytest +0 -0
  79. {squad-1.83 → squad-1.85}/scripts/rabbitmq-server +0 -0
  80. {squad-1.83 → squad-1.85}/scripts/release +0 -0
  81. {squad-1.83 → squad-1.85}/scripts/release-docker +0 -0
  82. {squad-1.83 → squad-1.85}/scripts/squad-config +0 -0
  83. {squad-1.83 → squad-1.85}/scripts/test-ci +0 -0
  84. {squad-1.83 → squad-1.85}/scripts/test-docker +0 -0
  85. {squad-1.83 → squad-1.85}/scripts/testdata/gen-ci-jobs +0 -0
  86. {squad-1.83 → squad-1.85}/scripts/testdata/gen-metrics +0 -0
  87. {squad-1.83 → squad-1.85}/scripts/testdata/gen-test-data +0 -0
  88. {squad-1.83 → squad-1.85}/scripts/testdata/gen-tests +0 -0
  89. {squad-1.83 → squad-1.85}/scripts/testdata/setup-dev +0 -0
  90. {squad-1.83 → squad-1.85}/scripts/testdata/submit-ci-jobs +0 -0
  91. {squad-1.83 → squad-1.85}/scripts/testdata/submit-test-data +0 -0
  92. {squad-1.83 → squad-1.85}/scripts/translate +0 -0
  93. {squad-1.83 → squad-1.85}/scripts/travis-lava +0 -0
  94. {squad-1.83 → squad-1.85}/scripts/update-translation-files +0 -0
  95. {squad-1.83 → squad-1.85}/scripts/upload +0 -0
  96. {squad-1.83 → squad-1.85}/setup.cfg +0 -0
  97. {squad-1.83 → squad-1.85}/setup.py +0 -0
  98. {squad-1.83 → squad-1.85}/squad/__init__.py +0 -0
  99. {squad-1.83 → squad-1.85}/squad/admin.py +0 -0
  100. {squad-1.83/squad/ci/management/commands → squad-1.85/squad/api}/__init__.py +0 -0
  101. {squad-1.83 → squad-1.85}/squad/api/apps.py +0 -0
  102. {squad-1.83 → squad-1.85}/squad/api/data.py +0 -0
  103. {squad-1.83 → squad-1.85}/squad/api/filters.py +0 -0
  104. {squad-1.83 → squad-1.85}/squad/api/urls.py +0 -0
  105. {squad-1.83 → squad-1.85}/squad/api/utils.py +0 -0
  106. {squad-1.83 → squad-1.85}/squad/api/views.py +0 -0
  107. {squad-1.83 → squad-1.85}/squad/celery.py +0 -0
  108. {squad-1.83/squad/ci/migrations → squad-1.85/squad/ci}/__init__.py +0 -0
  109. {squad-1.83 → squad-1.85}/squad/ci/admin.py +0 -0
  110. {squad-1.83 → squad-1.85}/squad/ci/apps.py +0 -0
  111. {squad-1.83 → squad-1.85}/squad/ci/backend/__init__.py +0 -0
  112. {squad-1.83 → squad-1.85}/squad/ci/exceptions.py +0 -0
  113. {squad-1.83/squad/ci/templatetags → squad-1.85/squad/ci/management}/__init__.py +0 -0
  114. {squad-1.83/squad/core → squad-1.85/squad/ci/management/commands}/__init__.py +0 -0
  115. {squad-1.83 → squad-1.85}/squad/ci/management/commands/create_tuxsuite_boot_tests.py +0 -0
  116. {squad-1.83 → squad-1.85}/squad/ci/management/commands/listen.py +0 -0
  117. {squad-1.83 → squad-1.85}/squad/ci/management/commands/testfetch.py +0 -0
  118. {squad-1.83 → squad-1.85}/squad/ci/migrations/0001_initial.py +0 -0
  119. {squad-1.83 → squad-1.85}/squad/ci/migrations/0002_auto_20170406_1252.py +0 -0
  120. {squad-1.83 → squad-1.85}/squad/ci/migrations/0003_backend_name.py +0 -0
  121. {squad-1.83 → squad-1.85}/squad/ci/migrations/0004_testjob_failure.py +0 -0
  122. {squad-1.83 → squad-1.85}/squad/ci/migrations/0005_remove_listener_data.py +0 -0
  123. {squad-1.83 → squad-1.85}/squad/ci/migrations/0006_simplify_backend_loading.py +0 -0
  124. {squad-1.83 → squad-1.85}/squad/ci/migrations/0007_auto_20170517_1736.py +0 -0
  125. {squad-1.83 → squad-1.85}/squad/ci/migrations/0008_testjob_testrun.py +0 -0
  126. {squad-1.83 → squad-1.85}/squad/ci/migrations/0009_slug_pattern.py +0 -0
  127. {squad-1.83 → squad-1.85}/squad/ci/migrations/0010_testjob_can_resubmit.py +0 -0
  128. {squad-1.83 → squad-1.85}/squad/ci/migrations/0011_testjob_resubmitted_count.py +0 -0
  129. {squad-1.83 → squad-1.85}/squad/ci/migrations/0012_testjob_build.py +0 -0
  130. {squad-1.83 → squad-1.85}/squad/ci/migrations/0013_testjob_name.py +0 -0
  131. {squad-1.83 → squad-1.85}/squad/ci/migrations/0014_testjob_target_build.py +0 -0
  132. {squad-1.83 → squad-1.85}/squad/ci/migrations/0015_testjob_populate_target_build.py +0 -0
  133. {squad-1.83 → squad-1.85}/squad/ci/migrations/0016_backend_max_fetch_attempts.py +0 -0
  134. {squad-1.83 → squad-1.85}/squad/ci/migrations/0017_testjob_fetch_attempts.py +0 -0
  135. {squad-1.83 → squad-1.85}/squad/ci/migrations/0018_testjob_dates.py +0 -0
  136. {squad-1.83 → squad-1.85}/squad/ci/migrations/0019_add_fake_backend.py +0 -0
  137. {squad-1.83 → squad-1.85}/squad/ci/migrations/0020_backend_settings_field.py +0 -0
  138. {squad-1.83 → squad-1.85}/squad/ci/migrations/0021_testjob_parent_job.py +0 -0
  139. {squad-1.83 → squad-1.85}/squad/ci/migrations/0022_backend_poll_enabled.py +0 -0
  140. {squad-1.83 → squad-1.85}/squad/ci/migrations/0023_remove_testjob_build.py +0 -0
  141. {squad-1.83 → squad-1.85}/squad/ci/migrations/0024_fix_testjob_environment_validation.py +0 -0
  142. {squad-1.83 → squad-1.85}/squad/ci/migrations/0025_backend_listen_enabled.py +0 -0
  143. {squad-1.83 → squad-1.85}/squad/ci/migrations/0026_job_start_end_time.py +0 -0
  144. {squad-1.83 → squad-1.85}/squad/ci/migrations/0027_add_tuxsuite_implementation_type.py +0 -0
  145. {squad-1.83 → squad-1.85}/squad/ci/migrations/0028_create_testjob_indexes.py +0 -0
  146. {squad-1.83 → squad-1.85}/squad/ci/migrations/0029_create_testjob_results_input.py +0 -0
  147. {squad-1.83 → squad-1.85}/squad/ci/migrations/0030_testjob_subtasks_count.py +0 -0
  148. {squad-1.83/squad/core/management → squad-1.85/squad/ci/migrations}/__init__.py +0 -0
  149. {squad-1.83 → squad-1.85}/squad/ci/tasks.py +0 -0
  150. {squad-1.83 → squad-1.85}/squad/ci/templates/squad/ci/testjob_resubmit.html.jinja2 +0 -0
  151. {squad-1.83 → squad-1.85}/squad/ci/templates/squad/ci/testjob_resubmit.txt.jinja2 +0 -0
  152. {squad-1.83/squad/core/management/commands → squad-1.85/squad/ci/templatetags}/__init__.py +0 -0
  153. {squad-1.83 → squad-1.85}/squad/ci/templatetags/filter_jobs.py +0 -0
  154. {squad-1.83 → squad-1.85}/squad/ci/utils.py +0 -0
  155. {squad-1.83 → squad-1.85}/squad/compat.py +0 -0
  156. {squad-1.83 → squad-1.85}/squad/container_settings.py +0 -0
  157. {squad-1.83/squad/core/migrations → squad-1.85/squad/core}/__init__.py +0 -0
  158. {squad-1.83 → squad-1.85}/squad/core/admin.py +0 -0
  159. {squad-1.83 → squad-1.85}/squad/core/apps.py +0 -0
  160. {squad-1.83 → squad-1.85}/squad/core/callback.py +0 -0
  161. {squad-1.83 → squad-1.85}/squad/core/comparison.py +0 -0
  162. {squad-1.83 → squad-1.85}/squad/core/data.py +0 -0
  163. {squad-1.83 → squad-1.85}/squad/core/failures.py +0 -0
  164. {squad-1.83 → squad-1.85}/squad/core/history.py +0 -0
  165. {squad-1.83 → squad-1.85}/squad/core/locale/django.pot +0 -0
  166. {squad-1.83 → squad-1.85}/squad/core/locale/es_MX/LC_MESSAGES/django.po +0 -0
  167. {squad-1.83 → squad-1.85}/squad/core/locale/pl/LC_MESSAGES/django.po +0 -0
  168. {squad-1.83 → squad-1.85}/squad/core/locale/pt/LC_MESSAGES/django.po +0 -0
  169. {squad-1.83 → squad-1.85}/squad/core/locale/pt_BR/LC_MESSAGES/django.po +0 -0
  170. {squad-1.83/squad/core/templatetags → squad-1.85/squad/core/management}/__init__.py +0 -0
  171. {squad-1.83/squad/frontend/management → squad-1.85/squad/core/management/commands}/__init__.py +0 -0
  172. {squad-1.83 → squad-1.85}/squad/core/management/commands/compute_build_summaries.py +0 -0
  173. {squad-1.83 → squad-1.85}/squad/core/management/commands/compute_project_statuses.py +0 -0
  174. {squad-1.83 → squad-1.85}/squad/core/management/commands/fill_test_metadata.py +0 -0
  175. {squad-1.83 → squad-1.85}/squad/core/management/commands/fix_squadplugin_data.py +0 -0
  176. {squad-1.83 → squad-1.85}/squad/core/management/commands/import_data.py +0 -0
  177. {squad-1.83 → squad-1.85}/squad/core/management/commands/import_data.rst +0 -0
  178. {squad-1.83 → squad-1.85}/squad/core/management/commands/migrate_test_runs.py +0 -0
  179. {squad-1.83 → squad-1.85}/squad/core/management/commands/populate_metric_build_and_environment.py +0 -0
  180. {squad-1.83 → squad-1.85}/squad/core/management/commands/populate_test_build_and_environment.py +0 -0
  181. {squad-1.83 → squad-1.85}/squad/core/management/commands/prepdump.py +0 -0
  182. {squad-1.83 → squad-1.85}/squad/core/management/commands/send-email.py +0 -0
  183. {squad-1.83 → squad-1.85}/squad/core/management/commands/update_project_statuses.py +0 -0
  184. {squad-1.83 → squad-1.85}/squad/core/management/commands/users.py +0 -0
  185. {squad-1.83 → squad-1.85}/squad/core/migrations/0001_initial.py +0 -0
  186. {squad-1.83 → squad-1.85}/squad/core/migrations/0002_auto_20160525_1403.py +0 -0
  187. {squad-1.83 → squad-1.85}/squad/core/migrations/0003_testrun_log_file.py +0 -0
  188. {squad-1.83 → squad-1.85}/squad/core/migrations/0004_group_user_groups.py +0 -0
  189. {squad-1.83 → squad-1.85}/squad/core/migrations/0005_token.py +0 -0
  190. {squad-1.83 → squad-1.85}/squad/core/migrations/0006_auto_20160826_2242.py +0 -0
  191. {squad-1.83 → squad-1.85}/squad/core/migrations/0007_testrun_data_processed.py +0 -0
  192. {squad-1.83 → squad-1.85}/squad/core/migrations/0008_status.py +0 -0
  193. {squad-1.83 → squad-1.85}/squad/core/migrations/0009_testrun_status_recorded.py +0 -0
  194. {squad-1.83 → squad-1.85}/squad/core/migrations/0010_testrun_datetime.py +0 -0
  195. {squad-1.83 → squad-1.85}/squad/core/migrations/0011_testrun_metadata_fields.py +0 -0
  196. {squad-1.83 → squad-1.85}/squad/core/migrations/0012_build_datetime.py +0 -0
  197. {squad-1.83 → squad-1.85}/squad/core/migrations/0013_testrun_resubmit_url.py +0 -0
  198. {squad-1.83 → squad-1.85}/squad/core/migrations/0014_testrun_metadata_file.py +0 -0
  199. {squad-1.83 → squad-1.85}/squad/core/migrations/0015_attachment.py +0 -0
  200. {squad-1.83 → squad-1.85}/squad/core/migrations/0016_project_is_public.py +0 -0
  201. {squad-1.83 → squad-1.85}/squad/core/migrations/0017_slug_validator.py +0 -0
  202. {squad-1.83 → squad-1.85}/squad/core/migrations/0018_build_name.py +0 -0
  203. {squad-1.83 → squad-1.85}/squad/core/migrations/0019_build_version.py +0 -0
  204. {squad-1.83 → squad-1.85}/squad/core/migrations/0020_build_ordering.py +0 -0
  205. {squad-1.83 → squad-1.85}/squad/core/migrations/0021_global_tokens.py +0 -0
  206. {squad-1.83 → squad-1.85}/squad/core/migrations/0022_projectstatus.py +0 -0
  207. {squad-1.83 → squad-1.85}/squad/core/migrations/0023_subscription.py +0 -0
  208. {squad-1.83 → squad-1.85}/squad/core/migrations/0024_project_build_completion_threshold.py +0 -0
  209. {squad-1.83 → squad-1.85}/squad/core/migrations/0025_unique_testrun_job_id.py +0 -0
  210. {squad-1.83 → squad-1.85}/squad/core/migrations/0026_testrun_result_accept_null.py +0 -0
  211. {squad-1.83 → squad-1.85}/squad/core/migrations/0027_project_notification_strategy.py +0 -0
  212. {squad-1.83 → squad-1.85}/squad/core/migrations/0028_suite_and_test_name_length.py +0 -0
  213. {squad-1.83 → squad-1.85}/squad/core/migrations/0029_subscription_email_formats.py +0 -0
  214. {squad-1.83 → squad-1.85}/squad/core/migrations/0030_remove_project_build_completion_threshold.py +0 -0
  215. {squad-1.83 → squad-1.85}/squad/core/migrations/0031_environment_expected_test_runs.py +0 -0
  216. {squad-1.83 → squad-1.85}/squad/core/migrations/0032_testrun_completed.py +0 -0
  217. {squad-1.83 → squad-1.85}/squad/core/migrations/0033_drop_debversion.py +0 -0
  218. {squad-1.83 → squad-1.85}/squad/core/migrations/0034_prepare_to_remove_build_name.py +0 -0
  219. {squad-1.83 → squad-1.85}/squad/core/migrations/0035_remove_build_name.py +0 -0
  220. {squad-1.83 → squad-1.85}/squad/core/migrations/0036_status_tests_skip.py +0 -0
  221. {squad-1.83 → squad-1.85}/squad/core/migrations/0037_project_status_test_summary_fields.py +0 -0
  222. {squad-1.83 → squad-1.85}/squad/core/migrations/0038_populate_project_status_cache.py +0 -0
  223. {squad-1.83 → squad-1.85}/squad/core/migrations/0039_orderings.py +0 -0
  224. {squad-1.83 → squad-1.85}/squad/core/migrations/0040_remove_subscription_html.py +0 -0
  225. {squad-1.83 → squad-1.85}/squad/core/migrations/0041_projectstatus_notified.py +0 -0
  226. {squad-1.83 → squad-1.85}/squad/core/migrations/0042_set_projectstatus_notified.py +0 -0
  227. {squad-1.83 → squad-1.85}/squad/core/migrations/0043_project_status_build.py +0 -0
  228. {squad-1.83 → squad-1.85}/squad/core/migrations/0044_project_html_mail.py +0 -0
  229. {squad-1.83 → squad-1.85}/squad/core/migrations/0045_adminsubscription.py +0 -0
  230. {squad-1.83 → squad-1.85}/squad/core/migrations/0046_projectstatus_last_updated.py +0 -0
  231. {squad-1.83 → squad-1.85}/squad/core/migrations/0047_populate_projectstatus_last_updated.py +0 -0
  232. {squad-1.83 → squad-1.85}/squad/core/migrations/0048_moderate_notifications.py +0 -0
  233. {squad-1.83 → squad-1.85}/squad/core/migrations/0049_projectstatus_plural.py +0 -0
  234. {squad-1.83 → squad-1.85}/squad/core/migrations/0050_projectstatus_finished.py +0 -0
  235. {squad-1.83 → squad-1.85}/squad/core/migrations/0051_build_status.py +0 -0
  236. {squad-1.83 → squad-1.85}/squad/core/migrations/0052_recreate_projectstatus_data.py +0 -0
  237. {squad-1.83 → squad-1.85}/squad/core/migrations/0053_remove_projectstatus_previous.py +0 -0
  238. {squad-1.83 → squad-1.85}/squad/core/migrations/0054_custom_email_template.py +0 -0
  239. {squad-1.83 → squad-1.85}/squad/core/migrations/0055_emailtemplate_subject.py +0 -0
  240. {squad-1.83 → squad-1.85}/squad/core/migrations/0056_project_description.py +0 -0
  241. {squad-1.83 → squad-1.85}/squad/core/migrations/0057_projectstatus_has_metrics.py +0 -0
  242. {squad-1.83 → squad-1.85}/squad/core/migrations/0058_populate_projectstatus_has_metrics.py +0 -0
  243. {squad-1.83 → squad-1.85}/squad/core/migrations/0059_project_important_metadata_keys.py +0 -0
  244. {squad-1.83 → squad-1.85}/squad/core/migrations/0060_test_log.py +0 -0
  245. {squad-1.83 → squad-1.85}/squad/core/migrations/0061_project_enabled_plugins_list.py +0 -0
  246. {squad-1.83 → squad-1.85}/squad/core/migrations/0062_project_allow_empty_enabled_plugin_list.py +0 -0
  247. {squad-1.83 → squad-1.85}/squad/core/migrations/0063_project_wait_before_notification.py +0 -0
  248. {squad-1.83 → squad-1.85}/squad/core/migrations/0064_project_notification_timeout.py +0 -0
  249. {squad-1.83 → squad-1.85}/squad/core/migrations/0065_projectstatus_notified_on_timeout.py +0 -0
  250. {squad-1.83 → squad-1.85}/squad/core/migrations/0066_environment_description.py +0 -0
  251. {squad-1.83 → squad-1.85}/squad/core/migrations/0067_accept_blank_suite_name.py +0 -0
  252. {squad-1.83 → squad-1.85}/squad/core/migrations/0068_suite_version.py +0 -0
  253. {squad-1.83 → squad-1.85}/squad/core/migrations/0069_suite_metadata.py +0 -0
  254. {squad-1.83 → squad-1.85}/squad/core/migrations/0070_create_suite_test_and_metric_metadata.py +0 -0
  255. {squad-1.83 → squad-1.85}/squad/core/migrations/0071_migrate_old_tokens.py +0 -0
  256. {squad-1.83 → squad-1.85}/squad/core/migrations/0072_group_description.py +0 -0
  257. {squad-1.83 → squad-1.85}/squad/core/migrations/0073_auto_20180420_1643.py +0 -0
  258. {squad-1.83 → squad-1.85}/squad/core/migrations/0074_add_indexes.py +0 -0
  259. {squad-1.83 → squad-1.85}/squad/core/migrations/0075_update_project_enabled_plugin_list.py +0 -0
  260. {squad-1.83 → squad-1.85}/squad/core/migrations/0076_patch_builds.py +0 -0
  261. {squad-1.83 → squad-1.85}/squad/core/migrations/0077_knownissue.py +0 -0
  262. {squad-1.83 → squad-1.85}/squad/core/migrations/0078_cache_test_run_counts.py +0 -0
  263. {squad-1.83 → squad-1.85}/squad/core/migrations/0079_init_cache_test_run_counts.py +0 -0
  264. {squad-1.83 → squad-1.85}/squad/core/migrations/0080_auto_20180810_0047.py +0 -0
  265. {squad-1.83 → squad-1.85}/squad/core/migrations/0081_status_has_metrics.py +0 -0
  266. {squad-1.83 → squad-1.85}/squad/core/migrations/0082_populate_status_has_metrics.py +0 -0
  267. {squad-1.83 → squad-1.85}/squad/core/migrations/0083_rename_knownissue_environments.py +0 -0
  268. {squad-1.83 → squad-1.85}/squad/core/migrations/0084_projectstatus_regressions_fixes.py +0 -0
  269. {squad-1.83 → squad-1.85}/squad/core/migrations/0085_projectstatus_defaults.py +0 -0
  270. {squad-1.83 → squad-1.85}/squad/core/migrations/0086_xfail.py +0 -0
  271. {squad-1.83 → squad-1.85}/squad/core/migrations/0087_test_known_issues.py +0 -0
  272. {squad-1.83 → squad-1.85}/squad/core/migrations/0088_user_subscriptions.py +0 -0
  273. {squad-1.83 → squad-1.85}/squad/core/migrations/0089_test_has_known_issues.py +0 -0
  274. {squad-1.83 → squad-1.85}/squad/core/migrations/0090_populate_test_has_known_issues.py +0 -0
  275. {squad-1.83 → squad-1.85}/squad/core/migrations/0091_notification_delivery_remove_unique_status.py +0 -0
  276. {squad-1.83 → squad-1.85}/squad/core/migrations/0092_annotation.py +0 -0
  277. {squad-1.83 → squad-1.85}/squad/core/migrations/0093_historicalemailtemplate.py +0 -0
  278. {squad-1.83 → squad-1.85}/squad/core/migrations/0094_populatehistoricalemailtemplate.py +0 -0
  279. {squad-1.83 → squad-1.85}/squad/core/migrations/0095_project_data_retention_days.py +0 -0
  280. {squad-1.83 → squad-1.85}/squad/core/migrations/0096_build_keep_data.py +0 -0
  281. {squad-1.83 → squad-1.85}/squad/core/migrations/0097_build_placeholder.py +0 -0
  282. {squad-1.83 → squad-1.85}/squad/core/migrations/0098_blank_annotation.py +0 -0
  283. {squad-1.83 → squad-1.85}/squad/core/migrations/0099_metricthreshold.py +0 -0
  284. {squad-1.83 → squad-1.85}/squad/core/migrations/0100_metric_is_outlier.py +0 -0
  285. {squad-1.83 → squad-1.85}/squad/core/migrations/0101_project_project_settings.py +0 -0
  286. {squad-1.83 → squad-1.85}/squad/core/migrations/0102_projectstatus_null_metric_summary.py +0 -0
  287. {squad-1.83 → squad-1.85}/squad/core/migrations/0103_populate_project_status.py +0 -0
  288. {squad-1.83 → squad-1.85}/squad/core/migrations/0104_delayedreport.py +0 -0
  289. {squad-1.83 → squad-1.85}/squad/core/migrations/0105_delayed_report_error_message.py +0 -0
  290. {squad-1.83 → squad-1.85}/squad/core/migrations/0106_delayedreport_output_subject.py +0 -0
  291. {squad-1.83 → squad-1.85}/squad/core/migrations/0107_move_notification_strategy.py +0 -0
  292. {squad-1.83 → squad-1.85}/squad/core/migrations/0108_add_email_template_validator.py +0 -0
  293. {squad-1.83 → squad-1.85}/squad/core/migrations/0109_group_member.py +0 -0
  294. {squad-1.83 → squad-1.85}/squad/core/migrations/0110_move_users_from_django_groups_to_squad_groups.py +0 -0
  295. {squad-1.83 → squad-1.85}/squad/core/migrations/0111_remove_group_user_groups.py +0 -0
  296. {squad-1.83 → squad-1.85}/squad/core/migrations/0112_user_namespaces.py +0 -0
  297. {squad-1.83 → squad-1.85}/squad/core/migrations/0113_group_project_blank_name_and_description.py +0 -0
  298. {squad-1.83 → squad-1.85}/squad/core/migrations/0114_project_enabled_plugin_list_can_be_blank.py +0 -0
  299. {squad-1.83 → squad-1.85}/squad/core/migrations/0115_fix_slug_validation.py +0 -0
  300. {squad-1.83 → squad-1.85}/squad/core/migrations/0116_make_group_membership_unique.py +0 -0
  301. {squad-1.83 → squad-1.85}/squad/core/migrations/0117_drop_obsolete_token_model.py +0 -0
  302. {squad-1.83 → squad-1.85}/squad/core/migrations/0118_project_is_archived.py +0 -0
  303. {squad-1.83 → squad-1.85}/squad/core/migrations/0119_i18n.py +0 -0
  304. {squad-1.83 → squad-1.85}/squad/core/migrations/0120_buildsummary.py +0 -0
  305. {squad-1.83 → squad-1.85}/squad/core/migrations/0121_add_password_patchsource.py +0 -0
  306. {squad-1.83 → squad-1.85}/squad/core/migrations/0122_fix_patchsource_url_and_token.py +0 -0
  307. {squad-1.83 → squad-1.85}/squad/core/migrations/0123_django_upgrade_missing_migrations.py +0 -0
  308. {squad-1.83 → squad-1.85}/squad/core/migrations/0124_set_default_expected_test_runs_to_zero.py +0 -0
  309. {squad-1.83 → squad-1.85}/squad/core/migrations/0125_fix_missing_status_has_metrics_for_testruns.py +0 -0
  310. {squad-1.83 → squad-1.85}/squad/core/migrations/0126_metricthreshold_environment.py +0 -0
  311. {squad-1.83 → squad-1.85}/squad/core/migrations/0127_metric_thresholds_migrate_data.py +0 -0
  312. {squad-1.83 → squad-1.85}/squad/core/migrations/0128_metric_thresholds_remove_proj_col.py +0 -0
  313. {squad-1.83 → squad-1.85}/squad/core/migrations/0129_projectstatus_nullable_notified_on_timeout.py +0 -0
  314. {squad-1.83 → squad-1.85}/squad/core/migrations/0130_project_status_baseline_next.py +0 -0
  315. {squad-1.83 → squad-1.85}/squad/core/migrations/0131_create_squad_auth_group_and_add_users.py +0 -0
  316. {squad-1.83 → squad-1.85}/squad/core/migrations/0132_attachment_mimetype.py +0 -0
  317. {squad-1.83 → squad-1.85}/squad/core/migrations/0133_append_project_permissions_to_squad_auth_group.py +0 -0
  318. {squad-1.83 → squad-1.85}/squad/core/migrations/0134_longer_metric_name.py +0 -0
  319. {squad-1.83 → squad-1.85}/squad/core/migrations/0135_add_privileged_access_level.py +0 -0
  320. {squad-1.83 → squad-1.85}/squad/core/migrations/0136_migrate_submitters_to_privileged.py +0 -0
  321. {squad-1.83 → squad-1.85}/squad/core/migrations/0137_patchsource_token_null.py +0 -0
  322. {squad-1.83 → squad-1.85}/squad/core/migrations/0138_metric_unit.py +0 -0
  323. {squad-1.83 → squad-1.85}/squad/core/migrations/0139_nullable_test_name.py +0 -0
  324. {squad-1.83 → squad-1.85}/squad/core/migrations/0140_increase_gerrit_password_length.py +0 -0
  325. {squad-1.83 → squad-1.85}/squad/core/migrations/0141_remove_test_name.py +0 -0
  326. {squad-1.83 → squad-1.85}/squad/core/migrations/0142_add_testrun_file_storage.py +0 -0
  327. {squad-1.83 → squad-1.85}/squad/core/migrations/0143_attachment_storage.py +0 -0
  328. {squad-1.83 → squad-1.85}/squad/core/migrations/0144_attachment_data_null.py +0 -0
  329. {squad-1.83 → squad-1.85}/squad/core/migrations/0145_pluginscratch.py +0 -0
  330. {squad-1.83 → squad-1.85}/squad/core/migrations/0146_deprecate_testrun_and_attachment_data_fields.py +0 -0
  331. {squad-1.83 → squad-1.85}/squad/core/migrations/0147_add_build_and_environment_to_test.py +0 -0
  332. {squad-1.83 → squad-1.85}/squad/core/migrations/0148_remove_legacy_storage_fields.py +0 -0
  333. {squad-1.83 → squad-1.85}/squad/core/migrations/0149_build_patch_url.py +0 -0
  334. {squad-1.83 → squad-1.85}/squad/core/migrations/0150_add_new_notification_strategy.py +0 -0
  335. {squad-1.83 → squad-1.85}/squad/core/migrations/0151_callback.py +0 -0
  336. {squad-1.83 → squad-1.85}/squad/core/migrations/0152_add_build_patch_notified.py +0 -0
  337. {squad-1.83 → squad-1.85}/squad/core/migrations/0153_callback_make_response_content_blob.py +0 -0
  338. {squad-1.83 → squad-1.85}/squad/core/migrations/0154_project_add_force_finishing_builds_field.py +0 -0
  339. {squad-1.83 → squad-1.85}/squad/core/migrations/0155_add_build_and_environment_to_metric.py +0 -0
  340. {squad-1.83 → squad-1.85}/squad/core/migrations/0156_nullable_metric_name.py +0 -0
  341. {squad-1.83 → squad-1.85}/squad/core/migrations/0157_remove_metric_name.py +0 -0
  342. {squad-1.83 → squad-1.85}/squad/core/migrations/0158_add_metric_comparison_to_projectstatus.py +0 -0
  343. {squad-1.83 → squad-1.85}/squad/core/migrations/0159_nullable_metricthreshold_value.py +0 -0
  344. {squad-1.83 → squad-1.85}/squad/core/migrations/0160_add_project_to_metricthreshold.py +0 -0
  345. {squad-1.83 → squad-1.85}/squad/core/migrations/0161_add_metricthreshold_perm_to_squad_group.py +0 -0
  346. {squad-1.83 → squad-1.85}/squad/core/migrations/0162_project_add_build_confidence_settings.py +0 -0
  347. {squad-1.83 → squad-1.85}/squad/core/migrations/0163_hirtoricalemailtemplate_update.py +0 -0
  348. {squad-1.83 → squad-1.85}/squad/core/migrations/0164_django_update.py +0 -0
  349. {squad-1.83 → squad-1.85}/squad/core/migrations/0165_buildsummary_uniqueness.py +0 -0
  350. {squad-1.83 → squad-1.85}/squad/core/migrations/0166_build_is_release.py +0 -0
  351. {squad-1.83 → squad-1.85}/squad/core/migrations/0167_add_project_datetime.py +0 -0
  352. {squad-1.83 → squad-1.85}/squad/core/migrations/0168_add_group_settings.py +0 -0
  353. {squad-1.83 → squad-1.85}/squad/core/migrations/0169_userpreferences.py +0 -0
  354. {squad-1.83/squad/frontend/management/commands → squad-1.85/squad/core/migrations}/__init__.py +0 -0
  355. {squad-1.83 → squad-1.85}/squad/core/models.py +0 -0
  356. {squad-1.83 → squad-1.85}/squad/core/notification.py +0 -0
  357. {squad-1.83 → squad-1.85}/squad/core/plugins.py +0 -0
  358. {squad-1.83 → squad-1.85}/squad/core/queries.py +0 -0
  359. {squad-1.83 → squad-1.85}/squad/core/statistics.py +0 -0
  360. {squad-1.83 → squad-1.85}/squad/core/tasks/__init__.py +0 -0
  361. {squad-1.83 → squad-1.85}/squad/core/tasks/exceptions.py +0 -0
  362. {squad-1.83 → squad-1.85}/squad/core/tasks/notification.py +0 -0
  363. {squad-1.83 → squad-1.85}/squad/core/templates/squad/notification/base.jinja2 +0 -0
  364. {squad-1.83 → squad-1.85}/squad/core/templates/squad/notification/diff.html.jinja2 +0 -0
  365. {squad-1.83 → squad-1.85}/squad/core/templates/squad/notification/diff.txt.jinja2 +0 -0
  366. {squad-1.83 → squad-1.85}/squad/core/templates/squad/notification/failed_test_jobs.html.jinja2 +0 -0
  367. {squad-1.83 → squad-1.85}/squad/core/templates/squad/notification/failed_test_jobs.txt.jinja2 +0 -0
  368. {squad-1.83 → squad-1.85}/squad/core/templates/squad/notification/moderation.html.jinja2 +0 -0
  369. {squad-1.83 → squad-1.85}/squad/core/templates/squad/notification/moderation.txt.jinja2 +0 -0
  370. {squad-1.83/squad/frontend → squad-1.85/squad/core}/templatetags/__init__.py +0 -0
  371. {squad-1.83 → squad-1.85}/squad/core/templatetags/squad_notification.py +0 -0
  372. {squad-1.83 → squad-1.85}/squad/core/utils.py +0 -0
  373. {squad-1.83 → squad-1.85}/squad/frontend/__init__.py +0 -0
  374. {squad-1.83 → squad-1.85}/squad/frontend/__main__.py +0 -0
  375. {squad-1.83 → squad-1.85}/squad/frontend/admin.py +0 -0
  376. {squad-1.83 → squad-1.85}/squad/frontend/apps.py +0 -0
  377. {squad-1.83 → squad-1.85}/squad/frontend/badges.py +0 -0
  378. {squad-1.83 → squad-1.85}/squad/frontend/build_settings.py +0 -0
  379. {squad-1.83 → squad-1.85}/squad/frontend/ci.py +0 -0
  380. {squad-1.83 → squad-1.85}/squad/frontend/comparison.py +0 -0
  381. {squad-1.83 → squad-1.85}/squad/frontend/extract.py +0 -0
  382. {squad-1.83 → squad-1.85}/squad/frontend/forms.py +0 -0
  383. {squad-1.83 → squad-1.85}/squad/frontend/group_settings.py +0 -0
  384. {squad-1.83 → squad-1.85}/squad/frontend/locale/django.pot +0 -0
  385. {squad-1.83 → squad-1.85}/squad/frontend/locale/pl/LC_MESSAGES/django.po +0 -0
  386. {squad-1.83 → squad-1.85}/squad/frontend/locale/pt/LC_MESSAGES/django.po +0 -0
  387. {squad-1.83 → squad-1.85}/squad/frontend/locale/pt_BR/LC_MESSAGES/django.po +0 -0
  388. {squad-1.83/test/ci → squad-1.85/squad/frontend/management}/__init__.py +0 -0
  389. {squad-1.83/test/ci/backend → squad-1.85/squad/frontend/management/commands}/__init__.py +0 -0
  390. {squad-1.83 → squad-1.85}/squad/frontend/management/commands/get_token.py +0 -0
  391. {squad-1.83 → squad-1.85}/squad/frontend/metrics.py +0 -0
  392. {squad-1.83 → squad-1.85}/squad/frontend/project_settings.py +0 -0
  393. {squad-1.83 → squad-1.85}/squad/frontend/queries.py +0 -0
  394. {squad-1.83 → squad-1.85}/squad/frontend/setup.py +0 -0
  395. {squad-1.83 → squad-1.85}/squad/frontend/static/compare.css +0 -0
  396. {squad-1.83 → squad-1.85}/squad/frontend/static/download +0 -0
  397. {squad-1.83 → squad-1.85}/squad/frontend/static/download.conf +0 -0
  398. {squad-1.83 → squad-1.85}/squad/frontend/static/favicon.ico +0 -0
  399. {squad-1.83 → squad-1.85}/squad/frontend/static/main.css +0 -0
  400. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/attach_select2.js +0 -0
  401. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/build.js +0 -0
  402. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/build_compare.js +0 -0
  403. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/build_list.js +0 -0
  404. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/charts.js +0 -0
  405. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/common.js +0 -0
  406. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/compare.js +0 -0
  407. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/config.js +0 -0
  408. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/annotation.js +0 -0
  409. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/build_compare.js +0 -0
  410. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/build_list_compare.js +0 -0
  411. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/build_release.js +0 -0
  412. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/cancel.js +0 -0
  413. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/charts.js +0 -0
  414. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/compare.js +0 -0
  415. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/fetch.js +0 -0
  416. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/filter.js +0 -0
  417. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/metricThreshold.js +0 -0
  418. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/project_compare.js +0 -0
  419. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/resubmit.js +0 -0
  420. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/controllers/testjobs_progress.js +0 -0
  421. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/metric.threshold.js +0 -0
  422. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/project_compare.js +0 -0
  423. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/showHide.js +0 -0
  424. {squad-1.83 → squad-1.85}/squad/frontend/static/squad/table.js +0 -0
  425. {squad-1.83 → squad-1.85}/squad/frontend/static/squad_sign.svg +0 -0
  426. {squad-1.83 → squad-1.85}/squad/frontend/templates/401.jinja2 +0 -0
  427. {squad-1.83 → squad-1.85}/squad/frontend/templates/404.jinja2 +0 -0
  428. {squad-1.83 → squad-1.85}/squad/frontend/templates/django/rest_framework/api.html +0 -0
  429. {squad-1.83 → squad-1.85}/squad/frontend/templates/django/squad/_user_menu.html +0 -0
  430. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_builds_table.jinja2 +0 -0
  431. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_env_suite_data.jinja2 +0 -0
  432. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_metadata.jinja2 +0 -0
  433. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_pagination.jinja2 +0 -0
  434. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_permissions.jinja2 +0 -0
  435. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_project_list.jinja2 +0 -0
  436. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_regressions_and_fixes.jinja2 +0 -0
  437. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_results_table.jinja2 +0 -0
  438. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_results_transitions_filter.jinja2 +0 -0
  439. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_subscribe.jinja2 +0 -0
  440. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_test_results_envbox.jinja2 +0 -0
  441. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_test_results_suitebox.jinja2 +0 -0
  442. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_test_results_summary.jinja2 +0 -0
  443. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_test_results_table.jinja2 +0 -0
  444. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_test_run_metric.jinja2 +0 -0
  445. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_test_run_test.jinja2 +0 -0
  446. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_unfinished_build.jinja2 +0 -0
  447. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/_user_menu.jinja2 +0 -0
  448. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/base.jinja2 +0 -0
  449. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/build-nav.jinja2 +0 -0
  450. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/build.jinja2 +0 -0
  451. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/build_callbacks.jinja2 +0 -0
  452. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/build_metadata.jinja2 +0 -0
  453. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/build_metrics.jinja2 +0 -0
  454. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/build_settings.jinja2 +0 -0
  455. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/builds.jinja2 +0 -0
  456. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/compare.jinja2 +0 -0
  457. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/compare_builds.jinja2 +0 -0
  458. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/compare_projects.jinja2 +0 -0
  459. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group-nav.jinja2 +0 -0
  460. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group.jinja2 +0 -0
  461. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group_settings/advanced.jinja2 +0 -0
  462. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group_settings/base.jinja2 +0 -0
  463. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group_settings/delete.jinja2 +0 -0
  464. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group_settings/index.jinja2 +0 -0
  465. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group_settings/members.jinja2 +0 -0
  466. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group_settings/new_group.jinja2 +0 -0
  467. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/group_settings/new_project.jinja2 +0 -0
  468. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/index.jinja2 +0 -0
  469. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/knownissues.jinja2 +0 -0
  470. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/login.jinja2 +0 -0
  471. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/metrics.jinja2 +0 -0
  472. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project-nav.jinja2 +0 -0
  473. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project.jinja2 +0 -0
  474. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/_threshold_table.jinja2 +0 -0
  475. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/advanced.jinja2 +0 -0
  476. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/base.jinja2 +0 -0
  477. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/build_confidence.jinja2 +0 -0
  478. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/delete.jinja2 +0 -0
  479. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/environments.jinja2 +0 -0
  480. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/index.jinja2 +0 -0
  481. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/project_settings/thresholds.jinja2 +0 -0
  482. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/test_history.jinja2 +0 -0
  483. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/test_run.jinja2 +0 -0
  484. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/test_run_suite_metrics.jinja2 +0 -0
  485. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/test_run_suite_test_details.jinja2 +0 -0
  486. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/test_run_suite_tests.jinja2 +0 -0
  487. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/testjob.jinja2 +0 -0
  488. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/testjobs_progress.jinja2 +0 -0
  489. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/tests-details-nav.jinja2 +0 -0
  490. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/tests.jinja2 +0 -0
  491. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/user_settings/api_token.jinja2 +0 -0
  492. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/user_settings/base.jinja2 +0 -0
  493. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/user_settings/profile.jinja2 +0 -0
  494. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/user_settings/projects.jinja2 +0 -0
  495. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/user_settings/subscriptions.jinja2 +0 -0
  496. {squad-1.83 → squad-1.85}/squad/frontend/templates/squad/user_settings/user_preferences.jinja2 +0 -0
  497. {squad-1.83/test/core → squad-1.85/squad/frontend/templatetags}/__init__.py +0 -0
  498. {squad-1.83 → squad-1.85}/squad/frontend/templatetags/squad.py +0 -0
  499. {squad-1.83 → squad-1.85}/squad/frontend/tests.py +0 -0
  500. {squad-1.83 → squad-1.85}/squad/frontend/urls.py +0 -0
  501. {squad-1.83 → squad-1.85}/squad/frontend/user_settings.py +0 -0
  502. {squad-1.83 → squad-1.85}/squad/frontend/utils.py +0 -0
  503. {squad-1.83 → squad-1.85}/squad/frontend/views.py +0 -0
  504. {squad-1.83 → squad-1.85}/squad/http.py +0 -0
  505. {squad-1.83 → squad-1.85}/squad/jinja2.py +0 -0
  506. {squad-1.83 → squad-1.85}/squad/mail.py +0 -0
  507. {squad-1.83 → squad-1.85}/squad/manage.py +0 -0
  508. {squad-1.83 → squad-1.85}/squad/plugins/__init__.py +0 -0
  509. {squad-1.83 → squad-1.85}/squad/plugins/example.py +0 -0
  510. {squad-1.83 → squad-1.85}/squad/plugins/gerrit.py +0 -0
  511. {squad-1.83 → squad-1.85}/squad/plugins/github.py +0 -0
  512. {squad-1.83 → squad-1.85}/squad/plugins/linux_log_parser.py +0 -0
  513. {squad-1.83 → squad-1.85}/squad/run/__init__.py +0 -0
  514. {squad-1.83 → squad-1.85}/squad/run/__main__.py +0 -0
  515. {squad-1.83 → squad-1.85}/squad/run/listener.py +0 -0
  516. {squad-1.83 → squad-1.85}/squad/run/scheduler.py +0 -0
  517. {squad-1.83 → squad-1.85}/squad/run/worker.py +0 -0
  518. {squad-1.83 → squad-1.85}/squad/settings.py +0 -0
  519. {squad-1.83 → squad-1.85}/squad/socialaccount.py +0 -0
  520. {squad-1.83 → squad-1.85}/squad/urls.py +0 -0
  521. {squad-1.83 → squad-1.85}/squad/wsgi.py +0 -0
  522. {squad-1.83 → squad-1.85}/squad.egg-info/dependency_links.txt +0 -0
  523. {squad-1.83 → squad-1.85}/squad.egg-info/entry_points.txt +0 -0
  524. {squad-1.83 → squad-1.85}/squad.egg-info/requires.txt +0 -0
  525. {squad-1.83 → squad-1.85}/squad.egg-info/top_level.txt +0 -0
  526. {squad-1.83 → squad-1.85}/squad.svg +0 -0
  527. {squad-1.83 → squad-1.85}/test/__init__.py +0 -0
  528. {squad-1.83 → squad-1.85}/test/api/__init__.py +0 -0
  529. {squad-1.83 → squad-1.85}/test/api/benchmarks.csv +0 -0
  530. {squad-1.83 → squad-1.85}/test/api/benchmarks.json +0 -0
  531. {squad-1.83 → squad-1.85}/test/api/definition.yaml +0 -0
  532. {squad-1.83 → squad-1.85}/test/api/metadata.json +0 -0
  533. {squad-1.83 → squad-1.85}/test/api/test_data.py +0 -0
  534. {squad-1.83 → squad-1.85}/test/api/test_run.log +0 -0
  535. {squad-1.83 → squad-1.85}/test/api/tests.csv +0 -0
  536. {squad-1.83 → squad-1.85}/test/api/tests.json +0 -0
  537. {squad-1.83 → squad-1.85}/test/api/tests.py +0 -0
  538. {squad-1.83 → squad-1.85}/test/api/tests_log.json +0 -0
  539. {squad-1.83 → squad-1.85}/test/api/tests_two.json +0 -0
  540. {squad-1.83 → squad-1.85}/test/api/twoline_definition.yaml +0 -0
  541. {squad-1.83/test/frontend → squad-1.85/test/ci}/__init__.py +0 -0
  542. {squad-1.83/test/integration → squad-1.85/test/ci/backend}/__init__.py +0 -0
  543. {squad-1.83 → squad-1.85}/test/ci/backend/example-broken-log.yaml +0 -0
  544. {squad-1.83 → squad-1.85}/test/ci/backend/example-lava-log.yaml +0 -0
  545. {squad-1.83 → squad-1.85}/test/ci/backend/lava.json +0 -0
  546. {squad-1.83 → squad-1.85}/test/ci/backend/test_fake.py +0 -0
  547. {squad-1.83 → squad-1.85}/test/ci/backend/test_lava.py +0 -0
  548. {squad-1.83 → squad-1.85}/test/ci/backend/test_real_lava.py +0 -0
  549. {squad-1.83 → squad-1.85}/test/ci/backend/test_tuxsuite.py +0 -0
  550. {squad-1.83 → squad-1.85}/test/ci/backend/tuxsuite_test_failed_result_sample.json +0 -0
  551. {squad-1.83 → squad-1.85}/test/ci/backend/tuxsuite_test_result_sample.json +0 -0
  552. {squad-1.83 → squad-1.85}/test/ci/test_listen.py +0 -0
  553. {squad-1.83 → squad-1.85}/test/ci/test_models.py +0 -0
  554. {squad-1.83 → squad-1.85}/test/ci/test_tasks.py +0 -0
  555. {squad-1.83/test/plugins → squad-1.85/test/core}/__init__.py +0 -0
  556. {squad-1.83 → squad-1.85}/test/core/test_attachment.py +0 -0
  557. {squad-1.83 → squad-1.85}/test/core/test_build.py +0 -0
  558. {squad-1.83 → squad-1.85}/test/core/test_build_summary.py +0 -0
  559. {squad-1.83 → squad-1.85}/test/core/test_callback.py +0 -0
  560. {squad-1.83 → squad-1.85}/test/core/test_emailtemplate.py +0 -0
  561. {squad-1.83 → squad-1.85}/test/core/test_failures.py +0 -0
  562. {squad-1.83 → squad-1.85}/test/core/test_group.py +0 -0
  563. {squad-1.83 → squad-1.85}/test/core/test_historical_emailtemplate.py +0 -0
  564. {squad-1.83 → squad-1.85}/test/core/test_history.py +0 -0
  565. {squad-1.83 → squad-1.85}/test/core/test_import_data.py +0 -0
  566. {squad-1.83 → squad-1.85}/test/core/test_import_data_input/1/default/1/metadata.json +0 -0
  567. {squad-1.83 → squad-1.85}/test/core/test_import_data_input/1/default/1/metrics.json +0 -0
  568. {squad-1.83 → squad-1.85}/test/core/test_import_data_input/2/default/2/metadata.json +0 -0
  569. {squad-1.83 → squad-1.85}/test/core/test_import_data_input/2/default/2/metrics.json +0 -0
  570. {squad-1.83 → squad-1.85}/test/core/test_import_data_input/2/default/2/screenshot.png +0 -0
  571. {squad-1.83 → squad-1.85}/test/core/test_import_data_input/2/default/2/tests.json +0 -0
  572. {squad-1.83 → squad-1.85}/test/core/test_import_data_missing_metadata/1/1/tests.json +0 -0
  573. {squad-1.83 → squad-1.85}/test/core/test_known_issues.py +0 -0
  574. {squad-1.83 → squad-1.85}/test/core/test_metric.py +0 -0
  575. {squad-1.83 → squad-1.85}/test/core/test_metric_comparison.py +0 -0
  576. {squad-1.83 → squad-1.85}/test/core/test_metric_threshold.py +0 -0
  577. {squad-1.83 → squad-1.85}/test/core/test_metrics_data.py +0 -0
  578. {squad-1.83 → squad-1.85}/test/core/test_metrics_summary.py +0 -0
  579. {squad-1.83 → squad-1.85}/test/core/test_notification.py +0 -0
  580. {squad-1.83 → squad-1.85}/test/core/test_notification_delivery.py +0 -0
  581. {squad-1.83 → squad-1.85}/test/core/test_patch_source.py +0 -0
  582. {squad-1.83 → squad-1.85}/test/core/test_project.py +0 -0
  583. {squad-1.83 → squad-1.85}/test/core/test_project_status.py +0 -0
  584. {squad-1.83 → squad-1.85}/test/core/test_statistics.py +0 -0
  585. {squad-1.83 → squad-1.85}/test/core/test_tasks.py +0 -0
  586. {squad-1.83 → squad-1.85}/test/core/test_tasks_notification.py +0 -0
  587. {squad-1.83 → squad-1.85}/test/core/test_test.py +0 -0
  588. {squad-1.83 → squad-1.85}/test/core/test_test_comparison.py +0 -0
  589. {squad-1.83 → squad-1.85}/test/core/test_test_data.py +0 -0
  590. {squad-1.83 → squad-1.85}/test/core/test_test_run.py +0 -0
  591. {squad-1.83 → squad-1.85}/test/core/test_test_summary.py +0 -0
  592. {squad-1.83 → squad-1.85}/test/core/test_update_project_statuses.py +0 -0
  593. {squad-1.83 → squad-1.85}/test/core/test_user_namespace.py +0 -0
  594. {squad-1.83 → squad-1.85}/test/core/test_utils.py +0 -0
  595. {squad-1.83 → squad-1.85}/test/frontend/test_basics.py +0 -0
  596. {squad-1.83 → squad-1.85}/test/frontend/test_comparison.py +0 -0
  597. {squad-1.83 → squad-1.85}/test/frontend/test_get_token_command.py +0 -0
  598. {squad-1.83 → squad-1.85}/test/frontend/test_group_settings.py +0 -0
  599. {squad-1.83 → squad-1.85}/test/frontend/test_history.py +0 -0
  600. {squad-1.83 → squad-1.85}/test/frontend/test_template_tags.py +0 -0
  601. {squad-1.83 → squad-1.85}/test/frontend/test_test_job.py +0 -0
  602. {squad-1.83 → squad-1.85}/test/frontend/test_tests.py +0 -0
  603. {squad-1.83 → squad-1.85}/test/frontend/test_utils.py +0 -0
  604. {squad-1.83 → squad-1.85}/test/integration/plugins/test_tradefed.py +0 -0
  605. {squad-1.83 → squad-1.85}/test/integration/plugins/tradefed-output-20220608105250.tar.xz +0 -0
  606. {squad-1.83 → squad-1.85}/test/integration/test_build_notification_from_ci.py +0 -0
  607. {squad-1.83 → squad-1.85}/test/javascript.py +0 -0
  608. {squad-1.83 → squad-1.85}/test/karma.conf.js +0 -0
  609. {squad-1.83 → squad-1.85}/test/mock.py +0 -0
  610. {squad-1.83 → squad-1.85}/test/performance.py +0 -0
  611. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/kasan.log +0 -0
  612. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/kernel_bug_and_invalid_opcode.log +0 -0
  613. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/kernelexceptiontrace.log +0 -0
  614. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/kernelpanic.log +0 -0
  615. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/kfence.log +0 -0
  616. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/multiple_issues_dmesg.log +0 -0
  617. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/oops.log +0 -0
  618. {squad-1.83 → squad-1.85}/test/plugins/linux_log_parser/rcu_warning.log +0 -0
  619. {squad-1.83 → squad-1.85}/test/plugins/test_gerrit.py +0 -0
  620. {squad-1.83 → squad-1.85}/test/plugins/test_github.py +0 -0
  621. {squad-1.83 → squad-1.85}/test/plugins/test_linux_log_parser.py +0 -0
  622. {squad-1.83 → squad-1.85}/test/plugins/test_plugin.py +0 -0
  623. {squad-1.83 → squad-1.85}/test/settings.py +0 -0
  624. {squad-1.83 → squad-1.85}/test/test_architecture.py +0 -0
  625. {squad-1.83 → squad-1.85}/test/test_code_quality.py +0 -0
  626. {squad-1.83 → squad-1.85}/test/test_cors.py +0 -0
  627. {squad-1.83 → squad-1.85}/test/test_i18n.py +0 -0
  628. {squad-1.83 → squad-1.85}/test/test_mail.py +0 -0
  629. {squad-1.83 → squad-1.85}/test/test_pending_migrations.py +0 -0
  630. {squad-1.83 → squad-1.85}/test/unit/test_annotation.js +0 -0
  631. {squad-1.83 → squad-1.85}/test/unit/test_cancel.js +0 -0
  632. {squad-1.83 → squad-1.85}/test/unit/test_charts.js +0 -0
  633. {squad-1.83 → squad-1.85}/test/unit/test_compare.js +0 -0
  634. {squad-1.83 → squad-1.85}/test/unit/test_filter.js +0 -0
  635. {squad-1.83 → squad-1.85}/test/unit/test_resubmit.js +0 -0
@@ -6,7 +6,7 @@ version: 2
6
6
  build:
7
7
  os: ubuntu-22.04
8
8
  tools:
9
- python: "3.7"
9
+ python: "3.10"
10
10
  sphinx:
11
11
  configuration: doc/conf.py
12
12
  formats: all
@@ -1,3 +1,31 @@
1
+ # 1.85
2
+
3
+ This 1.85 release changes the test jobs page to only display resubmit and cancel buttons
4
+ when backend really supports it.
5
+
6
+ # 1.84
7
+
8
+ This 1.84 release has a new way to run SQUAD via docker-compose, thanks to @swvanbuuren!
9
+
10
+ The release also counts with a few improvements on the REST API and CI module.
11
+
12
+ Complete list of changes going in:
13
+
14
+ * api: rest:
15
+ * register only one build endpoint
16
+ * add skip filter
17
+ * ci:
18
+ * fetch LAVA job definition for watchjobs
19
+ * fix variable naming of get_job_definition methods
20
+ * add test for getting job definitions to testing backend
21
+ * account for backends without job definition
22
+ * docs:
23
+ * .readthedocs.yml: bump Python to 3.10
24
+ * update authorization token header in SQUAD docs
25
+ * make docker compose definition generic
26
+ * add docker compose example incl. documentation
27
+ * change localhost port behavior
28
+
1
29
  # 1.83
2
30
 
3
31
  This 1.83 release improves documentation and how to run SQUAD.
@@ -30,6 +30,7 @@ recursive-include squad/*/templates/ *
30
30
  recursive-include test/ *.py *.json *.csv *.log *.png *.yaml *.js
31
31
  recursive-include scripts/ *
32
32
  recursive-include doc/ *
33
+ recursive-include docker/ *
33
34
  recursive-include LICENSES/ *
34
35
  recursive-include .reuse/ *
35
36
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: squad
3
- Version: 1.83
3
+ Version: 1.85
4
4
  Summary: Software Quality Dashboard
5
5
  Home-page: https://github.com/Linaro/squad
6
6
  Author: Antonio Terceiro
@@ -61,7 +61,7 @@ Example (with test job definition as POST parameter)::
61
61
 
62
62
  $ DEFINITION="$(cat /path/to/definition.txt)"
63
63
  $ curl \
64
- --header "Auth-Token: $SQUAD_TOKEN" \
64
+ --header "Authorization: token $SQUAD_TOKEN" \
65
65
  --form backend=lava \
66
66
  --form definition="$DEFINITION" \
67
67
  https://squad.example.com/api/submitjob/my-group/my-project/x.y.z/my-ci-env
@@ -69,7 +69,7 @@ Example (with test job definition as POST parameter)::
69
69
  Example (with test job definition as file upload)::
70
70
 
71
71
  $ curl \
72
- --header "Auth-Token: $SQUAD_TOKEN" \
72
+ --header "Authorization: token $SQUAD_TOKEN" \
73
73
  --form backend=lava \
74
74
  --form definition=@/path/to/definition.txt \
75
75
  https://squad.example.com/api/submitjob/my-group/my-project/x.y.z/my-ci-env
@@ -109,7 +109,7 @@ processing. The API is following:
109
109
  Example (with test job definition as POST parameter)::
110
110
 
111
111
  $ curl \
112
- --header "Auth-Token: $SQUAD_TOKEN" \
112
+ --header "Authorization: token $SQUAD_TOKEN" \
113
113
  --form backend=lava \
114
114
  --form testjob_id=123456 \
115
115
  https://squad.example.com/api/watchjob/my-group/my-project/x.y.z/my-ci-env
@@ -27,7 +27,6 @@ Install squad with Postgres support::
27
27
 
28
28
  pip3 install squad[postgres]
29
29
 
30
-
31
30
  Message broker
32
31
  --------------
33
32
 
@@ -210,7 +209,7 @@ __ https://docs.djangoproject.com/en/1.11/topics/email/
210
209
  * ``SQUAD_SEND_ADMIN_ERROR_EMAIL``: Determines whether or not to send exception
211
210
  notifications to administrators. Defaults to ``True``.
212
211
 
213
- * ``SENTRY_DSN``: Defines Sentry's DSN token, if defined SQUAD will attempt to
212
+ * ``SENTRY_DSN``: Defines Sentry's DSN token, if defined SQUAD will attempt to
214
213
  import Sentry SDK and use it. Defaults to ``None``. If Sentry is configured
215
214
  it's recommended to disable sending admin notifications by setting
216
215
  ``SQUAD_SEND_ADMIN_ERROR_EMAIL = False``.
@@ -275,3 +274,70 @@ automate SQUAD setup with containers. Details about user management with
275
274
  * --not-staff Make this user no longer a staff member
276
275
  * --superuser Make this user a superuser
277
276
  * --not-superuser Make this user no longer a superuser
277
+
278
+ Docker compose setup
279
+ --------------------
280
+
281
+ Alternatively, SQUAD can be run inside a Docker container using `Docker Compose
282
+ <https://docs.docker.com/compose/>`_. A baseline setup is provided here__.
283
+
284
+ __ https://github.com/linaro/squad/tree/master/docker
285
+
286
+ Not only will this run all SQUAD processes, but also automatically pull and
287
+ start all required services to run a local SQUAD instance with a web interface.
288
+ All container images are pulled automatically from Dockerhub__.
289
+
290
+ __ https://hub.docker.com/
291
+
292
+ Please be aware, that some of the predefined settings, like ``SQUAD_BASE_URL``
293
+ or ``SQUAD_EMAIL_FROM`` in ``docker-compose.yml`` and ``squad-apache.conf`` will
294
+ need to be changed. To use this setup, copy all of the provided files locally
295
+ and run the docker using::
296
+
297
+ docker compose up -d
298
+
299
+ After that, the logs and status of the container can be checked resp. using::
300
+
301
+ docker compose logs
302
+
303
+ and::
304
+
305
+ docker stats
306
+
307
+ If everything has started successfully, the frontend should be reachable under
308
+ http://localhost:10080.
309
+
310
+ Before being able to actually use the frontend of SQUAD, a user that acts as an
311
+ administrator (with superuser rights) needs to be created. This can be done by
312
+ entering the container with::
313
+
314
+ docker compose exec squad-frontend /bin/bash
315
+
316
+ While being in the container, a new administrator account can be created with the
317
+ following command::
318
+
319
+ squad-admin createsuperuser
320
+
321
+ After this command, enter the required data and exit the container environment
322
+ by issuing ``exit``.
323
+
324
+ Now, you should be able to login on the frontend web interface, using the
325
+ credentials you just entered while creating the administrator account.
326
+
327
+ To stop the SQUAD instance, issue the following command to stop the container::
328
+
329
+ docker compose down
330
+
331
+ Database dump and restore
332
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
333
+
334
+ Note that container must be running for the following commands to work.
335
+
336
+ To dump the database to the file `db-dumped`, issue the following command::
337
+
338
+ docker compose exec -t postgres pg_dump -F custom -U postgres -f /db-dumped squad
339
+
340
+ To restore the database from the file `db-to-be-restored`, issue the following
341
+ command::
342
+
343
+ docker compose exec -t postgres pg_restore -U postgres -c -d squad -j4 /db-to-be-restored
@@ -84,7 +84,7 @@ the format of the data files.
84
84
  Example with test data as file uploads::
85
85
 
86
86
  $ curl \
87
- --header "Auth-Token: $SQUAD_TOKEN" \
87
+ --header "Authorization: token $SQUAD_TOKEN" \
88
88
  --form tests=@/path/to/test-results.json \
89
89
  --form metrics=@/path/to/metrics.json \
90
90
  --form metadata=@/path/to/metadata.json \
@@ -96,7 +96,7 @@ Example with test data as file uploads::
96
96
  Example with test data as regular ``POST`` parameters::
97
97
 
98
98
  $ curl \
99
- --header "Auth-Token: $SQUAD_TOKEN" \
99
+ --header "Authorization: token $SQUAD_TOKEN" \
100
100
  --form tests='{"test1": "pass", "test2": "fail"}' \
101
101
  --form metrics='{"metric1": 21, "metric2": 4}' \
102
102
  --form metadata='{"foo": "bar", "baz": "qux", "job_id": 123}' \
@@ -118,7 +118,7 @@ Example with test data using Python's requests library:
118
118
  metadata = json.dumps({"foo": "bar", "baz": "qux", "job_id": 123})
119
119
  log = 'log text ...'
120
120
 
121
- headers = {"Auth-Token": os.getenv('SQUAD_TOKEN')}
121
+ headers = {"Authorization": f"token {os.getenv('SQUAD_TOKEN')}"}
122
122
  url = 'https://squad.example.com/api/submit/my-group/my-project/x.y.z/my-ci-env'
123
123
  data = {"metadata": metadata, "log": log, "tests": tests_file}
124
124
 
@@ -67,7 +67,7 @@ api for submitting a new test job::
67
67
 
68
68
  wget https://validation.linaro.org/static/docs/v2/examples/test-jobs/qemu-pipeline-first-job.yaml
69
69
  curl localhost:8000/api/submitjob/<group-slug>/<project-slug>/<build-version>/<env> \
70
- --header "Auth-Token: $SQUAD_TOKEN" \
70
+ --header "Authorization: token $SQUAD_TOKEN" \
71
71
  --form "backend=<backend-name>" \
72
72
  --form "definition=@qemu-pipeline-first-job.yaml"
73
73
 
@@ -118,7 +118,7 @@ by a freshly opened Github Pull Request::
118
118
 
119
119
  $ curl \
120
120
  -X POST \
121
- --header "Auth-Token: $SQUAD_TOKEN" \
121
+ --header "Authorization: token $SQUAD_TOKEN" \
122
122
  -d patch_source=your-github-patch-source \
123
123
  -d patch_baseline=build-v1 \
124
124
  -d patch_id=the_owner/the_repo/8223a534d7bf \
@@ -150,7 +150,7 @@ by a freshly created change::
150
150
 
151
151
  $ curl \
152
152
  -X POST \
153
- --header "Auth-Token: $SQUAD_TOKEN" \
153
+ --header "Authorization: token $SQUAD_TOKEN" \
154
154
  -d patch_source=your-gerrit-patch-source \
155
155
  -d patch_baseline=build-v1 \
156
156
  -d patch_id=change-id/patchset \
@@ -63,7 +63,7 @@ to send to SQUAD's API for fetching::
63
63
  ...
64
64
 
65
65
  curl localhost:8000/api/watchjob/<group-slug>/<project-slug>/<build-version>/<env> \
66
- --header "Auth-Token: $SQUAD_TOKEN" \
66
+ --header "Authorization: token $SQUAD_TOKEN" \
67
67
  --form "backend=tuxsuite.com" \
68
68
  --form "job_id=BUILD:linaro@lkft#2843VDPeVhg4yaTkgTur0T3ykmq"
69
69
 
@@ -0,0 +1,147 @@
1
+ version: "3.9"
2
+
3
+ services:
4
+
5
+ setup-volumes:
6
+ # We can use any image we want as long as we can chown
7
+ image: busybox
8
+ # Need a user priviliged enough to chown
9
+ user: "root"
10
+ # Specify the group in question
11
+ volumes:
12
+ # The volumes to chown
13
+ - squad-frontend:/app/
14
+ - squad-storage:/storage/
15
+ command:
16
+ - /bin/sh
17
+ - -c
18
+ - |
19
+ chown -R 1000:1000 /app
20
+ chown -R 1000:1000 /storage
21
+
22
+ #
23
+ # QA-Reports frontend
24
+ #
25
+ squad-frontend:
26
+ image: squadproject/squad
27
+ command:
28
+ - /bin/sh
29
+ - -c
30
+ - |
31
+ sleep 10
32
+ squad --bind 0.0.0.0:8000 --timeout=60 --workers=8 --log-level DEBUG
33
+ environment:
34
+ DATABASE: "ENGINE=django.db.backends.postgresql_psycopg2:NAME=squad:HOST=postgres:USER=squad:PASSWORD=squad"
35
+ SQUAD_STATIC_DIR: "/app/static"
36
+ SQUAD_EXTRA_SETTINGS: "/app/extra_settings.py"
37
+ SQUAD_CELERY_BROKER_URL: "amqp://rabbitmq"
38
+ SQUAD_BASE_URL: "https://www.your-squad-url.org"
39
+ # SENTRY_DSN: "<sentry-dsn>"
40
+ SECRET_KEY_FILE: "/app/secret.dat"
41
+ SQUAD_SITE_NAME: "SQUAD Site"
42
+ SQUAD_EMAIL_FROM: "squad@www.your-squad-url.org"
43
+ volumes:
44
+ - squad-frontend:/app/
45
+ - squad-storage:/storage/
46
+ - squad-static-files:/app/static
47
+ - ./extra_settings.py:/app/extra_settings.py
48
+ depends_on:
49
+ setup-volumes:
50
+ # Wait for the ownership to change
51
+ condition: service_completed_successfully
52
+
53
+ #
54
+ # QA-Reports worker
55
+ #
56
+ squad-worker:
57
+ image: squadproject/squad
58
+ command: squad-worker
59
+ environment:
60
+ DATABASE: "ENGINE=django.db.backends.postgresql_psycopg2:NAME=squad:HOST=postgres:USER=squad:PASSWORD=squad"
61
+ SQUAD_CELERY_BROKER_URL: "amqp://rabbitmq"
62
+ # SENTRY_DSN: "<sentry-dsn>"
63
+ SECRET_KEY_FILE: "/app/secret.dat"
64
+ SQUAD_EMAIL_HOST: "squad@www.your-squad-url.org"
65
+ SQUAD_EMAIL_FROM: "squad@www.your-squad-url.org"
66
+ volumes:
67
+ - squad-storage:/storage/
68
+
69
+ #
70
+ # QA-Reports listener
71
+ #
72
+ squad-listener:
73
+ image: squadproject/squad
74
+ command:
75
+ - /bin/sh
76
+ - -c
77
+ - |
78
+ sleep 20
79
+ squad-listener
80
+ environment:
81
+ DATABASE: "ENGINE=django.db.backends.postgresql_psycopg2:NAME=squad:HOST=postgres:USER=squad:PASSWORD=squad"
82
+ SECRET_KEY_FILE: "/app/secret.dat"
83
+ volumes:
84
+ - squad-frontend:/app/
85
+ - squad-storage:/storage/
86
+
87
+ #
88
+ # QA-Reports scheduler
89
+ #
90
+ squad-scheduler:
91
+ image: squadproject/squad
92
+ command: squad-scheduler --schedule=/app/celerybeat-schedule.db
93
+ environment:
94
+ DATABASE: "ENGINE=django.db.backends.postgresql_psycopg2:NAME=squad:HOST=postgres:USER=squad:PASSWORD=squad"
95
+ SQUAD_CELERY_BROKER_URL: "amqp://rabbitmq"
96
+ SECRET_KEY_FILE: "/app/secret.dat"
97
+ volumes:
98
+ - squad-frontend:/app/
99
+
100
+ #
101
+ # Postgres
102
+ #
103
+ postgres:
104
+ image: postgres:13.1
105
+ healthcheck:
106
+ test: [ "CMD", "pg_isready", "-q", "-d", "postgres", "-U", "postgres" ]
107
+ timeout: 45s
108
+ interval: 10s
109
+ retries: 10
110
+ restart: always
111
+ environment:
112
+ - POSTGRES_USER=postgres
113
+ - POSTGRES_PASSWORD=defaultpostgrespassword
114
+ - INIT_DB_USER=squad
115
+ - INIT_DB_PASS=squad
116
+ - INIT_DB_NAME=squad
117
+ volumes:
118
+ - ./init-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh
119
+ - postgres-db:/var/lib/postgresql/data
120
+ - ./db-dumped:/db-dumped
121
+ - ./db-to-be-restored:/db-to-be-restored
122
+
123
+ #
124
+ # RabbitMQ
125
+ #
126
+ rabbitmq:
127
+ image: rabbitmq:3-management-alpine
128
+ volumes:
129
+ - ./rabbitmq.config:/etc/rabbitmq/rabbitmq.config
130
+
131
+ #
132
+ # Apache
133
+ #
134
+ httpd:
135
+ image: httpd:2.4
136
+ command: httpd -D FOREGROUND
137
+ volumes:
138
+ - squad-static-files:/squad_static/static
139
+ - ./squad-apache.conf:/usr/local/apache2/conf/httpd.conf
140
+ ports:
141
+ - ${SQUAD_DOCKER_PORT:-10080}:80
142
+
143
+ volumes:
144
+ squad-static-files:
145
+ squad-frontend:
146
+ squad-storage:
147
+ postgres-db:
@@ -0,0 +1,10 @@
1
+ #!/bin/bash
2
+ set -ex
3
+
4
+ echo "Running DB Initialization!"
5
+
6
+ PGPASSWORD=${POSTGRES_PASSWORD} psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" -c \
7
+ "CREATE USER ${INIT_DB_USER} WITH PASSWORD'"${INIT_DB_PASS}"';"
8
+
9
+ PGPASSWORD=${POSTGRES_PASSWORD} psql -v ON_ERROR_STOP=1 --username "${POSTGRES_USER}" -c \
10
+ "CREATE DATABASE ${INIT_DB_NAME} OWNER ${INIT_DB_USER}"
@@ -0,0 +1,8 @@
1
+ [
2
+ {
3
+ rabbit,
4
+ [
5
+ {loopback_users, []}
6
+ ]
7
+ }
8
+ ].
@@ -0,0 +1,64 @@
1
+ LogLevel debug
2
+
3
+ Listen 80
4
+
5
+ # Load some mods
6
+ LoadModule headers_module modules/mod_headers.so
7
+ LoadModule mime_module modules/mod_mime.so
8
+ LoadModule ssl_module modules/mod_ssl.so
9
+ LoadModule unixd_module modules/mod_unixd.so
10
+ LoadModule authz_core_module modules/mod_authz_core.so
11
+ LoadModule alias_module modules/mod_alias.so
12
+ LoadModule mpm_event_module modules/mod_mpm_event.so
13
+ LoadModule cgid_module modules/mod_cgid.so
14
+ LoadModule deflate_module modules/mod_deflate.so
15
+ LoadModule filter_module modules/mod_filter.so
16
+ LoadModule lbmethod_byrequests_module modules/mod_lbmethod_byrequests.so
17
+ LoadModule proxy_module modules/mod_proxy.so
18
+ LoadModule proxy_http_module modules/mod_proxy_http.so
19
+ LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
20
+ LoadModule slotmem_shm_module modules/mod_slotmem_shm.so
21
+ LoadModule vhost_alias_module modules/mod_vhost_alias.so
22
+ LoadModule rewrite_module modules/mod_rewrite.so
23
+
24
+ # Configure mod_deflate
25
+ # these are known to be safe with MSIE 6
26
+ AddOutputFilterByType DEFLATE text/html text/plain text/xml
27
+
28
+ # everything else may cause problems with MSIE 6
29
+ AddOutputFilterByType DEFLATE text/css
30
+ AddOutputFilterByType DEFLATE application/x-javascript application/javascript application/ecmascript application/json
31
+ AddOutputFilterByType DEFLATE application/rss+xml
32
+ AddOutputFilterByType DEFLATE application/xml
33
+
34
+ # Add Content-Type image for svg images
35
+ AddType image/svg+xml .svg
36
+
37
+ ServerName www.your-squad-url.org
38
+
39
+ <VirtualHost *:80>
40
+ ProxyPreserveHost On
41
+
42
+ RewriteEngine On
43
+
44
+ # http -> https
45
+ RewriteCond %{HTTP:X-Forwarded-Proto} =http
46
+ RewriteRule .* https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]
47
+
48
+ # Security headers
49
+ Header always set Strict-Transport-Security "max-age=31536000; includeSubdomains;"
50
+ Header always set X-Content-Type-Options "nosniff;"
51
+ Header always set Content-Security-Policy "default-src 'none'; script-src 'self' 'unsafe-inline'; connect-src 'self'; img-src 'self' www.gravatar.com; style-src 'self' 'unsafe-inline'; font-src 'self';"
52
+ # Set default cache controll if there isn't any
53
+ Header setIfEmpty Cache-Control "no-cache"
54
+
55
+ # Serve static files separately
56
+ Alias /static "/squad_static/static"
57
+ <Directory "/squad_static/static">
58
+ Require all granted
59
+ </Directory>
60
+
61
+ ProxyPassMatch ^/static !
62
+ # the following should contain the SQUAD's frontend container service name!
63
+ ProxyPass "/" http://squad-frontend:8000/
64
+ </VirtualHost>
@@ -106,6 +106,16 @@ def watch_job(request, group_slug, project_slug, version, environment_slug):
106
106
  job_id=testjob_id
107
107
  )
108
108
 
109
+ # check if backend is able to fetch job definition
110
+ try:
111
+ definition = backend.get_job_definition(testjob_id)
112
+ if not definition:
113
+ return HttpResponseBadRequest(f"No job definition found for job {testjob_id}: {definition}")
114
+ test_job.definition = definition
115
+ except NotImplementedError:
116
+ # backend does not work with job definitions
117
+ pass
118
+
109
119
  # sanitize job_url
110
120
  try:
111
121
  backend.get_implementation().job_url(test_job)
@@ -227,7 +227,7 @@ class TestFilter(filters.FilterSet):
227
227
 
228
228
  class Meta:
229
229
  model = Test
230
- fields = {'result': ['exact', 'in'],
230
+ fields = {'result': ['exact', 'in', 'isnull'],
231
231
  'suite_id': ['exact', 'in'],
232
232
  'environment_id': ['exact', 'in'],
233
233
  'metadata_id': ['exact', 'in'],
@@ -1880,13 +1880,14 @@ router.register(r'projects', ProjectViewSet).register(
1880
1880
  parents_query_lookups=['project_id'],
1881
1881
  **drf_basename('project-builds')
1882
1882
  )
1883
- router.register(r'builds', BuildViewSet).register(
1883
+ builds = router.register(r'builds', BuildViewSet)
1884
+ builds.register(
1884
1885
  r'tests',
1885
1886
  TestViewSet,
1886
1887
  parents_query_lookups=['build_id'],
1887
1888
  **drf_basename('build-tests')
1888
1889
  )
1889
- router.register(r'builds', BuildViewSet).register(
1890
+ builds.register(
1890
1891
  r'metrics',
1891
1892
  MetricViewSet,
1892
1893
  parents_query_lookups=['build_id'],
@@ -60,11 +60,20 @@ class Backend(object):
60
60
  def job_url(self, test_job):
61
61
  return 'https://example.com/job/%s' % test_job.job_id
62
62
 
63
+ def has_resubmit(self):
64
+ return False
65
+
66
+ def has_cancel(self):
67
+ return True
68
+
63
69
  def cancel(self, test_job):
64
70
  return True
65
71
 
66
72
  def check_job_definition(self, definition):
67
73
  return True
68
74
 
75
+ def get_job_definition(self, test_job):
76
+ return "sample job definition"
77
+
69
78
  def supports_callbacks(self):
70
79
  return False
@@ -106,6 +106,9 @@ class Backend(BaseBackend):
106
106
  return job_id
107
107
  return [job_id]
108
108
 
109
+ def has_cancel(self):
110
+ return True
111
+
109
112
  def cancel(self, test_job):
110
113
  if test_job.submitted and test_job.job_id is not None:
111
114
  return self.__cancel_job__(test_job.job_id)
@@ -329,6 +332,9 @@ class Backend(BaseBackend):
329
332
  scheme = socket_url.scheme
330
333
  return '%s://%s:%s' % (scheme, hostname, port)
331
334
 
335
+ def has_resubmit(self):
336
+ return True
337
+
332
338
  def resubmit(self, test_job):
333
339
  with self.handle_job_submission():
334
340
  new_job_id_list = self.__resubmit__(test_job.job_id)
@@ -775,3 +781,14 @@ class Backend(BaseBackend):
775
781
  return True
776
782
  except yaml.YAMLError as e:
777
783
  return str(e)
784
+
785
+ def get_job_definition(self, job_id):
786
+ if self.use_xml_rpc:
787
+ return self.proxy.scheduler.jobs.definition(job_id)
788
+ job_resp = requests.get(
789
+ f'{self.api_url_base}/jobs/{job_id}/definition/',
790
+ headers=self.authentication,
791
+ timeout=self.settings.get(timeout_variable_name, DEFAULT_TIMEOUT)
792
+ )
793
+ if job_resp.status_code == 200:
794
+ return job_resp.json()
@@ -8,7 +8,7 @@ logger = logging.getLogger('squad.ci.backend')
8
8
  description = "None"
9
9
 
10
10
 
11
- class Backend(object):
11
+ class Backend:
12
12
 
13
13
  """
14
14
  This is the interface that all backends must implement. Depending on the
@@ -39,6 +39,13 @@ class Backend(object):
39
39
  """
40
40
  raise NotImplementedError
41
41
 
42
+ def has_resubmit(self):
43
+ """
44
+ If the backend has a resubmit method implemented, override this to
45
+ return True.
46
+ """
47
+ return False
48
+
42
49
  def resubmit(self, test_job):
43
50
  """
44
51
  Re-submits given test job to the backend service
@@ -84,6 +91,13 @@ class Backend(object):
84
91
  """
85
92
  raise NotImplementedError
86
93
 
94
+ def has_cancel(self):
95
+ """
96
+ If the backend has a cancel method implemented, override this to
97
+ return True.
98
+ """
99
+ return False
100
+
87
101
  def cancel(self, test_job):
88
102
  """
89
103
  Cancels the job if the backend allows it. It will not raise any
@@ -92,18 +106,24 @@ class Backend(object):
92
106
  """
93
107
  raise NotImplementedError
94
108
 
95
- def job_url(selt, test_job):
109
+ def job_url(self, test_job):
96
110
  """
97
111
  Returns the URL of the test job in the backend
98
112
  """
99
113
  raise NotImplementedError
100
114
 
101
- def check_job_definition(selt, definition):
115
+ def check_job_definition(self, definition):
102
116
  """
103
117
  Returns True if job definition checks out or an error message
104
118
  """
105
119
  raise NotImplementedError
106
120
 
121
+ def get_job_definition(self, job_id):
122
+ """
123
+ Returns the job definition for a given test job
124
+ """
125
+ raise NotImplementedError
126
+
107
127
  def supports_callbacks(self):
108
128
  """
109
129
  Returns True if this backend supports callbacks, False otherwise
@@ -32,6 +32,11 @@ requests_session = None
32
32
 
33
33
 
34
34
  class Backend(BaseBackend):
35
+ def has_resubmit(self):
36
+ return False
37
+
38
+ def has_cancel(self):
39
+ return True
35
40
 
36
41
  @staticmethod
37
42
  def get_session():
@@ -216,6 +216,9 @@ class Backend(models.Model):
216
216
  def check_job_definition(self, definition):
217
217
  return self.get_implementation().check_job_definition(definition)
218
218
 
219
+ def get_job_definition(self, job_id):
220
+ return self.get_implementation().get_job_definition(job_id)
221
+
219
222
  def supports_callbacks(self):
220
223
  return self.get_implementation().supports_callbacks()
221
224
 
@@ -379,7 +382,7 @@ class TestJob(models.Model):
379
382
  if self.job_status == "Canceled":
380
383
  return False
381
384
 
382
- if self.job_id is not None:
385
+ if self.job_id is not None and self.backend.get_implementation().has_cancel():
383
386
  return self.backend.get_implementation().cancel(self)
384
387
 
385
388
  self.fetched = True