Last active
November 18, 2019 09:03
-
-
Save fdb713/357e8625494a9b9c91cd9c1bf3074090 to your computer and use it in GitHub Desktop.
pgyer_action.rb with v2api
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
require 'faraday' | |
require 'faraday_middleware' | |
module Fastlane | |
module Actions | |
class PgyerAction < Action | |
def self.run(params) | |
UI.message("The pgyer plugin is working.") | |
api_host = "http://www.pgyer.com/apiv2/app/upload" | |
api_key = params[:api_key] | |
user_key = params[:user_key] | |
app_key = params[:app_key] | |
build_file = [ | |
params[:ipa], | |
params[:apk] | |
].detect { |e| !e.to_s.empty? } | |
if build_file.nil? | |
UI.user_error!("You have to provide a build file") | |
end | |
UI.message "build_file: #{build_file}" | |
update_description = params[:update_description] | |
if update_description.nil? | |
update_description = "" | |
end | |
install_type = params[:install_type] | |
if install_type.nil? | |
install_type = "3" | |
end | |
password = params[:password] | |
if password.nil? | |
password = "" | |
else | |
install_type = 2 | |
end | |
# start upload | |
conn_options = { | |
request: { | |
timeout: 1000, | |
open_timeout: 300 | |
} | |
} | |
pgyer_client = Faraday.new(nil, conn_options) do |c| | |
c.request :multipart | |
c.request :url_encoded | |
c.response :json, content_type: /\bjson$/ | |
c.adapter :net_http | |
end | |
params = { | |
'_api_key' => api_key, | |
'userKey' => user_key, | |
'appKey' => app_key, | |
'buildPassword' => password, | |
'buildUpdateDescription' => update_description, | |
'buildInstallType' => install_type, | |
'file' => Faraday::UploadIO.new(build_file, 'application/octet-stream') | |
} | |
UI.message "Start upload #{build_file} to pgyer..." | |
response = pgyer_client.post api_host, params | |
info = response.body | |
if info['code'] != 0 | |
UI.user_error!("PGYER Plugin Error: #{info['message']}") | |
end | |
UI.success "Upload success. Visit this URL to see: https://www.pgyer.com/#{info['data']['buildShortcutUrl']}" | |
end | |
def self.description | |
"distribute app to pgyer beta testing service" | |
end | |
def self.authors | |
["rexshi"] | |
end | |
def self.return_value | |
# If your method provides a return value, you can describe here what it does | |
end | |
def self.details | |
# Optional: | |
"distribute app to pgyer beta testing service" | |
end | |
def self.available_options | |
[ | |
FastlaneCore::ConfigItem.new(key: :api_key, | |
env_name: "PGYER_API_KEY", | |
description: "api_key in your pgyer account", | |
optional: false, | |
type: String), | |
FastlaneCore::ConfigItem.new(key: :user_key, | |
env_name: "PGYER_USER_KEY", | |
description: "user_key in your pgyer account", | |
optional: false, | |
type: String), | |
FastlaneCore::ConfigItem.new(key: :app_key, | |
env_name: "PGYER_APP_KEY", | |
description: "app_key in your pgyer account", | |
optional: false, | |
type: String), | |
FastlaneCore::ConfigItem.new(key: :apk, | |
env_name: "PGYER_APK", | |
description: "Path to your APK file", | |
default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH], | |
optional: true, | |
verify_block: proc do |value| | |
UI.user_error!("Couldn't find apk file at path '#{value}'") unless File.exist?(value) | |
end, | |
conflicting_options: [:ipa], | |
conflict_block: proc do |value| | |
UI.user_error!("You can't use 'apk' and '#{value.key}' options in one run") | |
end), | |
FastlaneCore::ConfigItem.new(key: :ipa, | |
env_name: "PGYER_IPA", | |
description: "Path to your IPA file. Optional if you use the _gym_ or _xcodebuild_ action. For Mac zip the .app. For Android provide path to .apk file", | |
default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH], | |
optional: true, | |
verify_block: proc do |value| | |
UI.user_error!("Couldn't find ipa file at path '#{value}'") unless File.exist?(value) | |
end, | |
conflicting_options: [:apk], | |
conflict_block: proc do |value| | |
UI.user_error!("You can't use 'ipa' and '#{value.key}' options in one run") | |
end), | |
FastlaneCore::ConfigItem.new(key: :password, | |
env_name: "PGYER_PASSWORD", | |
description: "set password to protect app", | |
optional: true, | |
type: String), | |
FastlaneCore::ConfigItem.new(key: :update_description, | |
env_name: "PGYER_UPDATE_DESCRIPTION", | |
description: "set update description for app", | |
optional: true, | |
type: String), | |
FastlaneCore::ConfigItem.new(key: :install_type, | |
env_name: "PGYER_INSTALL_TYPE", | |
description: "set install type for app (1=public, 2=password, 3=invite). Please set as a string", | |
optional: true, | |
type: String) | |
] | |
end | |
def self.is_supported?(platform) | |
# Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example) | |
# See: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md | |
# | |
[:ios, :mac, :android].include?(platform) | |
true | |
end | |
end | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment