fir-cli 2.0.14 → 2.0.18
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +2 -1
- data/README.md +5 -0
- data/doc/publish.md +2 -1
- data/fir-cli.gemspec +3 -22
- data/lib/fir/api.yml +5 -5
- data/lib/fir/cli.rb +1 -0
- data/lib/fir/patches/progress.rb +42 -0
- data/lib/fir/patches.rb +1 -0
- data/lib/fir/util/ali_uploader.rb +39 -10
- data/lib/fir/util/feishu_helper.rb +2 -2
- data/lib/fir/version.rb +1 -1
- metadata +9 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e15f62a0f7b559dac0e47d7aa637df6de1f267b950dc8d5c429f0539c0fd1f94
|
4
|
+
data.tar.gz: 8e42b4e2f0441651edd0871b8189b96fecfebbe068b6d5cd4408bc6e94d83137
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df855650a9ba20ebf25a5b24b80802868a65c8883349639afe73ffe16c2adb00ec42483dc9627f023bb035b7b5c0422f4db8a2bc9bc97086c6055fb2d22f0e2f
|
7
|
+
data.tar.gz: bb152238bbd5b95af55dd6d1109087872edbb18fda3396ba71260bc596ceb4309bf2ecb3136f7969d0e6b1af73457190358c1b315f7da1cb16e788b013818a64
|
data/.gitignore
CHANGED
data/README.md
CHANGED
@@ -15,8 +15,13 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
|
|
15
15
|
# 重大提醒
|
16
16
|
- fir.im 更换域名至 betaqr.com 后, 需要升级至 `fir-cli` >= `2.0.4` 有部分用户反馈 2.0.2 无法直接使用 `gem update fir-cli` 升级到 2.0.4, 则可以尝试卸载后重新安装, 即 `gem uninstall fir-cli` 后 `gem install fir-cli`
|
17
17
|
|
18
|
+
- 现也有一个go 版本的 go-fir-cli 供大家使用, 无需安装依赖, 可以直接使用. 具体请访问 [https://github.com/PGYER/go-fir-cli](https://github.com/PGYER/go-fir-cli). 注意! 该版本功能并不与fir-cli 完全重合.
|
18
19
|
|
19
20
|
# 最近更新
|
21
|
+
- (2.0.18) 修复域名导致的飞书发送失败的问题
|
22
|
+
- (2.0.17) 增加了上传百分比显示
|
23
|
+
- (2.0.16) 更新了 thor
|
24
|
+
- (2.0.15) 更换了 API 域名
|
20
25
|
- (2.0.14) 第三方通知加入了 app 类型, 第三方报错将忽略异常继续运行
|
21
26
|
- (2.0.13) 修正了企业微信通知的bug
|
22
27
|
- (2.0.12) 修复因为钉钉机器人不再支持base64导致无法显示二维码,另外开始支持钉钉加签方式的鉴权, 参数为 --dingtalk_secret
|
data/doc/publish.md
CHANGED
@@ -25,7 +25,8 @@ Options:
|
|
25
25
|
[--dingtalk-at-phones=DINGTALK_AT_PHONES] # 钉钉 at 某人手机号
|
26
26
|
[--dingtalk-at-all], [--no-dingtalk-at-all]
|
27
27
|
[--feishu-access-token=FEISHU_ACCESS_TOKEN] # 飞书的webhook 的access_token
|
28
|
-
[--feishu-custom-
|
28
|
+
[--feishu-custom-title=FEISHU_CUSTOM_TITLE] # 自定义飞书消息标题
|
29
|
+
[--feishu-custom-message=FEISHU_CUSTOM_MESSAGE] # 自定义飞书消息内容
|
29
30
|
[--wxwork-webhook=WXWORK_WEBHOOK] # 企业微信的 webhook 地址 (注意这里与 access_token 只需要填写一个参数即可)
|
30
31
|
[--wxwork-access-token=WXWORK_ACCESS_TOKEN] # 企业微信的 webhook access_token (注意这里与 access_token 只需要填写一个参数即可)
|
31
32
|
[--wxwork-custom-message=WXWORK_CUSTOM_MESSAGE] # 企业微信 的自定义消息
|
data/fir-cli.gemspec
CHANGED
@@ -26,29 +26,10 @@ Gem::Specification.new do |spec|
|
|
26
26
|
/ __/ _/ // _, _/_____/ /___/ /____/ /
|
27
27
|
/_/ /___/_/ |_| \____/_____/___/
|
28
28
|
|
29
|
-
##
|
30
|
-
- (2.0.14) 第三方通知加入了 app 类型, 第三方报错将不再直接报出异常
|
31
|
-
- (2.0.13) 修复了无法跳过企业微信通知逻辑的bug
|
32
|
-
- (2.0.12) 修复因为钉钉机器人不再支持base64导致无法显示二维码,另外开始支持钉钉加签方式的鉴权, 参数为 --dingtalk_secret
|
33
|
-
- (2.0.11) 兼容了 ruby 3.0 版本, 增加了环境变量FEISHU_TIMEOUT,可以多给飞书一些超时时间
|
34
|
-
- (2.0.10) 飞书支持了 V2 版本的机器人推送
|
35
|
-
- (2.0.9) publish 支持了 企业微信通知 可以使用 --wxwork_access_token 或 --wxwork_webhook, 增加了回调超时时间至20秒
|
36
|
-
- (2.0.8) publish 支持 飞书通知, 可使用 `feishu_access_token` 和 `feishu_custom_message`, 详情见 `fir publish --help`
|
37
|
-
- (2.0.7) 修复了提示 token 有问题的错误
|
38
|
-
- (2.0.6) 将校验文件是否存在提前
|
39
|
-
- (2.0.5) 更换了上传域名, 避免与 深信服的设备冲突
|
40
|
-
- (2.0.4) 修复了 cdn 不支持 patch 方法透传, 导致在修改 app 信息的时候返回的 400 错误
|
41
|
-
- (2.0.3) 增加 dingtalk_at_phones, 钉钉通知可 at 用户手机号, 以逗号,分割. 此命令需配合 `dingtalk_access_token` 使用
|
42
|
-
- (2.0.3) 增加 dingtalk_at_all, 钉钉通知可 at 所有人, 此命令需配合 `dingtalk_access_token` 使用
|
43
|
-
- (2.0.3) publish 增加海外加速参数 --oversea_turbo
|
44
|
-
- (2.0.2) 有限支持 aab 文件上传, 强依赖`bundletool`工具, 具体请参见参数 `--bundletool_jar_path` 和 `auto_download_bundletool_jar`
|
45
|
-
- (2.0.1) publish 支持 新参数 `specify_app_display_name`, 指定 app 显示名称
|
46
|
-
- (2.0.1) publish 支持 新参数 `need_ansi_qrcode`, 在控制台直接打印二维码, jenkins 用户可能需要使用 `AnsiColor Plugin` 插件配合
|
47
|
-
- (2.0.1) publish 支持 新参数 `dingtalk_custom_message`, 可以在钉钉通知里增加自定义消息, 此命令需配合 `dingtalk_access_token` 使用
|
48
|
-
- (2.0.1) publish 支持 新参数 `skip_fir_cli_feedback`, 可禁止 fir-cli 发送统计信息
|
49
|
-
- (2.0.0) publish 使用更快的存储商, 加速上传速度, 若感觉没以前可使用 switch_to_qiniu 恢复
|
29
|
+
##
|
50
30
|
- [fir-cli](https://github.com/firhq/fir-cli) 已经开源
|
51
31
|
- 欢迎 fork, issue 和 pull request
|
32
|
+
- 同时提供 go 版本的 fir-cli 二进制版本无依赖 [fir-cli-go](https://github.com/PGYER/go-fir-cli/releases)
|
52
33
|
)
|
53
34
|
|
54
35
|
spec.add_development_dependency 'bundler'
|
@@ -58,7 +39,7 @@ Gem::Specification.new do |spec|
|
|
58
39
|
spec.add_development_dependency 'pry', '~> 0.10'
|
59
40
|
|
60
41
|
spec.add_dependency 'admqr_knife', '~> 0.1.5'
|
61
|
-
spec.add_dependency 'thor', '~>
|
42
|
+
spec.add_dependency 'thor', '~> 1.2.1'
|
62
43
|
spec.add_dependency 'rest-client', '~> 2.0'
|
63
44
|
spec.add_dependency 'ruby_android_apk', '~> 0.7.7.1'
|
64
45
|
spec.add_dependency 'rqrcode', '~> 0.7'
|
data/lib/fir/api.yml
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
fir:
|
2
2
|
domain: 'http://www.betaqr.com'
|
3
|
-
base_url: 'http://
|
4
|
-
user_url: 'http://
|
5
|
-
user_feishu_access_token: 'http://
|
6
|
-
app_url: 'http://
|
7
|
-
udids_url: 'http://
|
3
|
+
base_url: 'http://api.appmeta.cn'
|
4
|
+
user_url: 'http://api.appmeta.cn/user'
|
5
|
+
user_feishu_access_token: 'http://api.appmeta.cn/user/fetch_feishu_v3_token'
|
6
|
+
app_url: 'http://api.appmeta.cn/apps'
|
7
|
+
udids_url: 'http://api.appmeta.cn/devices/multi_udid'
|
8
8
|
|
data/lib/fir/cli.rb
CHANGED
@@ -129,6 +129,7 @@ module FIR
|
|
129
129
|
method_option :dingtalk_secret, type: :string, desc: 'dingtalk bot secret code (eg: SEC********)'
|
130
130
|
|
131
131
|
method_option :feishu_access_token, type: :string, desc: 'Send msg to feishu, need access_token, not whole url'
|
132
|
+
method_option :feishu_custom_title, type: :string, desc: 'add custom title to feishu'
|
132
133
|
method_option :feishu_custom_message, type: :string, desc: 'add custom message to feishu'
|
133
134
|
|
134
135
|
method_option :wxwork_webhook, type: :string, desc: 'wxwork webhook url (optional)'
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'tempfile'
|
3
|
+
require 'securerandom'
|
4
|
+
|
5
|
+
class Net::HTTP::UploadProgress
|
6
|
+
attr_reader :upload_size
|
7
|
+
|
8
|
+
def initialize(req, &block)
|
9
|
+
@req = req
|
10
|
+
@callback = block
|
11
|
+
@upload_size = 0
|
12
|
+
if req.body_stream
|
13
|
+
@io = req.body_stream
|
14
|
+
req.body_stream = self
|
15
|
+
elsif req.instance_variable_get(:@body_data)
|
16
|
+
raise NotImplementedError if req.chunked?
|
17
|
+
raise NotImplementedError if /\Amultipart\/form-data\z/i !~ req.content_type
|
18
|
+
opt = req.instance_variable_get(:@form_option).dup
|
19
|
+
opt[:boundary] ||= SecureRandom.urlsafe_base64(40)
|
20
|
+
req.set_content_type(req.content_type, boundary: opt[:boundary])
|
21
|
+
file = Tempfile.new('multipart')
|
22
|
+
file.binmode
|
23
|
+
req.send(:encode_multipart_form_data, file, req.instance_variable_get(:@body_data), opt)
|
24
|
+
file.rewind
|
25
|
+
req.content_length = file.size
|
26
|
+
@io = file
|
27
|
+
req.body_stream = self
|
28
|
+
else
|
29
|
+
raise NotImplementedError
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def readpartial(maxlen, outbuf)
|
34
|
+
begin
|
35
|
+
str = @io.readpartial(maxlen, outbuf)
|
36
|
+
ensure
|
37
|
+
@callback.call(self) unless @upload_size.zero?
|
38
|
+
end
|
39
|
+
@upload_size += str.length
|
40
|
+
str
|
41
|
+
end
|
42
|
+
end
|
data/lib/fir/patches.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative './app_uploader'
|
4
|
-
|
4
|
+
|
5
5
|
|
6
6
|
module FIR
|
7
7
|
class AliUploader < AppUploader
|
@@ -16,7 +16,7 @@ module FIR
|
|
16
16
|
icon_info = uploading_icon_info
|
17
17
|
|
18
18
|
logger.debug "icon_url = #{icon_url}, icon_info = #{icon_info}"
|
19
|
-
put_file(icon_url, uploading_icon_info, uploading_info[:cert][:icon][:custom_headers])
|
19
|
+
put_file(icon_url, uploading_icon_info, uploading_info[:cert][:icon][:custom_headers], false)
|
20
20
|
callback_to_api(callback_url, callback_icon_information)
|
21
21
|
end
|
22
22
|
rescue StandardError => e
|
@@ -50,14 +50,43 @@ module FIR
|
|
50
50
|
|
51
51
|
protected
|
52
52
|
|
53
|
-
def put_file(url, file, headers)
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
53
|
+
def put_file(url, file, headers, need_progress = true)
|
54
|
+
|
55
|
+
uri = URI(url)
|
56
|
+
hostname = uri.hostname
|
57
|
+
|
58
|
+
|
59
|
+
File.open(file_path, 'rb') do |io|
|
60
|
+
t = Time.now
|
61
|
+
http = Net::HTTP.new(hostname, 443)
|
62
|
+
http.use_ssl = true
|
63
|
+
req = Net::HTTP::Put.new(uri.request_uri, headers)
|
64
|
+
req.content_length = io.size
|
65
|
+
req.body_stream = io
|
66
|
+
Net::HTTP::UploadProgress.new(req) do |progress|
|
67
|
+
if need_progress
|
68
|
+
if progress.upload_size == io.size
|
69
|
+
puts "upload finished"
|
70
|
+
else
|
71
|
+
if Time.now - t > 0.5
|
72
|
+
puts "progress: #{ ((progress.upload_size / io.size.to_f) * 100).round(2) }%"
|
73
|
+
t = Time.now
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
res = http.request(req)
|
79
|
+
end
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
# RestClient::Request.execute(
|
84
|
+
# method: 'PUT',
|
85
|
+
# url: url,
|
86
|
+
# payload: file,
|
87
|
+
# headers: headers,
|
88
|
+
# timeout: 300
|
89
|
+
# )
|
61
90
|
end
|
62
91
|
|
63
92
|
def callback_url
|
@@ -45,7 +45,7 @@ class FeishuHelper
|
|
45
45
|
content: {
|
46
46
|
post: {
|
47
47
|
zh_cn: {
|
48
|
-
title: title,
|
48
|
+
title: options[:feishu_custom_title] ? options[:feishu_custom_title] : title,
|
49
49
|
content: [build_info_tags, [build_image_tag]]
|
50
50
|
}
|
51
51
|
}
|
@@ -78,7 +78,7 @@ class FeishuHelper
|
|
78
78
|
end
|
79
79
|
|
80
80
|
def fetch_image_access_token
|
81
|
-
answer = DefaultRest.post(fir_api[:
|
81
|
+
answer = DefaultRest.post(fir_api[:user_feishu_access_token] || 'http://api.appmeta.cn/user/fetch_feishu_v3_token', {})
|
82
82
|
answer[:feishu_v3_token]
|
83
83
|
end
|
84
84
|
|
data/lib/fir/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fir-cli
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NaixSpirit
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2023-03-09 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -87,14 +87,14 @@ dependencies:
|
|
87
87
|
requirements:
|
88
88
|
- - "~>"
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 1.2.1
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
95
|
- - "~>"
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 1.2.1
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: rest-client
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -224,6 +224,7 @@ files:
|
|
224
224
|
- lib/fir/patches/instance_variables.rb
|
225
225
|
- lib/fir/patches/native_patch.rb
|
226
226
|
- lib/fir/patches/os_patch.rb
|
227
|
+
- lib/fir/patches/progress.rb
|
227
228
|
- lib/fir/patches/try.rb
|
228
229
|
- lib/fir/util.rb
|
229
230
|
- lib/fir/util/ali_uploader.rb
|
@@ -271,24 +272,9 @@ metadata: {}
|
|
271
272
|
post_install_message: "\n ______________ ________ ____\n /
|
272
273
|
____/ _/ __ \\ / ____/ / / _/\n / /_ / // /_/ /_____/ / / / /
|
273
274
|
/\n / __/ _/ // _, _/_____/ /___/ /____/ /\n /_/ /___/_/ |_| \\____/_____/___/\n\n
|
274
|
-
\
|
275
|
-
\ - (
|
276
|
-
\
|
277
|
-
V2 版本的机器人推送\n - (2.0.9) publish 支持了 企业微信通知 可以使用 --wxwork_access_token 或 --wxwork_webhook,
|
278
|
-
增加了回调超时时间至20秒\n - (2.0.8) publish 支持 飞书通知, 可使用 `feishu_access_token` 和 `feishu_custom_message`,
|
279
|
-
详情见 `fir publish --help`\n - (2.0.7) 修复了提示 token 有问题的错误\n - (2.0.6) 将校验文件是否存在提前\n
|
280
|
-
\ - (2.0.5) 更换了上传域名, 避免与 深信服的设备冲突\n - (2.0.4) 修复了 cdn 不支持 patch 方法透传, 导致在修改 app
|
281
|
-
信息的时候返回的 400 错误\n - (2.0.3) 增加 dingtalk_at_phones, 钉钉通知可 at 用户手机号, 以逗号,分割. 此命令需配合
|
282
|
-
`dingtalk_access_token` 使用\n - (2.0.3) 增加 dingtalk_at_all, 钉钉通知可 at 所有人, 此命令需配合
|
283
|
-
`dingtalk_access_token` 使用\n - (2.0.3) publish 增加海外加速参数 --oversea_turbo\n - (2.0.2)
|
284
|
-
有限支持 aab 文件上传, 强依赖`bundletool`工具, 具体请参见参数 `--bundletool_jar_path` 和 `auto_download_bundletool_jar`\n
|
285
|
-
\ - (2.0.1) publish 支持 新参数 `specify_app_display_name`, 指定 app 显示名称\n - (2.0.1)
|
286
|
-
publish 支持 新参数 `need_ansi_qrcode`, 在控制台直接打印二维码, jenkins 用户可能需要使用 `AnsiColor Plugin`
|
287
|
-
插件配合\n - (2.0.1) publish 支持 新参数 `dingtalk_custom_message`, 可以在钉钉通知里增加自定义消息, 此命令需配合
|
288
|
-
`dingtalk_access_token` 使用\n - (2.0.1) publish 支持 新参数 `skip_fir_cli_feedback`,
|
289
|
-
可禁止 fir-cli 发送统计信息\n - (2.0.0) publish 使用更快的存储商, 加速上传速度, 若感觉没以前可使用 switch_to_qiniu
|
290
|
-
恢复\n - [fir-cli](https://github.com/firhq/fir-cli) 已经开源\n - 欢迎 fork, issue 和 pull
|
291
|
-
request\n "
|
275
|
+
\ ##\n - [fir-cli](https://github.com/firhq/fir-cli) 已经开源\n - 欢迎 fork, issue 和
|
276
|
+
pull request\n - 同时提供 go 版本的 fir-cli 二进制版本无依赖 [fir-cli-go](https://github.com/PGYER/go-fir-cli/releases)\n
|
277
|
+
\ "
|
292
278
|
rdoc_options: []
|
293
279
|
require_paths:
|
294
280
|
- lib
|
@@ -303,7 +289,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
303
289
|
- !ruby/object:Gem::Version
|
304
290
|
version: '0'
|
305
291
|
requirements: []
|
306
|
-
rubygems_version: 3.
|
292
|
+
rubygems_version: 3.4.1
|
307
293
|
signing_key:
|
308
294
|
specification_version: 4
|
309
295
|
summary: fir.im command tool
|