# frozen_string_literal: true require "tempfile" require "json" require "active_support/core_ext/hash" require "rake" require_relative "../deprecation_toolkit/read_write_helper" class CIRecorder include Rake::DSL include DeprecationToolkit::ReadWriteHelper def initialize namespace(:deprecation_toolkit) do desc("Parse a file generated with the CIOutputHelper and generate deprecations out of it") task(:record_from_ci_output) do raw_file = ENV.fetch("FILEPATH") deprecations = extract_deprecations_output(raw_file) do |file| parse_file(file) end generate_deprecations_file(deprecations) end end end private def extract_deprecations_output(file) tmp_file = Tempfile.new shell_command = "cat #{file} | sed -n -e 's/^.* \\[DeprecationToolkit\\] \\(.*\\)/\\1/p' > #{tmp_file.path}" raise "Couldn't extract deprecations from output" unless system(shell_command) yield(tmp_file) ensure tmp_file.delete end def parse_file(file) file.each.with_object({}) do |line, hash| hash.deep_merge!(JSON.parse(line)) end end def generate_deprecations_file(deprecations_to_record) deprecations_to_record.each do |filename, deprecations| write(Pathname(filename), deprecations) end end end CIRecorder.new