require "rake" require "dtc_rake/ui" require "uu/os/attachment" require "uu/os/rest/binary_value" require "uu/os/search" require "uu/os/security/session" require "uu/os/uesuri_builder" module DtcRake include DtcRake::UI def mv_to_output_dir(src_dir, src_file) output_dir = DtcRake::Config.instance.output_dir output_dir_name = File.basename(output_dir) # get just the last path element (e.g. "target") FileUtils.mkpath output_dir src_file_path = File.join(src_dir, output_dir_name, src_file) dest_file = File.join(output_dir, src_file) FileUtils.mv src_file_path, dest_file success "#{dest_file} created" end module_function :mv_to_output_dir # Checks if JRuby is being used. This check is important when building .war # files - gems with native extensions (like json, bson) must be added to the # output .war file for Java platform. Otherwise certain gems (e.g. # uu_os_persistence) cannot be loaded when deployed on servlet container # (Tomcat). def check_jruby! error(".war files must be built using JRuby!") unless RUBY_PLATFORM == "java" end module_function :check_jruby! # Checks Bundler version. Bundler 1.16 is not supported by Warbler 1.4. # But since uuCloudg01C3, uuCloudg01OperationRegistry and uuLogStoreg01 # are implemented according tu uuApps 2.1 standard, they need to depend # on Warbler 1.4. Therefore Bundler version needs to be lower than 1.16. # # @see ues:UU-BT:UU.CLOUD/20171106_0001 # @see https://plus4u.net/ues/sesm?SessFree=ues%3A%5B78462435%5D%3A%5B44191589544372490%5D%3A%3F def check_bundler! string = `bundler -v` if string =~ /\d+\.\d+.\d+/ version = string.match(/\d+\.\d+.\d+/).to_s version_parts = version.split('.') if version_parts[1].to_i > 15 error("Unable to build war files with bundler #{version}.\nBundler version must be lower than 1.16.x.") end else warning( "Unknown version of bundler.\n" \ "Your bundler is not working correctly or dtc_rake isn't able to check version on your platform.\n" \ "`bundler -v` returned: #{string}" ) end end module_function :check_bundler! def upload_pack(attrs) file = attrs[:file] artifact_uri = attrs[:appbox_uri] || DtcRake::Product.instance.appbox_uri attachment_code = attrs[:attachment_code] credentials = attrs[:credentials] abort "Specify login credentials" unless credentials UU::OS::Security::Session.login(credentials) attch_uri = UU::OS::UESURIBuilder.parse_uesuri(artifact_uri).set_object_code(attachment_code).to_uesuri if UU::OS::Search.exists(attch_uri) File.open(file, "rb") do |f| UU::OS::Attachment.check_in(attch_uri, data: UU::OS::REST::BinaryValue.new(f)) end else File.open(file, "rb") do |f| attch_uri = UU::OS::Attachment.create(artifact_uri, code: attachment_code, data: UU::OS::REST::BinaryValue.new(f) ) end end attch_uri end module_function :upload_pack end