fir-cli 2.0.1 → 2.0.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +26 -2
- data/fir-cli.gemspec +2 -1
- data/lib/fir/cli.rb +3 -0
- data/lib/fir/util/config.rb +1 -1
- data/lib/fir/util/info.rb +9 -0
- data/lib/fir/util/parser/aab_analysis.rb +87 -0
- data/lib/fir/util/publish.rb +1 -1
- data/lib/fir/util.rb +1 -1
- data/lib/fir/version.rb +1 -1
- metadata +10 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0be4b47dddfd1f8bf30b43e4443cf1218d3d5f1560de05f82a4b1057d9dbcb0
|
4
|
+
data.tar.gz: ee7bfaac41e3489e2adc4b8ac3b43e384aa1951b92e8ec51b3e0d9e297bebc58
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0171d0ce3c067bcc1e14d68cc2e3cbe8b6b7ab7eeb715f0a3d57b66be2826574b2e8fe4b8a7945b54d1000dda9bb1965910e3664a85e3a742723cd99040ce90c
|
7
|
+
data.tar.gz: bdcdef9b53667d9dc52b9af407b40954c780cb129dbb4c8ca975ac090b7156c9ecaa81a15afd4daf5aaef999d1ac4e7c866747865ff73e95eb6e9a8e5f4ec0fe
|
data/README.md
CHANGED
@@ -14,6 +14,7 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
|
|
14
14
|
|
15
15
|
|
16
16
|
# 最近更新
|
17
|
+
- (2.0.2) 有限支持 aab 文件上传, 强依赖 `bundletool` 工具, 具体请参见参数 `--bundletool_jar_path` 和 `--auto_download_bundletool_jar`
|
17
18
|
- (2.0.1) publish 支持 新参数 `specify_app_display_name`, 指定 app 显示名称
|
18
19
|
- (2.0.1) publish 支持 新参数 `need_ansi_qrcode`, 在控制台直接打印二维码, jenkins 用户可能需要使用 `AnsiColor Plugin` 插件配合
|
19
20
|
- (2.0.1) publish 支持 新参数 `dingtalk_custom_message`, 可以在钉钉通知里增加自定义消息, 此命令需配合 `dingtalk_access_token` 使用
|
@@ -31,7 +32,19 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
|
|
31
32
|
|
32
33
|
## 热门问题
|
33
34
|
|
34
|
-
###
|
35
|
+
### 在 Circle CI, Travis CI 或 Github Actions 等境外服务上, 有概率超时, 能否解决?
|
36
|
+
|
37
|
+
由于监管要求, 我们必须将服务于存储放置在境内. 由于众所周知的原因, 国内外连通性的表现不太好, 虽然我们的存储服务商 阿里云 提供了 OSS 境外加速服务, 但是高达 1.25 元/GB 的传输成本确实我们也没办法负担.
|
38
|
+
|
39
|
+
目前我们提供三种临时解决方案来缓解问题:
|
40
|
+
|
41
|
+
1. 设置较长的超时时间 如 `FIR_TIMEOUT=300 fir publish xxxx`, 则可将超时时间设置为 300 秒.
|
42
|
+
2. 如果fir-cli 版本 >= 2.0.0, 也可在出现超时后, 使用 `--switch-to-qiniu` 来切换到我们的另外一条存储线路. 如 `fir publish xxxx.apk --switch-to-qiniu`, 多一条线路备选.
|
43
|
+
3. 如果确实对这方面服务要求很高, 则可购买我们的私有部署服务. 我们可以在 aws 上部署一套专供您使用, 具体情况可以与客服或者加我微信进行沟通.
|
44
|
+
|
45
|
+
更多细节请参考 [https://github.com/FIRHQ/fir-cli/issues/260](https://github.com/FIRHQ/fir-cli/issues/260)
|
46
|
+
|
47
|
+
### 可以在 fastlane 里用么?
|
35
48
|
|
36
49
|
可以直接在命令行里调用,也可以安装 fastlane 的配套插件 fir_cli 具体请参见 [https://github.com/FIRHQ/fastlane-plugin-fir_cli](https://github.com/FIRHQ/fastlane-plugin-fir_cli)
|
37
50
|
|
@@ -44,6 +57,17 @@ fir.im-cli 可以通过指令查看, 上传, iOS/Android 应用.
|
|
44
57
|
|
45
58
|
可以在 publish 的时候使用 --specify_icon_file_path=xxx 来自己指定图标文件 或者使用 --skip_update_icon 来跳过图标文件的上传
|
46
59
|
|
60
|
+
### aab 文件能否上传?
|
61
|
+
|
62
|
+
能, 但是 aab 文件手机上并不能直接安装, 需要通过桌面使用 `bundletool` 工具来生成对应手机的 `apk` 包.
|
63
|
+
|
64
|
+
fir-cli 提供对 aab 文件有限程度支持的上传与下载. 在使用 fir-cli 上传 aab 文件时, 需要满足三个条件任意一条
|
65
|
+
|
66
|
+
1. 系统本身已经通过 `brew install bundletool` 等手段, 可以在命令行里直接调用 `bundletool`
|
67
|
+
2. 上传时指定了 `--bundletool_jar_path` 参数, 参数给出了 bundletool.jar 包的地址, 且命令行可以直接调用 `java` 指令
|
68
|
+
3. 能够保证 `https://github.com/google/bundletool/releases/download/#{version}/bundletool-all-#{version}.jar` 地址不被墙, 使用`--auto_download_bundletool_jar` 可以下载 `bundletool`
|
69
|
+
|
70
|
+
|
47
71
|
### 我想将 我上传的版本展示在下载的页面上
|
48
72
|
|
49
73
|
可以在 publish 的时候使用 --force_pin_history 这样 这个上传的版本即成为 "历史版本", 会在下载页面里一直显示. 当有新的版本上传后, 这个版本会作为 "历史版本" 在下载页面中展示.
|
@@ -96,4 +120,4 @@ docker run firhq/fir-cli:latest -e API_TOKEN=XXXX -v ./1.apk:1.apk publish 1.apk
|
|
96
120
|
|
97
121
|
感谢支持
|
98
122
|
|
99
|
-
![luckin](luckin_coffee.png)
|
123
|
+
![luckin](luckin_coffee.png)
|
data/fir-cli.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
27
27
|
/_/ /___/_/ |_| \____/_____/___/
|
28
28
|
|
29
29
|
## 更新记录
|
30
|
+
- (2.0.2.beta) 有限支持 aab 文件上传, 强依赖`bundletool`工具, 具体请参见参数 `--bundletool_jar_path` 和 `auto_download_bundletool_jar`
|
30
31
|
- (2.0.1) publish 支持 新参数 `specify_app_display_name`, 指定 app 显示名称
|
31
32
|
- (2.0.1) publish 支持 新参数 `need_ansi_qrcode`, 在控制台直接打印二维码, jenkins 用户可能需要使用 `AnsiColor Plugin` 插件配合
|
32
33
|
- (2.0.1) publish 支持 新参数 `dingtalk_custom_message`, 可以在钉钉通知里增加自定义消息, 此命令需配合 `dingtalk_access_token` 使用
|
@@ -50,7 +51,7 @@ Gem::Specification.new do |spec|
|
|
50
51
|
spec.add_development_dependency 'minitest', '~> 5.7'
|
51
52
|
spec.add_development_dependency 'pry', '~> 0.10'
|
52
53
|
|
53
|
-
spec.add_dependency 'admqr_knife', '~> 0.1.
|
54
|
+
spec.add_dependency 'admqr_knife', '~> 0.1.5'
|
54
55
|
spec.add_dependency 'thor', '~> 0.19'
|
55
56
|
spec.add_dependency 'rest-client', '~> 2.0'
|
56
57
|
spec.add_dependency 'ruby_android_apk', '~> 0.7.7.1'
|
data/lib/fir/cli.rb
CHANGED
@@ -126,6 +126,9 @@ module FIR
|
|
126
126
|
|
127
127
|
method_option :open, type: :boolean, desc: 'true/false if open for everyone'
|
128
128
|
method_option :password, type: :string, desc: 'Set password for app'
|
129
|
+
|
130
|
+
method_option :bundletool_jar_path, type: :string, desc: "upload aab file command: to specify bundletool.jar if command bundletool can not run directly"
|
131
|
+
method_option :auto_download_bundletool_jar, type: :boolean, default: false, desc: "upload aab file command: would download bundletool when invoke bundletool failure"
|
129
132
|
def publish(*args)
|
130
133
|
prepare :publish
|
131
134
|
|
data/lib/fir/util/config.rb
CHANGED
@@ -6,7 +6,7 @@ module FIR
|
|
6
6
|
APP_INFO_PATH = "#{ENV['HOME']}/.fir-cli-app"
|
7
7
|
API_YML_PATH = ENV['API_YML_PATH'] || File.expand_path('../../', __FILE__) + '/api.yml'
|
8
8
|
XCODE_WRAPPER_PATH = File.expand_path('../../', __FILE__) + '/xcode_wrapper.sh'
|
9
|
-
APP_FILE_TYPE = %w(.ipa .apk).freeze
|
9
|
+
APP_FILE_TYPE = %w(.ipa .apk .aab).freeze
|
10
10
|
|
11
11
|
def fir_api
|
12
12
|
@fir_api ||= YAML.load_file(API_YML_PATH).deep_symbolize_keys[:fir]
|
data/lib/fir/util/info.rb
CHANGED
@@ -30,6 +30,15 @@ module FIR
|
|
30
30
|
info
|
31
31
|
end
|
32
32
|
|
33
|
+
def aab_info(aab_path, options = {})
|
34
|
+
bundletool_jar_path = options[:bundletool_jar_path]
|
35
|
+
auto_download_bundletool_jar = options[:auto_download_bundletool_jar] || false
|
36
|
+
s = FIR::Parser::AabAnalysis.new(aab_path, bundletool_jar_path, auto_download_bundletool_jar)
|
37
|
+
info = s.info
|
38
|
+
info[:file_path] = aab_path
|
39
|
+
info
|
40
|
+
end
|
41
|
+
|
33
42
|
def apk_info(apk_path, options = {})
|
34
43
|
apk = FIR::Parser::Apk.new(apk_path)
|
35
44
|
info = apk.full_info(options)
|
@@ -0,0 +1,87 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# require 'byebug'
|
3
|
+
|
4
|
+
require 'open3'
|
5
|
+
module FIR
|
6
|
+
module Parser
|
7
|
+
class AabAnalysis
|
8
|
+
attr_accessor :aab_file, :head_xml, :bundletool_jar_path, :auto_download_bundletool_jar
|
9
|
+
def initialize(aab_file, bundletool_jar_path = nil, auto_download_bundletool_jar = false)
|
10
|
+
@aab_file = aab_file
|
11
|
+
@bundletool_jar_path = bundletool_jar_path
|
12
|
+
@auto_download_bundletool_jar = auto_download_bundletool_jar
|
13
|
+
end
|
14
|
+
|
15
|
+
def info
|
16
|
+
insure_exists_bundlebool # 确保bundlebool 正常
|
17
|
+
fetch_first_xml # 读取生成的第一句
|
18
|
+
read_from_xml # 读取有用的的信息
|
19
|
+
end
|
20
|
+
|
21
|
+
def read_from_xml
|
22
|
+
# 不到迫不得已 不要引用Nokogiri, 免得又装不来依赖
|
23
|
+
{
|
24
|
+
type: 'android',
|
25
|
+
name: "AAB #{File.basename(@aab_file)}",
|
26
|
+
identifier: read_from_attribute('package'),
|
27
|
+
build: read_from_attribute('versionCode'),
|
28
|
+
version: read_from_attribute('versionName')
|
29
|
+
}
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def fetch_first_xml
|
35
|
+
cmd = if bundletool_jar_path
|
36
|
+
"java -jar #{bundletool_jar_path} dump manifest --bundle=#{aab_file}"
|
37
|
+
else
|
38
|
+
"bundletool dump manifest --bundle=#{aab_file}"
|
39
|
+
end
|
40
|
+
|
41
|
+
_stdin, stdout, _stderr, _wait_thr = Open3.popen3(cmd)
|
42
|
+
@head_xml = stdout.read.split("\n").first
|
43
|
+
FIR.logger.info "aab manifest: #{@head_xml}"
|
44
|
+
end
|
45
|
+
|
46
|
+
def insure_exists_bundlebool
|
47
|
+
# 如果用户传了 bundletool_path, 且存在
|
48
|
+
if !bundletool_jar_path.nil? && File.exist?(bundletool_jar_path)
|
49
|
+
FIR.logger.info "bundletool_jar_path = #{bundletool_jar_path}"
|
50
|
+
return
|
51
|
+
end
|
52
|
+
|
53
|
+
return if could_run_bundletool_directly?
|
54
|
+
|
55
|
+
download_bundletool if auto_download_bundletool_jar
|
56
|
+
end
|
57
|
+
|
58
|
+
def could_run_bundletool_directly?
|
59
|
+
_stdin, stdout, _stderr, _wait_thr = Open3.popen3 'bundletool'
|
60
|
+
answer = stdout.read != ''
|
61
|
+
FIR.logger.info "can invoke bundletool directly cool!" if answer
|
62
|
+
answer
|
63
|
+
rescue StandardError => e
|
64
|
+
FIR.logger.error 'can not run bundletool directly'
|
65
|
+
false
|
66
|
+
end
|
67
|
+
|
68
|
+
def download_bundletool(version = '0.11.0')
|
69
|
+
FIR.logger.log("Downloading bundletool (#{version}) from https://github.com/google/bundletool/releases/download/#{version}/bundletool-all-#{version}.jar...")
|
70
|
+
Dir.mkdir './bundletool_temp'
|
71
|
+
open("https://github.com/google/bundletool/releases/download/#{version}/bundletool-all-#{version}.jar") do |bundletool|
|
72
|
+
File.open('./bundletool.jar', 'wb') do |file|
|
73
|
+
file.write(bundletool.read)
|
74
|
+
end
|
75
|
+
end
|
76
|
+
@bundletool_jar_path = './bundletool.jar'
|
77
|
+
FIR.logger.info('Downloaded bundletool')
|
78
|
+
rescue StandardError => e
|
79
|
+
FIR.logger.error("Something went wrong when downloading bundletool version #{version}")
|
80
|
+
end
|
81
|
+
|
82
|
+
def read_from_attribute(name)
|
83
|
+
/#{name}=\"(.*?)\"/.match(@head_xml)[1]
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
data/lib/fir/util/publish.rb
CHANGED
@@ -211,7 +211,7 @@ module FIR
|
|
211
211
|
@passwd = options[:password].to_s
|
212
212
|
@is_opened = @passwd.blank? ? options[:open] : false
|
213
213
|
@export_qrcode = !!options[:qrcode]
|
214
|
-
@app_info = send("#{@file_type}_info", @file_path, full_info: true)
|
214
|
+
@app_info = send("#{@file_type}_info", @file_path, options.merge(full_info: true))
|
215
215
|
@user_info = fetch_user_info(@token)
|
216
216
|
@uploading_info = fetch_uploading_info # 获得上传信息
|
217
217
|
@app_id = @uploading_info[:id]
|
data/lib/fir/util.rb
CHANGED
@@ -4,7 +4,7 @@ require_relative './util/http'
|
|
4
4
|
require_relative './util/config'
|
5
5
|
require_relative './util/parser/apk'
|
6
6
|
require_relative './util/parser/ipa'
|
7
|
-
require_relative './util/parser/
|
7
|
+
require_relative './util/parser/aab_analysis'
|
8
8
|
require_relative './util/login'
|
9
9
|
require_relative './util/me'
|
10
10
|
require_relative './util/info'
|
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.2
|
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: 2019-12-
|
12
|
+
date: 2019-12-17 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: 0.1.
|
90
|
+
version: 0.1.5
|
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: 0.1.
|
97
|
+
version: 0.1.5
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: thor
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -237,6 +237,7 @@ files:
|
|
237
237
|
- lib/fir/util/login.rb
|
238
238
|
- lib/fir/util/mapping.rb
|
239
239
|
- lib/fir/util/me.rb
|
240
|
+
- lib/fir/util/parser/aab_analysis.rb
|
240
241
|
- lib/fir/util/parser/apk.rb
|
241
242
|
- lib/fir/util/parser/bin/pngcrush
|
242
243
|
- lib/fir/util/parser/common.rb
|
@@ -267,10 +268,11 @@ metadata: {}
|
|
267
268
|
post_install_message: "\n ______________ ________ ____\n /
|
268
269
|
____/ _/ __ \\ / ____/ / / _/\n / /_ / // /_/ /_____/ / / / /
|
269
270
|
/\n / __/ _/ // _, _/_____/ /___/ /____/ /\n /_/ /___/_/ |_| \\____/_____/___/\n\n
|
270
|
-
\ ## 更新记录\n - (2.0.
|
271
|
-
|
272
|
-
|
273
|
-
|
271
|
+
\ ## 更新记录\n - (2.0.2.beta) 有限支持 aab 文件上传, 强依赖`bundletool`工具, 具体请参见参数 `--bundletool_jar_path`
|
272
|
+
和 `auto_download_bundletool_jar`\n - (2.0.1) publish 支持 新参数 `specify_app_display_name`,
|
273
|
+
指定 app 显示名称\n - (2.0.1) publish 支持 新参数 `need_ansi_qrcode`, 在控制台直接打印二维码, jenkins
|
274
|
+
用户可能需要使用 `AnsiColor Plugin` 插件配合\n - (2.0.1) publish 支持 新参数 `dingtalk_custom_message`,
|
275
|
+
可以在钉钉通知里增加自定义消息, 此命令需配合 `dingtalk_access_token` 使用\n - (2.0.1) publish 支持 新参数 `skip_fir_cli_feedback`,
|
274
276
|
可禁止 fir-cli 发送统计信息\n - (2.0.0) publish 使用更快的存储商, 加速上传速度, 若感觉没以前可使用 switch_to_qiniu
|
275
277
|
恢复\n - (1.7.4) 配合 fastlane-plugin-fir_cli 做了一些小优化\n - (1.7.3) 新增了 上传指定图标, 不上传图标
|
276
278
|
以及 将版本固定显示在下载页上\n - (1.7.2) 修正了无论是否加参数都固定出现二维码图片的bug\n - (1.7.1) 增加了 钉钉推送 , 增加了返回指定版本下载地址\n
|