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