Commit be860bb9 authored by Andrejs Cunskis's avatar Andrejs Cunskis

Use glob pattern to fetch reports for upload

parent 2db6210f
...@@ -159,4 +159,4 @@ knapsack-report: ...@@ -159,4 +159,4 @@ knapsack-report:
before_script: before_script:
- cd qa - cd qa
script: script:
- bundle exec rake 'knapsack:upload[tmp/knapsack]' - bundle exec rake 'knapsack:upload[tmp/knapsack/*/*.json]'
...@@ -21,8 +21,8 @@ module QA ...@@ -21,8 +21,8 @@ module QA
new.download_report new.download_report
end end
def upload(base_path) def upload(glob)
new.upload_report(base_path) new.upload_report(glob)
end end
end end
...@@ -55,7 +55,7 @@ module QA ...@@ -55,7 +55,7 @@ module QA
File.write(report_path, file[:body]) File.write(report_path, file[:body])
end end
# Rename and move new regenerated report # Rename and move new regenerated report to a separate folder used to indicate report name
# #
# @return [void] # @return [void]
def move_regenerated_report def move_regenerated_report
...@@ -70,21 +70,20 @@ module QA ...@@ -70,21 +70,20 @@ module QA
# Merge and upload knapsack report to gcs bucket # Merge and upload knapsack report to gcs bucket
# #
# Will iterate over separate folders for regenerated reports created by move_regenerated_report method, # Fetches all files defined in glob and uses parent folder as report name
# merge them together and upload to GCS bucket
# #
# @param [String] base_path # @param [String] glob
# @return [void] # @return [void]
def upload_report(base_path) def upload_report(glob)
report_dirs = Pathname.glob("#{base_path}/*").select(&:directory?) reports = Pathname.glob(glob).each_with_object(Hash.new { |hsh, key| hsh[key] = [] }) do |report, hash|
return logger.error("Path '#{base_path}' did not contain any subfolders!") if report_dirs.empty? next unless report.extname == ".json"
report_dirs.each do |dir| hash[report.parent.basename.to_s].push(report)
name = dir.basename.to_s end
file = "#{name}.json" return logger.error("Glob '#{glob}' did not contain any valid report files!") if reports.empty?
jsons = dir.glob("*.json")
next logger.warn("Path #{name} did not contain any report json files, skipping upload!") if jsons.empty? reports.each do |name, jsons|
file = "#{name}.json"
report = jsons report = jsons
.map { |json| JSON.parse(File.read(json)) } .map { |json| JSON.parse(File.read(json)) }
...@@ -119,7 +118,7 @@ module QA ...@@ -119,7 +118,7 @@ module QA
# #
# @return [String] # @return [String]
def report_base_path def report_base_path
@report_base_path ||= "knapsack/gcs" @report_base_path ||= "knapsack"
end end
# Knapsack report path # Knapsack report path
...@@ -138,9 +137,12 @@ module QA ...@@ -138,9 +137,12 @@ module QA
# Report name # Report name
# #
# Infer report name from ci job name
# Remove characters incompatible with gcs bucket naming from job names like ee:instance-parallel
#
# @return [String] # @return [String]
def report_name def report_name
@report_name ||= ENV["CI_JOB_NAME"]&.split(" ")&.first @report_name ||= ENV["CI_JOB_NAME"].split(" ").first.tr(":", "-")
end end
# Path to GCS credentials json # Path to GCS credentials json
......
...@@ -10,8 +10,8 @@ namespace :knapsack do ...@@ -10,8 +10,8 @@ namespace :knapsack do
end end
desc "Merge and upload knapsack report" desc "Merge and upload knapsack report"
task :upload, [:base_path] do |_task, args| task :upload, [:glob] do |_task, args|
QA::Tools::KnapsackReport.upload(args[:base_path]) QA::Tools::KnapsackReport.upload(args[:glob])
end end
end end
# rubocop:enable Rails/RakeEnvironment # rubocop:enable Rails/RakeEnvironment
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment