Add "restore version as new latest" with deprecation support for AI Catalog items
Summary
Allow item owners to restore an older released version as a new latest version, with the ability to mark the replaced version as deprecated. Deprecated versions are excluded from consumer version selection.
Parent issue: gitlab-org/gitlab#596982
Changes
DB migration
- Add
deprecatedboolean column toai_catalog_item_versions(default:false, not null)
Model (ee/app/models/ai/catalog/item_version.rb)
- Add scopes:
not_deprecated,released - Allow updating
deprecatedon released versions (bypassvalidate_readonlyfor this field)
GraphQL schema
- Expose
deprecatedfield onVersionInterface - Add optional
exclude_deprecatedfilter toItemVersionsFinder
New service: Ai::Catalog::ItemVersions::RestoreService
- Copy
definitionandschema_versionfrom source version into a new version record - Bump version number (minor) from latest released
- Set
release_date,created_by, updatelatest_versionandlatest_released_versionon item - Optionally mark current latest as deprecated (default: true)
- Wrap in transaction
New GraphQL mutation: AiCatalogItemVersionRestore
- Arguments:
id(version to restore from),deprecate_current(boolean, default true) - Returns: newly created
ItemVersion - Authorization:
admin_ai_catalog_item(Maintainer/Owner of owning project)
Audit events
- Add relevant audit events
Edited by 🤖 GitLab Bot 🤖