fastlane-plugin-pgyer_upload_v2 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 3f65ef31bb3b300f505414b60024b10e0010f77828b5ceee78e09f92e30da7dd
4
+ data.tar.gz: a8c64705439b088df7bcb9e7a381f40ecc9aa8e40a5680e9651dac3b1a9893a2
5
+ SHA512:
6
+ metadata.gz: 037fd5a6f7b47470a2541f612bd468676ec92707896708629ac7f3824678c5b5f17d221f3c37eba4fb89618eb6e593d7caba852327d5851843a9dea25193ac8d
7
+ data.tar.gz: ae59559046158be5bc206abe70ce5ae0a254832ee60c60edece5a58290fb035e5bca880c20de5af0e3e761f2077d9e4d5c92ac760f7adc26989cb1138dcf1100
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2021 gongjiahao <gongjiahao@360.cn>
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # pgyer_upload_v2 plugin
2
+
3
+ [![fastlane Plugin Badge](https://rawcdn.githack.com/fastlane/fastlane/master/fastlane/assets/plugin-badge.svg)](https://rubygems.org/gems/fastlane-plugin-pgyer_upload_v2)
4
+
5
+ ## Getting Started
6
+
7
+ This project is a [_fastlane_](https://github.com/fastlane/fastlane) plugin. To get started with `fastlane-plugin-pgyer_upload_v2`, add it to your project by running:
8
+
9
+ ```bash
10
+ fastlane add_plugin pgyer_upload_v2
11
+ ```
12
+
13
+ ## About pgyer_upload_v2
14
+
15
+ distribute app to pgyer by API V2
16
+
17
+ **Note to author:** Add a more detailed description about this plugin here. If your plugin contains multiple actions, make sure to mention them here.
18
+
19
+ ## Example
20
+
21
+ Check out the [example `Fastfile`](fastlane/Fastfile) to see how to use this plugin. Try it by cloning the repo, running `fastlane install_plugins` and `bundle exec fastlane test`.
22
+
23
+ Just specify the `api_key` and `user_key` associated with your pgyer account.
24
+
25
+ ```
26
+ lane :beta do
27
+ gym
28
+ pgyer_upload_v2(api_key: "7f15xxxxxxxxxxxxxxxxxx141")
29
+ end
30
+ ```
31
+
32
+ You can also set a password to protect the App from being downloaded publicly:
33
+
34
+ ```
35
+ lane :beta do
36
+ gym
37
+ pgyer_upload_v2(api_key: "7f15xxxxxxxxxxxxxxxxxx141", buildPassword: "123456", buildUpdateDescription: "2")
38
+ end
39
+ ```
40
+
41
+ Set a version update description for App:
42
+
43
+ ```
44
+ lane :beta do
45
+ gym
46
+ pgyer_upload_v2(api_key: "7f15xxxxxxxxxxxxxxxxxx141", buildUpdateDescription: "update by fastlane")
47
+ end
48
+ ```
49
+
50
+ **Note to author:** Please set up a sample project to make it easy for users to explore what your plugin does. Provide everything that is necessary to try out the plugin in this project (including a sample Xcode/Android project if necessary)
51
+
52
+ ## Run tests for this plugin
53
+
54
+ To run both the tests, and code style validation, run
55
+
56
+ ```
57
+ rake
58
+ ```
59
+
60
+ To automatically fix many of the styling issues, use
61
+ ```
62
+ rubocop -a
63
+ ```
64
+
65
+ ## Issues and Feedback
66
+
67
+ For any other issues and feedback about this plugin, please submit it to this repository.
68
+
69
+ ## Troubleshooting
70
+
71
+ If you have trouble using plugins, check out the [Plugins Troubleshooting](https://docs.fastlane.tools/plugins/plugins-troubleshooting/) guide.
72
+
73
+ ## Using _fastlane_ Plugins
74
+
75
+ For more information about how the `fastlane` plugin system works, check out the [Plugins documentation](https://docs.fastlane.tools/plugins/create-plugin/).
76
+
77
+ ## About _fastlane_
78
+
79
+ _fastlane_ is the easiest way to automate beta deployments and releases for your iOS and Android apps. To learn more, check out [fastlane.tools](https://fastlane.tools).
@@ -0,0 +1,249 @@
1
+ require 'fastlane/action'
2
+ require_relative '../helper/pgyer_upload_v2_helper'
3
+
4
+ require 'faraday'
5
+ require 'faraday_middleware'
6
+
7
+ module Fastlane
8
+ module Actions
9
+ class PgyerUploadV2Action < Action
10
+ def self.run(params)
11
+ # fastlane will take care of reading in the parameter and fetching the environment variable:
12
+ # UI.message "Parameter API Token: #{params[:api_token]}"
13
+ UI.message("The PgyerUploadV2 Action is working.")
14
+
15
+ api_host = "https://www.pgyer.com/apiv2/app/upload"
16
+ api_key = params[:api_key]
17
+ # sh "shellcommand ./path"
18
+ build_file = [
19
+ params[:ipa],
20
+ params[:apk]
21
+ ].detect { |e| !e.to_s.empty? }
22
+
23
+ if build_file.nil?
24
+ UI.user_error!("You have to provide a build file")
25
+ end
26
+
27
+ UI.message "build_file: #{build_file}"
28
+
29
+ buildPassword = params[:buildPassword]
30
+ if buildPassword.nil?
31
+ buildPassword = ""
32
+ end
33
+
34
+ buildUpdateDescription = params[:buildUpdateDescription]
35
+ if buildUpdateDescription.nil?
36
+ buildUpdateDescription = "PgyerSecond Action Default build_Update_Description "
37
+ end
38
+
39
+ buildInstallType = params[:buildInstallType]
40
+ if buildInstallType.nil?
41
+ buildInstallType = "1"
42
+ end
43
+ buildChannelShortcut = params[:buildChannelShortcut]
44
+
45
+ # start upload
46
+ conn_options = {
47
+ request: {
48
+ timeout: 1000,
49
+ open_timeout: 300
50
+ }
51
+ }
52
+
53
+ pgyer_client = Faraday.new(nil, conn_options) do |c|
54
+ c.request :multipart
55
+ c.request :url_encoded
56
+ c.response :json, content_type: /\bjson$/
57
+ c.adapter :net_http
58
+ end
59
+
60
+ params = {
61
+ '_api_key' => api_key,
62
+ 'buildPassword' => buildPassword,
63
+ 'buildUpdateDescription' => buildUpdateDescription,
64
+ 'buildInstallType' => buildInstallType,
65
+ 'buildChannelShortcut' => buildChannelShortcut,
66
+ 'file' => Faraday::UploadIO.new(build_file, 'application/octet-stream')
67
+ }
68
+
69
+
70
+ if buildChannelShortcut.nil?
71
+ # UI.message "🚑️🚑️ the buildChannelShortcut => #{buildChannelShortcut} 为nil 将其delete 🚑️🚑️🚑️"
72
+ params.delete('buildChannelShortcut')
73
+ else
74
+ UI.message "🚧 🚧🚧🚧 the buildChannelShortcut #{buildChannelShortcut}🚧🚧🚧🚧" # 也可以动态添加 params.store("buildChannelShortcut", buildChannelShortcut)
75
+ end
76
+
77
+ UI.message "Start upload #{build_file} to pgyer by APIV2..."
78
+ # UI.message "🚀 🚀 Start upload #{params} to pgyer by APIV2...🚀"
79
+
80
+ response = pgyer_client.post api_host, params
81
+ info = response.body
82
+
83
+ if info['code'] != 0
84
+ UI.user_error!("PGYER Plugin Error: #{info['message']}")
85
+ end
86
+
87
+ UI.success "Upload success. Visit this URL to see: https://www.pgyer.com/#{info['data']['buildShortcutUrl']}"
88
+ # Actions.lane_context[SharedValues::PGYER_V2_CUSTOM_VALUE] = "my_val"
89
+ end
90
+
91
+ #####################################################
92
+ # @!group Documentation
93
+ #####################################################
94
+
95
+ def self.description
96
+ "distribute app to pgyer_upload_v2 beta testing service"
97
+ end
98
+
99
+ def self.details
100
+ # Optional:
101
+ # this is your chance to provide a more detailed description of this action
102
+ "distribute app to pgyer_upload__v2 by API V2 beta testing service."
103
+ end
104
+
105
+ def self.available_options
106
+ # Define all options your action supports.
107
+
108
+ # Below a few examples
109
+ [
110
+ FastlaneCore::ConfigItem.new(key: :api_key,
111
+ env_name: "FL_PGYER_UPLOAD_V2_API_KEY",
112
+ description: "api_key in your pgyer account",
113
+ optional: false,
114
+ type: String),
115
+ FastlaneCore::ConfigItem.new(key: :apk,
116
+ env_name: "FL_PGYER_UPLOAD_V2_APK",
117
+ description: "Path to your APK file",
118
+ default_value: Actions.lane_context[SharedValues::GRADLE_APK_OUTPUT_PATH],
119
+ optional: true,
120
+ verify_block: proc do |value|
121
+ UI.user_error!("Couldn't find apk file at path '#{value}'") unless File.exist?(value)
122
+ end,
123
+ conflicting_options: [:ipa],
124
+ conflict_block: proc do |value|
125
+ UI.user_error!("You can't use 'apk' and '#{value.key}' options in one run")
126
+ end),
127
+ FastlaneCore::ConfigItem.new(key: :ipa,
128
+ env_name: "FL_PGYER_UPLOAD_V2_IPA",
129
+ 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",
130
+ default_value: Actions.lane_context[SharedValues::IPA_OUTPUT_PATH],
131
+ optional: true,
132
+ verify_block: proc do |value|
133
+ UI.user_error!("Couldn't find ipa file at path '#{value}'") unless File.exist?(value)
134
+ end,
135
+ conflicting_options: [:apk],
136
+ conflict_block: proc do |value|
137
+ UI.user_error!("You can't use 'ipa' and '#{value.key}' options in one run")
138
+ end),
139
+ FastlaneCore::ConfigItem.new(key: :buildPassword,
140
+ env_name: "FL_PGYER_UPLOAD_V2_BUILD_Password",
141
+ description: "set buildPassword to protect app",
142
+ optional: true,
143
+ type: String),
144
+ FastlaneCore::ConfigItem.new(key: :buildUpdateDescription,
145
+ env_name: "FL_PGYER_UPLOAD_V2_BUILD_UPDATE_DESCRIPTION",
146
+ description: "set update description for app",
147
+ optional: true,
148
+ type: String),
149
+ FastlaneCore::ConfigItem.new(key: :buildInstallType,
150
+ env_name: "FL_PGYER_UPLOAD_V2_BUILD_INSTALL_TYPE",
151
+ description: "set install type for app (1=public, 2=password, 3=invite). Please set as a string",
152
+ optional: true,
153
+ type: String),
154
+ FastlaneCore::ConfigItem.new(key: :buildChannelShortcut,
155
+ env_name: "FL_PGYER_UPLOAD_V2_BUILD_CHANNEL_SHORTCUT",
156
+ description: "set the download short link of designated channel. MUST Sure the channel exsit ",
157
+ optional: true,
158
+ type: String)
159
+
160
+
161
+ # FastlaneCore::ConfigItem.new(key: :api_token,
162
+ # env_name: "FL_PGYER_UPLOAD_V2_API_TOKEN", # The name of the environment variable
163
+ # description: "API Token for PgyerV2Action", # a short description of this parameter
164
+ # verify_block: proc do |value|
165
+ # UI.user_error!("No API token for PgyerV2Action given, pass using `api_token: 'token'`") unless (value and not value.empty?)
166
+ # # UI.user_error!("Couldn't find file at path '#{value}'") unless File.exist?(value)
167
+ # end),
168
+ # FastlaneCore::ConfigItem.new(key: :development,
169
+ # env_name: "FL_PGYER_UPLOAD_V2_DEVELOPMENT",
170
+ # description: "Create a development certificate instead of a distribution one",
171
+ # is_string: false, # true: verifies the input is a string, false: every kind of value
172
+ # default_value: false) # the default value if the user didn't provide one
173
+ ]
174
+ end
175
+
176
+ # def self.output
177
+ # # Define the shared values you are going to provide
178
+ # # Example
179
+ # [
180
+ # ['PGYER_V2_CUSTOM_VALUE', 'A description of what this value contains']
181
+ # ]
182
+ # end
183
+
184
+ def self.return_value
185
+ # If your method provides a return value, you can describe here what it does
186
+ end
187
+
188
+ def self.authors
189
+ # So no one will ever forget your contribution to fastlane :) You are awesome btw!
190
+ ["Jiahao"]
191
+ end
192
+
193
+ def self.is_supported?(platform)
194
+ # you can do things like
195
+ #
196
+ # true
197
+ #
198
+ # platform == :ios
199
+ #
200
+ # [:ios, :mac].include?(platform)
201
+ #
202
+
203
+ [:ios, :mac, :android].include?(platform)
204
+ true
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ # class PgyerUploadV2Action < Action
211
+ # def self.run(params)
212
+ # UI.message("The pgyer_upload_v2 plugin is working!")
213
+ # end
214
+
215
+ # def self.description
216
+ # "distribute app to pgyer by API V2"
217
+ # end
218
+
219
+ # def self.authors
220
+ # ["gongjiahao"]
221
+ # end
222
+
223
+ # def self.return_value
224
+ # # If your method provides a return value, you can describe here what it does
225
+ # end
226
+
227
+ # def self.details
228
+ # # Optional:
229
+ # "distribute app to pgyer by API V2 beta testing service"
230
+ # end
231
+
232
+ # def self.available_options
233
+ # [
234
+ # # FastlaneCore::ConfigItem.new(key: :your_option,
235
+ # # env_name: "PGYER_UPLOAD_V2_YOUR_OPTION",
236
+ # # description: "A description of your option",
237
+ # # optional: false,
238
+ # # type: String)
239
+ # ]
240
+ # end
241
+
242
+ # def self.is_supported?(platform)
243
+ # # Adjust this if your plugin only works for a particular platform (iOS vs. Android, for example)
244
+ # # See: https://docs.fastlane.tools/advanced/#control-configuration-by-lane-and-by-platform
245
+ # #
246
+ # [:ios, :mac, :android].include?(platform)
247
+ # true
248
+ # end
249
+ # end
@@ -0,0 +1,16 @@
1
+ require 'fastlane_core/ui/ui'
2
+
3
+ module Fastlane
4
+ UI = FastlaneCore::UI unless Fastlane.const_defined?("UI")
5
+
6
+ module Helper
7
+ class PgyerUploadV2Helper
8
+ # class methods that you define here become available in your action
9
+ # as `Helper::PgyerUploadV2Helper.your_method`
10
+ #
11
+ def self.show_message
12
+ UI.message("Hello from the pgyer_upload_v2 plugin helper!")
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,5 @@
1
+ module Fastlane
2
+ module PgyerUploadV2
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,16 @@
1
+ require 'fastlane/plugin/pgyer_upload_v2/version'
2
+
3
+ module Fastlane
4
+ module PgyerUploadV2
5
+ # Return all .rb files inside the "actions" and "helper" directory
6
+ def self.all_classes
7
+ Dir[File.expand_path('**/{actions,helper}/*.rb', File.dirname(__FILE__))]
8
+ end
9
+ end
10
+ end
11
+
12
+ # By default we want to import all available actions and helpers
13
+ # A plugin can contain any number of actions and plugins
14
+ Fastlane::PgyerUploadV2.all_classes.each do |current|
15
+ require current
16
+ end
metadata ADDED
@@ -0,0 +1,188 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fastlane-plugin-pgyer_upload_v2
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - jiahao
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2021-09-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: fastlane
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.9.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.9.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: pry
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec_junit_formatter
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '='
102
+ - !ruby/object:Gem::Version
103
+ version: 1.12.1
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - '='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.12.1
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-performance
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: rubocop-require_tools
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: simplecov
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description:
154
+ email: jiahao@ashine.tk
155
+ executables: []
156
+ extensions: []
157
+ extra_rdoc_files: []
158
+ files:
159
+ - LICENSE
160
+ - README.md
161
+ - lib/fastlane/plugin/pgyer_upload_v2.rb
162
+ - lib/fastlane/plugin/pgyer_upload_v2/actions/pgyer_upload_v2_action.rb
163
+ - lib/fastlane/plugin/pgyer_upload_v2/helper/pgyer_upload_v2_helper.rb
164
+ - lib/fastlane/plugin/pgyer_upload_v2/version.rb
165
+ homepage: https://github.com/JiaHaoGong/fastlane-plugin-pgyer_upload_v2.git
166
+ licenses:
167
+ - MIT
168
+ metadata: {}
169
+ post_install_message:
170
+ rdoc_options: []
171
+ require_paths:
172
+ - lib
173
+ required_ruby_version: !ruby/object:Gem::Requirement
174
+ requirements:
175
+ - - ">="
176
+ - !ruby/object:Gem::Version
177
+ version: '2.5'
178
+ required_rubygems_version: !ruby/object:Gem::Requirement
179
+ requirements:
180
+ - - ">="
181
+ - !ruby/object:Gem::Version
182
+ version: '0'
183
+ requirements: []
184
+ rubygems_version: 3.2.22
185
+ signing_key:
186
+ specification_version: 4
187
+ summary: distribute app to pgyer by API V2
188
+ test_files: []