Add inactive_resource_access_tokens_delete_after_days instance setting

What does this MR do and why?

Prior to #462217 (closed), GitLab instantly deleted inactive project and group access tokens. !163461 (merged) implemented retention period for 30 days for inactive project and group access tokens. #432790 (closed) requested ability to configure the retention period for inactive project and group access tokens on GitLab Self-Managed.

This MR adds new inactive_resource_access_tokens_delete_after_days application setting that is by default set to 30. This new setting will allow configure the retention period for inactive project and group access tokens. When the setting is left blank, inactive project and group access tokens are not deleted.

References

Screenshots or screen recordings

Screenshot_from_2025-07-21_16-03-59

How to set up and validate locally

See documentation changes in doc/user/project/settings/project_access_tokens.md file.

DB migration

bin/rails db:migrate RAILS_ENV=test
main: == [advisory_lock_connection] object_id: 152900, pg_backend_pid: 106911
main: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: migrating 
main: -- add_column(:application_settings, :resource_access_tokens_settings, :jsonb, {:default=>{}, :null=>false})
main:    -> 0.0081s
main: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: migrated (0.0167s) 

main: == [advisory_lock_connection] object_id: 152900, pg_backend_pid: 106911
ci: == [advisory_lock_connection] object_id: 152900, pg_backend_pid: 106912
ci: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: migrating 
ci: -- add_column(:application_settings, :resource_access_tokens_settings, :jsonb, {:default=>{}, :null=>false})
ci:    -> 0.0045s
ci: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: migrated (0.0184s) 

ci: == [advisory_lock_connection] object_id: 152900, pg_backend_pid: 106912
bin/rails db:migrate:down:main VERSION=20250721103559 RAILS_ENV=test
main: == [advisory_lock_connection] object_id: 125880, pg_backend_pid: 107054
main: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: reverting 
main: -- remove_column(:application_settings, :resource_access_tokens_settings, :jsonb, {:default=>{}, :null=>false})
main:    -> 0.0074s
main: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: reverted (0.0215s) 

main: == [advisory_lock_connection] object_id: 125880, pg_backend_pid: 107054
bin/rails db:migrate:down:ci VERSION=20250721103559 RAILS_ENV=test
ci: == [advisory_lock_connection] object_id: 125360, pg_backend_pid: 107159
ci: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: reverting 
ci: -- remove_column(:application_settings, :resource_access_tokens_settings, :jsonb, {:default=>{}, :null=>false})
ci:    -> 0.0064s
ci: == 20250721103559 AddResourceAccessTokensSettingsToApplicationSettings: reverted (0.0210s) 

ci: == [advisory_lock_connection] object_id: 125360, pg_backend_pid: 107159

MR acceptance checklist

Evaluate this MR against the MR acceptance checklist. It helps you analyze changes to reduce risks in quality, performance, reliability, security, and maintainability.

Edited by Bogdan Denkovych

Merge request reports

Loading