fir-cli 1.1.7 → 1.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +1 -1
- data/CHANGELOG +4 -0
- data/README.md +9 -2
- data/fir-cli.gemspec +4 -2
- data/lib/fir/cli.rb +26 -5
- data/lib/fir/util/build_apk.rb +40 -0
- data/lib/fir/util/build_common.rb +35 -0
- data/lib/fir/util/{build.rb → build_ipa.rb} +9 -43
- data/lib/fir/util.rb +6 -2
- data/lib/fir/version.rb +1 -1
- data/test/build_ipa_test.rb +9 -4
- data/test/mapping_test.rb +4 -2
- data/test/test_helper.rb +9 -0
- metadata +10 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0c92eba76896df79468053134c355bdfbb0d2031
|
4
|
+
data.tar.gz: 38284b8643672070bc2078f6f05800b97c6c10bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7541e7985bc256321aa403f2969bdaaa2c7623542ab22b87b5bcfc0774efefbc31ac903b9165cef26aaf5a79dc70b514677865885047061630893e1aa31bfeaa
|
7
|
+
data.tar.gz: f10503990d06c2d513e268284ce376c52ff8c12e67f43f9eed3967ee16dc6721512b4ac3d2ac4432046f5c670f6d225452d283c812af500a3e2e9ab2edd52f0d
|
data/.gitignore
CHANGED
data/CHANGELOG
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
## 更新记录
|
2
2
|
|
3
|
+
### FIR-CLI 1.1.8
|
4
|
+
- 支持 gradle 打包 apk 文件并自动上传至 fir.im, `fir build_apk(alias ba)`
|
5
|
+
- `fir ba <project dir> [-o <apk output dir> -c <changelog> -p -T <your api token>]`
|
6
|
+
|
3
7
|
### FIR-CLI 1.1.7
|
4
8
|
- 增加符号表上传指令, `fir mapping(alias m)`
|
5
9
|
- 有一下三种方式上传符号表(目前已经支持 dSYM 和 txt 两种格式的符号表文件上传)
|
data/README.md
CHANGED
@@ -115,7 +115,7 @@ $ fir build_ipa path/to/project -o path/to/output
|
|
115
115
|
### 复杂一点
|
116
116
|
|
117
117
|
```shell
|
118
|
-
$ fir
|
118
|
+
$ fir bi path/to/workspace -o path/to/output -w -C Release -t allTargets GCC_PREPROCESSOR_DEFINITIONS="FOO=bar"
|
119
119
|
```
|
120
120
|
|
121
121
|
该指令在指向的目录中,找到第一个 workspace 文件,对其进行编译。使用 `Release` 设置,编译策略为 `allTargets`,同时设置了预编译参数 `FOO`。
|
@@ -123,8 +123,15 @@ $ fir b path/to/workspace -o path/to/output -w -C Release -t allTargets GCC_PREP
|
|
123
123
|
### 编译用 CocoaPods 做依赖管理的 .ipa包
|
124
124
|
|
125
125
|
```shell
|
126
|
-
$ fir
|
126
|
+
$ fir bi path/to/workspace -w -S <scheme name>
|
127
127
|
```
|
128
|
+
|
129
|
+
### 编译用 Gradle 打包 apk
|
130
|
+
|
131
|
+
```shell
|
132
|
+
$ fir ba path/to/project
|
133
|
+
```
|
134
|
+
|
128
135
|
### 一步, 从源代码到 FIR.im
|
129
136
|
> 只需要输入 -p -T
|
130
137
|
|
data/fir-cli.gemspec
CHANGED
@@ -28,7 +28,7 @@ Gem::Specification.new do |spec|
|
|
28
28
|
/_/ /___/_/ |_| \____/_____/___/
|
29
29
|
|
30
30
|
## 更新记录
|
31
|
-
### FIR-CLI 1.1.
|
31
|
+
### FIR-CLI 1.1.8
|
32
32
|
- 完全兼容新版 API ✔
|
33
33
|
- 请使用新版 API Token
|
34
34
|
- 新版 API Token 查看地址: `http://fir.im/user/info`
|
@@ -37,7 +37,9 @@ Gem::Specification.new do |spec|
|
|
37
37
|
- 1. 指定 version 和 build 上传: `fir m <mapping file path> -P <bughd project id> -v <app version> -b <app build> -T <your api token>`
|
38
38
|
- 2. 在 publish 的时候自动上传: `fir p <app file path> -m <mapping file path> -P <bughd project id> -T <your api token>`
|
39
39
|
- 3. 在 build_ipa 的时候自动上传: `fir b <project dir> -P <bughd project id> -M -p -T <your api token>`
|
40
|
-
-
|
40
|
+
- 支持 gradle 打包 apk 文件并自动上传至 fir.im, `fir build_apk(alias ba)`
|
41
|
+
- `fir ba <project dir> [-o <apk output dir> -c <changelog> -p -T <your api token>]`
|
42
|
+
- [fir-cli](https://github.com/FIRHQ/fir-cli) 已经开源, 欢迎 fork, issue 和 pull request
|
41
43
|
)
|
42
44
|
|
43
45
|
spec.add_development_dependency "bundler", "~> 1.7"
|
data/lib/fir/cli.rb
CHANGED
@@ -8,7 +8,7 @@ module FIR
|
|
8
8
|
class_option :quiet, type: :boolean, aliases: "-q", desc: "Silence commands"
|
9
9
|
class_option :help, type: :boolean, aliases: "-h", desc: "Show this help message and quit"
|
10
10
|
|
11
|
-
desc "build_ipa BUILD_DIR [options] [settings]", "Build iOS app (alias: '
|
11
|
+
desc "build_ipa BUILD_DIR [options] [settings]", "Build iOS app (alias: 'bi')."
|
12
12
|
long_desc <<-LONGDESC
|
13
13
|
`build_ipa` command will auto build your project/workspace to an ipa package
|
14
14
|
and it also can auto publish your built ipa to FIR.im if use `-p` option.
|
@@ -16,13 +16,13 @@ module FIR
|
|
16
16
|
|
17
17
|
Example:
|
18
18
|
|
19
|
-
$ fir
|
19
|
+
$ fir bi <project dir> [-C <configuration>] [-t <target name>] [-o <ipa output dir>] [settings] [-c <changelog>] [-p -T <your api token>]
|
20
20
|
|
21
|
-
$ fir
|
21
|
+
$ fir bi <project dir> [-c <changelog> -P <bughd project id> -M -p -T <your api token>]
|
22
22
|
|
23
|
-
$ fir
|
23
|
+
$ fir bi <workspace dir> -w -S <scheme name> [-C <configuration>] [-t <target name>] [-o <ipa output dir>] [settings] [-c <changelog>] [-p -T <your api token>]
|
24
24
|
LONGDESC
|
25
|
-
map ["b", "
|
25
|
+
map ["b", "bi"] => :build_ipa
|
26
26
|
method_option :workspace, type: :boolean, aliases: "-w", desc: "true/false if build workspace"
|
27
27
|
method_option :scheme, type: :string, aliases: "-S", desc: "Set the scheme NAME if build workspace"
|
28
28
|
method_option :configuration, type: :string, aliases: "-C", desc: "Use the build configuration NAME for building each target"
|
@@ -40,6 +40,27 @@ module FIR
|
|
40
40
|
FIR.build_ipa(*args, options)
|
41
41
|
end
|
42
42
|
|
43
|
+
desc "build_apk BUILD_DIR", "Build Android app (alias: 'ba')."
|
44
|
+
long_desc <<-LONGDESC
|
45
|
+
`build_apk` command will auto build your project to an apk package
|
46
|
+
and it also can auto publish your built apk to FIR.im if use `-p` option.
|
47
|
+
Internally, it use `gradle` to accomplish these things, use `gradle --help` to get more information.
|
48
|
+
|
49
|
+
Example:
|
50
|
+
|
51
|
+
$ fir ba <project dir> [-o <apk output dir> -c <changelog> -p -T <your api token>]
|
52
|
+
LONGDESC
|
53
|
+
map ["ba"] => :build_apk
|
54
|
+
method_option :output, type: :string, aliases: "-o", desc: "APK output path, the default is: BUILD_DIR/build/outputs/apk"
|
55
|
+
method_option :publish, type: :boolean, aliases: "-p", desc: "true/false if publish to FIR.im"
|
56
|
+
method_option :short, type: :string, aliases: "-s", desc: "Set custom short link if publish to FIR.im"
|
57
|
+
method_option :changelog, type: :string, aliases: "-c", desc: "Set changelog if publish to FIR.im"
|
58
|
+
def build_apk *args
|
59
|
+
prepare :build_apk
|
60
|
+
|
61
|
+
FIR.build_apk(*args, options)
|
62
|
+
end
|
63
|
+
|
43
64
|
desc "info APP_FILE_PATH", "Show iOS/Android app's info, support ipa/apk file (aliases: 'i')."
|
44
65
|
map "i" => :info
|
45
66
|
method_option :all, type: :boolean, aliases: "-a", desc: "Show all information in application"
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module FIR
|
4
|
+
module BuildApk
|
5
|
+
|
6
|
+
def build_apk *args, options
|
7
|
+
initialize_build_common_options(args, options)
|
8
|
+
|
9
|
+
Dir.chdir(@build_dir)
|
10
|
+
|
11
|
+
@build_cmd = initialize_apk_build_cmd(args, options)
|
12
|
+
@output_path = options[:output].blank? ? "#{@build_dir}/build/outputs/apk" : File.absolute_path(options[:output].to_s)
|
13
|
+
|
14
|
+
logger_info_and_run_build_command
|
15
|
+
|
16
|
+
@builded_app_path ||= Dir[@output_path].find { |i| i =~ /release/ }
|
17
|
+
@builded_app_path ||= Dir["#{@output_path}/*.apk"].first
|
18
|
+
|
19
|
+
publish_build_app if options.publish?
|
20
|
+
|
21
|
+
logger_info_blank_line
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def initialize_apk_build_cmd args, options
|
27
|
+
check_build_gradle_exist
|
28
|
+
|
29
|
+
apk_build_cmd = "gradle clean;gradle build"
|
30
|
+
apk_build_cmd
|
31
|
+
end
|
32
|
+
|
33
|
+
def check_build_gradle_exist
|
34
|
+
unless File.exist?("#{@build_dir}/build.gradle")
|
35
|
+
logger.error "The build.gradle is not exit, please use gradle and edit"
|
36
|
+
exit 1
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module FIR
|
4
|
+
module BuildCommon
|
5
|
+
|
6
|
+
def initialize_build_common_options args, options
|
7
|
+
if args.first.blank? || !File.exist?(args.first)
|
8
|
+
@build_dir = Dir.pwd
|
9
|
+
else
|
10
|
+
@build_dir = File.absolute_path(args.shift.to_s) # pop the first param
|
11
|
+
end
|
12
|
+
|
13
|
+
@token = options[:token] || current_token
|
14
|
+
@changelog = options[:changelog].to_s
|
15
|
+
@short = options[:short].to_s
|
16
|
+
@proj = options[:proj].to_s
|
17
|
+
end
|
18
|
+
|
19
|
+
def publish_build_app
|
20
|
+
logger_info_blank_line
|
21
|
+
publish @builded_app_path, short: @short,
|
22
|
+
changelog: @changelog,
|
23
|
+
token: @token
|
24
|
+
end
|
25
|
+
|
26
|
+
def logger_info_and_run_build_command
|
27
|
+
puts @build_cmd if $DEBUG
|
28
|
+
|
29
|
+
logger.info "Building......"
|
30
|
+
logger_info_dividing_line
|
31
|
+
|
32
|
+
logger.info `#{@build_cmd}`
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -1,45 +1,25 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
module FIR
|
4
|
-
module
|
4
|
+
module BuildIpa
|
5
5
|
|
6
6
|
def build_ipa *args, options
|
7
|
-
|
8
|
-
check_osx
|
9
|
-
|
10
|
-
if args.first.blank? || !File.exist?(args.first)
|
11
|
-
@build_dir = Dir.pwd
|
12
|
-
else
|
13
|
-
@build_dir = File.absolute_path(args.shift.to_s) # pop the first param
|
14
|
-
end
|
15
|
-
|
16
|
-
@token = options[:token] || current_token
|
17
|
-
@changelog = options[:changelog].to_s
|
18
|
-
@short = options[:short].to_s
|
19
|
-
@proj = options[:proj].to_s
|
7
|
+
initialize_build_common_options(args, options)
|
20
8
|
|
21
9
|
@build_tmp_dir = Dir.mktmpdir
|
22
10
|
@output_path = options[:output].blank? ? "#{@build_dir}/fir_build_ipa" : File.absolute_path(options[:output].to_s)
|
23
|
-
@
|
24
|
-
|
25
|
-
puts @ipa_build_cmd if $DEBUG
|
11
|
+
@build_cmd = initialize_ipa_build_cmd(args, options)
|
26
12
|
|
27
|
-
|
28
|
-
logger_info_dividing_line
|
29
|
-
|
30
|
-
logger.info `#{@ipa_build_cmd}`
|
13
|
+
logger_info_and_run_build_command
|
31
14
|
|
32
15
|
output_ipa
|
33
|
-
|
34
|
-
|
35
|
-
|
16
|
+
@builded_app_path = Dir["#{@output_path}/*.ipa"].first
|
17
|
+
publish_build_app if options.publish?
|
18
|
+
upload_build_dsym_mapping_file if options.mapping?
|
36
19
|
|
37
20
|
logger_info_blank_line
|
38
21
|
end
|
39
22
|
|
40
|
-
def build_apk *args, options
|
41
|
-
end
|
42
|
-
|
43
23
|
private
|
44
24
|
|
45
25
|
def initialize_ipa_build_cmd args, options
|
@@ -98,17 +78,10 @@ module FIR
|
|
98
78
|
logger.info "Build Success"
|
99
79
|
end
|
100
80
|
|
101
|
-
def
|
102
|
-
logger_info_blank_line
|
103
|
-
publish Dir["#{@output_path}/*.ipa"].first, short: @short,
|
104
|
-
changelog: @changelog,
|
105
|
-
token: @token
|
106
|
-
end
|
107
|
-
|
108
|
-
def upload_build_mapping_file
|
81
|
+
def upload_build_dsym_mapping_file
|
109
82
|
logger_info_blank_line
|
110
83
|
|
111
|
-
@app_info = ipa_info(
|
84
|
+
@app_info = ipa_info(@builded_app_path)
|
112
85
|
@mapping_file = Dir["#{@output_path}/*.dSYM/Contents/Resources/DWARF/*"].first
|
113
86
|
|
114
87
|
mapping @mapping_file, proj: @proj,
|
@@ -128,13 +101,6 @@ module FIR
|
|
128
101
|
hash
|
129
102
|
end
|
130
103
|
|
131
|
-
def check_osx
|
132
|
-
unless OS.mac?
|
133
|
-
logger.error "Unsupported OS type, `build_ipa` only support for OSX"
|
134
|
-
exit 1
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
104
|
def check_and_find_ios_project path
|
139
105
|
unless File.exist?(path)
|
140
106
|
logger.error "The first param BUILD_DIR must be a xcodeproj directory"
|
data/lib/fir/util.rb
CHANGED
@@ -6,7 +6,9 @@ require_relative './util/parser'
|
|
6
6
|
require_relative './util/login'
|
7
7
|
require_relative './util/me'
|
8
8
|
require_relative './util/info'
|
9
|
-
require_relative './util/
|
9
|
+
require_relative './util/build_common'
|
10
|
+
require_relative './util/build_ipa'
|
11
|
+
require_relative './util/build_apk'
|
10
12
|
require_relative './util/publish'
|
11
13
|
require_relative './util/mapping'
|
12
14
|
|
@@ -20,7 +22,9 @@ module FIR
|
|
20
22
|
include FIR::Login
|
21
23
|
include FIR::Me
|
22
24
|
include FIR::Info
|
23
|
-
include FIR::
|
25
|
+
include FIR::BuildCommon
|
26
|
+
include FIR::BuildIpa
|
27
|
+
include FIR::BuildApk
|
24
28
|
include FIR::Publish
|
25
29
|
include FIR::Mapping
|
26
30
|
|
data/lib/fir/version.rb
CHANGED
data/test/build_ipa_test.rb
CHANGED
@@ -1,9 +1,14 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
|
-
class
|
3
|
+
class BuildAppTest < Minitest::Test
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
|
5
|
+
def test_build_app
|
6
|
+
if ENV['TEST_BUILD']
|
7
|
+
options = OpenStruct.new
|
8
|
+
options.send("publish?=", true)
|
9
|
+
|
10
|
+
assert FIR.build_ipa(default_ipa_project, options)
|
11
|
+
assert FIR.build_apk(default_apk_project, options)
|
12
|
+
end
|
8
13
|
end
|
9
14
|
end
|
data/test/mapping_test.rb
CHANGED
@@ -9,7 +9,9 @@ class MappingTest < Minitest::Test
|
|
9
9
|
build: '1'
|
10
10
|
}
|
11
11
|
|
12
|
-
|
13
|
-
|
12
|
+
if ENV['TEST_MAPPING']
|
13
|
+
assert FIR.mapping(default_dsym_mapping, options.merge(proj: default_bughd_project_ios_id))
|
14
|
+
assert FIR.mapping(default_txt_mapping, options.merge(proj: default_bughd_project_android_id))
|
15
|
+
end
|
14
16
|
end
|
15
17
|
end
|
data/test/test_helper.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
|
3
3
|
require 'minitest/autorun'
|
4
|
+
require 'ostruct'
|
4
5
|
require 'fir'
|
5
6
|
|
6
7
|
FIR.logger = Logger.new(STDOUT)
|
@@ -23,6 +24,14 @@ class Minitest::Test
|
|
23
24
|
File.expand_path('../cases', __FILE__) + '/test_ipa.ipa'
|
24
25
|
end
|
25
26
|
|
27
|
+
def default_ipa_project
|
28
|
+
File.expand_path('../projects', __FILE__) + '/ipa'
|
29
|
+
end
|
30
|
+
|
31
|
+
def default_apk_project
|
32
|
+
File.expand_path('../projects', __FILE__) + '/apk'
|
33
|
+
end
|
34
|
+
|
26
35
|
def default_bughd_project_ios_id
|
27
36
|
'55bb2839692d647a46000004'
|
28
37
|
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.1.
|
4
|
+
version: 1.1.8
|
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-08-
|
12
|
+
date: 2015-08-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -150,7 +150,9 @@ files:
|
|
150
150
|
- lib/fir/patches/native_patch.rb
|
151
151
|
- lib/fir/patches/os_patch.rb
|
152
152
|
- lib/fir/util.rb
|
153
|
-
- lib/fir/util/
|
153
|
+
- lib/fir/util/build_apk.rb
|
154
|
+
- lib/fir/util/build_common.rb
|
155
|
+
- lib/fir/util/build_ipa.rb
|
154
156
|
- lib/fir/util/config.rb
|
155
157
|
- lib/fir/util/http.rb
|
156
158
|
- lib/fir/util/info.rb
|
@@ -179,14 +181,16 @@ metadata: {}
|
|
179
181
|
post_install_message: "\n ______________ ________ ____\n /
|
180
182
|
____/ _/ __ \\ / ____/ / / _/\n / /_ / // /_/ /_____/ / / / /
|
181
183
|
/\n / __/ _/ // _, _/_____/ /___/ /____/ /\n /_/ /___/_/ |_| \\____/_____/___/\n\n
|
182
|
-
\ ## 更新记录\n ### FIR-CLI 1.1.
|
184
|
+
\ ## 更新记录\n ### FIR-CLI 1.1.8\n - 完全兼容新版 API ✔\n - 请使用新版 API Token\n - 新版 API
|
183
185
|
Token 查看地址: `http://fir.im/user/info`\n - 增加符号表上传指令, `fir mapping(alias m)`\n -
|
184
186
|
有以下三种方式上传符号表(目前已经支持 dSYM 和 txt 两种格式的符号表文件上传)\n - 1. 指定 version 和 build 上传: `fir
|
185
187
|
m <mapping file path> -P <bughd project id> -v <app version> -b <app build> -T <your
|
186
188
|
api token>`\n - 2. 在 publish 的时候自动上传: `fir p <app file path> -m <mapping file
|
187
189
|
path> -P <bughd project id> -T <your api token>`\n - 3. 在 build_ipa 的时候自动上传:
|
188
|
-
`fir b <project dir> -P <bughd project id> -M -p -T <your api token>`\n -
|
189
|
-
|
190
|
+
`fir b <project dir> -P <bughd project id> -M -p -T <your api token>`\n - 支持 gradle
|
191
|
+
打包 apk 文件并自动上传至 fir.im, `fir build_apk(alias ba)`\n - `fir ba <project dir> [-o
|
192
|
+
<apk output dir> -c <changelog> -p -T <your api token>]`\n - [fir-cli](https://github.com/FIRHQ/fir-cli)
|
193
|
+
已经开源, 欢迎 fork, issue 和 pull request\n "
|
190
194
|
rdoc_options: []
|
191
195
|
require_paths:
|
192
196
|
- lib
|