Skip to content
Snippets Groups Projects
Verified Commit 46f3eb96 authored by Andrejs Cunskis's avatar Andrejs Cunskis :palm_tree: Committed by GitLab
Browse files

Merge branch 'delete-user-projects-scripts-accept-multiple-tokens' into 'master'

Accept multiple access tokens in user project delete script

See merge request gitlab-org/gitlab!141282



Merged-by: default avatarAndrejs Cunskis <acunskis@gitlab.com>
Approved-by: default avatarAndrejs Cunskis <acunskis@gitlab.com>
Co-authored-by: default avatarDesiree Chevalier <dchevalier@gitlab.com>
parents 61d8f93a 3d5e06f2
No related branches found
No related tags found
No related merge requests found
...@@ -83,7 +83,7 @@ end ...@@ -83,7 +83,7 @@ end
desc "Deletes user's projects" desc "Deletes user's projects"
task :delete_user_projects, [:delete_before, :dry_run] do |_, args| task :delete_user_projects, [:delete_before, :dry_run] do |_, args|
args.with_defaults(delete_before: (Date.today - 1).to_s, dry_run: false) args.with_defaults(delete_before: (Date.today - 3).to_s, dry_run: false)
QA::Tools::DeleteUserProjects.new( QA::Tools::DeleteUserProjects.new(
delete_before: args[:delete_before], delete_before: args[:delete_before],
dry_run: !!(args[:dry_run] =~ /true|1|y/i)).run dry_run: !!(args[:dry_run] =~ /true|1|y/i)).run
......
...@@ -32,8 +32,7 @@ def initialize(delete_before: (Date.today - 3).to_s, dry_run: false) ...@@ -32,8 +32,7 @@ def initialize(delete_before: (Date.today - 3).to_s, dry_run: false)
@delete_before = Date.parse(delete_before) @delete_before = Date.parse(delete_before)
@dry_run = dry_run @dry_run = dry_run
@api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], @api_client = set_api_client(ENV['GITLAB_QA_ACCESS_TOKEN'])
personal_access_token: ENV['GITLAB_QA_ACCESS_TOKEN'])
end end
# @example # @example
...@@ -55,24 +54,37 @@ def run ...@@ -55,24 +54,37 @@ def run
return 'No users found. Skipping project delete.' if user_ids.empty? return 'No users found. Skipping project delete.' if user_ids.empty?
user_ids.each do |user_id| user_ids.each do |user_id|
delete_user_projects(user_id) qa_username = fetch_qa_username(user_id)
api_client = if qa_username == "gitlab-qa-user1" && ENV['GITLAB_QA_USER1_ACCESS_TOKEN']
set_api_client(ENV['GITLAB_QA_USER1_ACCESS_TOKEN'])
elsif qa_username == "gitlab-qa-user2" && ENV['GITLAB_QA_USER2_ACCESS_TOKEN']
set_api_client(ENV['GITLAB_QA_USER2_ACCESS_TOKEN'])
else
@api_client
end
delete_user_projects(qa_username, user_id, api_client)
end end
end end
private private
def delete_user_projects(user_id) def delete_user_projects(qa_username, user_id, api_client)
logger.info("Running project delete for user #{user_id} on #{ENV['GITLAB_ADDRESS']}...") logger.info("Running project delete for user #{qa_username} (#{user_id}) on #{ENV['GITLAB_ADDRESS']}...")
projects_head_response = head Runtime::API::Request.new(@api_client, "/users/#{user_id}/projects", projects_head_response = head Runtime::API::Request.new(api_client, "/users/#{user_id}/projects",
per_page: "100").url per_page: "100").url
total_project_pages = projects_head_response.headers[:x_total_pages] total_project_pages = projects_head_response.headers[:x_total_pages]
total_projects = projects_head_response.headers[:x_total]
logger.info("Total project pages: #{total_project_pages}") logger.info("Total projects: #{total_projects}")
return logger.info("\nDone") if total_projects.to_i == 0
project_ids = fetch_project_ids(total_project_pages, user_id) project_ids = fetch_project_ids(total_project_pages, user_id)
logger.info("Total projects created before #{@delete_before}: #{project_ids.size}")
delete_projects(project_ids, @api_client, @dry_run) unless project_ids.empty? delete_projects(project_ids, api_client, @dry_run) unless project_ids.empty?
logger.info("\nDone") logger.info("\nDone")
end end
...@@ -125,6 +137,17 @@ def fetch_qa_user_ids ...@@ -125,6 +137,17 @@ def fetch_qa_user_ids
user_ids.uniq user_ids.uniq
end end
def fetch_qa_username(user_id)
response = get Runtime::API::Request.new(@api_client, "/users/#{user_id}").url
parsed_response = JSON.parse(response.body)
parsed_response["username"]
end
def set_api_client(token)
Runtime::API::Client.new(ENV['GITLAB_ADDRESS'],
personal_access_token: token)
end
end end
end end
end end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment