Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/qa
diff options
context:
space:
mode:
authorGitLab Bot <gitlab-bot@gitlab.com>2024-01-18 21:08:43 +0300
committerGitLab Bot <gitlab-bot@gitlab.com>2024-01-18 21:08:43 +0300
commit055b4c04d5cef7029625c08619df4f3bcdccc6c2 (patch)
tree4a363915e4878c17f5a6ffef6010a4bf0e3b8b76 /qa
parent85f1126ea6f09296e4e5106d7d8319e93aeedf3c (diff)
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'qa')
-rw-r--r--qa/Rakefile10
-rw-r--r--qa/qa/tools/delete_projects.rb15
-rw-r--r--qa/qa/tools/delete_subgroups.rb26
-rw-r--r--qa/qa/tools/delete_user_projects.rb14
-rw-r--r--qa/qa/tools/lib/group.rb6
5 files changed, 44 insertions, 27 deletions
diff --git a/qa/Rakefile b/qa/Rakefile
index 9fc1ff2c0cf..d8b5d6d08d6 100644
--- a/qa/Rakefile
+++ b/qa/Rakefile
@@ -5,8 +5,9 @@ require_relative "qa"
Dir['tasks/*.rake'].each { |file| load file }
desc "Deletes subgroups within a provided group"
-task :delete_subgroups do
- QA::Tools::DeleteSubgroups.new.run
+task :delete_subgroups, [:delete_before] do |_, args|
+ args.with_defaults(delete_before: (Date.today - 3).to_s)
+ QA::Tools::DeleteSubgroups.new(delete_before: args[:delete_before]).run
end
desc "Initialize GitLab with an access token"
@@ -50,8 +51,9 @@ task :delete_test_ssh_keys, [:title_portion, :delete_before, :dry_run] do |_, ar
end
desc "Deletes projects directly under the provided group"
-task :delete_projects do
- QA::Tools::DeleteProjects.new.run
+task :delete_projects, [:delete_before] do |_, args|
+ args.with_defaults(delete_before: (Date.today - 3).to_s)
+ QA::Tools::DeleteProjects.new(delete_before: args[:delete_before]).run
end
desc "Deletes test users"
diff --git a/qa/qa/tools/delete_projects.rb b/qa/qa/tools/delete_projects.rb
index e11ea90dc90..337108f59b4 100644
--- a/qa/qa/tools/delete_projects.rb
+++ b/qa/qa/tools/delete_projects.rb
@@ -16,16 +16,18 @@ module QA
include Support::API
include Lib::Project
include Lib::Group
+ include Ci::Helpers
- def initialize
+ def initialize(delete_before: (Date.today - 3).to_s)
raise ArgumentError, "Please provide GITLAB_ADDRESS environment variable" unless ENV['GITLAB_ADDRESS']
raise ArgumentError, "Please provide GITLAB_QA_ACCESS_TOKEN environment variable" unless ENV['GITLAB_QA_ACCESS_TOKEN']
@api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], personal_access_token: ENV['GITLAB_QA_ACCESS_TOKEN'])
+ @delete_before = Date.parse(delete_before)
end
def run
- $stdout.puts 'Running...'
+ logger.info("Running...")
# Fetch group's id
if ENV['CLEANUP_ALL_QA_SANDBOX_GROUPS']
@@ -43,14 +45,17 @@ module QA
private
def delete_selected_projects(group_id)
+ return unless group_id
+
+ logger.info("Fetching projects...")
projects_head_response = head Runtime::API::Request.new(@api_client, "/groups/#{group_id}/projects", per_page: "100").url
total_project_pages = projects_head_response.headers[:x_total_pages]
project_ids = fetch_project_ids(group_id, total_project_pages)
- $stdout.puts "Number of projects to be deleted: #{project_ids.length}"
+ logger.info("Number of projects to be deleted: #{project_ids.length}")
delete_projects(project_ids, @api_client) unless project_ids.empty?
- $stdout.puts "\nDone"
+ logger.info("\nDone")
end
def fetch_project_ids(group_id, total_project_pages)
@@ -59,7 +64,7 @@ module QA
total_project_pages.to_i.times do |page_no|
projects_response = get Runtime::API::Request.new(@api_client, "/groups/#{group_id}/projects", page: (page_no + 1).to_s, per_page: "100").url
# Do not delete projects that are less than 4 days old (for debugging purposes)
- projects_ids.concat(JSON.parse(projects_response.body).select { |project| Date.parse(project["created_at"]) < Date.today - 3 }.pluck("id"))
+ projects_ids.concat(parse_body(projects_response).select { |project| Date.parse(project[:created_at]) < @delete_before }.pluck(:id))
end
projects_ids.uniq
diff --git a/qa/qa/tools/delete_subgroups.rb b/qa/qa/tools/delete_subgroups.rb
index 35bff409647..c5d5a25f933 100644
--- a/qa/qa/tools/delete_subgroups.rb
+++ b/qa/qa/tools/delete_subgroups.rb
@@ -23,12 +23,13 @@ module QA
include Ci::Helpers
include Lib::Group
- def initialize
+ def initialize(delete_before: (Date.today - 3).to_s)
raise ArgumentError, "Please provide GITLAB_ADDRESS" unless ENV['GITLAB_ADDRESS']
raise ArgumentError, "Please provide GITLAB_QA_ACCESS_TOKEN" unless ENV['GITLAB_QA_ACCESS_TOKEN']
@api_client = Runtime::API::Client.new(ENV['GITLAB_ADDRESS'], personal_access_token: ENV['GITLAB_QA_ACCESS_TOKEN'])
@failed_deletion_attempts = []
+ @delete_before = Date.parse(delete_before)
end
def run
@@ -47,7 +48,7 @@ module QA
private
def delete_subgroups(group_id)
- return logger.info('Top level group not found') if group_id.nil?
+ return unless group_id
subgroups = fetch_subgroups(group_id)
return logger.info('No subgroups available') if subgroups.empty?
@@ -72,8 +73,13 @@ module QA
while page_no.present?
subgroups_response = get Runtime::API::Request.new(@api_client, api_path, page: page_no, per_page: '100').url
- # Do not delete subgroups that are less than 4 days old (for debugging purposes)
- subgroups.concat(JSON.parse(subgroups_response.body).select { |subgroup| Date.parse(subgroup["created_at"]) < Date.today - 3 })
+
+ if subgroups_response.code == HTTP_STATUS_OK
+ # Do not delete subgroups that are less than 4 days old (for debugging purposes)
+ subgroups.concat(parse_body(subgroups_response).select { |subgroup| Date.parse(subgroup[:created_at]) < @delete_before })
+ else
+ logger.error("Request for subgroups returned (#{subgroups_response.code}): `#{subgroups_response}` ")
+ end
page_no = subgroups_response.headers[:x_next_page].to_s
end
@@ -82,7 +88,7 @@ module QA
end
def subgroup_request(subgroup, **options)
- Runtime::API::Request.new(@api_client, "/groups/#{subgroup['id']}", **options).url
+ Runtime::API::Request.new(@api_client, "/groups/#{subgroup[:id]}", **options).url
end
def process_response_and_subgroup(response, subgroup, opts = {})
@@ -91,7 +97,7 @@ module QA
opts[:save_successes_to] << subgroup if opts[:save_successes_to]
else
logger.error("Failed - #{response}\n")
- @failed_deletion_attempts << { path: subgroup['full_path'], response: response }
+ @failed_deletion_attempts << { path: subgroup[:full_path], response: response }
end
end
@@ -101,9 +107,9 @@ module QA
logger.info("Marking #{subgroups.length} subgroups for deletion...\n")
subgroups.each do |subgroup|
- path = subgroup['full_path']
+ path = subgroup[:full_path]
- if subgroup['marked_for_deletion_on'].nil?
+ if subgroup[:marked_for_deletion_on].nil?
logger.info("Marking subgroup #{path} for deletion...")
response = delete(subgroup_request(subgroup))
@@ -121,7 +127,7 @@ module QA
response = get(subgroup_request(subgroup))
if response.code == 404
- logger.info("Subgroup #{subgroup['full_path']} is no longer available\n")
+ logger.info("Subgroup #{subgroup[:full_path]} is no longer available\n")
false
else
true
@@ -132,7 +138,7 @@ module QA
logger.info("Permanently deleting #{subgroups.length} subgroups...\n")
subgroups.each do |subgroup|
- path = subgroup['full_path']
+ path = subgroup[:full_path]
next unless subgroup_exists?(subgroup)
diff --git a/qa/qa/tools/delete_user_projects.rb b/qa/qa/tools/delete_user_projects.rb
index 5fe8e30cb66..2182614c781 100644
--- a/qa/qa/tools/delete_user_projects.rb
+++ b/qa/qa/tools/delete_user_projects.rb
@@ -94,9 +94,9 @@ module QA
total_project_pages.to_i.times do |page_no|
projects_response = get Runtime::API::Request.new(@api_client, "/users/#{user_id}/projects",
page: (page_no + 1).to_s, per_page: "100").url
- projects_ids.concat(JSON.parse(projects_response.body)
- .select { |project| Date.parse(project["created_at"]) < @delete_before }
- .map { |project| project["id"] })
+ projects_ids.concat(parse_body(projects_response)
+ .select { |project| Date.parse(project[:created_at]) < @delete_before }
+ .map { |project| project[:id] })
rescue StandardError => e
logger.error("Failed to fetch projects for user #{user_id}: #{e.message}")
end
@@ -123,14 +123,14 @@ module QA
next
end
- parsed_response = JSON.parse(user_response.body)
+ parsed_response = parse_body(user_response)
if parsed_response.empty?
logger.error("User #{qa_username} not found")
next
end
- user_ids << parsed_response.first["id"]
+ user_ids << parsed_response.first[:id]
rescue StandardError => e
logger.error("Failed to fetch user ID for #{qa_username}: #{e.message}")
end
@@ -140,8 +140,8 @@ module QA
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"]
+ parsed_response = parse_body(response)
+ parsed_response[:username]
end
def set_api_client(token)
diff --git a/qa/qa/tools/lib/group.rb b/qa/qa/tools/lib/group.rb
index 5f154906073..b5f0347c872 100644
--- a/qa/qa/tools/lib/group.rb
+++ b/qa/qa/tools/lib/group.rb
@@ -11,8 +11,12 @@ module QA
ENV['TOP_LEVEL_GROUP_NAME'] || "gitlab-qa-sandbox-group-#{Time.now.wday + 1}"
end
+ logger.info("Fetching group #{group_name}...")
+
group_search_response = get Runtime::API::Request.new(api_client, "/groups/#{group_name}").url
- JSON.parse(group_search_response.body)["id"]
+ group = parse_body(group_search_response)
+
+ group[:id].nil? ? logger.warn("Top level group #{group_name} not found") : group[:id]
end
end
end