From f7c7b515eab9fcaeecb51594c76e346ecdb30b7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A9sir=C3=A9e=20Chevalier?= <dchevalier@gitlab.com> Date: Fri, 10 May 2024 20:59:19 +0000 Subject: [PATCH] E2E cleanup: fix deletion errors and fail at the end --- qa/qa/tools/delete_resource_base.rb | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/qa/qa/tools/delete_resource_base.rb b/qa/qa/tools/delete_resource_base.rb index 045ad16a96fa7..191de6f2a80a4 100644 --- a/qa/qa/tools/delete_resource_base.rb +++ b/qa/qa/tools/delete_resource_base.rb @@ -31,6 +31,7 @@ def initialize(dry_run: false) personal_access_token: ENV['GITLAB_QA_ACCESS_TOKEN']) @delete_before = Date.parse(ENV['DELETE_BEFORE'] || (Date.today - 1).to_s) @dry_run = dry_run + @permanently_delete = !!(ENV['PERMANENTLY_DELETE'].to_s =~ /true|1|y/i) @type = nil end @@ -47,7 +48,7 @@ def delete_permanently(resource) response = delete(resource_request(resource, permanently_remove: true, full_path: path)) wait_for_resource_deletion(resource, true) if success?(response&.code) - if success?(response&.code) && permanently_deleted?(resource) + if permanently_deleted?(resource) log_permanent_deletion(resource) else log_failure(resource, response) @@ -84,7 +85,9 @@ def delete_resource(resource) return log_failure(resource, response) unless mark_for_deletion_possible?(resource) - ENV['PERMANENTLY_DELETE'] ? delete_permanently(resource) : log_marked_for_deletion(resource) + @permanently_delete ? delete_permanently(resource) : log_marked_for_deletion(resource) + elsif response&.code == 404 + log_permanent_deletion(resource) else log_failure(resource, response) end @@ -183,7 +186,7 @@ def log_dry_run_output(resources) # @return [Array<String, Hash>] results def log_failure(resource, response) path = resource_path(resource) - logger.error("\e[31mFAILED\e[0m to delete #{@type} #{path} with #{response.code}. Resource still exists.\n") + logger.error("\e[31mFAILED\e[0m to delete #{@type} #{path} with #{response.code}.\n") ["failed_deletions", { path: path, response: response }] end @@ -228,6 +231,8 @@ def log_results(results) print_failed_deletion_attempts(failed_deletions) logger.info('Done') + + exit 1 unless failed_deletions.blank? end # Check if a resource can be marked for deletion @@ -301,7 +306,11 @@ def wait_for_resource_deletion(resource, permanent = false) wait_until(max_duration: 60, sleep_interval: 1, raise_on_failure: false) do response = get(resource_request(resource)) - permanent ? response.code == 404 : response.code == 404 || marked_for_deletion?(parse_body(response)) + if permanent + response&.code == 404 + else + response&.code == 404 || (success?(response&.code) && marked_for_deletion?(parse_body(response))) + end end end end -- GitLab