fir-cli 2.0.5 → 2.0.10
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +41 -14
- data/doc/publish.md +45 -22
- data/fir-cli.gemspec +6 -0
- data/lib/fir/api.yml +1 -0
- data/lib/fir/cli.rb +8 -0
- data/lib/fir/util.rb +1 -1
- data/lib/fir/util/app_uploader.rb +10 -3
- data/lib/fir/util/feishu_helper.rb +94 -0
- data/lib/fir/util/publish.rb +36 -7
- data/lib/fir/version.rb +1 -1
- metadata +20 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5acdeeb7784c5b2236e79e1831fc58a1fb0590ec8297eaf958e78a9c19c1274a
|
4
|
+
data.tar.gz: 7941c08d66ca7fc14fc273ca4ed66033e23995103d6dceb754bf58b7240bba3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8f0919f278f6be3e872c176065097b9a5b406e441c529bdfed2b06825f0b027c8ed44d165ea11f66d4cf80afa210395f1ac3cf3909aeb326b76cc4a919694a79
|
7
|
+
data.tar.gz: ff1b2ff17df4b917759a600ac1932af2d9412117570efab0c6624f9e70a2e250d66f550db9e6695a0a7109ecc407ced75976d9384381f753c076bca65e292cb7
|
data/README.md
CHANGED
@@ -13,11 +13,15 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
|
|
13
13
|
![fir-cli](http://7rf35s.com1.z0.glb.clouddn.com/fir-cli-new.gif)
|
14
14
|
|
15
15
|
# 重大提醒
|
16
|
-
- fir.im 更换域名后, 需要升级至 fir-cli >=2.0.4 有部分用户反馈 2.0.2
|
17
|
-
|
18
|
-
` 我们也会临时切换 fir-cli version 2.0.5 的 api 地址
|
16
|
+
- fir.im 更换域名后, 需要升级至 `fir-cli` >= `2.0.4` 有部分用户反馈 2.0.2 无法直接使用 `gem update fir-cli` 升级到 2.0.4, 则可以尝试卸载后重新安装, 即 `gem uninstall fir-cli` 后 `gem install fir-cli`
|
17
|
+
|
19
18
|
|
20
19
|
# 最近更新
|
20
|
+
- (2.0.10) 飞书支持了 V2 版本的机器人推送
|
21
|
+
- (2.0.9) publish 支持了 企业微信通知 可以使用 --wxwork_access_token 或 --wxwork_webhook, 增加了回调超时时间至20秒
|
22
|
+
- (2.0.8) publish 支持 飞书通知, 可使用 `feishu_access_token` 和 `feishu_custom_message`, 详情见 `fir publish --help`
|
23
|
+
- (2.0.7) 修复了提示 token 错误的问题
|
24
|
+
- (2.0.6) 修复了因为文件读取方式变化而导致的文件找不到不报错的问题
|
21
25
|
- (2.0.5) 因为深信服 的黑名单误判, 将 api 切换到了备用域名
|
22
26
|
- (2.0.4) 修复了 cdn 不支持 patch 方法透传, 导致在修改 app 信息的时候返回的 400 错误
|
23
27
|
- (2.0.3.3) 试图打印出错的body内容
|
@@ -43,24 +47,49 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
|
|
43
47
|
|
44
48
|
## 热门问题
|
45
49
|
|
50
|
+
### 啥是 钉钉 / 企业微信 / 飞书 的 `access_token` ?
|
51
|
+
|
52
|
+
就是回调地址中的长得最像 access_token 的东西
|
53
|
+
|
54
|
+
```
|
55
|
+
钉钉: https://oapi.dingtalk.com/robot/send?access_token=xxxxx
|
56
|
+
就是 xxx 那部分
|
57
|
+
|
58
|
+
企业微信: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxxx-xxxx-xxxx-xxxx-xxxxx
|
59
|
+
就是 xxxxx-xxxx-xxxx-xxxx-xxxxx 那部分
|
60
|
+
|
61
|
+
https://open.feishu.cn/open-apis/bot/hook/xxxxxxxxxxxxxxxxxxx
|
62
|
+
|
63
|
+
就是 xxxxxxxxxxxxxxxx 那部分
|
64
|
+
|
65
|
+
```
|
66
|
+
|
67
|
+
|
68
|
+
|
69
|
+
|
70
|
+
|
46
71
|
### 如何配合 jenkins 使用?
|
47
72
|
|
48
73
|
参见 blog [http://blog.betaqr.com/use-fir-cli-in-jenkins/](http://blog.betaqr.com/use-fir-cli-in-jenkins/)
|
49
74
|
|
50
|
-
|
75
|
+
这里有个快速检查脚本, 可以在 jenkins 中新建一个 脚本, 进行检查
|
51
76
|
|
52
|
-
|
77
|
+
```
|
78
|
+
#!/bin/bash --login
|
53
79
|
|
80
|
+
rvm list # 确保 rvm 正确安装, 如果直接通过系统安装ruby, 可以注释此行
|
81
|
+
ruby -v # 查看 ruby 的版本, 请确保大于 2.4.0
|
82
|
+
gem install fir-cli # 现场安装fir-cli , 如果安装过, 则会略过
|
83
|
+
fir -v # 查看 fir-cli 的版本
|
54
84
|
|
55
|
-
|
85
|
+
# 在这里执行 fir publish xxxxx
|
86
|
+
```
|
56
87
|
|
57
88
|
|
89
|
+
### 在 Circle CI, Travis CI 或 Github Actions 等境外服务上, 有概率超时, 能否解决?
|
58
90
|
|
59
|
-
|
91
|
+
2.0.3 版本 及其以上, 可以申请海外加速内测资格, 开启后可以使用海外加速上传 `--oversea_turbo`
|
60
92
|
|
61
|
-
1. 设置较长的超时时间 如 `FIR_TIMEOUT=300 fir publish xxxx`, 则可将超时时间设置为 300 秒.
|
62
|
-
2. 如果fir-cli 版本 >= 2.0.0, 也可在出现超时后, 使用 `--switch-to-qiniu` 来切换到我们的另外一条存储线路. 如 `fir publish xxxx.apk --switch-to-qiniu`, 多一条线路备选.
|
63
|
-
3. 如果确实对这方面服务要求很高, 则可购买我们的私有部署服务. 我们可以在 aws 上部署一套专供您使用, 具体情况可以与客服或者加我微信进行沟通.
|
64
93
|
|
65
94
|
更多细节请参考 [https://github.com/FIRHQ/fir-cli/issues/260](https://github.com/FIRHQ/fir-cli/issues/260)
|
66
95
|
|
@@ -138,10 +167,8 @@ docker run -e API_TOKEN=您的token -v 您的上传文件的目录的绝对路
|
|
138
167
|
## 特别感谢
|
139
168
|
|
140
169
|
- 感谢 sparkrico 提供修正的 https://github.com/sparkrico/ruby_apk 解决了 android 解析的问题
|
141
|
-
|
170
|
+
- 感谢 fabcz 同学对企业微信的通知的支持 https://github.com/FIRHQ/fir-cli/pull/277
|
142
171
|
|
143
172
|
## 鼓励维护
|
144
173
|
|
145
|
-
|
146
|
-
|
147
|
-
![luckin](luckin_coffee.png)
|
174
|
+
hia~ hia~ hia~
|
data/doc/publish.md
CHANGED
@@ -3,33 +3,56 @@
|
|
3
3
|
`fir publish` 命令用于可以发布应用到 fir.im, 支持 ipa 和 apk 文件.
|
4
4
|
|
5
5
|
```sh
|
6
|
-
$ fir publish --help
|
7
6
|
Usage:
|
8
7
|
fir publish APP_FILE_PATH
|
9
8
|
|
10
9
|
Options:
|
11
|
-
-s, [--short=SHORT]
|
12
|
-
-c, [--changelog=CHANGELOG]
|
13
|
-
-Q, [--qrcode], [--no-qrcode]
|
14
|
-
[--
|
15
|
-
|
16
|
-
-
|
17
|
-
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
-
|
10
|
+
-s, [--short=SHORT] # 设置short
|
11
|
+
-c, [--changelog=CHANGELOG] # 设置更新内容, 可是文件地址也可直接是内容
|
12
|
+
-Q, [--qrcode], [--no-qrcode] # 生成二维码图片在当前目录
|
13
|
+
[--need-ansi-qrcode], [--no-need-ansi-qrcode] #
|
14
|
+
-R, [--need-release-id], [--no-need-release-id] # 在下载地址中包含具体版本(警告, 每个app 最多保留30个版本, 超过后会失效最老的版本)
|
15
|
+
-H, [--force-pin-history], [--no-force-pin-history] # 将版本留在下载页(即在新版本上传后, 下面仍然有旧版本的二维码可以引导)
|
16
|
+
-S, [--skip-update-icon], [--no-skip-update-icon] # 跳过更新图标
|
17
|
+
[--specify-icon-file=SPECIFY_ICON_FILE] # 指定更新图标
|
18
|
+
[--skip-fir-cli-feedback], [--no-skip-fir-cli-feedback] # 跳过 用来做统计fir-cli的反馈(用于改进fir-cli)
|
19
|
+
[--specify-app-display-name=SPECIFY_APP_DISPLAY_NAME] # 指定app 名称
|
20
|
+
-N, [--switch-to-qiniu], [--no-switch-to-qiniu] # 切换到七牛线路上传(当上传较慢时, 可试试这个)
|
21
|
+
[--oversea-turbo], [--no-oversea-turbo] # 海外加速(需联系微信 atpking 开通)
|
22
|
+
-m, [--mappingfile=MAPPINGFILE] # mappingfile
|
23
|
+
-D, [--dingtalk-access-token=DINGTALK_ACCESS_TOKEN] # 上传完毕后 若发送至钉钉, 则填写钉钉的webhook 的access_token
|
24
|
+
[--dingtalk-custom-message=DINGTALK_CUSTOM_MESSAGE] # 自定义钉钉消息 (针对钉钉新版webhook 需要校验的时候, 可以做关键字)
|
25
|
+
[--dingtalk-at-phones=DINGTALK_AT_PHONES] # 钉钉 at 某人手机号
|
26
|
+
[--dingtalk-at-all], [--no-dingtalk-at-all]
|
27
|
+
[--feishu-access-token=FEISHU_ACCESS_TOKEN] # 飞书的webhook 的access_token
|
28
|
+
[--feishu-custom-message=FEISHU_CUSTOM_MESSAGE] # 自定义飞书消息
|
29
|
+
[--wxwork-webhook=WXWORK_WEBHOOK] # 企业微信的 webhook 地址 (注意这里与 access_token 只需要填写一个参数即可)
|
30
|
+
[--wxwork-access-token=WXWORK_ACCESS_TOKEN] # 企业微信的 webhook access_token (注意这里与 access_token 只需要填写一个参数即可)
|
31
|
+
[--wxwork-custom-message=WXWORK_CUSTOM_MESSAGE] # 企业微信 的自定义消息
|
32
|
+
[--wxwork-pic-url=WXWORK_PIC_URL] # 企业微信的图片链接, best size is 1068x455
|
33
|
+
[--open], [--no-open] # 是否下载可见, 默认open
|
34
|
+
[--password=PASSWORD] # 下载页面密码, 默认为空
|
35
|
+
[--bundletool-jar-path=BUNDLETOOL_JAR_PATH] # (beta) 上传AAB 文件的特殊指令: upload aab file command: to specify bundletool.jar if command bundletool can not run directly
|
36
|
+
[--auto-download-bundletool-jar], [--no-auto-download-bundletool-jar] # (beta) 上传AAB 文件的特殊指令: upload aab file command: would download bundletool when invoke bundletool failure
|
37
|
+
-T, [--token=TOKEN] # betaqr.com(fir.im) 账户的 API_TOKEN
|
38
|
+
-L, [--logfile=LOGFILE] # Path to writable logfile
|
39
|
+
-V, [--verbose], [--no-verbose] # Show verbose
|
40
|
+
# Default: true
|
41
|
+
-q, [--quiet], [--no-quiet] # Silence commands
|
42
|
+
-h, [--help], [--no-help] # Show this help message and quit
|
43
|
+
|
44
|
+
Description:
|
45
|
+
`publish` command will publish your app file to fir.im, also the command support to publish app's short & changelog.
|
46
|
+
|
47
|
+
Example:
|
48
|
+
|
49
|
+
$ fir p <app file path> [-c <changelog> -s <custom short link> -Q -T <your api token>]
|
50
|
+
|
51
|
+
$ fir p <app file path> [-c <changelog> -s <custom short link> --password=123456 --open=false -Q -T <your api token>]
|
52
|
+
|
53
|
+
$ fir p <app file path> [-c <changelog> -s <custom short link> -m <mapping file path> -P <bughd project id> -Q -T <your
|
54
|
+
api token>]
|
24
55
|
```
|
25
56
|
|
26
|
-
相关参数详解:
|
27
57
|
|
28
|
-
- `-s` 参数, 自定义发布后的短链接地址.
|
29
|
-
- `-c` 参数, 自定义发布时的 changelog, 支持字符串与文件两种方式, 即 `--changelog='this is changelog'` 和 `--changelog='/Users/fir-cli/changelog'`.
|
30
|
-
- `-Q` 参数, 是否生成发布后二维码, 默认为不生成, 加上 `-Q` 参数后会在当前目录生成一张二维码图片, 扫描该图片即可下载该应用.
|
31
|
-
- `-R` 参数, 显示具体版本, 会在发布结束后的下载地址中生成指定的版本
|
32
|
-
- `-D` 参数, 钉钉机器人的access_token, 填写后当上传完毕, 会发送至钉钉机器人
|
33
|
-
- `--open` 参数, 设置发布后的应用是否开放给所有人下载, 关闭开放使用 `--no-open` 参数.
|
34
|
-
- `--password` 参数, 设置发布后的应用密码
|
35
58
|
|
data/fir-cli.gemspec
CHANGED
@@ -27,6 +27,12 @@ Gem::Specification.new do |spec|
|
|
27
27
|
/_/ /___/_/ |_| \____/_____/___/
|
28
28
|
|
29
29
|
## 更新记录
|
30
|
+
- (2.0.10) 飞书支持了 V2 版本的机器人推送
|
31
|
+
- (2.0.9) publish 支持了 企业微信通知 可以使用 --wxwork_access_token 或 --wxwork_webhook, 增加了回调超时时间至20秒
|
32
|
+
- (2.0.8) publish 支持 飞书通知, 可使用 `feishu_access_token` 和 `feishu_custom_message`, 详情见 `fir publish --help`
|
33
|
+
- (2.0.7) 修复了提示 token 有问题的错误
|
34
|
+
- (2.0.6) 将校验文件是否存在提前
|
35
|
+
- (2.0.5) 更换了上传域名, 避免与 深信服的设备冲突
|
30
36
|
- (2.0.4) 修复了 cdn 不支持 patch 方法透传, 导致在修改 app 信息的时候返回的 400 错误
|
31
37
|
- (2.0.3) 增加 dingtalk_at_phones, 钉钉通知可 at 用户手机号, 以逗号,分割. 此命令需配合 `dingtalk_access_token` 使用
|
32
38
|
- (2.0.3) 增加 dingtalk_at_all, 钉钉通知可 at 所有人, 此命令需配合 `dingtalk_access_token` 使用
|
data/lib/fir/api.yml
CHANGED
@@ -2,6 +2,7 @@ fir:
|
|
2
2
|
domain: 'http://www.betaqr.com'
|
3
3
|
base_url: 'http://fir-api.admqr.com'
|
4
4
|
user_url: 'http://fir-api.admqr.com/user'
|
5
|
+
user_feishu_access_token: 'http://fir-api.admqr.com/user/fetch_feishu_v3_token'
|
5
6
|
app_url: 'http://fir-api.admqr.com/apps'
|
6
7
|
udids_url: 'http://fir-api.admqr.com/devices/multi_udid'
|
7
8
|
|
data/lib/fir/cli.rb
CHANGED
@@ -127,6 +127,14 @@ module FIR
|
|
127
127
|
method_option :dingtalk_at_phones, type: :string, desc: 'at some phones, split by , eg: 13111111111,13111111112'
|
128
128
|
method_option :dingtalk_at_all, type: :boolean, default: false
|
129
129
|
|
130
|
+
method_option :feishu_access_token, type: :string, desc: 'Send msg to feishu, need access_token, not whole url'
|
131
|
+
method_option :feishu_custom_message, type: :string, desc: 'add custom message to feishu'
|
132
|
+
|
133
|
+
method_option :wxwork_webhook, type: :string, desc: 'wxwork webhook url (optional)'
|
134
|
+
method_option :wxwork_access_token, type: :string, desc: 'Send msg to wxwork group, need group bot webhook, not whole url'
|
135
|
+
method_option :wxwork_custom_message, type: :string, desc: 'add custom message to wxwork group'
|
136
|
+
method_option :wxwork_pic_url, type: :string, desc: 'message background image, best size is 1068x455'
|
137
|
+
|
130
138
|
method_option :open, type: :boolean, desc: 'true/false if open for everyone'
|
131
139
|
method_option :password, type: :string, desc: 'Set password for app'
|
132
140
|
|
data/lib/fir/util.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FIR
|
2
4
|
class AppUploader
|
3
5
|
include ApiTools::DefaultRestModule
|
@@ -14,6 +16,8 @@ module FIR
|
|
14
16
|
def upload
|
15
17
|
upload_icon
|
16
18
|
binary_callback_info = upload_binary
|
19
|
+
raise binary_callback_info if binary_callback_info.is_a? StandardError
|
20
|
+
|
17
21
|
# 将 binary 的callback信息返回
|
18
22
|
binary_callback_info
|
19
23
|
end
|
@@ -21,9 +25,12 @@ module FIR
|
|
21
25
|
protected
|
22
26
|
|
23
27
|
def callback_to_api(callback_url, callback_binary_information)
|
28
|
+
logger.debug 'begin to callback api'
|
24
29
|
return if callback_binary_information.blank?
|
25
30
|
|
26
|
-
post callback_url, callback_binary_information
|
31
|
+
answer = post callback_url, callback_binary_information, timeout: 20
|
32
|
+
logger.debug 'callback api finished'
|
33
|
+
answer
|
27
34
|
end
|
28
35
|
|
29
36
|
def icon_file_path
|
@@ -74,6 +81,7 @@ module FIR
|
|
74
81
|
|
75
82
|
def callback_icon_information
|
76
83
|
return {} if icon_file_path.nil?
|
84
|
+
|
77
85
|
{
|
78
86
|
key: icon_cert[:key],
|
79
87
|
token: icon_cert[:token],
|
@@ -106,6 +114,5 @@ module FIR
|
|
106
114
|
def logger
|
107
115
|
FIR.logger
|
108
116
|
end
|
109
|
-
|
110
117
|
end
|
111
|
-
end
|
118
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require 'json'
|
2
|
+
# require 'byebug'
|
3
|
+
class FeishuHelper
|
4
|
+
attr_accessor :app_info, :options, :feishu_access_token, :qrcode_path, :image_key, :download_url, :title
|
5
|
+
include FIR::Config
|
6
|
+
|
7
|
+
def initialize(app_info, options, qrcode_path, download_url)
|
8
|
+
@app_info = app_info
|
9
|
+
@options = options
|
10
|
+
@feishu_access_token = @options[:feishu_access_token]
|
11
|
+
@qrcode_path = qrcode_path
|
12
|
+
@download_url = download_url
|
13
|
+
@title = "#{@app_info[:name]}-#{@app_info[:version]}(Build #{@app_info[:build]})"
|
14
|
+
end
|
15
|
+
|
16
|
+
def send_msg
|
17
|
+
return if feishu_access_token.blank?
|
18
|
+
|
19
|
+
answer = v2_request
|
20
|
+
v1_request if answer.dig('ok') == 'false'
|
21
|
+
end
|
22
|
+
|
23
|
+
def v2_request
|
24
|
+
url = "https://open.feishu.cn/open-apis/bot/v2/hook/#{feishu_access_token}"
|
25
|
+
x = build_v2_info
|
26
|
+
DefaultRest.post(url, x)
|
27
|
+
end
|
28
|
+
|
29
|
+
def v1_request
|
30
|
+
url = "https://open.feishu.cn/open-apis/bot/hook/#{feishu_access_token}"
|
31
|
+
payload = {
|
32
|
+
"title": "#{title} uploaded",
|
33
|
+
"text": "#{title} uploaded at #{Time.now}\nurl: #{download_url}\n#{options[:feishu_custom_message]}\n"
|
34
|
+
}
|
35
|
+
DefaultRest.post(url, payload)
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def build_v2_info
|
41
|
+
{
|
42
|
+
msg_type: 'post',
|
43
|
+
content: {
|
44
|
+
post: {
|
45
|
+
zh_cn: {
|
46
|
+
title: title,
|
47
|
+
content: [build_info_tags, [build_image_tag]]
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def build_info_tags
|
55
|
+
text = "#{title} uploaded at #{Time.now}\n#{options[:feishu_custom_message]}\n"
|
56
|
+
[
|
57
|
+
{
|
58
|
+
"tag": 'text',
|
59
|
+
"text": text
|
60
|
+
},
|
61
|
+
{
|
62
|
+
"tag": 'a',
|
63
|
+
"text": download_url,
|
64
|
+
"href": download_url
|
65
|
+
}
|
66
|
+
]
|
67
|
+
end
|
68
|
+
|
69
|
+
def build_image_tag
|
70
|
+
{
|
71
|
+
"tag": 'img',
|
72
|
+
"image_key": upload_qr_code,
|
73
|
+
"width": 300,
|
74
|
+
"height": 300
|
75
|
+
}
|
76
|
+
end
|
77
|
+
|
78
|
+
def fetch_image_access_token
|
79
|
+
answer = DefaultRest.post(fir_api[:fetch_feishu_v3_token] || 'http://fir-api.admqr.com/user/fetch_feishu_v3_token', {})
|
80
|
+
answer[:feishu_v3_token]
|
81
|
+
end
|
82
|
+
|
83
|
+
def upload_qr_code
|
84
|
+
answer = RestClient.post('https://open.feishu.cn/open-apis/image/v4/put/', {
|
85
|
+
image_type: 'message',
|
86
|
+
image: File.new(qrcode_path, 'rb')
|
87
|
+
}, {
|
88
|
+
'Authorization' => "Bearer #{fetch_image_access_token}"
|
89
|
+
})
|
90
|
+
|
91
|
+
json = JSON.parse(answer)
|
92
|
+
json.dig('data', 'image_key')
|
93
|
+
end
|
94
|
+
end
|
data/lib/fir/util/publish.rb
CHANGED
@@ -3,12 +3,12 @@
|
|
3
3
|
# require 'byebug'
|
4
4
|
require_relative './qiniu_uploader'
|
5
5
|
require_relative './ali_uploader'
|
6
|
+
require_relative '../util/feishu_helper'
|
6
7
|
|
7
8
|
module FIR
|
8
9
|
module Publish
|
9
10
|
def publish(*args, options)
|
10
11
|
initialize_publish_options(args, options)
|
11
|
-
check_supported_file_and_token
|
12
12
|
logger_info_publishing_message
|
13
13
|
|
14
14
|
logger.info 'begin to upload ...'
|
@@ -26,7 +26,11 @@ module FIR
|
|
26
26
|
logger.info "Published succeed: #{download_url}"
|
27
27
|
|
28
28
|
qrcode_path = build_qrcode download_url
|
29
|
+
|
29
30
|
dingtalk_notifier(download_url, qrcode_path)
|
31
|
+
feishu_notifier(download_url, qrcode_path)
|
32
|
+
wxwork_notifier(download_url)
|
33
|
+
|
30
34
|
upload_mapping_file_with_publish
|
31
35
|
|
32
36
|
upload_fir_cli_usage_info(received_app_info)
|
@@ -213,11 +217,41 @@ module FIR
|
|
213
217
|
logger.warn "Dingtalk send error #{e.message}"
|
214
218
|
end
|
215
219
|
|
220
|
+
def feishu_notifier(download_url, qrcode_path)
|
221
|
+
FeishuHelper.new(@app_info, options, qrcode_path, download_url).send_msg
|
222
|
+
end
|
223
|
+
|
224
|
+
def wxwork_notifier(download_url)
|
225
|
+
webhook_url = options[:wxwork_webhook]
|
226
|
+
webhook_url ||= "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=#{options[:wxwork_access_token]}"
|
227
|
+
return if webhook_url.blank?
|
228
|
+
|
229
|
+
title = "#{@app_info[:name]}-#{@app_info[:version]}(Build #{@app_info[:build]})"
|
230
|
+
payload = {
|
231
|
+
"msgtype": "news",
|
232
|
+
"news": {
|
233
|
+
"articles": [{
|
234
|
+
"title": "#{title} uploaded",
|
235
|
+
"description": "#{title} uploaded at #{Time.now}\nurl: #{download_url}\n#{options[:wxwork_custom_message]}\n",
|
236
|
+
"url": download_url,
|
237
|
+
"picurl": options[:wxwork_pic_url]
|
238
|
+
}],
|
239
|
+
},
|
240
|
+
}
|
241
|
+
DefaultRest.post(webhook_url, payload)
|
242
|
+
end
|
243
|
+
|
216
244
|
def initialize_publish_options(args, options)
|
217
245
|
@options = options
|
218
246
|
@file_path = File.absolute_path(args.first.to_s)
|
219
247
|
@file_type = File.extname(@file_path).delete('.')
|
248
|
+
|
249
|
+
check_file_exist(@file_path)
|
250
|
+
check_supported_file(@file_path)
|
251
|
+
|
220
252
|
@token = options[:token] || current_token
|
253
|
+
check_token_cannot_be_blank(@token)
|
254
|
+
|
221
255
|
@changelog = read_changelog(options[:changelog]).to_s.to_utf8
|
222
256
|
@short = options[:short].to_s
|
223
257
|
@passwd = options[:password].to_s
|
@@ -241,12 +275,7 @@ module FIR
|
|
241
275
|
File.exist?(changelog) ? File.read(changelog) : changelog
|
242
276
|
end
|
243
277
|
|
244
|
-
|
245
|
-
check_file_exist(@file_path)
|
246
|
-
check_supported_file(@file_path)
|
247
|
-
check_token_cannot_be_blank(@token)
|
248
|
-
fetch_user_info(@token)
|
249
|
-
end
|
278
|
+
|
250
279
|
|
251
280
|
def build_dingtalk_at_info(payload)
|
252
281
|
answer = {}
|
data/lib/fir/version.rb
CHANGED
metadata
CHANGED
@@ -1,15 +1,15 @@
|
|
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.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- NaixSpirit
|
8
8
|
- atpking
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2020-
|
12
|
+
date: 2020-10-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -218,6 +218,7 @@ files:
|
|
218
218
|
- lib/fir/util/build_common.rb
|
219
219
|
- lib/fir/util/build_ipa.rb
|
220
220
|
- lib/fir/util/config.rb
|
221
|
+
- lib/fir/util/feishu_helper.rb
|
221
222
|
- lib/fir/util/http.rb
|
222
223
|
- lib/fir/util/info.rb
|
223
224
|
- lib/fir/util/login.rb
|
@@ -254,17 +255,21 @@ metadata: {}
|
|
254
255
|
post_install_message: "\n ______________ ________ ____\n /
|
255
256
|
____/ _/ __ \\ / ____/ / / _/\n / /_ / // /_/ /_____/ / / / /
|
256
257
|
/\n / __/ _/ // _, _/_____/ /___/ /____/ /\n /_/ /___/_/ |_| \\____/_____/___/\n\n
|
257
|
-
\ ## 更新记录\n - (2.0.
|
258
|
-
|
259
|
-
|
260
|
-
\ - (2.0.
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
258
|
+
\ ## 更新记录\n - (2.0.10) 飞书支持了 V2 版本的机器人推送\n - (2.0.9) publish 支持了 企业微信通知 可以使用 --wxwork_access_token
|
259
|
+
或 --wxwork_webhook, 增加了回调超时时间至20秒\n - (2.0.8) publish 支持 飞书通知, 可使用 `feishu_access_token`
|
260
|
+
和 `feishu_custom_message`, 详情见 `fir publish --help`\n - (2.0.7) 修复了提示 token 有问题的错误\n
|
261
|
+
\ - (2.0.6) 将校验文件是否存在提前\n - (2.0.5) 更换了上传域名, 避免与 深信服的设备冲突\n - (2.0.4) 修复了 cdn
|
262
|
+
不支持 patch 方法透传, 导致在修改 app 信息的时候返回的 400 错误\n - (2.0.3) 增加 dingtalk_at_phones, 钉钉通知可
|
263
|
+
at 用户手机号, 以逗号,分割. 此命令需配合 `dingtalk_access_token` 使用\n - (2.0.3) 增加 dingtalk_at_all,
|
264
|
+
钉钉通知可 at 所有人, 此命令需配合 `dingtalk_access_token` 使用\n - (2.0.3) publish 增加海外加速参数 --oversea_turbo\n
|
265
|
+
\ - (2.0.2) 有限支持 aab 文件上传, 强依赖`bundletool`工具, 具体请参见参数 `--bundletool_jar_path` 和
|
266
|
+
`auto_download_bundletool_jar`\n - (2.0.1) publish 支持 新参数 `specify_app_display_name`,
|
267
|
+
指定 app 显示名称\n - (2.0.1) publish 支持 新参数 `need_ansi_qrcode`, 在控制台直接打印二维码, jenkins
|
268
|
+
用户可能需要使用 `AnsiColor Plugin` 插件配合\n - (2.0.1) publish 支持 新参数 `dingtalk_custom_message`,
|
269
|
+
可以在钉钉通知里增加自定义消息, 此命令需配合 `dingtalk_access_token` 使用\n - (2.0.1) publish 支持 新参数 `skip_fir_cli_feedback`,
|
270
|
+
可禁止 fir-cli 发送统计信息\n - (2.0.0) publish 使用更快的存储商, 加速上传速度, 若感觉没以前可使用 switch_to_qiniu
|
271
|
+
恢复\n - [fir-cli](https://github.com/firhq/fir-cli) 已经开源\n - 欢迎 fork, issue 和 pull
|
272
|
+
request\n "
|
268
273
|
rdoc_options: []
|
269
274
|
require_paths:
|
270
275
|
- lib
|
@@ -280,7 +285,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
280
285
|
version: '0'
|
281
286
|
requirements: []
|
282
287
|
rubygems_version: 3.0.3
|
283
|
-
signing_key:
|
288
|
+
signing_key:
|
284
289
|
specification_version: 4
|
285
290
|
summary: fir.im command tool
|
286
291
|
test_files:
|