fir-cli 2.0.1 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
-

|
123
|
+

|
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
|