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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a24ad298a981ef005c28065354236351301c0de4c47beb7109fa1b03d0f04aa9
4
- data.tar.gz: 8dd1f7047b2ba6c7cd89be9044b1498f732458bec23214e6df2c8838a11db2fc
3
+ metadata.gz: f0be4b47dddfd1f8bf30b43e4443cf1218d3d5f1560de05f82a4b1057d9dbcb0
4
+ data.tar.gz: ee7bfaac41e3489e2adc4b8ac3b43e384aa1951b92e8ec51b3e0d9e297bebc58
5
5
  SHA512:
6
- metadata.gz: 943daed46cbd32bd3df0b26ae9e756efea7ac0fa2577d78e49cb5e21618484bc4e1e49e9c0ced2a2479f8a27d43743305faf1f8650e72e3c8fad5d62c1e7b617
7
- data.tar.gz: c33fec27c39712aba5ef7ae4576438721ade9cd546cec91628de60728325889721fe144387e4f1743c282291a603f69913beee289500d105cc2bb3a652a566c4
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
- ### 可以在fastlane 里用么?
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.2'
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
 
@@ -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
@@ -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/pngcrush'
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
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module FIR
4
- VERSION = '2.0.1'
4
+ VERSION = '2.0.2'
5
5
  end
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.1
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-13 00:00:00.000000000 Z
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.2
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.2
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.1) publish 支持 新参数 `specify_app_display_name`, 指定 app 显示名称\n
271
- \ - (2.0.1) publish 支持 新参数 `need_ansi_qrcode`, 在控制台直接打印二维码, jenkins 用户可能需要使用 `AnsiColor
272
- Plugin` 插件配合\n - (2.0.1) publish 支持 新参数 `dingtalk_custom_message`, 可以在钉钉通知里增加自定义消息,
273
- 此命令需配合 `dingtalk_access_token` 使用\n - (2.0.1) publish 支持 新参数 `skip_fir_cli_feedback`,
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