summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSanad Liaquat <sliaquat@gitlab.com>2019-01-22 13:49:24 +0500
committerSanad Liaquat <sliaquat@gitlab.com>2019-01-22 13:49:24 +0500
commit2ff8063e836676cc9bd1b29136dbd9912dbd0813 (patch)
tree7e65ed46fee8c7f4059938bf2979be820ef6ac02
parent63107df8f351e7a3c3b96e5903e71dd4c9bcbbf7 (diff)
downloadgitlab-ce-staging-26-fix_add_deploy_key_spec.tar.gz
-rw-r--r--qa/Gemfile.lock2
-rw-r--r--qa/qa/resource/deploy_key.rb1
-rw-r--r--qa/qa/support/api.rb9
-rw-r--r--qa/qa/tools/delete_project_deploy_keys.rb53
4 files changed, 50 insertions, 15 deletions
diff --git a/qa/Gemfile.lock b/qa/Gemfile.lock
index 419cacdb2af..9f84bdc3828 100644
--- a/qa/Gemfile.lock
+++ b/qa/Gemfile.lock
@@ -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)
diff --git a/qa/qa/resource/deploy_key.rb b/qa/qa/resource/deploy_key.rb
index d892281956b..28d28dd3f05 100644
--- a/qa/qa/resource/deploy_key.rb
+++ b/qa/qa/resource/deploy_key.rb
@@ -20,7 +20,6 @@ module QA
end
end
-
def remove_via_api!
project_id = project.api_response[:id]
diff --git a/qa/qa/support/api.rb b/qa/qa/support/api.rb
index 67a24f5a647..8aa7d6812ac 100644
--- a/qa/qa/support/api.rb
+++ b/qa/qa/support/api.rb
@@ -29,6 +29,15 @@ module QA
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
diff --git a/qa/qa/tools/delete_project_deploy_keys.rb b/qa/qa/tools/delete_project_deploy_keys.rb
index 75abee865fe..b12721bf77d 100644
--- a/qa/qa/tools/delete_project_deploy_keys.rb
+++ b/qa/qa/tools/delete_project_deploy_keys.rb
@@ -2,40 +2,54 @@
require_relative '../../qa'
-# This script deletes all deploy keys for all project under subgroups of a group provided specified by ENV['GROUP_NAME_OR_PATH']
+# This script deletes all deploy keys for all project under 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_all_project_deploy_keys`
+# rubocop:disable Metrics/AbcSize
module QA
module Tools
class DeleteProjectDeployKeys
include Support::Api
- def run
+ 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
- api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], personal_access_token: ENV['PERSONAL_ACCESS_TOKEN'])
- group_search_response = get Runtime::API::Request.new(api_client, "/groups", search: ENV['GROUP_NAME_OR_PATH'] || 'gitlab-qa-sandbox-group').url
- group_id = JSON.parse(group_search_response.body).first["id"]
+ group_id = fetch_group_id
+
+ sub_groups_head_response = get Runtime::API::Request.new(@api_client, "/groups/#{group_id}/subgroups", per_page: "100", page: "1").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}"
# Fetch all subgroups for the top level group
next_sub_group_page = "1"
while next_sub_group_page != ""
- sub_groups_response = get Runtime::API::Request.new(api_client, "/groups/#{group_id}/subgroups", per_page: "100", page: next_sub_group_page).url
+ sub_groups_response = get Runtime::API::Request.new(@api_client, "/groups/#{group_id}/subgroups", per_page: "100", page: next_sub_group_page).url
next_sub_group_page = sub_groups_response.headers[:x_next_page]
+ current_sub_group_page = sub_groups_response.headers[:x_page]
+
+ STDOUT.puts "\n\n==== current_sub_group_page: #{current_sub_group_page} ====\n\n"
sub_group_ids = JSON.parse(sub_groups_response.body).map { |subgroup| subgroup["id"] }
# For each subgroup, fetch all projects
+ sub_group_counter = 0
sub_group_ids.each do |subgroup_id|
next_project_page = "1"
while next_project_page != ""
- project_response = get Runtime::API::Request.new(api_client, "/groups/#{subgroup_id}/projects", per_page: "100", page: next_project_page).url
+ project_response = get Runtime::API::Request.new(@api_client, "/groups/#{subgroup_id}/projects", per_page: "100", page: next_project_page).url
next_project_page = project_response.headers[:x_next_page]
project_ids = JSON.parse(project_response.body).map { |project| project["id"] }
@@ -44,24 +58,37 @@ module QA
project_ids.each do |project_id|
next_deploy_key_page = "1"
while next_deploy_key_page != ""
- deploy_keys_response = get Runtime::API::Request.new(api_client, "/projects/#{project_id}/deploy_keys", per_page: "100", page: next_deploy_key_page).url
+ deploy_keys_response = get Runtime::API::Request.new(@api_client, "/projects/#{project_id}/deploy_keys", per_page: "100", page: next_deploy_key_page).url
next_deploy_key_page = deploy_keys_response.headers[:x_next_page]
deploy_keys_ids = JSON.parse(deploy_keys_response.body).map { |deploy_key| deploy_key["id"] }
- STDOUT.puts "project_id: #{project_id} deploy_keys_ids: #{deploy_keys_ids}"
+ STDOUT.puts "project_id: #{project_id} deploy_keys_ids: #{deploy_keys_ids}" if deploy_keys_ids.any?
# Delete each deploy key
- deploy_keys_ids.each do |deploy_keys_id|
- STDOUT.puts "Deleting deploy key with id: #{deploy_keys_id}"
- delete Runtime::API::Request.new(api_client, "/projects/#{project_id}/deploy_keys/#{deploy_keys_id}").url
- end
+ delete_deploy_keys(deploy_keys_ids, project_id)
end
end
end
+ STDOUT.puts "#{sub_group_counter += 1} ==== Done subgroup_id: #{subgroup_id} ===="
end
+ STDOUT.puts "== Done current_sub_group_page: #{current_sub_group_page} ===="
end
end
+
+ private
+
+ def delete_deploy_keys(deploy_keys_ids, project_id)
+ deploy_keys_ids.each do |deploy_keys_id|
+ STDOUT.puts "Deleting deploy key with id: #{deploy_keys_id}"
+ delete Runtime::API::Request.new(@api_client, "/projects/#{project_id}/deploy_keys/#{deploy_keys_id}").url
+ 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