From d2050fd37b941364b017bf2f71e8b31f0eef78b7 Mon Sep 17 00:00:00 2001 From: Dan Halson Date: Thu, 13 Feb 2025 08:48:46 +0000 Subject: [PATCH 1/2] Fix typo in var name --- lib/project_importer.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/project_importer.rb b/lib/project_importer.rb index 3047b2ac..89e96794 100644 --- a/lib/project_importer.rb +++ b/lib/project_importer.rb @@ -69,7 +69,7 @@ def attach_media_if_needed if existing_media_file next if existing_media_file.blob.checksum == media_checksum(media_file[:io]) - existing_media.purge + existing_media_file.purge end if images.include?(media_file) project.images.attach(**media_file) From f74d79b060f8176ff78710ee44dedf2327154934 Mon Sep 17 00:00:00 2001 From: Dan Halson Date: Tue, 11 Feb 2025 14:18:25 +0000 Subject: [PATCH 2/2] 487: Handle top level graphql errors --- app/jobs/upload_job.rb | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/app/jobs/upload_job.rb b/app/jobs/upload_job.rb index a131ab5c..926ac835 100644 --- a/app/jobs/upload_job.rb +++ b/app/jobs/upload_job.rb @@ -75,16 +75,33 @@ def load_projects_data(locale, repository, owner) variables: { repository:, owner:, expression: "#{ENV.fetch('GITHUB_WEBHOOK_REF')}:#{locale}/code" } ) - if response.data.errors.any? - error_messages = response.data.errors.messages.map { |error| error } - error_details = response.data.errors.details.map { |error| error } - error_type = error_details.dig(0, 1, 0, 'type') + handle_graphql_errors(response) + response + end - # Handle NOT_FOUND errors as a special case, as this can happen when the repo is first created - raise GraphQL::Client::Error, "GraphQL query failed with errors: #{error_messages}. Details: #{error_details}" unless error_type == 'NOT_FOUND' - end + def handle_graphql_errors(response) + errors = response&.errors.presence || response&.data&.errors + return if errors.blank? - response + error_messages, error_details, error_type = extract_error_info(errors) + + # Handle NOT_FOUND errors as a special case, as this can happen when the repo is first created + raise GraphQL::Client::Error, "GraphQL query failed with errors: #{error_messages}. Details: #{error_details}" unless error_type == 'NOT_FOUND' + end + + def extract_error_info(errors) + error_type = nil + if errors.is_a?(Array) && errors.first.is_a?(Hash) + # Query level error + error_messages = errors.map { |error| error } + error_details = errors.map { |error| error } + error_type = error_details.dig(0, 1, 0, 'type') + else + # Top level error + error_messages = errors.messages['data'].first + error_details = errors.details['data'].first['message'] + end + [error_messages, error_details, error_type] end def format_project(project_dir, locale, repository, owner)