Skip to content

frontend: guard against null disabledProducts in Footer#1963

Open
jcristau wants to merge 1 commit into
mozilla-releng:mainfrom
jcristau:disabledproducts-not-null
Open

frontend: guard against null disabledProducts in Footer#1963
jcristau wants to merge 1 commit into
mozilla-releng:mainfrom
jcristau:disabledproducts-not-null

frontend: guard against null disabledProducts in Footer

659d59b
Select commit
Loading
Failed to load commit list.
firefoxci-taskcluster / tests-api-python-312 succeeded May 7, 2026 in 4m 57s

FirefoxCI (pull_request)

api-python tox-py312

Details

View task in Taskcluster | View logs in Taskcluster | View task group in Taskcluster

Task Status

Started: 2026-05-07T02:18:13.563Z
Resolved: 2026-05-07T02:19:54.592Z
Task Execution Time: 1 minute, 41 seconds, 29 milliseconds
Task Status: completed
Reason Resolved: completed
TaskId: LJ41r62qQPizziA7nWy29Q
RunId: 0

Artifacts

- public/coverage.xml
- public/logs/live_backing.log
- public/logs/live.log


[taskcluster 2026-05-07T02:18:13.601Z] Worker Type (releng-t/linux-docker) settings:
[taskcluster 2026-05-07T02:18:13.601Z]   {
[taskcluster 2026-05-07T02:18:13.601Z]     "generic-worker": {
[taskcluster 2026-05-07T02:18:13.601Z]       "config": {
[taskcluster 2026-05-07T02:18:13.601Z]         "headlessTasks": true
[taskcluster 2026-05-07T02:18:13.601Z]       },
[taskcluster 2026-05-07T02:18:13.601Z]       "engine": "multiuser",
[taskcluster 2026-05-07T02:18:13.601Z]       "go-arch": "amd64",
[taskcluster 2026-05-07T02:18:13.601Z]       "go-os": "linux",
[taskcluster 2026-05-07T02:18:13.601Z]       "go-version": "go1.26.2",
[taskcluster 2026-05-07T02:18:13.601Z]       "release": "https://github.com/taskcluster/taskcluster/releases/tag/v99.2.1",
[taskcluster 2026-05-07T02:18:13.601Z]       "revision": "ddb9ce7efdb98ae2d0917b69778e9f3cd125e07f",
[taskcluster 2026-05-07T02:18:13.601Z]       "source": "https://github.com/taskcluster/taskcluster/commits/ddb9ce7efdb98ae2d0917b69778e9f3cd125e07f",
[taskcluster 2026-05-07T02:18:13.601Z]       "version": "99.2.1"
[taskcluster 2026-05-07T02:18:13.601Z]     },
[taskcluster 2026-05-07T02:18:13.601Z]     "image": "projects/taskcluster-imaging/global/images/gw-fxci-gcp-l1-2404-amd64-headless-googlecompute-2026-05-04",
[taskcluster 2026-05-07T02:18:13.601Z]     "instance-id": "5824574087130139414",
[taskcluster 2026-05-07T02:18:13.601Z]     "instance-type": "projects/887720501152/machineTypes/c2-standard-4",
[taskcluster 2026-05-07T02:18:13.601Z]     "local-ipv4": "10.138.1.119",
[taskcluster 2026-05-07T02:18:13.601Z]     "project-id": "fxci-production-level1-workers",

...(353 lines hidden)...

[task 2026-05-07T02:19:51.504+00:00] [gw1] [ 80%] PASSED tests/test_tasks.py::test_get_trust_domain[-xpi-expectation6-xpi] 
[task 2026-05-07T02:19:51.504+00:00] tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-mobile/firefox-android-firefox-expectation7-mobile] 
[task 2026-05-07T02:19:51.504+00:00] [gw1] [ 81%] PASSED tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-mobile/firefox-android-firefox-expectation7-mobile] 
[task 2026-05-07T02:19:51.504+00:00] tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-mobile/firefox-android-firefox-android-expectation8-mobile] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 82%] PASSED tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-mobile/firefox-android-firefox-android-expectation8-mobile] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-releng/staging-firefox-android-firefox-android-expectation9-mobile] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 83%] PASSED tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-releng/staging-firefox-android-firefox-android-expectation9-mobile] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-mobile/mozilla-vpn-client-firefox-android-expectation10-mozillavpn] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 83%] PASSED tests/test_tasks.py::test_get_trust_domain[https://github.com/mozilla-mobile/mozilla-vpn-client-firefox-android-expectation10-mozillavpn] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_tasks.py::test_cancel_action_task_group[happy-path] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 84%] PASSED tests/test_tasks.py::test_cancel_action_task_group[happy-path] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_tasks.py::test_cancel_action_task_group[artifact-not-found] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 85%] PASSED tests/test_tasks.py::test_cancel_action_task_group[artifact-not-found] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_tasks.py::test_cancel_action_task_group[no-cancel-all-action] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 85%] PASSED tests/test_tasks.py::test_cancel_action_task_group[no-cancel-all-action] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_versions.py::test_versions[firefox-nightly-42.0.1] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 86%] PASSED tests/test_versions.py::test_versions[firefox-nightly-42.0.1] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_versions.py::test_versions[foo-bar-77.7.7] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 87%] PASSED tests/test_versions.py::test_versions[foo-bar-77.7.7] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_versions.py::test_versions[bar-foo-None] 
[task 2026-05-07T02:19:51.505+00:00] [gw0] [ 88%] PASSED tests/test_openapi.py::test_validate_spec[admin] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_openapi.py::test_validate_spec[public] 
[task 2026-05-07T02:19:51.505+00:00] [gw2] [ 88%] PASSED tests/test_sentry.py::test_sentry_captures_only_5xx_errors[500-True] 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 89%] PASSED tests/test_versions.py::test_versions[bar-foo-None] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_settings.py::test_scopes 
[task 2026-05-07T02:19:51.505+00:00] tests/test_versions.py::test_versions[firefox-beta-None] 
[task 2026-05-07T02:19:51.505+00:00] [gw2] [ 90%] PASSED tests/test_settings.py::test_scopes 
[task 2026-05-07T02:19:51.505+00:00] tests/test_xpi.py::test_cancel_xpi_release 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 90%] PASSED tests/test_versions.py::test_versions[firefox-beta-None] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_xpi.py::test_cancel_xpi_release_admin_fallback 
[task 2026-05-07T02:19:51.505+00:00] [gw2] [ 91%] PASSED tests/test_xpi.py::test_cancel_xpi_release 
[task 2026-05-07T02:19:51.505+00:00] [gw0] [ 92%] PASSED tests/test_openapi.py::test_validate_spec[public] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_product_details.py::test_create_index_listing[product_details0-product_details_final0] 
[task 2026-05-07T02:19:51.505+00:00] [gw0] [ 92%] PASSED tests/test_product_details.py::test_create_index_listing[product_details0-product_details_final0] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_xpi.py::test_cancel_xpi_release_admin_fallback_denied 
[task 2026-05-07T02:19:51.505+00:00] tests/test_product_details.py::test_fetch_l10n_data 
[task 2026-05-07T02:19:51.505+00:00] [gw1] [ 93%] PASSED tests/test_xpi.py::test_cancel_xpi_release_admin_fallback 
[task 2026-05-07T02:19:51.505+00:00] [gw2] [ 94%] PASSED tests/test_xpi.py::test_cancel_xpi_release_admin_fallback_denied 
[task 2026-05-07T02:19:51.505+00:00] [gw0] [ 95%] PASSED tests/test_product_details.py::test_fetch_l10n_data 
[task 2026-05-07T02:19:51.505+00:00] [gw3] [ 95%] PASSED tests/test_product_details.py::test_rebuild 
[task 2026-05-07T02:19:51.505+00:00] tests/test_publicapi.py::test_public_api_subset 
[task 2026-05-07T02:19:51.505+00:00] [gw3] [ 96%] PASSED tests/test_publicapi.py::test_public_api_subset 
[task 2026-05-07T02:19:51.505+00:00] tests/test_publicapi.py::test_good_version[release0-True] 
[task 2026-05-07T02:19:51.505+00:00] [gw3] [ 97%] PASSED tests/test_publicapi.py::test_good_version[release0-True] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_publicapi.py::test_good_version[release1-True] 
[task 2026-05-07T02:19:51.505+00:00] [gw3] [ 97%] PASSED tests/test_publicapi.py::test_good_version[release1-True] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_publicapi.py::test_good_version[release2-False] 
[task 2026-05-07T02:19:51.505+00:00] [gw3] [ 98%] PASSED tests/test_publicapi.py::test_good_version[release2-False] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_publicapi.py::test_sort_releases_by_product_then_version[releases0-expected0] 
[task 2026-05-07T02:19:51.505+00:00] [gw3] [ 99%] PASSED tests/test_publicapi.py::test_sort_releases_by_product_then_version[releases0-expected0] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_publicapi.py::test_sort_releases_by_product_then_version[releases1-expected1] 
[task 2026-05-07T02:19:51.505+00:00] [gw3] [100%] PASSED tests/test_publicapi.py::test_sort_releases_by_product_then_version[releases1-expected1] 
[task 2026-05-07T02:19:51.505+00:00] 
[task 2026-05-07T02:19:51.505+00:00] =============================== warnings summary ===============================
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:16: 10 warnings
[task 2026-05-07T02:19:51.505+00:00]   /builds/worker/checkouts/vcs/api/.tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:16: DeprecationWarning: jsonschema.RefResolver is deprecated as of v4.18.0, in favor of the https://github.com/python-jsonschema/referencing library, which provides more compliant referencing behavior as well as more flexible APIs for customization. A future release will remove RefResolver. Please file a feature request (on referencing) if you are missing an API for the kind of customization you need.
[task 2026-05-07T02:19:51.505+00:00]     from jsonschema import Draft4Validator, RefResolver
[task 2026-05-07T02:19:51.505+00:00] 
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:17
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:17
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:17
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:17
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:17
[task 2026-05-07T02:19:51.505+00:00]   /builds/worker/checkouts/vcs/api/.tox/py312/lib/python3.12/site-packages/connexion/json_schema.py:17: DeprecationWarning: jsonschema.exceptions.RefResolutionError is deprecated as of version 4.18.0. If you wish to catch potential reference resolution errors, directly catch referencing.exceptions.Unresolvable.
[task 2026-05-07T02:19:51.505+00:00]     from jsonschema.exceptions import RefResolutionError, ValidationError  # noqa
[task 2026-05-07T02:19:51.505+00:00] 
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/authlib/_joserfc_helpers.py:8
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/authlib/_joserfc_helpers.py:8
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/authlib/_joserfc_helpers.py:8
[task 2026-05-07T02:19:51.505+00:00] .tox/py312/lib/python3.12/site-packages/authlib/_joserfc_helpers.py:8
[task 2026-05-07T02:19:51.505+00:00]   /builds/worker/checkouts/vcs/api/.tox/py312/lib/python3.12/site-packages/authlib/_joserfc_helpers.py:8: AuthlibDeprecationWarning: authlib.jose module is deprecated, please use joserfc instead.
[task 2026-05-07T02:19:51.505+00:00]   It will be compatible before version 2.0.0.
[task 2026-05-07T02:19:51.505+00:00]     from authlib.jose import ECKey
[task 2026-05-07T02:19:51.505+00:00] 
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_list_behaviors[thunderbird-True]
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_list_behaviors[thunderbird-True]
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_cancel_merge_automation_not_found
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_cancel_merge_automation_not_found
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_list_behaviors[firefox-False]
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_list_behaviors[firefox-False]
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_mark_merge_automation_completed_already_terminal[TaskStatus.Canceled]
[task 2026-05-07T02:19:51.505+00:00] tests/test_merge_automation.py::test_mark_merge_automation_completed_already_terminal[TaskStatus.Canceled]
[task 2026-05-07T02:19:51.505+00:00]   /builds/worker/checkouts/vcs/api/src/shipit_api/migrations/env.py:21: DeprecationWarning: 'get_engine' is deprecated and will be removed in Flask-SQLAlchemy 3.2. Use 'engine' or 'engines[key]' instead. If you're using Flask-Migrate or Alembic, you'll need to update your 'env.py' file.
[task 2026-05-07T02:19:51.505+00:00]     return current_app.extensions["migrate"].db.get_engine()
[task 2026-05-07T02:19:51.505+00:00] 
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_cancel_merge_automation_failed_status
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_cancel_merge_automation_success
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_cancel_merge_automation_with_taskcluster_task
[task 2026-05-07T02:19:51.506+00:00]   /builds/worker/checkouts/vcs/api/src/shipit_api/admin/merge_automation.py:102: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
[task 2026-05-07T02:19:51.506+00:00]     if not current_user.has_permissions(required_permission):
[task 2026-05-07T02:19:51.506+00:00]   Enable tracemalloc to get traceback where the object was allocated.
[task 2026-05-07T02:19:51.506+00:00]   See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.
[task 2026-05-07T02:19:51.506+00:00] 
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_mark_merge_automation_completed_already_terminal[TaskStatus.Canceled]
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_mark_merge_automation_completed
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_mark_merge_automation_completed_already_terminal[TaskStatus.Completed]
[task 2026-05-07T02:19:51.506+00:00]   /builds/worker/checkouts/vcs/api/src/shipit_api/admin/merge_automation.py:125: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
[task 2026-05-07T02:19:51.506+00:00]     if not current_user.has_permissions(required_permission):
[task 2026-05-07T02:19:51.506+00:00]   Enable tracemalloc to get traceback where the object was allocated.
[task 2026-05-07T02:19:51.506+00:00]   See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.
[task 2026-05-07T02:19:51.506+00:00] 
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_start_merge_automation_success
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_start_merge_automation_error_cases[None-TaskStatus.Running-409-Cannot start automation in Running status]
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_start_merge_automation_taskcluster_failure
[task 2026-05-07T02:19:51.506+00:00]   /builds/worker/checkouts/vcs/api/src/shipit_api/admin/merge_automation.py:148: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
[task 2026-05-07T02:19:51.506+00:00]     if not current_user.has_permissions(required_permission):
[task 2026-05-07T02:19:51.506+00:00]   Enable tracemalloc to get traceback where the object was allocated.
[task 2026-05-07T02:19:51.506+00:00]   See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.
[task 2026-05-07T02:19:51.506+00:00] 
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_submit_merge_automation_success
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_submit_merge_automation_invalid_inputs[thunderbird-main-to-beta-None]
[task 2026-05-07T02:19:51.506+00:00] tests/test_merge_automation.py::test_submit_merge_automation_invalid_inputs[firefox-invalid-behavior-Behavior invalid-behavior not found for product: firefox]
[task 2026-05-07T02:19:51.506+00:00]   /builds/worker/checkouts/vcs/api/src/shipit_api/admin/merge_automation.py:52: RuntimeWarning: coroutine 'AsyncMockMixin._execute_mock_call' was never awaited
[task 2026-05-07T02:19:51.506+00:00]     if not current_user.has_permissions(required_permission):
[task 2026-05-07T02:19:51.506+00:00]   Enable tracemalloc to get traceback where the object was allocated.
[task 2026-05-07T02:19:51.506+00:00]   See https://docs.pytest.org/en/stable/how-to/capture-warnings.html#resource-warnings for more info.
[task 2026-05-07T02:19:51.506+00:00] 
[task 2026-05-07T02:19:51.506+00:00] tests/test_publicapi.py: 15 warnings
[task 2026-05-07T02:19:51.506+00:00]   /builds/worker/checkouts/vcs/api/src/cli_common/openapi_subset.py:33: DeprecationWarning: The dpath.util package is being deprecated. All util functions have been moved to dpath package top level.
[task 2026-05-07T02:19:51.506+00:00]     source = dpath.util.get(full_api, section, separator=".")
[task 2026-05-07T02:19:51.506+00:00] 
[task 2026-05-07T02:19:51.506+00:00] tests/test_publicapi.py: 15 warnings
[task 2026-05-07T02:19:51.506+00:00]   /builds/worker/checkouts/vcs/api/src/cli_common/openapi_subset.py:34: DeprecationWarning: The dpath.util package is being deprecated. All util functions have been moved to dpath package top level.
[task 2026-05-07T02:19:51.506+00:00]     dpath.util.new(subset, section, source, separator=".")
[task 2026-05-07T02:19:51.506+00:00] 
[task 2026-05-07T02:19:51.506+00:00] -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
[task 2026-05-07T02:19:51.506+00:00] ================================ tests coverage ================================
[task 2026-05-07T02:19:51.506+00:00] _______________ coverage: platform linux, python 3.12.8-final-0 ________________
[task 2026-05-07T02:19:51.506+00:00] 
[task 2026-05-07T02:19:51.506+00:00] Name                                                                                        Stmts   Miss Branch BrPart  Cover   Missing
[task 2026-05-07T02:19:51.506+00:00] ---------------------------------------------------------------------------------------------------------------------------------------
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/__init__.py                                                                 95      5     24      6    91%   59->67, 61, 63, 72-73, 79, 87->90
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/auth.py                                                                    240     97     60     20    54%   47, 55, 59, 63, 69, 72, 75->78, 83, 111, 114, 123, 126, 129, 132, 135, 152->155, 155->158, 166, 169, 172, 191->193, 208-213, 216-227, 237-244, 258->260, 262-288, 293, 295, 301-320, 328, 332, 336-343, 348, 360-379
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/cors.py                                                                      7      0      0      0   100%
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/db.py                                                                       36      6      4      2    80%   29-30, 42-47
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/dockerflow.py                                                                7      0      0      0   100%
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/log.py                                                                      26      4      4      2    80%   25, 32-36
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/pulse.py                                                                    38     22      6      0    36%   30-36, 39-51, 68-76
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/security.py                                                                  8      8      0      0     0%   6-40
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/taskcluster.py                                                              15      0      2      1    94%   22->27
[task 2026-05-07T02:19:51.506+00:00] src/backend_common/testing.py                                                                  79     51     20      1    29%   57-66, 74-94, 99-124, 135-147, 153->exit, 161-171
[task 2026-05-07T02:19:51.506+00:00] src/cli_common/__init__.py                                                                      0      0      0      0   100%
[task 2026-05-07T02:19:51.506+00:00] src/cli_common/command.py                                                                      55     23     28     10    53%   17, 21, 26, 34-35, 40, 46, 48->51, 53-67, 78-79, 86-94
[task 2026-05-07T02:19:51.506+00:00] src/cli_common/openapi_subset.py                                                               16      4      4      1    75%   39-41, 45
[task 2026-05-07T02:19:51.506+00:00] src/cli_common/pulse.py                                                                        53     45     10      0    13%   20-69, 73-78, 85-97
[task 2026-05-07T02:19:51.506+00:00] src/cli_common/utils.py                                                                        13      7      4      0    35%   15-21
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/__init__.py                                                                9      0      0      0   100%
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/api.py                                                                   277    164     78      9    38%   45-51, 58-59, 73-80, 112, 117-127, 137, 140-141, 153-154, 162->170, 165->162, 195-216, 220-223, 228-229, 234-256, 260-301, 305-326, 330-347, 352-360, 365->371, 383-403, 407-418, 427-441
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/auth0.py                                                                  21      0     10      0   100%
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/github.py                                                                128     75     34      2    38%   17-20, 45-78, 85, 92, 97-111, 156-186, 198, 202-203, 207-236, 240-245, 256-262, 272-278, 302-313, 323-326
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/merge_automation.py                                                      148     11     42      2    92%   26, 110-111, 205-206, 225-228, 250, 261
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/product_details.py                                                       462     51    166     29    86%   138, 225, 239-242, 256->259, 264, 307, 314, 327, 378, 403, 450, 453, 489, 493, 506-510, 526, 587, 589, 602-604, 616->618, 693-695, 714-715, 882, 1054, 1064-1067, 1103-1121, 1136, 1145, 1265, 1283->1281, 1298->exit, 1306
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/release.py                                                                43      8     12      0    82%   27-29, 66-67, 72-75
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/settings.py                                                               65      6     14      4    87%   45, 48, 192-196, 205-206
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/tasks.py                                                                 199     88     50      6    55%   42, 46, 51-60, 72-75, 80-84, 89-93, 112-113, 149-150, 165-177, 181-190, 224-227, 237, 250, 257, 259->261, 265-285, 290, 295, 299-301, 305-312
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/worker.py                                                                 30     19      0      0    37%   20-31, 37-52
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/admin/xpi.py                                                                   138     98     34      0    24%   22, 27-52, 56-79, 83-85, 89-91, 95-117, 144-147, 151-194
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/common/__init__.py                                                               0      0      0      0   100%
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/common/config.py                                                                80      3     18      3    94%   548, 552, 647
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/common/models.py                                                               204     10      0      0    95%   21-24, 28, 55-59
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/common/product.py                                                               11      0      0      0   100%
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/common/version.py                                                               27      2      4      0    94%   33-34
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/migrations/env.py                                                               46     15     10      3    61%   22-24, 30-31, 50, 65-69, 84-88, 91->94, 104
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/migrations/versions/3bd3bbb68ca2_initial_migration.py                           24      8      0      0    67%   153-160
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/migrations/versions/a91368f8211b_add_merge_automation.py                        10      1      0      0    90%   45
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/migrations/versions/bc175ac0c2c5_rename_phase_completed_to_scheduled_at.py      15      4      0      0    73%   26-29
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/public/__init__.py                                                               8      3      0      0    62%   23-32
[task 2026-05-07T02:19:51.507+00:00] src/shipit_api/public/api.py                                                                   60     34     18      0    38%   34-50, 68-75, 79-81, 85-88, 92-96
[task 2026-05-07T02:19:51.507+00:00] ---------------------------------------------------------------------------------------------------------------------------------------
[task 2026-05-07T02:19:51.507+00:00] TOTAL                                                                                        2693    872    656    101    65%
[task 2026-05-07T02:19:51.507+00:00] ====================== 142 passed, 69 warnings in 51.59s =======================
[task 2026-05-07T02:19:52.750+00:00] All done! ✨ 🍰 ✨
[task 2026-05-07T02:19:52.750+00:00] 55 files would be left unchanged.
[task 2026-05-07T02:19:52.750+00:00] ERROR [asyncio] Unclosed client session
[task 2026-05-07T02:19:52.750+00:00] client_session: <aiohttp.client.ClientSession object at 0x7f029f883da0>
[task 2026-05-07T02:19:52.750+00:00] report: venv> /builds/worker/checkouts/vcs/.venv/bin/uv venv -p /builds/worker/checkouts/vcs/.venv/bin/python --allow-existing '--prompt=api[report]' --python-preference system /builds/worker/checkouts/vcs/api/.tox/report
[task 2026-05-07T02:19:52.750+00:00] report: uv-sync> /builds/worker/checkouts/vcs/.venv/bin/uv sync --locked --python-preference system -p /builds/worker/checkouts/vcs/.venv/bin/python
[task 2026-05-07T02:19:52.750+00:00] report: commands[0]> coverage xml '--omit=*test*' -o /builds/worker/artifacts/coverage.xml
[task 2026-05-07T02:19:52.750+00:00] Wrote XML report to /builds/worker/artifacts/coverage.xml
[task 2026-05-07T02:19:52.750+00:00] clean: OK ✔ in 2.81 seconds
[task 2026-05-07T02:19:52.750+00:00] check: OK ✔ in 3.52 seconds
[task 2026-05-07T02:19:52.750+00:00] py312: OK ✔ in 59.43 seconds
[task 2026-05-07T02:19:52.750+00:00]   clean: OK (2.81=setup[2.49]+cmd[0.32] seconds)
[task 2026-05-07T02:19:52.750+00:00]   check: OK (3.52=setup[0.70]+cmd[1.55,0.37,0.90] seconds)
[task 2026-05-07T02:19:52.750+00:00]   py312: OK (59.43=setup[1.16]+cmd[58.27] seconds)
[task 2026-05-07T02:19:52.750+00:00]   report: OK (1.25=setup[0.48]+cmd[0.77] seconds)
[task 2026-05-07T02:19:52.750+00:00]   congratulations :) (63.55 seconds)
[taskcluster 2026-05-07T02:19:53.755Z]                        Exit Code: 0
[taskcluster 2026-05-07T02:19:53.755Z]                        User Time: 9.339ms
[taskcluster 2026-05-07T02:19:53.755Z]                      Kernel Time: 21.792ms
[taskcluster 2026-05-07T02:19:53.755Z]                        Wall Time: 1m19.069957613s
[taskcluster 2026-05-07T02:19:53.755Z]  Average Available System Memory: 14.26 GiB
[taskcluster 2026-05-07T02:19:53.755Z]       Average System Memory Used: 1.35 GiB
[taskcluster 2026-05-07T02:19:53.755Z]          Peak System Memory Used: 1.58 GiB
[taskcluster 2026-05-07T02:19:53.755Z]              Total System Memory: 15.61 GiB
[taskcluster 2026-05-07T02:19:53.755Z]                           Result: SUCCEEDED
[taskcluster 2026-05-07T02:19:53.755Z] === Task Finished ===
[taskcluster 2026-05-07T02:19:53.755Z] Task Duration: 1m19.070693174s
[taskcluster 2026-05-07T02:19:54.202Z] [mounts] Preserving cache: Moving "/home/task_177812029291090/cache0" to "/home/generic-worker/caches/E9KX-CcQRC-x-TfDH9icug"
[taskcluster 2026-05-07T02:19:54.202Z] [mounts] Preserving cache: Moving "/home/task_177812029291090/cache1" to "/home/generic-worker/caches/HE7LCZm-SEedYO4uDjEtsw"