Some rake tasks fail without admin mode
When using the admin mode feature flag, some rake tasks that require administrative access fail due to missing admin mode.
We probably need to auto-enable admin mode on startup for them, similar to what we do with the APIGuard, bypassing it.
E.g. running a dev:setup
:
$ bin/rake dev:setup RAILS_ENV=development
...
== Seed from /Users/diego/Development/gitlab/gitlab-development-kit/gitlab/db/fixtures/development/16_protected_branches.rb
...rake aborted!
Gitlab::Access::AccessDeniedError: Gitlab::Access::AccessDeniedError
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/app/services/protected_branches/create_service.rb:6:in `execute'
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/ee/app/services/ee/protected_branches/create_service.rb:12:in `execute'
(eval):11:in `block (4 levels) in run_file'
(eval):6:in `block (3 levels) in run_file'
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/lib/gitlab/seeder.rb:91:in `block in quiet'
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/lib/gitlab/seeder.rb:122:in `without_statement_timeout'
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/lib/gitlab/seeder.rb:90:in `quiet'
(eval):3:in `block (2 levels) in run_file'
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/lib/tasks/gitlab/setup.rake:34:in `setup_db'
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/lib/tasks/gitlab/setup.rake:5:in `block (2 levels) in <main>'
/Users/diego/Development/gitlab/gitlab-development-kit/gitlab/lib/tasks/dev.rake:7:in `block (2 levels) in <main>'
-e:1:in `<main>'
Tasks: TOP => db:seed_fu
(See full trace by running task with --trace)
Note: the process above happens under some circumstances, since the admin mode is currently enabled via a feature flag (default false
), so removing the database effectively removes the flag. One has to start with the flag enabled in the db, then my suspicion is that since the state of the flag is cached in ruby, at the startup of the rake task it will be cached as true
, and then used all over the different seeding tasks, even if the actual state was removed from the db in the meantime.