Merge branch 'staging-26-delete_all_subgroups_task' into 'master'
Add script to remove all subgroups within a provided group See merge request gitlab-org/gitlab-ce!24593
This commit is contained in:
commit
6d3f83f963
|
@ -97,7 +97,7 @@ DEPENDENCIES
|
|||
airborne (~> 0.2.13)
|
||||
capybara (~> 2.16.1)
|
||||
capybara-screenshot (~> 1.0.18)
|
||||
nokogiri (~> 1.10.0)
|
||||
nokogiri (~> 1.10.1)
|
||||
pry-byebug (~> 3.5.1)
|
||||
rake (~> 12.3.0)
|
||||
rspec (~> 3.7)
|
||||
|
|
|
@ -1,6 +1,12 @@
|
|||
require_relative 'qa/tools/revoke_all_personal_access_tokens'
|
||||
require_relative 'qa/tools/delete_subgroups'
|
||||
|
||||
desc "Revokes all personal access tokens"
|
||||
task :revoke_personal_access_tokens do
|
||||
QA::Tools::RevokeAllPersonalAccessTokens.new.run
|
||||
end
|
||||
|
||||
desc "Deletes subgroups within a provided group"
|
||||
task :delete_subgroups do
|
||||
QA::Tools::DeleteSubgroups.new.run
|
||||
end
|
||||
|
|
|
@ -20,6 +20,24 @@ module QA
|
|||
e.response
|
||||
end
|
||||
|
||||
def delete(url)
|
||||
RestClient::Request.execute(
|
||||
method: :delete,
|
||||
url: url,
|
||||
verify_ssl: false)
|
||||
rescue RestClient::ExceptionWithResponse => e
|
||||
e.response
|
||||
end
|
||||
|
||||
def head(url)
|
||||
RestClient::Request.execute(
|
||||
method: :head,
|
||||
url: url,
|
||||
verify_ssl: false)
|
||||
rescue RestClient::ExceptionWithResponse => e
|
||||
e.response
|
||||
end
|
||||
|
||||
def parse_body(response)
|
||||
JSON.parse(response.body, symbolize_names: true)
|
||||
end
|
||||
|
|
|
@ -0,0 +1,66 @@
|
|||
# frozen_string_literal: true
|
||||
|
||||
require_relative '../../qa'
|
||||
|
||||
# This script deletes all subgroups of a group specified by ENV['GROUP_NAME_OR_PATH']
|
||||
# Required environment variables: PERSONAL_ACCESS_TOKEN and GITLAB_ADDRESS
|
||||
# Optional environment variable: GROUP_NAME_OR_PATH (defaults to 'gitlab-qa-sandbox-group')
|
||||
# Run `rake delete_subgroups`
|
||||
|
||||
module QA
|
||||
module Tools
|
||||
class DeleteSubgroups
|
||||
include Support::Api
|
||||
|
||||
def initialize
|
||||
raise ArgumentError, "Please provide GITLAB_ADDRESS" unless ENV['GITLAB_ADDRESS']
|
||||
raise ArgumentError, "Please provide PERSONAL_ACCESS_TOKEN" unless ENV['PERSONAL_ACCESS_TOKEN']
|
||||
|
||||
@api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], personal_access_token: ENV['PERSONAL_ACCESS_TOKEN'])
|
||||
end
|
||||
|
||||
def run
|
||||
STDOUT.puts 'Running...'
|
||||
|
||||
# Fetch group's id
|
||||
group_id = fetch_group_id
|
||||
|
||||
sub_groups_head_response = head Runtime::API::Request.new(@api_client, "/groups/#{group_id}/subgroups", per_page: "100").url
|
||||
total_sub_groups = sub_groups_head_response.headers[:x_total]
|
||||
total_sub_group_pages = sub_groups_head_response.headers[:x_total_pages]
|
||||
|
||||
STDOUT.puts "total_sub_groups: #{total_sub_groups}"
|
||||
STDOUT.puts "total_sub_group_pages: #{total_sub_group_pages}"
|
||||
|
||||
total_sub_group_pages.to_i.times do |page_no|
|
||||
# Fetch all subgroups for the top level group
|
||||
sub_groups_response = get Runtime::API::Request.new(@api_client, "/groups/#{group_id}/subgroups", per_page: "100").url
|
||||
|
||||
sub_group_ids = JSON.parse(sub_groups_response.body).map { |subgroup| subgroup["id"] }
|
||||
|
||||
if sub_group_ids.any?
|
||||
STDOUT.puts "\n==== Current Page: #{page_no + 1} ====\n"
|
||||
|
||||
delete_subgroups(sub_group_ids)
|
||||
end
|
||||
end
|
||||
STDOUT.puts "\nDone"
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def delete_subgroups(sub_group_ids)
|
||||
sub_group_ids.each do |subgroup_id|
|
||||
delete_response = delete Runtime::API::Request.new(@api_client, "/groups/#{subgroup_id}").url
|
||||
dot_or_f = delete_response.code == 202 ? "\e[32m.\e[0m" : "\e[31mF\e[0m"
|
||||
print dot_or_f
|
||||
end
|
||||
end
|
||||
|
||||
def fetch_group_id
|
||||
group_search_response = get Runtime::API::Request.new(@api_client, "/groups", search: ENV['GROUP_NAME_OR_PATH'] || 'gitlab-qa-sandbox-group').url
|
||||
JSON.parse(group_search_response.body).first["id"]
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue