Skip to content

Commit 86c0b92

Browse files
committed
Fix-project-importer (#495)
## Status #closes #496 ## What's changed? Fixes a bug in the project_importer, where the media wasn't purged Ensures that top level graphql errors are surfaced ## Steps to perform after deploying to production N/A
1 parent 20311de commit 86c0b92

File tree

2 files changed

+26
-9
lines changed

2 files changed

+26
-9
lines changed

app/jobs/upload_job.rb

+25-8
Original file line numberDiff line numberDiff line change
@@ -75,16 +75,33 @@ def load_projects_data(locale, repository, owner)
7575
variables: { repository:, owner:, expression: "#{ENV.fetch('GITHUB_WEBHOOK_REF')}:#{locale}/code" }
7676
)
7777

78-
if response.data.errors.any?
79-
error_messages = response.data.errors.messages.map { |error| error }
80-
error_details = response.data.errors.details.map { |error| error }
81-
error_type = error_details.dig(0, 1, 0, 'type')
78+
handle_graphql_errors(response)
79+
response
80+
end
8281

83-
# Handle NOT_FOUND errors as a special case, as this can happen when the repo is first created
84-
raise GraphQL::Client::Error, "GraphQL query failed with errors: #{error_messages}. Details: #{error_details}" unless error_type == 'NOT_FOUND'
85-
end
82+
def handle_graphql_errors(response)
83+
errors = response&.errors.presence || response&.data&.errors
84+
return if errors.blank?
8685

87-
response
86+
error_messages, error_details, error_type = extract_error_info(errors)
87+
88+
# Handle NOT_FOUND errors as a special case, as this can happen when the repo is first created
89+
raise GraphQL::Client::Error, "GraphQL query failed with errors: #{error_messages}. Details: #{error_details}" unless error_type == 'NOT_FOUND'
90+
end
91+
92+
def extract_error_info(errors)
93+
error_type = nil
94+
if errors.is_a?(Array) && errors.first.is_a?(Hash)
95+
# Query level error
96+
error_messages = errors.map { |error| error }
97+
error_details = errors.map { |error| error }
98+
error_type = error_details.dig(0, 1, 0, 'type')
99+
else
100+
# Top level error
101+
error_messages = errors.messages['data'].first
102+
error_details = errors.details['data'].first['message']
103+
end
104+
[error_messages, error_details, error_type]
88105
end
89106

90107
def format_project(project_dir, locale, repository, owner)

lib/project_importer.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ def attach_media_if_needed
6969
if existing_media_file
7070
next if existing_media_file.blob.checksum == media_checksum(media_file[:io])
7171

72-
existing_media.purge
72+
existing_media_file.purge
7373
end
7474
if images.include?(media_file)
7575
project.images.attach(**media_file)

0 commit comments

Comments
 (0)