module FIR::Publish
Public Instance Methods
fetch_app_info()
click to toggle source
# File lib/fir/util/publish.rb, line 61 def fetch_app_info logger.info 'Fetch app info from fir.im' fir_app_info = get(fir_api[:app_url] + "/#{@app_id}", api_token: @token) write_app_info(id: fir_app_info[:id], short: fir_app_info[:short], name: fir_app_info[:name]) fir_app_info end
publish(*args, options)
click to toggle source
# File lib/fir/util/publish.rb, line 14 def publish(*args, options) initialize_publish_options(args, options) logger_info_publishing_message logger.info 'begin to upload ...' logger.info "fir-cli version #{FIR::VERSION} (#{RUBY_VERSION} @ #{RUBY_PLATFORM})" # 开始上传 received_app_info = upload_app short = received_app_info[:short] download_domain = received_app_info[:download_domain] release_id = received_app_info[:release_id] logger.info 'end upload' logger_info_dividing_line download_url = build_download_url(download_domain, short, release_id) logger.info "Published succeed: #{download_url}" qrcode_path = build_qrcode download_url notify_to_thirds(download_url, qrcode_path) upload_mapping_file_with_publish upload_fir_cli_usage_info(received_app_info) logger_info_blank_line answer = { app_id: @app_id, short: short, release_id: release_id, download_url: download_url, time: Time.now.strftime("%F %T%:z") } if options[:save_uploaded_info] write_uploaded_info(answer) end answer end
Protected Instance Methods
build_download_url(download_domain, short, release_id)
click to toggle source
# File lib/fir/util/publish.rb, line 200 def build_download_url(download_domain, short, release_id) url = "http://#{download_domain}/#{short}" url += "?release_id=#{release_id}" if options[:need_release_id] url end
build_qrcode(download_url)
click to toggle source
# File lib/fir/util/publish.rb, line 182 def build_qrcode(download_url) qrcode_path = "#{File.dirname(@file_path)}/fir-#{@app_info[:name]}.png" FIR.generate_rqrcode(download_url, qrcode_path) # NOTE: showing with default options specified explicitly if @options[:need_ansi_qrcode] puts RQRCode::QRCode.new(download_url).as_ansi( light: "\033[47m", dark: "\033[40m", fill_character: ' ', quiet_zone_size: 1 ) end # 为何在这里必须生成 QrCode ? 因为要在 dingtalk 调用 logger.info "Local qrcode file: #{qrcode_path}" if @export_qrcode qrcode_path end
fetch_uploading_info()
click to toggle source
获得 上传文件的授权信息
# File lib/fir/util/publish.rb, line 152 def fetch_uploading_info logger.info "Fetching #{@app_info[:identifier]}@fir.im uploading info......" logger.info "Uploading app: #{@app_info[:name]}-#{@app_info[:version]}(Build #{@app_info[:build]})" post fir_api[:app_url], { type: @app_info[:type], bundle_id: @app_info[:identifier], fname: @file_path.split('/').last, force_upload: options[:switch_to_qiniu] ? 'qiniu' : 'ali', skip_icon_upload: @options[:skip_update_icon], manual_callback: true, oversea_turbo: @options[:oversea_turbo], protocol: 'https', api_token: @token }, header: { user_agent: 'new-cli' } end
force_pin_release(release_id)
click to toggle source
# File lib/fir/util/publish.rb, line 210 def force_pin_release(release_id) post "#{fir_api[:base_url]}/apps/#{@app_id}/releases/#{release_id}/force_set_history", api_token: @token end
initialize_publish_options(args, options)
click to toggle source
# File lib/fir/util/publish.rb, line 216 def initialize_publish_options(args, options) @options = options @file_path = File.absolute_path(args.first.to_s) @file_type = File.extname(@file_path).delete('.') check_file_exist(@file_path) check_supported_file(@file_path) @token = options[:token] || current_token check_token_cannot_be_blank(@token) @changelog = read_changelog(options[:changelog]).to_s.to_utf8 @short = options[:short].to_s @passwd = options[:password].to_s @is_opened = @passwd.blank? ? options[:open] : false @export_qrcode = !!options[:qrcode] @app_info = send("#{@file_type}_info", @file_path, options.merge(full_info: true)) @user_info = fetch_user_info(@token) @uploading_info = fetch_uploading_info # 获得上传信息 @app_id = @uploading_info[:id] @skip_update_icon = options[:skip_update_icon] @force_pin_history = options[:force_pin_history] @app_info[:api_url] = fir_api[:base_url] unless options[:specify_icon_file].blank? @specify_icon_file_path = File.absolute_path(options[:specify_icon_file]) end end
logger_info_publishing_message()
click to toggle source
# File lib/fir/util/publish.rb, line 73 def logger_info_publishing_message email = @user_info.fetch(:email, '') name = @user_info.fetch(:name, '') logger.info "Publishing app via #{name}<#{email}>......." logger_info_dividing_line end
options()
click to toggle source
# File lib/fir/util/publish.rb, line 206 def options @options end
read_changelog(changelog)
click to toggle source
# File lib/fir/util/publish.rb, line 247 def read_changelog(changelog) return if changelog.blank? File.exist?(changelog) ? File.read(changelog) : changelog end
update_app_info()
click to toggle source
# File lib/fir/util/publish.rb, line 141 def update_app_info update_info = { short: @short, passwd: @passwd, is_opened: @is_opened }.compact return if update_info.blank? logger.info 'Updating app info......' put fir_api[:app_url] + "/#{@app_id}", update_info.merge(api_token: @token) end
upload_app()
click to toggle source
# File lib/fir/util/publish.rb, line 81 def upload_app time1 = Time.now.to_i app_uploaded_callback_data = if @options[:switch_to_qiniu] QiniuUploader.new(@app_info, @user_info, @uploading_info, @options).upload else AliUploader.new(@app_info, @user_info, @uploading_info, @options).upload end during_seconds = Time.now.to_i - time1 speed = File.size(@app_info[:file_path]) / during_seconds / 1024 logger.info "File uploaded. During: #{during_seconds} seconds, Upload Speed: #{speed} KB/s " release_id = app_uploaded_callback_data[:release_id] logger.info "App id is #{@app_id}" logger.info "Release id is #{release_id}" # 处理上传完毕后, 需要的后续操作 force_pin_release(release_id) if @force_pin_history upload_device_info update_app_info app_info_dict = fetch_app_info app_info_dict[:release_id] = release_id app_info_dict rescue StandardError => e puts e.message puts e.response.body if e.respond_to?(e.response) && e.respond_to?(e.response.body) raise e end
upload_device_info()
click to toggle source
# File lib/fir/util/publish.rb, line 131 def upload_device_info return if @app_info[:devices].blank? logger.info 'Updating devices info......' key = @uploading_info[:cert][:binary][:key] post fir_api[:udids_url], key: key, udids: @app_info[:devices].join(','), api_token: @token end
upload_fir_cli_usage_info(received_app_info)
click to toggle source
# File lib/fir/util/publish.rb, line 114 def upload_fir_cli_usage_info(received_app_info) return if @options[:skip_fir_cli_feedback] short = received_app_info[:short] AdmqrKnife.visit( unique_code: 'fir_cli_publish', tag: 'fir_cli', referer: "https://#{FIR::VERSION}.fir-cli/#{short}" ) end
upload_mapping_file_with_publish()
click to toggle source
# File lib/fir/util/publish.rb, line 171 def upload_mapping_file_with_publish return if !options[:mappingfile] || !options[:proj] logger_info_blank_line mapping options[:mappingfile], proj: options[:proj], build: @app_info[:build], version: @app_info[:version], token: @token end
write_uploaded_info(answer)
click to toggle source
# File lib/fir/util/publish.rb, line 125 def write_uploaded_info(answer) File.open('fir-cli-answer.json', 'w') do |f| f.write(answer.to_json) end end