class Fastlane::Actions::DownloadHockyBuildAction

Public Class Methods

authors() click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 125
def self.authors
  ["Anton Morozov"]
end
available_options() click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 133
def self.available_options
  [
    # FastlaneCore::ConfigItem.new(key: :your_option,
    #                         env_name: "DOWNLOAD_HOCKY_BUILD_YOUR_OPTION",
    #                      description: "A description of your option",
    #                         optional: false,
    #                             type: String)

      FastlaneCore::ConfigItem.new(key: :api_token,
                                   env_name: "DOWNLOAD_HOCKY_BUILD_API_TOKEN",
                                   description: "API Token for Hockey Access",
                                   optional: false,
                                   type: String,
                                   verify_block: proc do |value|
                                   UI.user_error!("No API token for Hockey given, pass using `api_token: 'token'`") if value.to_s.length == 0
                                   end),

      FastlaneCore::ConfigItem.new(key: :app_id,
                                   env_name: "DOWNLOAD_HOCKY_BUILD_APP_ID",
                                   description: "Application identifier of the app you want to download",
                                   optional: false,
                                   type: String,
                                   verify_block: proc do |value|
                                   UI.user_error!("No app_id is given, pass using `app_id: 'id'`") if value.to_s.length == 0
                                   end),

      FastlaneCore::ConfigItem.new(key: :output_directory,
                                   env_name: "DOWNLOAD_HOCKY_BUILD_DIRECTORY",
                                   description: "Path to download folder",
                                   optional: false,
                                   type: String,
                                   default_value: File.expand_path('.')),

      FastlaneCore::ConfigItem.new(key: :output_file,
                                   env_name: "DOWNLOAD_HOCKY_BUILD_PATH",
                                   description: "Path to your symbols file",
                                   optional: false,
                                   type: String,
                                   default_value: File.expand_path('.')),

      FastlaneCore::ConfigItem.new(key: :output_info_file,
                                   env_name: "DOWNLOAD_HOCKY_BUILD_INFO_PATH",
                                   description: "Path to your symbols info file",
                                   optional: false,
                                   type: String,
                                   default_value: File.expand_path('.'))
                  ]
end
connection(api_token) click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 28
def self.connection(api_token)
    host_url = 'https://rink.hockeyapp.net'
    Faraday.new(:url => host_url) do |faraday|
        faraday.request  :multipart
        faraday.request  :url_encoded
        faraday.adapter  Faraday.default_adapter
        faraday.headers['X-HockeyAppToken'] = api_token
    end
end
description() click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 121
def self.description
  "Download newest build from HockeyApp (iOS & Android)"
end
download_build(build_url, output_directory, output_file) click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 101
def self.download_build(build_url, output_directory, output_file)

    if build_url.nil?
        UI.user_error!("URL to download the build is empty!")
        false
    end

    UI.success "Start to download the build file, which may take a minute"

    FileUtils.mkdir_p(output_directory) unless File.exist?(output_directory)
    path = File.join(output_directory, output_file)
    File.open(path, "wb") do |saved_file|
        open(build_url, "rb") do |read_file|
            saved_file.write(read_file.read)
        end
    end
    UI.success "Successfully downloaded build 🍺"
end
get_first_version(api_token, app_id, output_directory, output_file, output_info_file) click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 39
def self.get_first_version(api_token, app_id, output_directory, output_file, output_info_file)

    conn = self.connection(api_token)
    response = conn.get do |req|
        req.url("/api/2/apps/#{app_id}/app_versions/")
    end

    if response.status == 200
        UI.message("Got app_versions successfully!")
        versions_json = JSON.parse(response.body)
        
        first_version = versions_json['app_versions'].first
        download_url = first_version['download_url']

        if download_url
            UI.message("Got download_url: #{download_url} successfully!")
        else
            UI.user_error!("Unable to parse build info. Status code is #{response.status}")
            false
        end
        
        self.parse_build_url(download_url, api_token, app_id, output_directory, output_file, output_info_file)
    else
        UI.user_error!("Something went wrong with API request. Failed to get app_versions. Status code is #{response.status}")
        false
    end
end
is_supported?(platform) click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 182
def self.is_supported?(platform)
   [:ios, :mac, :android].include?(platform)
  true
end
parse_build_url(url, api_token, app_id, output_directory, output_file, output_info_file) click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 68
def self.parse_build_url(url, api_token, app_id, output_directory, output_file, output_info_file)

    conn = self.connection(api_token)
    response = conn.get do |req|
        req.url("/api/2/apps/#{app_id}/app_versions?include_build_urls=true&build_url=#{url}")
    end

    if response.status == 200
        versions_json = JSON.parse(response.body)
        if versions_json
            first_version = versions_json['app_versions'].first
            storeBuildInfo(first_version, output_directory, output_info_file)
            build_url = first_version["build_url"]
            self.download_build(build_url, output_directory, output_file)
        else
            UI.user_error!("Unable to get app_versions json")
            false
        end
    else
        UI.user_error!("Something went wrong with API request. Status code is #{response.status}")
    end
end
return_value() click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 129
def self.return_value
  # If your method provides a return value, you can describe here what it does
end
run(params) click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 16
def self.run(params)
    UI.message("The download_hocky_build plugin is working!")
    api_token = params[:api_token]
    app_id = params[:app_id]
    output_directory = params[:output_directory]
    output_file = params[:output_file]
    output_info_file = params[:output_info_file]

    self.get_first_version(api_token, app_id, output_directory, output_file, output_info_file)
end
storeBuildInfo(version, output_directory, output_info_file) click to toggle source
# File lib/fastlane/plugin/download_hocky_build/actions/download_hocky_build_action.rb, line 92
def self.storeBuildInfo(version, output_directory, output_info_file)
    FileUtils.mkdir_p(output_directory) unless File.exist?(output_directory)
    path = File.join(output_directory, output_info_file)
    File.open(path,"w") do |f|
        f.write(version)
    end
end