bugsink 2.2.2__tar.gz → 2.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. bugsink-2.3.0/.github/workflows/visualshots-comment.yml +89 -0
  2. bugsink-2.3.0/.github/workflows/visualshots-run.yml +160 -0
  3. bugsink-2.3.0/.github/workflows/visualshots.yml +28 -0
  4. {bugsink-2.2.2 → bugsink-2.3.0}/.gitignore +1 -0
  5. {bugsink-2.2.2 → bugsink-2.3.0}/CHANGELOG.md +21 -0
  6. {bugsink-2.2.2 → bugsink-2.3.0}/PKG-INFO +2 -2
  7. {bugsink-2.2.2 → bugsink-2.3.0}/README.md +1 -1
  8. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/_version.py +3 -3
  9. bugsink-2.3.0/bugsink/api_schema.py +467 -0
  10. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/app_settings.py +9 -0
  11. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_templates/docker.py.template +1 -0
  12. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_templates/local.py.template +1 -0
  13. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_templates/singleserver.py.template +1 -0
  14. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/context_processors.py +5 -0
  15. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/settings/default.py +4 -0
  16. bugsink-2.3.0/bugsink/settings/personal/dogfood.py +46 -0
  17. bugsink-2.3.0/bugsink/settings/personal/hosted.py +77 -0
  18. bugsink-2.3.0/bugsink/test_api.py +104 -0
  19. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/urls.py +5 -0
  20. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/PKG-INFO +2 -2
  21. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/SOURCES.txt +18 -0
  22. bugsink-2.3.0/bugsink.egg-info/scm_file_list.json +596 -0
  23. bugsink-2.3.0/bugsink.egg-info/scm_version.json +8 -0
  24. bugsink-2.3.0/events/migrations/0029_event_counts_per_hour_models.py +51 -0
  25. bugsink-2.3.0/events/migrations/0030_backfill_event_counts_per_hour.py +149 -0
  26. {bugsink-2.2.2 → bugsink-2.3.0}/events/models.py +28 -0
  27. bugsink-2.3.0/events/sparklines.py +231 -0
  28. bugsink-2.3.0/events/templates/events/_event_sparkline.html +104 -0
  29. bugsink-2.3.0/events/templates/events/_event_sparkline_bucket.html +15 -0
  30. {bugsink-2.2.2 → bugsink-2.3.0}/events/tests.py +135 -1
  31. bugsink-2.3.0/events/usage.py +52 -0
  32. {bugsink-2.2.2 → bugsink-2.3.0}/files/models.py +3 -0
  33. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/event_counter.py +5 -1
  34. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/tests.py +245 -4
  35. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/urls.py +5 -1
  36. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/views.py +132 -3
  37. {bugsink-2.2.2 → bugsink-2.3.0}/issues/tasks.py +2 -1
  38. bugsink-2.3.0/issues/templates/issues/_event_sparkline.html +3 -0
  39. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/event_details.html +2 -0
  40. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/stacktrace.html +39 -18
  41. {bugsink-2.2.2 → bugsink-2.3.0}/issues/tests.py +15 -2
  42. {bugsink-2.2.2 → bugsink-2.3.0}/issues/views.py +9 -2
  43. bugsink-2.3.0/performance/management/commands/pftest_sparkline_search.py +99 -0
  44. {bugsink-2.2.2 → bugsink-2.3.0}/projects/tasks.py +3 -1
  45. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_list.html +1 -1
  46. {bugsink-2.2.2 → bugsink-2.3.0}/projects/tests.py +10 -1
  47. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_list.html +1 -1
  48. bugsink-2.3.0/theme/static/css/dist/styles.css +2 -0
  49. {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/tailwind.config.js +25 -3
  50. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/base.html +7 -0
  51. bugsink-2.3.0/theme/templates/extra_classes.html +63 -0
  52. bugsink-2.3.0/users/migrations/__init__.py +0 -0
  53. bugsink-2.2.2/bugsink/test_api.py +0 -24
  54. bugsink-2.2.2/theme/static/css/dist/styles.css +0 -2
  55. {bugsink-2.2.2 → bugsink-2.3.0}/.bandit +0 -0
  56. {bugsink-2.2.2 → bugsink-2.3.0}/.coveragerc +0 -0
  57. {bugsink-2.2.2 → bugsink-2.3.0}/.github/dependabot.yml +0 -0
  58. {bugsink-2.2.2 → bugsink-2.3.0}/.github/workflows/ci.yml +0 -0
  59. {bugsink-2.2.2 → bugsink-2.3.0}/.github/workflows/copilot-setup-steps.yml +0 -0
  60. {bugsink-2.2.2 → bugsink-2.3.0}/AGENTS.md +0 -0
  61. {bugsink-2.2.2 → bugsink-2.3.0}/CLA.md +0 -0
  62. {bugsink-2.2.2 → bugsink-2.3.0}/CONTRIBUTING.md +0 -0
  63. {bugsink-2.2.2 → bugsink-2.3.0}/Dockerfile +0 -0
  64. {bugsink-2.2.2 → bugsink-2.3.0}/Dockerfile.fromwheel +0 -0
  65. {bugsink-2.2.2 → bugsink-2.3.0}/LICENSE +0 -0
  66. {bugsink-2.2.2 → bugsink-2.3.0}/SECURITY.md +0 -0
  67. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/__init__.py +0 -0
  68. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/admin.py +0 -0
  69. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/apps.py +0 -0
  70. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/forms.py +0 -0
  71. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0001_initial.py +0 -0
  72. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0002_alter_messagingserviceconfig_project.py +0 -0
  73. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0003_messagingserviceconfig_last_failure_error_message_and_more.py +0 -0
  74. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0004_alter_messagingserviceconfig_kind.py +0 -0
  75. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/__init__.py +0 -0
  76. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/models.py +0 -0
  77. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/__init__.py +0 -0
  78. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/base.py +0 -0
  79. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/discord.py +0 -0
  80. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/mattermost.py +0 -0
  81. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/slack.py +0 -0
  82. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/webhook_security.py +0 -0
  83. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/tasks.py +0 -0
  84. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/templates/mails/issue_alert.html +0 -0
  85. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/templates/mails/issue_alert.txt +0 -0
  86. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/tests.py +0 -0
  87. {bugsink-2.2.2 → bugsink-2.3.0}/alerts/views.py +0 -0
  88. {bugsink-2.2.2 → bugsink-2.3.0}/api/LICENSE +0 -0
  89. {bugsink-2.2.2 → bugsink-2.3.0}/api/README.md +0 -0
  90. {bugsink-2.2.2 → bugsink-2.3.0}/api/event.schema.altered.json +0 -0
  91. {bugsink-2.2.2 → bugsink-2.3.0}/api/event.schema.json +0 -0
  92. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/__init__.py +0 -0
  93. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/admin.py +0 -0
  94. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/apps.py +0 -0
  95. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/future_python.py +0 -0
  96. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/__init__.py +0 -0
  97. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/__init__.py +0 -0
  98. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/check_migrations.py +0 -0
  99. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/cleanup_objectstorage.py +0 -0
  100. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/convert_mariadb_uuids.py +0 -0
  101. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/create_auth_token.py +0 -0
  102. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/fetch_event_schema_json.py +0 -0
  103. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/makemigrations.py +0 -0
  104. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/migrate.py +0 -0
  105. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/migrate_to_current_objectstorage.py +0 -0
  106. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/modelcounts.py +0 -0
  107. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/munin.py +0 -0
  108. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/prestart.py +0 -0
  109. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/raise_exception.py +0 -0
  110. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/send_bomb.py +0 -0
  111. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/send_json.py +0 -0
  112. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/showstat.py +0 -0
  113. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/stress_test.py +0 -0
  114. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/vacuum.py +0 -0
  115. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/utils.py +0 -0
  116. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/0001_initial.py +0 -0
  117. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/0002_cachedmodelcount.py +0 -0
  118. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/0003_add_description_to_authtoken.py +0 -0
  119. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/__init__.py +0 -0
  120. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/models.py +0 -0
  121. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/tasks.py +0 -0
  122. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/templates/bsmain/auth_token_list.html +0 -0
  123. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/test_vacuum.py +0 -0
  124. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/tests.py +0 -0
  125. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/urls.py +0 -0
  126. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/utils.py +0 -0
  127. {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/views.py +0 -0
  128. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/__init__.py +0 -0
  129. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_fields.py +0 -0
  130. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_mixins.py +0 -0
  131. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_pagination.py +0 -0
  132. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_serializers.py +0 -0
  133. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/authentication.py +0 -0
  134. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_utils.py +0 -0
  135. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/debug_views.py +0 -0
  136. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/decorators.py +0 -0
  137. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/email_backends.py +0 -0
  138. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/event_schema.py +0 -0
  139. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/exceptions.py +0 -0
  140. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/gunicorn.docker.conf.py +0 -0
  141. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/middleware.py +0 -0
  142. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/moreiterutils.py +0 -0
  143. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/period_utils.py +0 -0
  144. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/permissions.py +0 -0
  145. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/pygments_extensions.py +0 -0
  146. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/__init__.py +0 -0
  147. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/create_conf.py +0 -0
  148. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/manage.py +0 -0
  149. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/runsnappea.py +0 -0
  150. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/show_version.py +0 -0
  151. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/util.py +0 -0
  152. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/settings/__init__.py +0 -0
  153. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/settings/development.py +0 -0
  154. {bugsink-2.2.2/bugsink/timed_sqlite_backend → bugsink-2.3.0/bugsink/settings/personal}/__init__.py +0 -0
  155. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/streams.py +0 -0
  156. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/test_utils.py +0 -0
  157. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/tests.py +0 -0
  158. {bugsink-2.2.2/compat → bugsink-2.3.0/bugsink/timed_sqlite_backend}/__init__.py +0 -0
  159. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/timed_sqlite_backend/base.py +0 -0
  160. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/tooling.py +0 -0
  161. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/transaction.py +0 -0
  162. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/utils.py +0 -0
  163. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/version.py +0 -0
  164. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/views.py +0 -0
  165. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/volume_based_condition.py +0 -0
  166. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/wsgi.py +0 -0
  167. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/dependency_links.txt +0 -0
  168. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/entry_points.txt +0 -0
  169. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/requires.txt +0 -0
  170. {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/top_level.txt +0 -0
  171. {bugsink-2.2.2 → bugsink-2.3.0}/builddocker.bash +0 -0
  172. {bugsink-2.2.2 → bugsink-2.3.0}/buildxdocker.bash +0 -0
  173. {bugsink-2.2.2/ee → bugsink-2.3.0/compat}/__init__.py +0 -0
  174. {bugsink-2.2.2 → bugsink-2.3.0}/compat/auth.py +0 -0
  175. {bugsink-2.2.2 → bugsink-2.3.0}/compat/dsn.py +0 -0
  176. {bugsink-2.2.2 → bugsink-2.3.0}/compat/tests.py +0 -0
  177. {bugsink-2.2.2 → bugsink-2.3.0}/compat/timestamp.py +0 -0
  178. {bugsink-2.2.2 → bugsink-2.3.0}/compat/vars.py +0 -0
  179. {bugsink-2.2.2 → bugsink-2.3.0}/docker-compose-sample.yaml +0 -0
  180. {bugsink-2.2.2 → bugsink-2.3.0}/ee/LICENSE +0 -0
  181. {bugsink-2.2.2/ee/tenants → bugsink-2.3.0/ee}/__init__.py +0 -0
  182. {bugsink-2.2.2/ee/tenants/database_backend → bugsink-2.3.0/ee/tenants}/__init__.py +0 -0
  183. {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/base.py +0 -0
  184. {bugsink-2.2.2/events → bugsink-2.3.0/ee/tenants/database_backend}/__init__.py +0 -0
  185. {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/database_backend/base.py +0 -0
  186. {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/middleware.py +0 -0
  187. {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/utils.py +0 -0
  188. {bugsink-2.2.2/events/management → bugsink-2.3.0/events}/__init__.py +0 -0
  189. {bugsink-2.2.2 → bugsink-2.3.0}/events/admin.py +0 -0
  190. {bugsink-2.2.2 → bugsink-2.3.0}/events/api_views.py +0 -0
  191. {bugsink-2.2.2 → bugsink-2.3.0}/events/apps.py +0 -0
  192. {bugsink-2.2.2 → bugsink-2.3.0}/events/factories.py +0 -0
  193. {bugsink-2.2.2/events/management/commands → bugsink-2.3.0/events/management}/__init__.py +0 -0
  194. {bugsink-2.2.2/events/migrations → bugsink-2.3.0/events/management/commands}/__init__.py +0 -0
  195. {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/cleanup_eventstorage.py +0 -0
  196. {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/delete_by_age_until_under_retention_max.py +0 -0
  197. {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/delete_old_events.py +0 -0
  198. {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/fix_project_digest_order.py +0 -0
  199. {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/make_consistent.py +0 -0
  200. {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/migrate_to_current_eventstorage.py +0 -0
  201. {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/nuke_events.py +0 -0
  202. {bugsink-2.2.2 → bugsink-2.3.0}/events/markdown_stacktrace.py +0 -0
  203. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0001_initial.py +0 -0
  204. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0002_initial.py +0 -0
  205. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0003_initial.py +0 -0
  206. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0004_b_squashed.py +0 -0
  207. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0004_event_irrelevance_for_retention.py +0 -0
  208. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0005_event_events_even_project_abe572_idx.py +0 -0
  209. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0006_event_never_evict.py +0 -0
  210. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0007_set_never_evict.py +0 -0
  211. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0008_remove_event_events_even_project_abe572_idx_and_more.py +0 -0
  212. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0009_event_events_even_issue_i_90497b_idx.py +0 -0
  213. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0010_rename_ingest_order_event_digest_order_and_more.py +0 -0
  214. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0011_remove_event_events_even_project_adcdee_idx_and_more.py +0 -0
  215. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0012_event_ingested_at.py +0 -0
  216. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0013_harmonize_foogested_at.py +0 -0
  217. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0014_event_grouping.py +0 -0
  218. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0015_set_event_grouping.py +0 -0
  219. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0016_truncate_exception_type_128.py +0 -0
  220. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0017_alter_event_calculated_type_and_more.py +0 -0
  221. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0018_remove_event_has_exception_remove_event_has_logentry.py +0 -0
  222. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0019_event_storage_backend.py +0 -0
  223. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0020_remove_events_with_null_issue_or_grouping.py +0 -0
  224. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0021_alter_do_nothing.py +0 -0
  225. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0022_alter_event_project.py +0 -0
  226. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0023_event_remote_addr.py +0 -0
  227. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0024_remove_event_debug_info.py +0 -0
  228. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0025_fix_never_evict.py +0 -0
  229. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0026_event_events_even_project_625413_idx.py +0 -0
  230. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0027_event_project_digest_order.py +0 -0
  231. {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0028_event_events_even_digeste_bf21dd_idx.py +0 -0
  232. {bugsink-2.2.2/files → bugsink-2.3.0/events/migrations}/__init__.py +0 -0
  233. {bugsink-2.2.2 → bugsink-2.3.0}/events/renderers.py +0 -0
  234. {bugsink-2.2.2 → bugsink-2.3.0}/events/retention.py +0 -0
  235. {bugsink-2.2.2 → bugsink-2.3.0}/events/serializers.py +0 -0
  236. {bugsink-2.2.2 → bugsink-2.3.0}/events/storage.py +0 -0
  237. {bugsink-2.2.2 → bugsink-2.3.0}/events/storage_registry.py +0 -0
  238. {bugsink-2.2.2 → bugsink-2.3.0}/events/tasks.py +0 -0
  239. {bugsink-2.2.2 → bugsink-2.3.0}/events/templates/events/event_stacktrace.txt +0 -0
  240. {bugsink-2.2.2 → bugsink-2.3.0}/events/test_api.py +0 -0
  241. {bugsink-2.2.2 → bugsink-2.3.0}/events/ua_stuff.py +0 -0
  242. {bugsink-2.2.2 → bugsink-2.3.0}/events/urls.py +0 -0
  243. {bugsink-2.2.2 → bugsink-2.3.0}/events/utils.py +0 -0
  244. {bugsink-2.2.2 → bugsink-2.3.0}/events/views.py +0 -0
  245. {bugsink-2.2.2/files/management → bugsink-2.3.0/files}/__init__.py +0 -0
  246. {bugsink-2.2.2 → bugsink-2.3.0}/files/admin.py +0 -0
  247. {bugsink-2.2.2 → bugsink-2.3.0}/files/apps.py +0 -0
  248. {bugsink-2.2.2/files/management/commands → bugsink-2.3.0/files/management}/__init__.py +0 -0
  249. {bugsink-2.2.2/files/migrations → bugsink-2.3.0/files/management/commands}/__init__.py +0 -0
  250. {bugsink-2.2.2 → bugsink-2.3.0}/files/management/commands/delete_legacy_sourcemaps.py +0 -0
  251. {bugsink-2.2.2 → bugsink-2.3.0}/files/management/commands/vacuum_files.py +0 -0
  252. {bugsink-2.2.2 → bugsink-2.3.0}/files/migrations/0001_initial.py +0 -0
  253. {bugsink-2.2.2 → bugsink-2.3.0}/files/migrations/0002_chunk_created_at_file_accessed_at_file_created_at_and_more.py +0 -0
  254. {bugsink-2.2.2 → bugsink-2.3.0}/files/migrations/0003_file_storage_backend.py +0 -0
  255. {bugsink-2.2.2 → bugsink-2.3.0}/files/migrations/0004_alter_filemetadata_unique_together_and_more.py +0 -0
  256. {bugsink-2.2.2/ingest → bugsink-2.3.0/files/migrations}/__init__.py +0 -0
  257. {bugsink-2.2.2 → bugsink-2.3.0}/files/minidump.py +0 -0
  258. {bugsink-2.2.2 → bugsink-2.3.0}/files/object_kinds.py +0 -0
  259. {bugsink-2.2.2 → bugsink-2.3.0}/files/storage.py +0 -0
  260. {bugsink-2.2.2 → bugsink-2.3.0}/files/storage_registry.py +0 -0
  261. {bugsink-2.2.2 → bugsink-2.3.0}/files/tasks.py +0 -0
  262. {bugsink-2.2.2 → bugsink-2.3.0}/files/test_vacuum.py +0 -0
  263. {bugsink-2.2.2 → bugsink-2.3.0}/files/tests.py +0 -0
  264. {bugsink-2.2.2 → bugsink-2.3.0}/files/urls.py +0 -0
  265. {bugsink-2.2.2 → bugsink-2.3.0}/files/views.py +0 -0
  266. {bugsink-2.2.2/ingest/management → bugsink-2.3.0/ingest}/__init__.py +0 -0
  267. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/admin.py +0 -0
  268. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/apps.py +0 -0
  269. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/exceptions.py +0 -0
  270. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/filestore.py +0 -0
  271. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/header_validators.py +0 -0
  272. {bugsink-2.2.2/ingest/management/commands → bugsink-2.3.0/ingest/management}/__init__.py +0 -0
  273. {bugsink-2.2.2/ingest/migrations → bugsink-2.3.0/ingest/management/commands}/__init__.py +0 -0
  274. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/management/commands/vacuum_ingest_dir.py +0 -0
  275. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/migrations/0001_set_sqlite_wal.py +0 -0
  276. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/migrations/0002_initial.py +0 -0
  277. {bugsink-2.2.2/issues → bugsink-2.3.0/ingest/migrations}/__init__.py +0 -0
  278. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/models.py +0 -0
  279. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/parsers.py +0 -0
  280. {bugsink-2.2.2 → bugsink-2.3.0}/ingest/tasks.py +0 -0
  281. {bugsink-2.2.2/issues/migrations → bugsink-2.3.0/issues}/__init__.py +0 -0
  282. {bugsink-2.2.2 → bugsink-2.3.0}/issues/admin.py +0 -0
  283. {bugsink-2.2.2 → bugsink-2.3.0}/issues/api_views.py +0 -0
  284. {bugsink-2.2.2 → bugsink-2.3.0}/issues/apps.py +0 -0
  285. {bugsink-2.2.2 → bugsink-2.3.0}/issues/factories.py +0 -0
  286. {bugsink-2.2.2 → bugsink-2.3.0}/issues/forms.py +0 -0
  287. {bugsink-2.2.2 → bugsink-2.3.0}/issues/markdown_issue.py +0 -0
  288. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0001_initial.py +0 -0
  289. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0002_initial.py +0 -0
  290. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0003_alter_turningpoint_triggering_event.py +0 -0
  291. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0004_b_squashed.py +0 -0
  292. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0004_rename_event_count_issue_digested_event_count.py +0 -0
  293. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0005_rename_ingest_order_issue_digest_order_and_more.py +0 -0
  294. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0006_issue_next_unmute_check.py +0 -0
  295. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0007_alter_turningpoint_options.py +0 -0
  296. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0008_issue_stored_event_count.py +0 -0
  297. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0009_fill_stored_event_count.py +0 -0
  298. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0010_issue_list_indexes.py +0 -0
  299. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0011_truncate_exception_type_128.py +0 -0
  300. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0012_alter_issue_calculated_type_and_more.py +0 -0
  301. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0013_fix_issue_stored_event_counts.py +0 -0
  302. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0014_grouping_grouping_key_hash.py +0 -0
  303. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0015_set_grouping_hash.py +0 -0
  304. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0016_alter_grouping_unique_together.py +0 -0
  305. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0017_issue_list_indexes_must_start_with_project.py +0 -0
  306. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0018_issue_is_deleted.py +0 -0
  307. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0019_alter_grouping_grouping_key_hash.py +0 -0
  308. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0020_remove_objects_with_null_issue.py +0 -0
  309. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0021_alter_do_nothing.py +0 -0
  310. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0022_turningpoint_project.py +0 -0
  311. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0023_turningpoint_set_project.py +0 -0
  312. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0024_turningpoint_project_alter_not_null.py +0 -0
  313. {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0025_alter_grouping_project_alter_issue_project.py +0 -0
  314. {bugsink-2.2.2/performance → bugsink-2.3.0/issues/migrations}/__init__.py +0 -0
  315. {bugsink-2.2.2 → bugsink-2.3.0}/issues/models.py +0 -0
  316. {bugsink-2.2.2 → bugsink-2.3.0}/issues/regressions.py +0 -0
  317. {bugsink-2.2.2 → bugsink-2.3.0}/issues/serializers.py +0 -0
  318. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/_event_nav.html +0 -0
  319. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/base.html +0 -0
  320. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/breadcrumbs.html +0 -0
  321. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/event_404.html +0 -0
  322. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/event_list.html +0 -0
  323. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/grouping.html +0 -0
  324. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/history.html +0 -0
  325. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/issue_list.html +0 -0
  326. {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/tags.html +0 -0
  327. {bugsink-2.2.2 → bugsink-2.3.0}/issues/test_api.py +0 -0
  328. {bugsink-2.2.2 → bugsink-2.3.0}/issues/urls.py +0 -0
  329. {bugsink-2.2.2 → bugsink-2.3.0}/issues/utils.py +0 -0
  330. {bugsink-2.2.2 → bugsink-2.3.0}/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
  331. {bugsink-2.2.2 → bugsink-2.3.0}/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
  332. {bugsink-2.2.2 → bugsink-2.3.0}/manage.py +0 -0
  333. {bugsink-2.2.2/performance/management → bugsink-2.3.0/performance}/__init__.py +0 -0
  334. {bugsink-2.2.2 → bugsink-2.3.0}/performance/bursty_data.py +0 -0
  335. {bugsink-2.2.2 → bugsink-2.3.0}/performance/context_managers.py +0 -0
  336. {bugsink-2.2.2/performance/management/commands → bugsink-2.3.0/performance/management}/__init__.py +0 -0
  337. {bugsink-2.2.2/phonehome → bugsink-2.3.0/performance/management/commands}/__init__.py +0 -0
  338. {bugsink-2.2.2 → bugsink-2.3.0}/performance/management/commands/pftest_search.py +0 -0
  339. {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/README.md +0 -0
  340. {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/df-day.png +0 -0
  341. {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/event_ingest_count-day.png +0 -0
  342. {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/response_time_api_avg-day.png +0 -0
  343. {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/response_time_api_max-day.png +0 -0
  344. {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/snappea_queue_size-day.png +0 -0
  345. {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/total_requests-day.png +0 -0
  346. {bugsink-2.2.2/phonehome/management → bugsink-2.3.0/phonehome}/__init__.py +0 -0
  347. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/admin.py +0 -0
  348. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/apps.py +0 -0
  349. {bugsink-2.2.2/phonehome/management/commands → bugsink-2.3.0/phonehome/management}/__init__.py +0 -0
  350. {bugsink-2.2.2/phonehome/migrations → bugsink-2.3.0/phonehome/management/commands}/__init__.py +0 -0
  351. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/management/commands/print_phonehome.py +0 -0
  352. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0001_b_squashed_initial.py +0 -0
  353. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0001_initial.py +0 -0
  354. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0002_create_installation_id.py +0 -0
  355. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0002_installation_email_quota_usage.py +0 -0
  356. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0003_installation_ingest_quotas.py +0 -0
  357. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0003_outboundmessage.py +0 -0
  358. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0004_installation_created_at.py +0 -0
  359. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0004_installation_quota_exceeded_reason.py +0 -0
  360. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0005_installation_silence_email_system_warning.py +0 -0
  361. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0005_reset_quota_exceeded_until.py +0 -0
  362. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0006_recalculate_installation_next_quota_check.py +0 -0
  363. {bugsink-2.2.2/projects → bugsink-2.3.0/phonehome/migrations}/__init__.py +0 -0
  364. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/models.py +0 -0
  365. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/tasks.py +0 -0
  366. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/tests.py +0 -0
  367. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/utils.py +0 -0
  368. {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/views.py +0 -0
  369. {bugsink-2.2.2 → bugsink-2.3.0}/pre-commit +0 -0
  370. {bugsink-2.2.2/projects/migrations → bugsink-2.3.0/projects}/__init__.py +0 -0
  371. {bugsink-2.2.2 → bugsink-2.3.0}/projects/admin.py +0 -0
  372. {bugsink-2.2.2 → bugsink-2.3.0}/projects/api_views.py +0 -0
  373. {bugsink-2.2.2 → bugsink-2.3.0}/projects/apps.py +0 -0
  374. {bugsink-2.2.2 → bugsink-2.3.0}/projects/context_processors.py +0 -0
  375. {bugsink-2.2.2 → bugsink-2.3.0}/projects/forms.py +0 -0
  376. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0001_initial.py +0 -0
  377. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0002_b_squashed_initial.py +0 -0
  378. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0002_initial.py +0 -0
  379. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0003_project_projects_pr_name_11d782_idx.py +0 -0
  380. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0003_project_retention_max_event_count.py +0 -0
  381. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0004_project_quota_exceeded_until.py +0 -0
  382. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0005_project_ingested_event_count.py +0 -0
  383. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0006_initial_ingested_count_value.py +0 -0
  384. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0007_rename_ingested_event_count_project_digested_event_count.py +0 -0
  385. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0008_project_next_quota_check.py +0 -0
  386. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0009_alter_project_visibility.py +0 -0
  387. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0010_project_stored_event_count.py +0 -0
  388. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0011_fill_stored_event_count.py +0 -0
  389. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0012_project_is_deleted.py +0 -0
  390. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0013_delete_objects_pointing_to_null_project.py +0 -0
  391. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0014_alter_projectmembership_project.py +0 -0
  392. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0015_project_quota_exceeded_reason.py +0 -0
  393. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0016_reset_quota_exceeded_until.py +0 -0
  394. {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0017_project_issue_count.py +0 -0
  395. {bugsink-2.2.2/releases → bugsink-2.3.0/projects/migrations}/__init__.py +0 -0
  396. {bugsink-2.2.2 → bugsink-2.3.0}/projects/models.py +0 -0
  397. {bugsink-2.2.2 → bugsink-2.3.0}/projects/serializers.py +0 -0
  398. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite.html +0 -0
  399. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite.txt +0 -0
  400. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite_new_user.html +0 -0
  401. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite_new_user.txt +0 -0
  402. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_alerts_setup.html +0 -0
  403. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_edit.html +0 -0
  404. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_member_settings.html +0 -0
  405. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_members.html +0 -0
  406. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_members_accept.html +0 -0
  407. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_members_invite.html +0 -0
  408. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_messaging_service_edit.html +0 -0
  409. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_messaging_service_new.html +0 -0
  410. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_new.html +0 -0
  411. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup.html +0 -0
  412. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup_javascript.html +0 -0
  413. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup_php.html +0 -0
  414. {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup_python.html +0 -0
  415. {bugsink-2.2.2 → bugsink-2.3.0}/projects/test_api.py +0 -0
  416. {bugsink-2.2.2 → bugsink-2.3.0}/projects/urls.py +0 -0
  417. {bugsink-2.2.2 → bugsink-2.3.0}/projects/views.py +0 -0
  418. {bugsink-2.2.2 → bugsink-2.3.0}/pyproject.toml +0 -0
  419. {bugsink-2.2.2/releases/migrations → bugsink-2.3.0/releases}/__init__.py +0 -0
  420. {bugsink-2.2.2 → bugsink-2.3.0}/releases/admin.py +0 -0
  421. {bugsink-2.2.2 → bugsink-2.3.0}/releases/api_views.py +0 -0
  422. {bugsink-2.2.2 → bugsink-2.3.0}/releases/apps.py +0 -0
  423. {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0001_initial.py +0 -0
  424. {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0002_release_releases_re_sort_ep_5c07c8_idx.py +0 -0
  425. {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0003_alter_release_project.py +0 -0
  426. {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0004_fix_indexes.py +0 -0
  427. {bugsink-2.2.2/sentry → bugsink-2.3.0/releases/migrations}/__init__.py +0 -0
  428. {bugsink-2.2.2 → bugsink-2.3.0}/releases/models.py +0 -0
  429. {bugsink-2.2.2 → bugsink-2.3.0}/releases/serializers.py +0 -0
  430. {bugsink-2.2.2 → bugsink-2.3.0}/releases/test_api.py +0 -0
  431. {bugsink-2.2.2 → bugsink-2.3.0}/releases/tests.py +0 -0
  432. {bugsink-2.2.2 → bugsink-2.3.0}/releases/views.py +0 -0
  433. {bugsink-2.2.2 → bugsink-2.3.0}/requirements.development.txt +0 -0
  434. {bugsink-2.2.2 → bugsink-2.3.0}/requirements.txt +0 -0
  435. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/LICENSE +0 -0
  436. {bugsink-2.2.2/snappea/management → bugsink-2.3.0/sentry}/__init__.py +0 -0
  437. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/assemble.py +0 -0
  438. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/minidump.py +0 -0
  439. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/stacktraces/functions.py +0 -0
  440. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/stacktraces/platform.py +0 -0
  441. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/stacktraces/processing.py +0 -0
  442. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/utils/safe.py +0 -0
  443. {bugsink-2.2.2 → bugsink-2.3.0}/sentry/utils/strings.py +0 -0
  444. {bugsink-2.2.2 → bugsink-2.3.0}/sentry_sdk_extensions/__init__.py +0 -0
  445. {bugsink-2.2.2 → bugsink-2.3.0}/sentry_sdk_extensions/tests.py +0 -0
  446. {bugsink-2.2.2 → bugsink-2.3.0}/sentry_sdk_extensions/transport.py +0 -0
  447. {bugsink-2.2.2 → bugsink-2.3.0}/setup.cfg +0 -0
  448. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/__init__.py +0 -0
  449. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/admin.py +0 -0
  450. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/apps.py +0 -0
  451. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/datastructures.py +0 -0
  452. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/dbrouters.py +0 -0
  453. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/decorators.py +0 -0
  454. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/example_tasks.py +0 -0
  455. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/foreman.py +0 -0
  456. {bugsink-2.2.2/snappea/management/commands → bugsink-2.3.0/snappea/management}/__init__.py +0 -0
  457. {bugsink-2.2.2/snappea/migrations → bugsink-2.3.0/snappea/management/commands}/__init__.py +0 -0
  458. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/management/commands/checksnappea.py +0 -0
  459. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/management/commands/runsnappea.py +0 -0
  460. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0001_initial.py +0 -0
  461. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0002_create_models.py +0 -0
  462. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0003_task_created_at.py +0 -0
  463. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0004_task_snappea_tas_created_eb0824_idx.py +0 -0
  464. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0005_stat.py +0 -0
  465. {bugsink-2.2.2/tags → bugsink-2.3.0/snappea/migrations}/__init__.py +0 -0
  466. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/models.py +0 -0
  467. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/settings.py +0 -0
  468. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/stats.py +0 -0
  469. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/tests.py +0 -0
  470. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/utils.py +0 -0
  471. {bugsink-2.2.2 → bugsink-2.3.0}/snappea/views.py +0 -0
  472. {bugsink-2.2.2 → bugsink-2.3.0}/static/favicon.png +0 -0
  473. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-mono-v19-cyrillic_cyrillic-ext_latin_latin-ext_vietnamese-700.woff2 +0 -0
  474. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-mono-v19-cyrillic_cyrillic-ext_latin_latin-ext_vietnamese-700italic.woff2 +0 -0
  475. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-mono-v19-cyrillic_cyrillic-ext_latin_latin-ext_vietnamese-italic.woff2 +0 -0
  476. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-mono-v19-cyrillic_cyrillic-ext_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  477. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-sans-v19-cyrillic_cyrillic-ext_greek_latin_latin-ext_vietnamese-700.woff2 +0 -0
  478. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-sans-v19-cyrillic_cyrillic-ext_greek_latin_latin-ext_vietnamese-700italic.woff2 +0 -0
  479. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-sans-v19-cyrillic_cyrillic-ext_greek_latin_latin-ext_vietnamese-italic.woff2 +0 -0
  480. {bugsink-2.2.2 → bugsink-2.3.0}/static/fonts/ibm-plex-sans-v19-cyrillic_cyrillic-ext_greek_latin_latin-ext_vietnamese-regular.woff2 +0 -0
  481. {bugsink-2.2.2 → bugsink-2.3.0}/static/images/bugsink-logo-dark.png +0 -0
  482. {bugsink-2.2.2 → bugsink-2.3.0}/static/images/bugsink-logo.png +0 -0
  483. {bugsink-2.2.2 → bugsink-2.3.0}/static/images/lang-javascript.png +0 -0
  484. {bugsink-2.2.2 → bugsink-2.3.0}/static/images/lang-php.png +0 -0
  485. {bugsink-2.2.2 → bugsink-2.3.0}/static/images/lang-python.png +0 -0
  486. {bugsink-2.2.2 → bugsink-2.3.0}/static/js/entity_edit.js +0 -0
  487. {bugsink-2.2.2 → bugsink-2.3.0}/static/js/issue_history.js +0 -0
  488. {bugsink-2.2.2 → bugsink-2.3.0}/static/js/issue_list.js +0 -0
  489. {bugsink-2.2.2 → bugsink-2.3.0}/static/js/issue_stacktrace.js +0 -0
  490. {bugsink-2.2.2 → bugsink-2.3.0}/static/js/project_list.js +0 -0
  491. {bugsink-2.2.2 → bugsink-2.3.0}/static/js/team_list.js +0 -0
  492. {bugsink-2.2.2 → bugsink-2.3.0}/static/js/user_list.js +0 -0
  493. {bugsink-2.2.2/tags/management → bugsink-2.3.0/tags}/__init__.py +0 -0
  494. {bugsink-2.2.2 → bugsink-2.3.0}/tags/admin.py +0 -0
  495. {bugsink-2.2.2 → bugsink-2.3.0}/tags/apps.py +0 -0
  496. {bugsink-2.2.2/tags/management/commands → bugsink-2.3.0/tags/management}/__init__.py +0 -0
  497. {bugsink-2.2.2/tags/migrations → bugsink-2.3.0/tags/management/commands}/__init__.py +0 -0
  498. {bugsink-2.2.2 → bugsink-2.3.0}/tags/management/commands/init_tags.py +0 -0
  499. {bugsink-2.2.2 → bugsink-2.3.0}/tags/management/commands/vacuum_eventless_issuetags.py +0 -0
  500. {bugsink-2.2.2 → bugsink-2.3.0}/tags/management/commands/vacuum_tags.py +0 -0
  501. {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0001_initial.py +0 -0
  502. {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0002_no_cascade.py +0 -0
  503. {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0003_remove_objects_with_null_issue.py +0 -0
  504. {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0004_alter_do_nothing.py +0 -0
  505. {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0005_alter_eventtag_project_alter_issuetag_project_and_more.py +0 -0
  506. {bugsink-2.2.2/teams → bugsink-2.3.0/tags/migrations}/__init__.py +0 -0
  507. {bugsink-2.2.2 → bugsink-2.3.0}/tags/models.py +0 -0
  508. {bugsink-2.2.2 → bugsink-2.3.0}/tags/search.py +0 -0
  509. {bugsink-2.2.2 → bugsink-2.3.0}/tags/tasks.py +0 -0
  510. {bugsink-2.2.2 → bugsink-2.3.0}/tags/tests.py +0 -0
  511. {bugsink-2.2.2 → bugsink-2.3.0}/tags/utils.py +0 -0
  512. {bugsink-2.2.2/teams/migrations → bugsink-2.3.0/teams}/__init__.py +0 -0
  513. {bugsink-2.2.2 → bugsink-2.3.0}/teams/admin.py +0 -0
  514. {bugsink-2.2.2 → bugsink-2.3.0}/teams/api_views.py +0 -0
  515. {bugsink-2.2.2 → bugsink-2.3.0}/teams/apps.py +0 -0
  516. {bugsink-2.2.2 → bugsink-2.3.0}/teams/forms.py +0 -0
  517. {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0001_b_squashed_initial.py +0 -0
  518. {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0001_initial.py +0 -0
  519. {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0002_initial.py +0 -0
  520. {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0002_team_teams_team_name_43e047_idx.py +0 -0
  521. {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0003_alter_team_visibility.py +0 -0
  522. {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0004_remove_team_slug.py +0 -0
  523. {bugsink-2.2.2/theme → bugsink-2.3.0/teams/migrations}/__init__.py +0 -0
  524. {bugsink-2.2.2 → bugsink-2.3.0}/teams/models.py +0 -0
  525. {bugsink-2.2.2 → bugsink-2.3.0}/teams/serializers.py +0 -0
  526. {bugsink-2.2.2 → bugsink-2.3.0}/teams/tasks.py +0 -0
  527. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite.html +0 -0
  528. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite.txt +0 -0
  529. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite_new_user.html +0 -0
  530. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite_new_user.txt +0 -0
  531. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_edit.html +0 -0
  532. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_member_settings.html +0 -0
  533. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_members.html +0 -0
  534. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_members_accept.html +0 -0
  535. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_members_invite.html +0 -0
  536. {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_new.html +0 -0
  537. {bugsink-2.2.2 → bugsink-2.3.0}/teams/test_api.py +0 -0
  538. {bugsink-2.2.2 → bugsink-2.3.0}/teams/tests.py +0 -0
  539. {bugsink-2.2.2 → bugsink-2.3.0}/teams/urls.py +0 -0
  540. {bugsink-2.2.2 → bugsink-2.3.0}/teams/views.py +0 -0
  541. {bugsink-2.2.2 → bugsink-2.3.0}/templates/400.html +0 -0
  542. {bugsink-2.2.2 → bugsink-2.3.0}/templates/403.html +0 -0
  543. {bugsink-2.2.2 → bugsink-2.3.0}/templates/403_csrf.html +0 -0
  544. {bugsink-2.2.2 → bugsink-2.3.0}/templates/404.html +0 -0
  545. {bugsink-2.2.2 → bugsink-2.3.0}/templates/4xx_5xx_api.txt +0 -0
  546. {bugsink-2.2.2 → bugsink-2.3.0}/templates/500.html +0 -0
  547. {bugsink-2.2.2 → bugsink-2.3.0}/templates/503.html +0 -0
  548. {bugsink-2.2.2 → bugsink-2.3.0}/templates/admin/change_form_object_tools.html +0 -0
  549. {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/counts.html +0 -0
  550. {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/csrf_debug.html +0 -0
  551. {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/login.html +0 -0
  552. {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/settings.html +0 -0
  553. {bugsink-2.2.2 → bugsink-2.3.0}/templates/robots.txt +0 -0
  554. {bugsink-2.2.2 → bugsink-2.3.0}/templates/signup.html +0 -0
  555. {bugsink-2.2.2/theme/templatetags → bugsink-2.3.0/theme}/__init__.py +0 -0
  556. {bugsink-2.2.2 → bugsink-2.3.0}/theme/apps.py +0 -0
  557. {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/.gitignore +0 -0
  558. {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/package-lock.json +0 -0
  559. {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/package.json +0 -0
  560. {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/postcss.config.js +0 -0
  561. {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/src/styles.css +0 -0
  562. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/bare_base.html +0 -0
  563. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/barest_base.html +0 -0
  564. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/tailwind_forms/formfield.html +0 -0
  565. {bugsink-2.2.2/users/management → bugsink-2.3.0/theme/templatetags}/__init__.py +0 -0
  566. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/add_to_qs.py +0 -0
  567. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/code.py +0 -0
  568. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/issues.py +0 -0
  569. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/stricter_templates.py +0 -0
  570. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/tailwind_forms.py +0 -0
  571. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/user.py +0 -0
  572. {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/version.py +0 -0
  573. {bugsink-2.2.2 → bugsink-2.3.0}/theme/tests.py +0 -0
  574. {bugsink-2.2.2 → bugsink-2.3.0}/tools/is_tracked_by_tailwind.py +0 -0
  575. {bugsink-2.2.2 → bugsink-2.3.0}/tools/strip-trailing-whitespace.sh +0 -0
  576. {bugsink-2.2.2 → bugsink-2.3.0}/users/__init__.py +0 -0
  577. {bugsink-2.2.2 → bugsink-2.3.0}/users/admin.py +0 -0
  578. {bugsink-2.2.2 → bugsink-2.3.0}/users/apps.py +0 -0
  579. {bugsink-2.2.2 → bugsink-2.3.0}/users/forms.py +0 -0
  580. {bugsink-2.2.2/users/management/commands → bugsink-2.3.0/users/management}/__init__.py +0 -0
  581. {bugsink-2.2.2/users/migrations → bugsink-2.3.0/users/management/commands}/__init__.py +0 -0
  582. {bugsink-2.2.2 → bugsink-2.3.0}/users/management/commands/send_welcome_email.py +0 -0
  583. {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0001_initial.py +0 -0
  584. {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0002_user_theme_preference.py +0 -0
  585. {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0003_user_language.py +0 -0
  586. {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0004_alter_user_language.py +0 -0
  587. {bugsink-2.2.2 → bugsink-2.3.0}/users/models.py +0 -0
  588. {bugsink-2.2.2 → bugsink-2.3.0}/users/tasks.py +0 -0
  589. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/confirm_email.html +0 -0
  590. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/confirm_email.txt +0 -0
  591. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/reset_password_email.html +0 -0
  592. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/reset_password_email.txt +0 -0
  593. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/welcome_email.html +0 -0
  594. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/welcome_email.txt +0 -0
  595. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/confirm_email.html +0 -0
  596. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/confirm_email_sent.html +0 -0
  597. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/logged_out.html +0 -0
  598. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/preferences.html +0 -0
  599. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/request_reset_password.html +0 -0
  600. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/resend_confirmation.html +0 -0
  601. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/reset_password.html +0 -0
  602. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/reset_password_email_sent.html +0 -0
  603. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/user_edit.html +0 -0
  604. {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/user_list.html +0 -0
  605. {bugsink-2.2.2 → bugsink-2.3.0}/users/tests.py +0 -0
  606. {bugsink-2.2.2 → bugsink-2.3.0}/users/urls.py +0 -0
  607. {bugsink-2.2.2 → bugsink-2.3.0}/users/views.py +0 -0
@@ -0,0 +1,89 @@
1
+ name: Visualshots Comment
2
+
3
+ on:
4
+ issue_comment:
5
+ types: [created]
6
+
7
+ jobs:
8
+ setup:
9
+ if: >
10
+ github.event.issue.pull_request &&
11
+ startsWith(github.event.comment.body, '/visual ') &&
12
+ contains(fromJSON('["OWNER", "MEMBER"]'), github.event.comment.author_association)
13
+ runs-on: ubuntu-latest
14
+ permissions:
15
+ issues: write
16
+ pull-requests: write
17
+ outputs:
18
+ scenario: ${{ steps.command.outputs.scenario }}
19
+ head_sha: ${{ steps.command.outputs.head_sha }}
20
+ base_branch: ${{ steps.command.outputs.base_branch }}
21
+ artifact_prefix: ${{ steps.command.outputs.artifact_prefix }}
22
+ steps:
23
+ - name: Resolve command and PR head
24
+ id: command
25
+ uses: actions/github-script@v8
26
+ with:
27
+ script: |
28
+ const body = context.payload.comment.body.trim();
29
+ const scenario = body.replace(/^\/visual\s+/, "").trim();
30
+ if (!scenario) {
31
+ core.setFailed("Usage: /visual projects");
32
+ return;
33
+ }
34
+
35
+ const {owner, repo} = context.repo;
36
+ const pull_number = context.payload.issue.number;
37
+ const {data: pull} = await github.rest.pulls.get({owner, repo, pull_number});
38
+
39
+ core.setOutput("scenario", scenario);
40
+ core.setOutput("head_sha", pull.head.sha);
41
+ core.setOutput("base_branch", `origin/${pull.base.ref}`);
42
+ core.setOutput("artifact_prefix", `visualshots-pr-${pull_number}`);
43
+
44
+ - name: React to command
45
+ uses: actions/github-script@v8
46
+ with:
47
+ script: |
48
+ await github.rest.reactions.createForIssueComment({
49
+ owner: context.repo.owner,
50
+ repo: context.repo.repo,
51
+ comment_id: context.payload.comment.id,
52
+ content: "eyes",
53
+ });
54
+
55
+ visualshots:
56
+ needs: setup
57
+ uses: ./.github/workflows/visualshots-run.yml
58
+ permissions:
59
+ contents: read
60
+ with:
61
+ scenario: ${{ needs.setup.outputs.scenario }}
62
+ ref: ${{ needs.setup.outputs.head_sha }}
63
+ base_branch: ${{ needs.setup.outputs.base_branch }}
64
+ artifact_prefix: ${{ needs.setup.outputs.artifact_prefix }}
65
+
66
+ comment:
67
+ if: always() && needs.setup.result == 'success'
68
+ needs: [setup, visualshots]
69
+ runs-on: ubuntu-latest
70
+ permissions:
71
+ issues: write
72
+ pull-requests: write
73
+ steps:
74
+ - name: Comment with run link
75
+ uses: actions/github-script@v8
76
+ with:
77
+ script: |
78
+ const ok = "${{ needs.visualshots.result }}" === "success";
79
+ const scenario = "${{ needs.setup.outputs.scenario }}";
80
+ const body = ok
81
+ ? `Visualshots finished for \`${scenario}\`.\n\nArtifacts: ${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`
82
+ : `Visualshots failed for \`${scenario}\`.\n\nRun: ${context.serverUrl}/${context.repo.owner}/${context.repo.repo}/actions/runs/${context.runId}`;
83
+
84
+ await github.rest.issues.createComment({
85
+ owner: context.repo.owner,
86
+ repo: context.repo.repo,
87
+ issue_number: context.payload.issue.number,
88
+ body,
89
+ });
@@ -0,0 +1,160 @@
1
+ name: Visualshots Run
2
+
3
+ on:
4
+ workflow_call:
5
+ inputs:
6
+ scenario:
7
+ required: true
8
+ type: string
9
+ ref:
10
+ required: true
11
+ type: string
12
+ base_branch:
13
+ required: true
14
+ type: string
15
+ artifact_prefix:
16
+ required: false
17
+ type: string
18
+ default: visualshots
19
+
20
+ env:
21
+ DJANGO_SETTINGS_MODULE: "bugsink.settings.development"
22
+ HOME: "/root"
23
+
24
+ jobs:
25
+ visualshots:
26
+ runs-on: ubuntu-latest
27
+ container:
28
+ image: mcr.microsoft.com/playwright/python:v1.60.0-noble
29
+ permissions:
30
+ contents: read
31
+ steps:
32
+ - uses: actions/checkout@v6
33
+ with:
34
+ fetch-depth: 0
35
+ ref: ${{ inputs.ref }}
36
+
37
+ - name: Check out visualshots
38
+ uses: actions/checkout@v6
39
+ with:
40
+ repository: "bugsink/visualshots"
41
+ path: visualshots
42
+
43
+ - name: Check out event-samples
44
+ uses: actions/checkout@v6
45
+ with:
46
+ repository: "bugsink/event-samples"
47
+ path: event-samples
48
+
49
+ - name: Install Python dependencies
50
+ run: |
51
+ python -m pip install --upgrade pip
52
+ pip install -r requirements.txt
53
+ pip install -r requirements.development.txt
54
+ pip install playwright
55
+
56
+ - name: Trust Bugsink checkout
57
+ run: |
58
+ git config --global --add safe.directory "$GITHUB_WORKSPACE"
59
+
60
+ - name: Fetch base branch
61
+ run: |
62
+ git fetch origin "+refs/heads/*:refs/remotes/origin/*"
63
+
64
+ - name: Capture screenshots
65
+ env:
66
+ SAMPLES_DIR: ${{ github.workspace }}/event-samples
67
+ run: |
68
+ python visualshots/visualshots.py run \
69
+ --repo "$GITHUB_WORKSPACE" \
70
+ --scenario "${{ inputs.scenario }}" \
71
+ --after HEAD \
72
+ --base-branch "${{ inputs.base_branch }}" \
73
+ --out visualshots/results
74
+
75
+ - name: Prepare visual artifacts
76
+ id: visual_artifacts
77
+ shell: bash
78
+ run: |
79
+ set -euo pipefail
80
+
81
+ scenario_count=$(find visualshots/results -mindepth 1 -maxdepth 1 -type d | wc -l | tr -d ' ')
82
+ echo "scenario_count=${scenario_count}" >> "$GITHUB_OUTPUT"
83
+
84
+ if [ "$scenario_count" = "1" ]; then
85
+ scenario_dir=$(find visualshots/results -mindepth 1 -maxdepth 1 -type d | head -n 1)
86
+ mkdir -p visualshots/artifacts
87
+
88
+ if [ -f "${scenario_dir}/before.png" ]; then
89
+ cp "${scenario_dir}/before.png" visualshots/artifacts/before.png
90
+ echo "has_before=true" >> "$GITHUB_OUTPUT"
91
+ else
92
+ echo "has_before=false" >> "$GITHUB_OUTPUT"
93
+ fi
94
+
95
+ if [ -f "${scenario_dir}/before-dark.png" ]; then
96
+ cp "${scenario_dir}/before-dark.png" visualshots/artifacts/before-dark.png
97
+ echo "has_before_dark=true" >> "$GITHUB_OUTPUT"
98
+ else
99
+ echo "has_before_dark=false" >> "$GITHUB_OUTPUT"
100
+ fi
101
+
102
+ if [ -f "${scenario_dir}/after.png" ]; then
103
+ cp "${scenario_dir}/after.png" visualshots/artifacts/after.png
104
+ echo "has_after=true" >> "$GITHUB_OUTPUT"
105
+ else
106
+ echo "has_after=false" >> "$GITHUB_OUTPUT"
107
+ fi
108
+
109
+ if [ -f "${scenario_dir}/after-dark.png" ]; then
110
+ cp "${scenario_dir}/after-dark.png" visualshots/artifacts/after-dark.png
111
+ echo "has_after_dark=true" >> "$GITHUB_OUTPUT"
112
+ else
113
+ echo "has_after_dark=false" >> "$GITHUB_OUTPUT"
114
+ fi
115
+ else
116
+ echo "has_before=false" >> "$GITHUB_OUTPUT"
117
+ echo "has_before_dark=false" >> "$GITHUB_OUTPUT"
118
+ echo "has_after=false" >> "$GITHUB_OUTPUT"
119
+ echo "has_after_dark=false" >> "$GITHUB_OUTPUT"
120
+ fi
121
+
122
+ - name: Upload before screenshot
123
+ if: steps.visual_artifacts.outputs.scenario_count == '1' && steps.visual_artifacts.outputs.has_before == 'true'
124
+ uses: actions/upload-artifact@v7
125
+ with:
126
+ name: ${{ inputs.artifact_prefix }}-before
127
+ path: visualshots/artifacts/before.png
128
+ archive: false
129
+
130
+ - name: Upload after screenshot
131
+ if: steps.visual_artifacts.outputs.scenario_count == '1' && steps.visual_artifacts.outputs.has_after == 'true'
132
+ uses: actions/upload-artifact@v7
133
+ with:
134
+ name: ${{ inputs.artifact_prefix }}-after
135
+ path: visualshots/artifacts/after.png
136
+ archive: false
137
+
138
+ - name: Upload before dark screenshot
139
+ if: steps.visual_artifacts.outputs.scenario_count == '1' && steps.visual_artifacts.outputs.has_before_dark == 'true'
140
+ uses: actions/upload-artifact@v7
141
+ with:
142
+ name: ${{ inputs.artifact_prefix }}-before-dark
143
+ path: visualshots/artifacts/before-dark.png
144
+ archive: false
145
+
146
+ - name: Upload after dark screenshot
147
+ if: steps.visual_artifacts.outputs.scenario_count == '1' && steps.visual_artifacts.outputs.has_after_dark == 'true'
148
+ uses: actions/upload-artifact@v7
149
+ with:
150
+ name: ${{ inputs.artifact_prefix }}-after-dark
151
+ path: visualshots/artifacts/after-dark.png
152
+ archive: false
153
+
154
+ - name: Upload visual review bundle
155
+ if: steps.visual_artifacts.outputs.scenario_count != '1'
156
+ uses: actions/upload-artifact@v7
157
+ with:
158
+ name: ${{ inputs.artifact_prefix }}
159
+ path: visualshots/results/
160
+ if-no-files-found: error
@@ -0,0 +1,28 @@
1
+ name: Visualshots
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ inputs:
6
+ scenario:
7
+ description: "Scenario name, comma-separated names, or all"
8
+ required: true
9
+ default: "projects"
10
+ ref:
11
+ description: "Branch, tag, or SHA to capture as after"
12
+ required: false
13
+ default: ""
14
+ base_branch:
15
+ description: "Base branch used to find the before commit"
16
+ required: false
17
+ default: "origin/main"
18
+
19
+ jobs:
20
+ visualshots:
21
+ uses: ./.github/workflows/visualshots-run.yml
22
+ permissions:
23
+ contents: read
24
+ with:
25
+ scenario: ${{ inputs.scenario }}
26
+ ref: ${{ inputs.ref || github.ref }}
27
+ base_branch: ${{ inputs.base_branch }}
28
+ artifact_prefix: visualshots
@@ -47,6 +47,7 @@ node_modules
47
47
 
48
48
  # conf
49
49
  /bugsink_conf.py
50
+ /bugsink/settings/personal/*.py
50
51
 
51
52
  # static files
52
53
  /collectedstatic
@@ -1,5 +1,26 @@
1
1
  # Changes
2
2
 
3
+ ## 2.3.0 (23 June 2026)
4
+
5
+ ### CSP reports
6
+
7
+ Add native support for CSP violation reports via a new `/api/<project_pk>/security/` endpoint, compatible with the
8
+ `report-uri` directive browsers emit. Reports are translated into events and pushed through the existing envelope
9
+ pipeline, grouped by `(effective-directive, blocked-uri)`, see #371.
10
+
11
+ ### Sparklines
12
+
13
+ Issue event pages now show a 28-day event-volume sparkline. The sparkline is backed by hourly event-count buckets, so
14
+ regular page views do not need to rescan the event table. Bars can be clicked to jump to an event in that time bucket,
15
+ see #417 and #420.
16
+
17
+ ### Smaller fixes
18
+
19
+ * Show full exception values on stacktrace pages, see #412.
20
+ * Include Bugsink's Sentry-compatible API surface in the OpenAPI schema, see #413.
21
+ * Return `{"id": ...}` from the `/envelope/` endpoint, see #396.
22
+ * Update the Docker run command in the README, see #415.
23
+
3
24
  ## 2.2.2 (4 June 2026)
4
25
 
5
26
  ### Security
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: bugsink
3
- Version: 2.2.2
3
+ Version: 2.3.0
4
4
  Summary: Self-hosted Error Tracking
5
5
  Author-email: "Bugsink B.V." <info@bugsink.com>
6
6
  Project-URL: homepage, https://www.bugsink.com/
@@ -60,7 +60,7 @@ docker pull bugsink/bugsink:latest
60
60
 
61
61
  docker run \
62
62
  -e SECRET_KEY=PUT_AN_ACTUAL_RANDOM_SECRET_HERE_OF_AT_LEAST_50_CHARS \
63
- -e CREATE_SUPERUSER=admin:admin \
63
+ -e CREATE_SUPERUSER=admin@example.org:admin \
64
64
  -e PORT=8000 \
65
65
  -p 8000:8000 \
66
66
  bugsink/bugsink
@@ -19,7 +19,7 @@ docker pull bugsink/bugsink:latest
19
19
 
20
20
  docker run \
21
21
  -e SECRET_KEY=PUT_AN_ACTUAL_RANDOM_SECRET_HERE_OF_AT_LEAST_50_CHARS \
22
- -e CREATE_SUPERUSER=admin:admin \
22
+ -e CREATE_SUPERUSER=admin@example.org:admin \
23
23
  -e PORT=8000 \
24
24
  -p 8000:8000 \
25
25
  bugsink/bugsink
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.2.2'
22
- __version_tuple__ = version_tuple = (2, 2, 2)
21
+ __version__ = version = '2.3.0'
22
+ __version_tuple__ = version_tuple = (2, 3, 0)
23
23
 
24
- __commit_id__ = commit_id = 'gdd17221c0'
24
+ __commit_id__ = commit_id = 'gd0a7f775e'