fir-cli 1.0.8 → 1.1.0

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
  SHA1:
3
- metadata.gz: e8a82046548f4b97e81c022420f43c5a289b957d
4
- data.tar.gz: ae1f174cf2a3be1d9ff278f4a1cec1eca7c0da69
3
+ metadata.gz: 1f5d2beedaa3955abe679d71ccdae111fcdbe595
4
+ data.tar.gz: 86c4a61744d18c11768ea6c23a0b291187752be2
5
5
  SHA512:
6
- metadata.gz: 6d344431db86ffeaa5e8786780365c3dcb41cf6c120a4b8536177feca7f37aa4cd593d14ec69f1694e684b3d5cb891e072b1893293a70a0f546ba1017d34c6ae
7
- data.tar.gz: 15c78f358d096ed436e2fac8d05561476f0c8c597ecb1336b532b6e7e6c14455b4663bd56cb0d752b1463ed83210ceb7619141101ebd0ddba449866bf091de02
6
+ metadata.gz: 523e663b825492d85a365b092850e1611b9009ee7932785c33e9029f8341a7bb649ee2dcc2cf9b3ff90bb7d989fc4a9638b8a98a42293715266a9bea08f3eb16
7
+ data.tar.gz: bc436021c8798abd0115c385f8ad87d8093af4e90814954f74bfd940088dab1f925c5052c3d9897276274dfd82d61cfaa379db5307292233fb9b863bc061cdc9
data/CHANGELOG CHANGED
@@ -1,4 +1,8 @@
1
1
  ## 更新记录
2
+ ### FIR-CLI 1.1.0
3
+ - 完全兼容新版 API
4
+ - 请使用新版 API Token
5
+
2
6
  ### FIR-CLI 1.0
3
7
  - 重大重构
4
8
  - 优化启动及运行速度
data/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  FIR.im CLI
2
2
  ---
