Highlights from 2025-12-10 release

The majority of changes focus on stabilizing the system and migrating projects to the new PULP-based repository management system.

New Features

  • There is a new API endpoint, along with CLI support, for re-generating API tokens (allowing the creation of a new token using an existing, but still valid, one). See PR#3960.

  • The wait() helper has become an official part of the python-copr API. See #3653.

  • Copr now allows storing wildcard strings in the “Packit allowed forge projects” field.

  • The Fedora Copr Frontend is now protected by Anubis to defend against unreasonable bot load. See #4064.

Other Changes and Bugfixes

  • frontend: Correctly marks canceled builds as “canceled” (not failed), and vice versa. #3844.

  • backend: Implemented a bigger “open FDs limit” for the repository pruner cron job. This fixes previous tracebacks that led to unfinished pruning and increased storage consumption. #4048.

  • backend: The worker controlling the build now waits until the correct repositories are fully created (regardless of whether they are on the backend or in Pulp), PR#4032.

  • backend: Allow builders to run the SSH daemon on a non-standard port (other than 22).

  • copr-common: Fixed support for PATCH requests.

  • Fixed errors and warnings encountered when building documentation for a few Copr packages.

  • backend: Stopped creating empty “spawner,” “terminator,” and “vmm” logs (as they have not been receiving any log entries for some time).

  • backend/frontend: Dropped the requirement on pytz and now use zoneinfo.

  • frontend: No longer raises a traceback for unexplained OAuthError errors. (If you observe these errors on the client side, please report/explain them!)

  • frontend: Added protection against tracebacks when copr.storage is None (implemented a database update via an Alembic migration).

  • frontend: Removed the last remaining logic leftovers of modularity.

  • frontend: Dropped the custom RedisSession class in favor of the standard flask-session (which now supports Redis).

  • frontend: Streamed pages (those serving many items, e.g., builds) now preload additional fields from the database in advance to avoid server-side errors.