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.
- bugsink-2.3.0/.github/workflows/visualshots-comment.yml +89 -0
- bugsink-2.3.0/.github/workflows/visualshots-run.yml +160 -0
- bugsink-2.3.0/.github/workflows/visualshots.yml +28 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/.gitignore +1 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/CHANGELOG.md +21 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/PKG-INFO +2 -2
- {bugsink-2.2.2 → bugsink-2.3.0}/README.md +1 -1
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/_version.py +3 -3
- bugsink-2.3.0/bugsink/api_schema.py +467 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/app_settings.py +9 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_templates/docker.py.template +1 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_templates/local.py.template +1 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_templates/singleserver.py.template +1 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/context_processors.py +5 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/settings/default.py +4 -0
- bugsink-2.3.0/bugsink/settings/personal/dogfood.py +46 -0
- bugsink-2.3.0/bugsink/settings/personal/hosted.py +77 -0
- bugsink-2.3.0/bugsink/test_api.py +104 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/urls.py +5 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/PKG-INFO +2 -2
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/SOURCES.txt +18 -0
- bugsink-2.3.0/bugsink.egg-info/scm_file_list.json +596 -0
- bugsink-2.3.0/bugsink.egg-info/scm_version.json +8 -0
- bugsink-2.3.0/events/migrations/0029_event_counts_per_hour_models.py +51 -0
- bugsink-2.3.0/events/migrations/0030_backfill_event_counts_per_hour.py +149 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/models.py +28 -0
- bugsink-2.3.0/events/sparklines.py +231 -0
- bugsink-2.3.0/events/templates/events/_event_sparkline.html +104 -0
- bugsink-2.3.0/events/templates/events/_event_sparkline_bucket.html +15 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/tests.py +135 -1
- bugsink-2.3.0/events/usage.py +52 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/models.py +3 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/event_counter.py +5 -1
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/tests.py +245 -4
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/urls.py +5 -1
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/views.py +132 -3
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/tasks.py +2 -1
- bugsink-2.3.0/issues/templates/issues/_event_sparkline.html +3 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/event_details.html +2 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/stacktrace.html +39 -18
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/tests.py +15 -2
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/views.py +9 -2
- bugsink-2.3.0/performance/management/commands/pftest_sparkline_search.py +99 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/tasks.py +3 -1
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_list.html +1 -1
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/tests.py +10 -1
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_list.html +1 -1
- bugsink-2.3.0/theme/static/css/dist/styles.css +2 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/tailwind.config.js +25 -3
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/base.html +7 -0
- bugsink-2.3.0/theme/templates/extra_classes.html +63 -0
- bugsink-2.3.0/users/migrations/__init__.py +0 -0
- bugsink-2.2.2/bugsink/test_api.py +0 -24
- bugsink-2.2.2/theme/static/css/dist/styles.css +0 -2
- {bugsink-2.2.2 → bugsink-2.3.0}/.bandit +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/.coveragerc +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/.github/dependabot.yml +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/.github/workflows/ci.yml +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/.github/workflows/copilot-setup-steps.yml +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/AGENTS.md +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/CLA.md +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/CONTRIBUTING.md +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/Dockerfile +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/Dockerfile.fromwheel +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/LICENSE +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/SECURITY.md +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/forms.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0002_alter_messagingserviceconfig_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0003_messagingserviceconfig_last_failure_error_message_and_more.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/0004_alter_messagingserviceconfig_kind.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/migrations/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/base.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/discord.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/mattermost.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/slack.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/service_backends/webhook_security.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/templates/mails/issue_alert.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/templates/mails/issue_alert.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/alerts/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/api/LICENSE +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/api/README.md +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/api/event.schema.altered.json +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/api/event.schema.json +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/future_python.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/check_migrations.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/cleanup_objectstorage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/convert_mariadb_uuids.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/create_auth_token.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/fetch_event_schema_json.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/makemigrations.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/migrate.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/migrate_to_current_objectstorage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/modelcounts.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/munin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/prestart.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/raise_exception.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/send_bomb.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/send_json.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/showstat.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/stress_test.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/commands/vacuum.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/management/utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/0002_cachedmodelcount.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/0003_add_description_to_authtoken.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/migrations/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/templates/bsmain/auth_token_list.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/test_vacuum.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/urls.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bsmain/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_fields.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_mixins.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_pagination.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/api_serializers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/authentication.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/conf_utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/debug_views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/decorators.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/email_backends.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/event_schema.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/exceptions.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/gunicorn.docker.conf.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/middleware.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/moreiterutils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/period_utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/permissions.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/pygments_extensions.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/create_conf.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/manage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/runsnappea.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/show_version.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/scripts/util.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/settings/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/settings/development.py +0 -0
- {bugsink-2.2.2/bugsink/timed_sqlite_backend → bugsink-2.3.0/bugsink/settings/personal}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/streams.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/test_utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/tests.py +0 -0
- {bugsink-2.2.2/compat → bugsink-2.3.0/bugsink/timed_sqlite_backend}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/timed_sqlite_backend/base.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/tooling.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/transaction.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/version.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/volume_based_condition.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink/wsgi.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/dependency_links.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/entry_points.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/requires.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/bugsink.egg-info/top_level.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/builddocker.bash +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/buildxdocker.bash +0 -0
- {bugsink-2.2.2/ee → bugsink-2.3.0/compat}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/compat/auth.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/compat/dsn.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/compat/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/compat/timestamp.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/compat/vars.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/docker-compose-sample.yaml +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ee/LICENSE +0 -0
- {bugsink-2.2.2/ee/tenants → bugsink-2.3.0/ee}/__init__.py +0 -0
- {bugsink-2.2.2/ee/tenants/database_backend → bugsink-2.3.0/ee/tenants}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/base.py +0 -0
- {bugsink-2.2.2/events → bugsink-2.3.0/ee/tenants/database_backend}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/database_backend/base.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/middleware.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ee/tenants/utils.py +0 -0
- {bugsink-2.2.2/events/management → bugsink-2.3.0/events}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/api_views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/factories.py +0 -0
- {bugsink-2.2.2/events/management/commands → bugsink-2.3.0/events/management}/__init__.py +0 -0
- {bugsink-2.2.2/events/migrations → bugsink-2.3.0/events/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/cleanup_eventstorage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/delete_by_age_until_under_retention_max.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/delete_old_events.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/fix_project_digest_order.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/make_consistent.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/migrate_to_current_eventstorage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/management/commands/nuke_events.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/markdown_stacktrace.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0002_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0003_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0004_b_squashed.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0004_event_irrelevance_for_retention.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0005_event_events_even_project_abe572_idx.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0006_event_never_evict.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0007_set_never_evict.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0008_remove_event_events_even_project_abe572_idx_and_more.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0009_event_events_even_issue_i_90497b_idx.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0010_rename_ingest_order_event_digest_order_and_more.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0011_remove_event_events_even_project_adcdee_idx_and_more.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0012_event_ingested_at.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0013_harmonize_foogested_at.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0014_event_grouping.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0015_set_event_grouping.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0016_truncate_exception_type_128.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0017_alter_event_calculated_type_and_more.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0018_remove_event_has_exception_remove_event_has_logentry.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0019_event_storage_backend.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0020_remove_events_with_null_issue_or_grouping.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0021_alter_do_nothing.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0022_alter_event_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0023_event_remote_addr.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0024_remove_event_debug_info.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0025_fix_never_evict.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0026_event_events_even_project_625413_idx.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0027_event_project_digest_order.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/migrations/0028_event_events_even_digeste_bf21dd_idx.py +0 -0
- {bugsink-2.2.2/files → bugsink-2.3.0/events/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/renderers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/retention.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/serializers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/storage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/storage_registry.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/templates/events/event_stacktrace.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/test_api.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/ua_stuff.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/urls.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/events/views.py +0 -0
- {bugsink-2.2.2/files/management → bugsink-2.3.0/files}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/apps.py +0 -0
- {bugsink-2.2.2/files/management/commands → bugsink-2.3.0/files/management}/__init__.py +0 -0
- {bugsink-2.2.2/files/migrations → bugsink-2.3.0/files/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/management/commands/delete_legacy_sourcemaps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/management/commands/vacuum_files.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/migrations/0001_initial.py +0 -0
- {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
- {bugsink-2.2.2 → bugsink-2.3.0}/files/migrations/0003_file_storage_backend.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/migrations/0004_alter_filemetadata_unique_together_and_more.py +0 -0
- {bugsink-2.2.2/ingest → bugsink-2.3.0/files/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/minidump.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/object_kinds.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/storage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/storage_registry.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/test_vacuum.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/urls.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/files/views.py +0 -0
- {bugsink-2.2.2/ingest/management → bugsink-2.3.0/ingest}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/exceptions.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/filestore.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/header_validators.py +0 -0
- {bugsink-2.2.2/ingest/management/commands → bugsink-2.3.0/ingest/management}/__init__.py +0 -0
- {bugsink-2.2.2/ingest/migrations → bugsink-2.3.0/ingest/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/management/commands/vacuum_ingest_dir.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/migrations/0001_set_sqlite_wal.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/migrations/0002_initial.py +0 -0
- {bugsink-2.2.2/issues → bugsink-2.3.0/ingest/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/parsers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/ingest/tasks.py +0 -0
- {bugsink-2.2.2/issues/migrations → bugsink-2.3.0/issues}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/api_views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/factories.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/forms.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/markdown_issue.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0002_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0003_alter_turningpoint_triggering_event.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0004_b_squashed.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0004_rename_event_count_issue_digested_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0005_rename_ingest_order_issue_digest_order_and_more.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0006_issue_next_unmute_check.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0007_alter_turningpoint_options.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0008_issue_stored_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0009_fill_stored_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0010_issue_list_indexes.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0011_truncate_exception_type_128.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0012_alter_issue_calculated_type_and_more.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0013_fix_issue_stored_event_counts.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0014_grouping_grouping_key_hash.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0015_set_grouping_hash.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0016_alter_grouping_unique_together.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0017_issue_list_indexes_must_start_with_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0018_issue_is_deleted.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0019_alter_grouping_grouping_key_hash.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0020_remove_objects_with_null_issue.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0021_alter_do_nothing.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0022_turningpoint_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0023_turningpoint_set_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0024_turningpoint_project_alter_not_null.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/migrations/0025_alter_grouping_project_alter_issue_project.py +0 -0
- {bugsink-2.2.2/performance → bugsink-2.3.0/issues/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/regressions.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/serializers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/_event_nav.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/base.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/breadcrumbs.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/event_404.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/event_list.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/grouping.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/history.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/issue_list.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/templates/issues/tags.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/test_api.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/urls.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/issues/utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/locale/zh_Hans/LC_MESSAGES/django.mo +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/locale/zh_Hans/LC_MESSAGES/django.po +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/manage.py +0 -0
- {bugsink-2.2.2/performance/management → bugsink-2.3.0/performance}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/bursty_data.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/context_managers.py +0 -0
- {bugsink-2.2.2/performance/management/commands → bugsink-2.3.0/performance/management}/__init__.py +0 -0
- {bugsink-2.2.2/phonehome → bugsink-2.3.0/performance/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/management/commands/pftest_search.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/README.md +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/df-day.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/event_ingest_count-day.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/response_time_api_avg-day.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/response_time_api_max-day.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/snappea_queue_size-day.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/performance/stress-with-eviction/total_requests-day.png +0 -0
- {bugsink-2.2.2/phonehome/management → bugsink-2.3.0/phonehome}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/apps.py +0 -0
- {bugsink-2.2.2/phonehome/management/commands → bugsink-2.3.0/phonehome/management}/__init__.py +0 -0
- {bugsink-2.2.2/phonehome/migrations → bugsink-2.3.0/phonehome/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/management/commands/print_phonehome.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0001_b_squashed_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0002_create_installation_id.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0002_installation_email_quota_usage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0003_installation_ingest_quotas.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0003_outboundmessage.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0004_installation_created_at.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0004_installation_quota_exceeded_reason.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0005_installation_silence_email_system_warning.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0005_reset_quota_exceeded_until.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/migrations/0006_recalculate_installation_next_quota_check.py +0 -0
- {bugsink-2.2.2/projects → bugsink-2.3.0/phonehome/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/phonehome/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/pre-commit +0 -0
- {bugsink-2.2.2/projects/migrations → bugsink-2.3.0/projects}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/api_views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/context_processors.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/forms.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0002_b_squashed_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0002_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0003_project_projects_pr_name_11d782_idx.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0003_project_retention_max_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0004_project_quota_exceeded_until.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0005_project_ingested_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0006_initial_ingested_count_value.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0007_rename_ingested_event_count_project_digested_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0008_project_next_quota_check.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0009_alter_project_visibility.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0010_project_stored_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0011_fill_stored_event_count.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0012_project_is_deleted.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0013_delete_objects_pointing_to_null_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0014_alter_projectmembership_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0015_project_quota_exceeded_reason.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0016_reset_quota_exceeded_until.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/migrations/0017_project_issue_count.py +0 -0
- {bugsink-2.2.2/releases → bugsink-2.3.0/projects/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/serializers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite_new_user.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/mails/project_membership_invite_new_user.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_alerts_setup.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_edit.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_member_settings.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_members.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_members_accept.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_members_invite.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_messaging_service_edit.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_messaging_service_new.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_new.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup_javascript.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup_php.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/templates/projects/project_sdk_setup_python.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/test_api.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/urls.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/projects/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/pyproject.toml +0 -0
- {bugsink-2.2.2/releases/migrations → bugsink-2.3.0/releases}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/api_views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0002_release_releases_re_sort_ep_5c07c8_idx.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0003_alter_release_project.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/migrations/0004_fix_indexes.py +0 -0
- {bugsink-2.2.2/sentry → bugsink-2.3.0/releases/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/serializers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/test_api.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/releases/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/requirements.development.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/requirements.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/LICENSE +0 -0
- {bugsink-2.2.2/snappea/management → bugsink-2.3.0/sentry}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/assemble.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/minidump.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/stacktraces/functions.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/stacktraces/platform.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/stacktraces/processing.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/utils/safe.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry/utils/strings.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry_sdk_extensions/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry_sdk_extensions/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/sentry_sdk_extensions/transport.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/setup.cfg +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/datastructures.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/dbrouters.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/decorators.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/example_tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/foreman.py +0 -0
- {bugsink-2.2.2/snappea/management/commands → bugsink-2.3.0/snappea/management}/__init__.py +0 -0
- {bugsink-2.2.2/snappea/migrations → bugsink-2.3.0/snappea/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/management/commands/checksnappea.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/management/commands/runsnappea.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0002_create_models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0003_task_created_at.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0004_task_snappea_tas_created_eb0824_idx.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/migrations/0005_stat.py +0 -0
- {bugsink-2.2.2/tags → bugsink-2.3.0/snappea/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/settings.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/stats.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/utils.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/snappea/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/favicon.png +0 -0
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {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
- {bugsink-2.2.2 → bugsink-2.3.0}/static/images/bugsink-logo-dark.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/images/bugsink-logo.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/images/lang-javascript.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/images/lang-php.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/images/lang-python.png +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/js/entity_edit.js +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/js/issue_history.js +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/js/issue_list.js +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/js/issue_stacktrace.js +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/js/project_list.js +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/js/team_list.js +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/static/js/user_list.js +0 -0
- {bugsink-2.2.2/tags/management → bugsink-2.3.0/tags}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/apps.py +0 -0
- {bugsink-2.2.2/tags/management/commands → bugsink-2.3.0/tags/management}/__init__.py +0 -0
- {bugsink-2.2.2/tags/migrations → bugsink-2.3.0/tags/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/management/commands/init_tags.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/management/commands/vacuum_eventless_issuetags.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/management/commands/vacuum_tags.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0002_no_cascade.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0003_remove_objects_with_null_issue.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0004_alter_do_nothing.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/migrations/0005_alter_eventtag_project_alter_issuetag_project_and_more.py +0 -0
- {bugsink-2.2.2/teams → bugsink-2.3.0/tags/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/search.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tags/utils.py +0 -0
- {bugsink-2.2.2/teams/migrations → bugsink-2.3.0/teams}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/api_views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/forms.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0001_b_squashed_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0002_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0002_team_teams_team_name_43e047_idx.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0003_alter_team_visibility.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/migrations/0004_remove_team_slug.py +0 -0
- {bugsink-2.2.2/theme → bugsink-2.3.0/teams/migrations}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/serializers.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite_new_user.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/mails/team_membership_invite_new_user.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_edit.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_member_settings.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_members.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_members_accept.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_members_invite.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/templates/teams/team_new.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/test_api.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/urls.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/teams/views.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/400.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/403.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/403_csrf.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/404.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/4xx_5xx_api.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/500.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/503.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/admin/change_form_object_tools.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/counts.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/csrf_debug.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/login.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/bugsink/settings.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/robots.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/templates/signup.html +0 -0
- {bugsink-2.2.2/theme/templatetags → bugsink-2.3.0/theme}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/.gitignore +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/package-lock.json +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/package.json +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/postcss.config.js +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/static_src/src/styles.css +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/bare_base.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/barest_base.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templates/tailwind_forms/formfield.html +0 -0
- {bugsink-2.2.2/users/management → bugsink-2.3.0/theme/templatetags}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/add_to_qs.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/code.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/issues.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/stricter_templates.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/tailwind_forms.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/user.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/templatetags/version.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/theme/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tools/is_tracked_by_tailwind.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/tools/strip-trailing-whitespace.sh +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/admin.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/apps.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/forms.py +0 -0
- {bugsink-2.2.2/users/management/commands → bugsink-2.3.0/users/management}/__init__.py +0 -0
- {bugsink-2.2.2/users/migrations → bugsink-2.3.0/users/management/commands}/__init__.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/management/commands/send_welcome_email.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0001_initial.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0002_user_theme_preference.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0003_user_language.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/migrations/0004_alter_user_language.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/models.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/tasks.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/confirm_email.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/confirm_email.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/reset_password_email.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/reset_password_email.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/welcome_email.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/mails/welcome_email.txt +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/confirm_email.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/confirm_email_sent.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/logged_out.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/preferences.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/request_reset_password.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/resend_confirmation.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/reset_password.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/reset_password_email_sent.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/user_edit.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/templates/users/user_list.html +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/tests.py +0 -0
- {bugsink-2.2.2 → bugsink-2.3.0}/users/urls.py +0 -0
- {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
|
|
@@ -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.
|
|
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.
|
|
22
|
-
__version_tuple__ = version_tuple = (2,
|
|
21
|
+
__version__ = version = '2.3.0'
|
|
22
|
+
__version_tuple__ = version_tuple = (2, 3, 0)
|
|
23
23
|
|
|
24
|
-
__commit_id__ = commit_id = '
|
|
24
|
+
__commit_id__ = commit_id = 'gd0a7f775e'
|