Skip to content

Add plan limits of project access tokens

What does this MR do and why?

Related issue: #386041 (closed) | Related MR and comment: !113111 (comment 1317780468)

Add a new restriction by Plan limits: Trail Plan can only create one project access token.

Plan Before After
GitLab Premium support for creating PATs support for creating PATs
GitLab Ultimate support for creating PATs support for creating PATs
GitLab Premium Trail not support for creating PATs support for creating one PAT
GitLab Ultimate Trail not support for creating PATs support for creating one PAT
Others Plan not support for creating PATs not support for creating PATs

("PAT" means "Project Access Token")

Migration log

Migrate

$ bin/rails db:migrate
WARNING: This version of GitLab depends on gitlab-shell 14.18.0, but you're running 14.17.0. Please update gitlab-shell.
main: == 20230321161218 AddProjectAccessTokenLimitToPlanLimits: migrating ======================
main: -- add_column(:plan_limits, :project_access_token_limit, :integer, {:default=>0, :null=>false})
main:    -> 0.0029s
main: == 20230321161218 AddProjectAccessTokenLimitToPlanLimits: migrated (0.0070s) =============

main: == 20230321161441 InsertProjectAccessTokenLimit: migrating =========================
main: -- quote_column_name("project_access_token_limit")
main:    -> 0.0000s
main: -- quote("premium_trial")
main:    -> 0.0000s
main: -- quote(1)
main:    -> 0.0000s
main: -- execute("INSERT INTO plan_limits (plan_id, \"project_access_token_limit\")\nSELECT id, '1' FROM plans WHERE name = 'premium_trial' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"project_access_token_limit\" = EXCLUDED.\"project_access_token_limit\";\n")
main:    -> 0.0013s
main: -- quote_column_name("project_access_token_limit")
main:    -> 0.0000s
main: -- quote("ultimate_trial")
main:    -> 0.0000s
main: -- quote(1)
main:    -> 0.0000s
main: -- execute("INSERT INTO plan_limits (plan_id, \"project_access_token_limit\")\nSELECT id, '1' FROM plans WHERE name = 'ultimate_trial' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"project_access_token_limit\" = EXCLUDED.\"project_access_token_limit\";\n")
main:    -> 0.0008s
main: == 20230321161441 InsertProjectAccessTokenLimit: migrated (0.0062s) ================

Rollback

$ bin/rails db:rollback:main STEP=2
WARNING: This version of GitLab depends on gitlab-shell 14.18.0, but you're running 14.17.0. Please update gitlab-shell.
main: == 20230321161441 InsertProjectAccessTokenLimit: reverting =========================
main: -- quote_column_name("project_access_token_limit")
main:    -> 0.0000s
main: -- quote("premium_trial")
main:    -> 0.0000s
main: -- quote(0)
main:    -> 0.0000s
main: -- execute("INSERT INTO plan_limits (plan_id, \"project_access_token_limit\")\nSELECT id, '0' FROM plans WHERE name = 'premium_trial' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"project_access_token_limit\" = EXCLUDED.\"project_access_token_limit\";\n")
main:    -> 0.0014s
main: -- quote_column_name("project_access_token_limit")
main:    -> 0.0000s
main: -- quote("ultimate_trial")
main:    -> 0.0000s
main: -- quote(0)
main:    -> 0.0000s
main: -- execute("INSERT INTO plan_limits (plan_id, \"project_access_token_limit\")\nSELECT id, '0' FROM plans WHERE name = 'ultimate_trial' LIMIT 1\nON CONFLICT (plan_id) DO UPDATE SET \"project_access_token_limit\" = EXCLUDED.\"project_access_token_limit\";\n")
main:    -> 0.0007s
main: == 20230321161441 InsertProjectAccessTokenLimit: reverted (0.0067s) ================

main: == 20230321161218 AddProjectAccessTokenLimitToPlanLimits: reverting ======================
main: -- remove_column(:plan_limits, :project_access_token_limit, :integer, {:default=>0, :null=>false})
main:    -> 0.0011s
main: == 20230321161218 AddProjectAccessTokenLimitToPlanLimits: reverted (0.0057s) =============

Screenshots or screen recordings

No UI changes.

How to set up and validate locally

Numbered steps to set up and validate the change are strongly suggested.

MR acceptance checklist

This checklist encourages us to confirm any changes have been analyzed to reduce risks in quality, performance, reliability, security, and maintainability.


cc @mtan-gitlab @icbd @chaomao

Edited by Zhiyuan Lu

Merge request reports