class Fastlane::Actions::ShuttleAction
Public Class Methods
available_options()
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 53 def self.available_options [ FastlaneCore::ConfigItem.new(key: :api_token, env_name: "SHUTTLE_API_TOKEN", description: "API Token for Shuttle", verify_block: proc do |api_token| UI.user_error!("No API token for Shuttle given, pass using `api_token: 'token'`") unless api_token and !api_token.empty? end), FastlaneCore::ConfigItem.new(key: :ipa, env_name: "", description: ".ipa file for the build", optional: true, default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH]), FastlaneCore::ConfigItem.new(key: :dsym, env_name: "", description: "zipped .dsym package for the build", optional: true, default_value: Actions.lane_context[SharedValues::DSYM_OUTPUT_PATH]), FastlaneCore::ConfigItem.new(key: :apk, env_name: "", description: ".apk file for the build", optional: true, default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH]), FastlaneCore::ConfigItem.new(key: :mapping, env_name: "", description: "The path to the mapping.txt file", optional: true, default_value: Actions.lane_context[SharedValues::GRADLE_MAPPING_TXT_OUTPUT_PATH]), FastlaneCore::ConfigItem.new(key: :prefix_schema, env_name: "SHUTTLE_PREFIX_SCHEMA", description: "Prefix schema in uploaded app", default_value: Actions.lane_context[SharedValues::PREFIX_SCHEMA], optional: true), FastlaneCore::ConfigItem.new(key: :app_identifier, description: "App identifier, either bundle id or package name", type: String, default_value: Actions.lane_context[SharedValues::APP_IDENTIFIER]), FastlaneCore::ConfigItem.new(key: :app_version, description: "App version, eg. '1.0.0''", type: String, default_value: Actions.lane_context[SharedValues::APP_VERSION]), FastlaneCore::ConfigItem.new(key: :build_number, description: "Build number, eg. 1337", is_string: false, default_value: Actions.lane_context[SharedValues::BUILD_NUMBER], verify_block: proc do |build_number| UI.user_error!("No value found for 'build_number'") unless build_number and build_number.kind_of? Integer end), FastlaneCore::ConfigItem.new(key: :binary_size, description: ".ipa/.apk binary size in bytes", is_string: false, default_value: Actions.lane_context[SharedValues::BINARY_SIZE], verify_block: proc do |binary_size| UI.user_error!("No value found for 'binary_size'") unless binary_size and binary_size.kind_of? Integer end), FastlaneCore::ConfigItem.new(key: :release_notes, description: "Release notes to be attached to uploaded version", type: String, optional: true, default_value: Actions.lane_context[SharedValues::RELEASE_NOTES]), FastlaneCore::ConfigItem.new(key: :releaser, description: "Releaser email", type: String, optional: true), FastlaneCore::ConfigItem.new(key: :environment, description: "Select environment, defaults to :production", type: Symbol, default_value: :production, optional: true) ] end
description()
click to toggle source
@!group Documentation
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 41 def self.description "Shuttle upload action" end
details()
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 45 def self.details "Notify Shuttle about new app version" end
get_config(platform, params)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 142 def self.get_config(platform, params) api_token = params[:api_token] app_identifier = params[:app_identifier] app_version = params[:app_version] build_number = params[:build_number] binary_size = params[:binary_size] release_notes = params[:release_notes] releaser = params[:releaser] || commit_author case platform when :android apk = params[:apk] mapping = params[:mapping] when :ios prefix_schema = params[:prefix_schema] ipa = params[:ipa] dsym = params[:dsym] end { api_token: api_token, app_identifier: app_identifier, app_version: app_version, build_number: build_number, release_notes: release_notes, releaser: releaser, binary_size: binary_size, prefix_schema: prefix_schema, environment: params[:environment], ipa: ipa, apk: apk, mapping: mapping, dsym: dsym } end
is_supported?(platform)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 125 def self.is_supported?(platform) [:ios, :android].include? platform end
run(params)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 8 def self.run(params) Fastlane::Polidea.session.action_launched("shuttle", params) platform = Actions.lane_context[Actions::SharedValues::PLATFORM_NAME].to_sym options = { api_token: params[:api_token], ipa: params[:ipa], apk: params[:apk], dsym: params[:dsym], mapping: params[:mapping], prefix_schema: params[:prefix_schema], app_identifier: params[:app_identifier], app_version: params[:app_version], build_number: params[:build_number], binary_size: params[:binary_size], release_notes: params[:release_notes], releaser: params[:releaser], environment: params[:environment] } validate(platform, options) config = get_config(platform, options) client = Shuttle::Client.new(base_url(params[:environment]), params[:api_token]) notify(client, platform, config) upload(client, platform, config) UI.success("Successfully uploaded to #{params[:app_identifier]} #{params[:app_version]}.#{params[:build_number]} to Shuttle") Fastlane::Polidea.session.action_completed("shuttle") end
upload(client, platform, params)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 193 def self.upload(client, platform, params) case platform when :ios upload_urls = client.get_upload_urls(platform, params[:app_identifier], params[:prefix_schema]) upload_build_url = upload_urls['buildUrl'] self.upload_file(upload_build_url, params[:ipa]) UI.success("Successfully uploaded ipa file") if params[:dsym] upload_dsym_url = upload_urls['debugFileUrl'] self.upload_file(upload_dsym_url, params[:dsym]) UI.success("Successfully uploaded dsym file") end when :android upload_urls = client.get_upload_urls(platform, params[:app_identifier], params[:build_number]) upload_build_url = upload_urls['buildUrl'] self.upload_file(upload_build_url, params[:apk]) UI.success("Successfully uploaded apk file") if params[:mapping] upload_mapping_file_url = upload_urls['debugFileUrl'] self.upload_file(upload_mapping_file_url, params[:mapping]) UI.success("Successfully uploaded mapping file") end end end
upload_file(url, build)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 218 def self.upload_file(url, build) client = S3::Client.new client.upload_file(url, build) end
validate(platform, params)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 129 def self.validate(platform, params) case platform when :ios url_scheme = params[:prefix_schema] UI.user_error!("No prefix scheme given. Make sure `add_prefix_schema` action succeded before build action") if url_scheme.nil? ipa = params[:ipa] UI.user_error!("No .ipa file path given. Make sure `gym` action succeded") if ipa.nil? when :android apk = params[:apk] UI.user_error!("No .apk file path given. Make sure `gradle` action succeded") if apk.nil? end end
Private Class Methods
base_url(environment)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 223 def self.base_url(environment) case environment when :production "https://shuttle.polidea.com" when :testing "https://shuttle-testing.polidea.com" end end
notify(client, platform, params)
click to toggle source
# File lib/fastlane/plugin/polidea/actions/shuttle.rb, line 178 def self.notify(client, platform, params) build = { version: params[:app_version], releaseNotes: params[:release_notes], bytes: params[:binary_size], releaserEmail: params[:releaser] } build[:prefixSchema] = params[:prefix_schema] if platform == :ios build[:versionCode] = params[:build_number] if platform == :android client.create_build(platform, params[:app_identifier], build) end