diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-18 21:08:43 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2024-01-18 21:08:43 +0300 |
commit | 055b4c04d5cef7029625c08619df4f3bcdccc6c2 (patch) | |
tree | 4a363915e4878c17f5a6ffef6010a4bf0e3b8b76 /qa | |
parent | 85f1126ea6f09296e4e5106d7d8319e93aeedf3c (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'qa')
-rw-r--r-- | qa/Rakefile | 10 | ||||
-rw-r--r-- | qa/qa/tools/delete_projects.rb | 15 | ||||
-rw-r--r-- | qa/qa/tools/delete_subgroups.rb | 26 | ||||
-rw-r--r-- | qa/qa/tools/delete_user_projects.rb | 14 | ||||
-rw-r--r-- | qa/qa/tools/lib/group.rb | 6 |
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 |