3
+
4
+ [![Join the chat at https://gitter.im/FIRHQ/fir-cli](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/FIRHQ/fir-cli?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
3
5
  > FIR.im CLI 可以通过指令查看, 上传, 编译应用
4
6
 
5
7
  ## 使用入门
data/fir-cli.gemspec CHANGED
@@ -28,23 +28,10 @@ Gem::Specification.new do |spec|
28
28
  /_/ /___/_/ |_| \____/_____/___/
29
29
 
30
30
  ## 更新记录
31
- ### FIR-CLI 1.0
32
- - 重大重构
33
- - 优化启动及运行速度
34
- - 增加各指令的 alias
35
- - 增加全局参数, -T, -L, -V, -q, -h, 分别为 token, log, verbose, quite, help 参数
36
- - 增加输出 log
37
- - 修正部分系统安装失败问题
38
- - 修正部分服务器安装出现编码失败问题
39
- - 修正 ipa 路径带有空格解析失败的 bug
40
- - 重写 ipa 解析器, 去除 `miniz.c`, 增加 pngcrash
41
- - 上传 ipa 时, 优先取 `display_name` 作为应用名称
42
- - build_ipa 增加默认 build 路径, `fir b` 则默认 build 当前路径
43
- - build_ipa 增加输出 dSYM 符号表文件
44
- - build_ipa 增加输出指定 ipa 名称
45
- - build_ipa 增加输出 xcodebuild 的信息
46
- - 去掉输出信息颜色, 方便查看 log
47
- - 简化 --verbose 参数, 简化为 `--verbose --no-verbose`, 默认输出为 INFO
31
+ ### FIR-CLI 1.1.0
32
+ - 完全兼容新版 API ✔
33
+ - 请使用新版 API Token
34
+ - 新版 API Token 查看地址: `http://fir.im/user/info`
48
35
  - https://github.com/FIRHQ/fir-cli
49
36
  )
50
37
 
data/lib/fir/api.yml CHANGED
@@ -1,5 +1,5 @@
1
- base_url: 'http://fir.im'
2
- me_url: 'http://fir.im/api/v2/user/me'
3
- app_url: 'http://fir.im/api/v2/app'
4
- uploading_info_url: 'http://fir.im/api/v2/app/info'
5
- version_url: 'http://fir.im/api/v2/appVersion'
1
+ domain: 'http://fir.im'
2
+ base_url: 'http://api.fir.im'
3
+ user_url: 'http://api.fir.im/user'
4
+ app_url: 'http://api.fir.im/apps'
5
+ udids_url: 'http://api.fir.im/devices/multi_udid'
data/lib/fir/util/info.rb CHANGED
@@ -27,8 +27,8 @@ module FIR
27
27
  identifier: app.identifier,
28
28
  name: app.name,
29
29
  display_name: app.display_name,
30
- version: app.version,
31
- short_version: app.short_version,
30
+ build: app.version,
31
+ version: app.short_version,
32
32
  devices: app.devices,
33
33
  release_type: app.release_type || ipa.release_type,
34
34
  distribution_name: app.distribution_name
@@ -55,11 +55,11 @@ module FIR
55
55
  def apk_info apk_path, is_all
56
56
  apk = Android::Apk.new(apk_path)
57
57
  info = {
58
- type: 'android',
59
- identifier: apk.manifest.package_name,
60
- name: apk.label,
61
- version: apk.manifest.version_code,
62
- short_version: apk.manifest.version_name
58
+ type: 'android',
59
+ identifier: apk.manifest.package_name,
60
+ name: apk.label,
61
+ build: apk.manifest.version_code,
62
+ version: apk.manifest.version_name
63
63
  }
64
64
 
65
65
  # apk.icon is a hash, { icon_name: icon_data }
@@ -74,6 +74,5 @@ module FIR
74
74
 
75
75
  info
76
76
  end
77
-
78
77
  end
79
78
  end
@@ -9,7 +9,7 @@ module FIR
9
9
  user_info = fetch_user_info(token)
10
10
 
11
11
  logger.info "Login succeed, previous user's email: #{config[:email]}" unless config.blank?
12
- write_config(email: user_info.fetch(:email, ''), token: user_info.fetch(:token, ''))
12
+ write_config(email: user_info.fetch(:email, ''), token: token)
13
13
  reload_config
14
14
  logger.info "Login succeed, current user's email: #{config[:email]}"
15
15
  end
@@ -15,88 +15,97 @@ module FIR
15
15
  logger.info "Publishing app......."
16
16
  logger_info_dividing_line
17
17
 
18
- file_type = File.extname(file_path).delete('.')
19
- app_info = send("#{file_type}_info", file_path, true)
20
- uploading_info = fetch_uploading_info(app_info, token)
18
+ file_type = File.extname(file_path).delete(".")
19
+ @app_info = send("#{file_type}_info", file_path, true)
20
+
21
+ uploading_info = fetch_uploading_info(type: @app_info[:type],
22
+ bundle_id: @app_info[:identifier],
23
+ api_token: token)
21
24
 
22
25
  app_id = uploading_info[:id]
23
- bundle_app = uploading_info[:bundle][:pkg]
24
- bundle_icon = uploading_info[:bundle][:icon]
26
+ icon_cert = uploading_info[:cert][:icon]
27
+ binary_cert = uploading_info[:cert][:binary]
25
28
 
26
- unless app_info[:icons].empty?
27
- large_icon_path = app_info[:icons].max_by { |f| File.size(f) }
29
+ unless @app_info[:icons].blank?
30
+ large_icon_path = @app_info[:icons].max_by { |f| File.size(f) }
28
31
  uncrushed_icon_path = convert_icon(large_icon_path)
29
- upload_app_icon(bundle_icon, uncrushed_icon_path)
32
+ upload_app_icon(icon_cert, uncrushed_icon_path)
30
33
  end
31
34
 
32
- uploaded_info = upload_app_file(bundle_app, file_path)
33
- version_id = uploaded_info[:versionOid]
34
- short = options[:short].blank? ? uploading_info[:short] : options[:short]
35
-
36
- update_app_info(app_id, name: app_info[:display_name] || app_info[:name],
37
- short: short,
38
- token: token,
39
- source: 'fir-cli')
40
- update_app_version_info(version_id, version: app_info[:version],
41
- versionShort: app_info[:short_version],
42
- devices: app_info[:devices],
43
- release_type: app_info[:release_type],
44
- changelog: changelog,
45
- token: token)
46
- published_app_info = fetch_app_info(app_id, token)
35
+ uploaded_info = upload_app_binary(binary_cert, file_path, changelog)
47
36
 
48
- logger_info_dividing_line
49
- logger.info "Published succeed: #{api[:base_url]}/#{published_app_info[:short]}"
37
+ if uploaded_info[:is_completed]
38
+ unless @app_info[:devices].blank?
39
+ upload_device_info(key: binary_cert[:key],
40
+ udids: @app_info[:devices].join(","),
41
+ api_token: token)
42
+ end
43
+
44
+ unless options[:short].blank?
45
+ update_app_info(app_id, short: options[:short], api_token: token)
46
+ end
47
+
48
+ published_app_info = fetch_app_info(app_id, api_token: token)
49
+
50
+ logger_info_dividing_line
51
+ logger.info "Published succeed: #{api[:domain]}/#{published_app_info[:short]}"
52
+ end
50
53
  end
51
54
 
52
55
  private
53
56
 
54
57
  def convert_icon origin_path
55
58
  logger.info "Converting app's icon......"
56
- output_path = Tempfile.new('uncrushed_icon.png').path
59
+ output_path = Tempfile.new("uncrushed_icon.png").path
57
60
  Parser.uncrush_icon(origin_path, output_path)
58
61
  File.size(output_path) == 0 ? origin_path : output_path
59
62
  end
60
63
 
61
- def upload_app_icon bundle_icon, icon_path
64
+ def upload_app_icon icon_cert, icon_path
62
65
  logger.info "Uploading app's icon......"
63
66
  hash = {
64
- key: bundle_icon[:key],
65
- token: bundle_icon[:token],
66
- file: File.new(icon_path, 'rb')
67
+ key: icon_cert[:key],
68
+ token: icon_cert[:token],
69
+ file: File.new(icon_path, "rb")
67
70
  }
68
- post bundle_icon[:url], hash, 'multipart/form-data'
71
+ post icon_cert[:upload_url], hash
69
72
  end
70
73
 
71
- def upload_app_file bundle_app, file_path
74
+ def upload_app_binary binary_cert, file_path, changelog
72
75
  logger.info "Uploading app......"
73
76
  hash = {
74
- key: bundle_app[:key],
75
- token: bundle_app[:token],
76
- file: File.new(file_path, 'rb')
77
+ key: binary_cert[:key],
78
+ token: binary_cert[:token],
79
+ file: File.new(file_path, "rb"),
80
+ # Custom variables
81
+ "x:name" => @app_info[:display_name] || @app_info[:name],
82
+ "x:build" => @app_info[:build],
83
+ "x:version" => @app_info[:version],
84
+ "x:changelog" => changelog,
85
+ "x:release_type" => @app_info[:release_type],
77
86
  }
78
- post bundle_app[:url], hash, 'multipart/form-data'
87
+ post binary_cert[:upload_url], hash
88
+ end
89
+
90
+ def upload_device_info hash
91
+ logger.info "Updating devices info......"
92
+ post api[:udids_url], hash
79
93
  end
80
94
 
81
95
  def update_app_info id, hash
82
96
  logger.info "Updating app info......"
83
- put api[:app_url] + "/#{id}?#{URI.encode_www_form hash}", hash
97
+ patch api[:app_url] + "/#{id}", hash
84
98
  end
85
99
 
86
- def update_app_version_info id, hash
87
- logger.info "Updating app's version info......"
88
- put api[:version_url] + "/#{id}/complete?#{URI.encode_www_form hash}", hash
89
- end
100
+ def fetch_uploading_info hash
101
+ logger.info "Fetching #{@app_info[:identifier]}@FIR.im uploading info......"
90
102
 
91
- def fetch_uploading_info app_info, token
92
- logger.info "Fetching #{app_info[:identifier]}@FIR.im uploading info......"
93
- get api[:uploading_info_url] + "/#{app_info[:identifier]}", type: app_info[:type],
94
- token: token
103
+ post api[:app_url], hash
95
104
  end
96
105
 
97
- def fetch_app_info id, token
106
+ def fetch_app_info id, hash
98
107
  logger.info "Fetch app info from FIR.im"
99
- get api[:app_url] + "/#{id}", token: token
108
+ get api[:app_url] + "/#{id}", hash
100
109
  end
101
110
  end
102
111
  end
data/lib/fir/util.rb CHANGED
@@ -19,7 +19,7 @@ module FIR
19
19
  module ClassMethods
20
20
 
21
21
  def fetch_user_info token
22
- get api[:me_url], token: token
22
+ get api[:user_url], api_token: token
23
23
  end
24
24
 
25
25
  def check_supported_file path
@@ -40,6 +40,5 @@ module FIR
40
40
  logger.info "✈ -------------------------------------------- ✈"
41
41
  end
42
42
  end
43
-
44
43
  end
45
44
  end
data/lib/fir/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module FIR
4
- VERSION = "1.0.8"
4
+ VERSION = "1.1.0"
5
5
  end
data/lib/fir.rb CHANGED
@@ -54,34 +54,52 @@ module FIR
54
54
 
55
55
  def get url, params = {}
56
56
  begin
57
- res = RestClient.get(url, params: params)
58
- rescue RestClient::Exception => e
59
- logger.error e.response
57
+ res = RestClient.get(url, default_headers.merge(params: params))
58
+ rescue => e
59
+ logger.error "#{e.class}\n#{e.message}"
60
60
  exit 1
61
61
  end
62
+
63
+ JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
64
+ end
65
+
66
+ def post url, query
67
+ begin
68
+ res = RestClient.post(url, query, default_headers)
69
+ rescue => e
70
+ logger.error "#{e.class}\n#{e.message}"
71
+ exit 1
72
+ end
73
+
62
74
  JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
63
75
  end
64
76
 
65
- def post url, query, content_type = :json
77
+ def patch url, query
66
78
  begin
67
- res = RestClient.post(url, query, { content_type: content_type })
68
- rescue RestClient::Exception => e
69
- logger.error e.response
79
+ res = RestClient.patch(url, query, default_headers)
80
+ rescue => e
81
+ logger.error "#{e.class}\n#{e.message}"
70
82
  exit 1
71
83
  end
84
+
72
85
  JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
73
86
  end
74
87
 
75
- def put url, query, content_type = :json
88
+ def put url, query
76
89
  begin
77
- res = RestClient.put(url, query, { content_type: content_type })
78
- rescue RestClient::Exception => e
79
- logger.error e.response
90
+ res = RestClient.put(url, query, default_headers)
91
+ rescue => e
92
+ logger.error "#{e.class}\n#{e.message}"
80
93
  exit 1
81
94
  end
95
+
82
96
  JSON.parse(res.body.force_encoding("UTF-8"), symbolize_names: true)
83
97
  end
84
98
 
99
+ def default_headers
100
+ { content_type: :json, source: 'fir-cli', cli_version: FIR::VERSION }
101
+ end
102
+
85
103
  alias_method :☠, :exit
86
104
  end
87
105
  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: 1.0.8
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - FIR.im
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2015-05-12 00:00:00.000000000 Z
12
+ date: 2015-07-05 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -148,14 +148,8 @@ metadata: {}
148
148
  post_install_message: "\n ______________ ________ ____\n /
149
149
  ____/ _/ __ \\ / ____/ / / _/\n / /_ / // /_/ /_____/ / / / /
150
150
  /\n / __/ _/ // _, _/_____/ /___/ /____/ /\n /_/ /___/_/ |_| \\____/_____/___/\n\n
151
- \ ## 更新记录\n ### FIR-CLI 1.0\n - 重大重构\n - 优化启动及运行速度\n - 增加各指令的 alias\n - 增加全局参数,
152
- -T, -L, -V, -q, -h, 分别为 token, log, verbose, quite, help 参数\n - 增加输出 log\n - 修正部分系统安装失败问题\n
153
- \ - 修正部分服务器安装出现编码失败问题\n - 修正 ipa 路径带有空格解析失败的 bug\n - 重写 ipa 解析器, 去除 `miniz.c`,
154
- 增加 pngcrash\n - 上传 ipa 时, 优先取 `display_name` 作为应用名称\n - build_ipa 增加默认 build 路径,
155
- `fir b` 则默认 build 当前路径\n - build_ipa 增加输出 dSYM 符号表文件\n - build_ipa 增加输出指定 ipa
156
- 名称\n - build_ipa 增加输出 xcodebuild 的信息\n - 去掉输出信息颜色, 方便查看 log\n - 简化 --verbose
157
- 参数, 简化为 `--verbose --no-verbose`, 默认输出为 INFO\n - https://github.com/FIRHQ/fir-cli\n
158
- \ "
151
+ \ ## 更新记录\n ### FIR-CLI 1.1.0\n - 完全兼容新版 API ✔\n - 请使用新版 API Token\n - 新版 API
152
+ Token 查看地址: `http://fir.im/user/info`\n - https://github.com/FIRHQ/fir-cli\n "
159
153
  rdoc_options: []
160
154
  require_paths:
161
155
  - lib
@@ -171,9 +165,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
171
165
  version: '0'
172
166
  requirements: []
173
167
  rubyforge_project:
174
- rubygems_version: 2.4.2
168
+ rubygems_version: 2.4.7
175
169
  signing_key:
176
170
  specification_version: 4
177
171
  summary: FIR.im command tool
178
172
  test_files: []
179
- has_rdoc: