fir-cli-x 1.7.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +8 -0
- data/.dockerignore +2 -0
- data/.flow-plugin.yml +14 -0
- data/.gitignore +27 -0
- data/.travis.yml +23 -0
- data/CHANGELOG +194 -0
- data/Dockerfile +12 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +63 -0
- data/Rakefile +10 -0
- data/bin/console +11 -0
- data/bin/fir +14 -0
- data/bin/setup +7 -0
- data/doc/help.md +34 -0
- data/doc/info.md +44 -0
- data/doc/install.md +67 -0
- data/doc/login.md +19 -0
- data/doc/publish.md +35 -0
- data/doc/upgrade.md +7 -0
- data/fir-cli.gemspec +52 -0
- data/fir.sh +46 -0
- data/install.sh +210 -0
- data/lib/fir-cli.rb +3 -0
- data/lib/fir.rb +28 -0
- data/lib/fir/api.yml +7 -0
- data/lib/fir/cli.rb +181 -0
- data/lib/fir/patches.rb +10 -0
- data/lib/fir/patches/blank.rb +131 -0
- data/lib/fir/patches/concern.rb +146 -0
- data/lib/fir/patches/default_headers.rb +9 -0
- data/lib/fir/patches/hash.rb +79 -0
- data/lib/fir/patches/instance_variables.rb +30 -0
- data/lib/fir/patches/native_patch.rb +28 -0
- data/lib/fir/patches/os_patch.rb +28 -0
- data/lib/fir/patches/try.rb +102 -0
- data/lib/fir/util.rb +86 -0
- data/lib/fir/util/build_apk.rb +77 -0
- data/lib/fir/util/build_common.rb +93 -0
- data/lib/fir/util/build_ipa.rb +11 -0
- data/lib/fir/util/config.rb +43 -0
- data/lib/fir/util/http.rb +23 -0
- data/lib/fir/util/info.rb +38 -0
- data/lib/fir/util/login.rb +17 -0
- data/lib/fir/util/mapping.rb +98 -0
- data/lib/fir/util/me.rb +19 -0
- data/lib/fir/util/parser/apk.rb +46 -0
- data/lib/fir/util/parser/bin/pngcrush +0 -0
- data/lib/fir/util/parser/common.rb +24 -0
- data/lib/fir/util/parser/ipa.rb +188 -0
- data/lib/fir/util/parser/pngcrush.rb +23 -0
- data/lib/fir/util/publish.rb +253 -0
- data/lib/fir/version.rb +5 -0
- data/lib/fir/xcode_wrapper.sh +29 -0
- data/lib/fir_cli.rb +3 -0
- data/test/build_ipa_test.rb +17 -0
- data/test/cases/test_apk.apk +0 -0
- data/test/cases/test_apk_txt +1 -0
- data/test/cases/test_ipa.ipa +0 -0
- data/test/cases/test_ipa_dsym +0 -0
- data/test/info_test.rb +36 -0
- data/test/login_test.rb +12 -0
- data/test/mapping_test.rb +18 -0
- data/test/me_test.rb +17 -0
- data/test/publish_test.rb +44 -0
- data/test/test_helper.rb +98 -0
- metadata +273 -0
data/doc/help.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
### 相关指令帮助
|
2
|
+
|
3
|
+
`fir help` 命令不仅可以运行在 `fir` 主命令上, 还可以运行在相应子命令上查看相关的帮助.
|
4
|
+
|
5
|
+
```sh
|
6
|
+
$ fir help
|
7
|
+
Commands:
|
8
|
+
fir build_apk BUILD_DIR # Build Android app (alias: `ba`).
|
9
|
+
fir build_ipa BUILD_DIR [options] [settings] # Build iOS app (alias: `bi`).
|
10
|
+
fir help # Describe available commands or one specific command (aliases: `h`).
|
11
|
+
fir info APP_FILE_PATH # Show iOS/Android app info, support ipa/apk file (aliases: `i`).
|
12
|
+
fir login # Login fir.im (aliases: `l`).
|
13
|
+
fir mapping MAPPING_FILE_PATH # Upload app mapping file to BugHD.com (aliases: `m`).
|
14
|
+
fir me # Show current user info if user is logined.
|
15
|
+
fir publish APP_FILE_PATH # Publish iOS/Android app to fir.im, support ipa/apk file (aliases: `...
|
16
|
+
fir upgrade # Upgrade fir-cli and quit (aliases: `u`).
|
17
|
+
fir version # Show fir-cli version number and quit (aliases: `v`).
|
18
|
+
|
19
|
+
Options:
|
20
|
+
-T, [--token=TOKEN] # User's API Token at fir.im
|
21
|
+
-L, [--logfile=LOGFILE] # Path to writable logfile
|
22
|
+
-V, [--verbose], [--no-verbose] # Show verbose
|
23
|
+
# Default: true
|
24
|
+
-q, [--quiet], [--no-quiet] # Silence commands
|
25
|
+
-h, [--help], [--no-help] # Show this help message and quit
|
26
|
+
```
|
27
|
+
#### 全局参数说明
|
28
|
+
|
29
|
+
- `alias <short command>` 意味着可以用 alias 别名来代替该指令, 例如 `fir b`
|
30
|
+
- `-T` 用户在 fir.im 上的 api_token
|
31
|
+
- `-L` 指定 fir-cli 的输出 log, 默认为 STDOUT
|
32
|
+
- `-V` Verbose, 默认为输出所有信息( INFO 和 ERROR), 如果设置 `--no-verbose`, 则只输出 ERROR 信息
|
33
|
+
- `-q` 静默模式, 默认关闭
|
34
|
+
- `-h` 查看相关命令帮助
|
data/doc/info.md
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
### fir info
|
2
|
+
|
3
|
+
`fir info` 命令用于查看当前 ipa/apk 相关信息.
|
4
|
+
|
5
|
+
```sh
|
6
|
+
$ fir info --help
|
7
|
+
Usage:
|
8
|
+
fir info APP_FILE_PATH
|
9
|
+
|
10
|
+
Show iOS/Android app info, support ipa/apk file (aliases: `i`).
|
11
|
+
```
|
12
|
+
|
13
|
+
#### 查看 ipa 相关信息
|
14
|
+
|
15
|
+
```sh
|
16
|
+
$ fir info ./build_ipa.ipa
|
17
|
+
|
18
|
+
I, [2016-03-08T12:28:29.310846 #11961] INFO -- : Analyzing ipa file......
|
19
|
+
I, [2016-03-08T12:28:29.310932 #11961] INFO -- : ✈ -------------------------------------------- ✈
|
20
|
+
I, [2016-03-08T12:28:29.395706 #11961] INFO -- : type: ios
|
21
|
+
I, [2016-03-08T12:28:29.395775 #11961] INFO -- : identifier: xx.xxx.build-ipa
|
22
|
+
I, [2016-03-08T12:28:29.395793 #11961] INFO -- : name: build_ipa
|
23
|
+
I, [2016-03-08T12:28:29.395805 #11961] INFO -- : display_name: build_ipa
|
24
|
+
I, [2016-03-08T12:28:29.395817 #11961] INFO -- : build: 1
|
25
|
+
I, [2016-03-08T12:28:29.395829 #11961] INFO -- : version: 1.0
|
26
|
+
I, [2016-03-08T12:28:29.396007 #11961] INFO -- : devices: ["fasdfafaf3f4xxxxxxx78aecbc1234567"]
|
27
|
+
I, [2016-03-08T12:28:29.396057 #11961] INFO -- : release_type: adhoc
|
28
|
+
I, [2016-03-08T12:28:29.396086 #11961] INFO -- : distribution_name: iOSTeam Provisioning Profile: xx.xxx.* - xxx xx xxxxxx LLC.
|
29
|
+
I, [2016-03-08T12:28:29.396111 #11961] INFO -- :
|
30
|
+
```
|
31
|
+
|
32
|
+
#### 查看 apk 相关信息
|
33
|
+
|
34
|
+
```sh
|
35
|
+
$ fir info ./test_apk.apk
|
36
|
+
I, [2016-03-08T12:30:25.241278 #12073] INFO -- : Analyzing apk file......
|
37
|
+
I, [2016-03-08T12:30:25.241363 #12073] INFO -- : ✈ -------------------------------------------- ✈
|
38
|
+
I, [2016-03-08T12:30:25.250430 #12073] INFO -- : type: android
|
39
|
+
I, [2016-03-08T12:30:25.250477 #12073] INFO -- : identifier: com.xxx.myapplication
|
40
|
+
I, [2016-03-08T12:30:25.250496 #12073] INFO -- : name: My Application
|
41
|
+
I, [2016-03-08T12:30:25.250509 #12073] INFO -- : build: 1
|
42
|
+
I, [2016-03-08T12:30:25.250520 #12073] INFO -- : version: 1.0
|
43
|
+
I, [2016-03-08T12:30:25.250532 #12073] INFO -- :
|
44
|
+
```
|
data/doc/install.md
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
### 安装
|
2
|
+
|
3
|
+
fir-cli 使用 Ruby 构建, 无需编译, 只要安装相应 gem 即可.
|
4
|
+
|
5
|
+
```sh
|
6
|
+
$ ruby -v # > 2.6.1
|
7
|
+
$ gem install fir-cli
|
8
|
+
```
|
9
|
+
|
10
|
+
#### 常见的安装问题
|
11
|
+
|
12
|
+
- ruby 要求最低版本为 2.3
|
13
|
+
|
14
|
+
- 使用系统自带的 Ruby 安装, 需确保 ruby-dev 已被正确的安装:
|
15
|
+
|
16
|
+
```sh
|
17
|
+
$ xcode-select --install # OS X 系统
|
18
|
+
$ sudo apt-get install ruby-dev # Linux 系统
|
19
|
+
```
|
20
|
+
|
21
|
+
- 出现 `Permission denied` 相关错误:
|
22
|
+
|
23
|
+
在命令前加上 `sudo`
|
24
|
+
|
25
|
+
- 出现 `Gem::RemoteFetcher::FetchError` 相关错误:
|
26
|
+
|
27
|
+
更换 Ruby 的源(由于国内网络原因, 你懂的), 并升级下系统自带的 gem
|
28
|
+
|
29
|
+
```sh
|
30
|
+
$ gem sources --remove https://rubygems.org/
|
31
|
+
$ gem sources -a https://gems.ruby-china.com/
|
32
|
+
$ gem sources -l
|
33
|
+
*** CURRENT SOURCES ***
|
34
|
+
|
35
|
+
https://gems.ruby-china.com
|
36
|
+
# 请确保只有 gems.ruby-china.com, 如果有其他的源, 请 remove 掉
|
37
|
+
|
38
|
+
gem update --system
|
39
|
+
gem install fir-cli
|
40
|
+
```
|
41
|
+
|
42
|
+
- Mac OS X 10.11 以后的版本, 由于10.11引入了 `rootless`, 无法直接安装 fir-cli, 有以下三种解决办法:
|
43
|
+
|
44
|
+
1\. 使用 [Homebrew](http://brew.sh/) 及 [RVM](https://rvm.io/) 安装 Ruby, 再安装 fir-cli(推荐)
|
45
|
+
|
46
|
+
```sh
|
47
|
+
# Install Homebrew:
|
48
|
+
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
|
49
|
+
|
50
|
+
# Install RVM:
|
51
|
+
$ \curl -sSL https://get.rvm.io | bash -s stable --ruby
|
52
|
+
|
53
|
+
$ gem install fir-cli
|
54
|
+
```
|
55
|
+
|
56
|
+
2\. 指定 fir-cli 中 bin 文件的 PATH
|
57
|
+
|
58
|
+
```sh
|
59
|
+
$ export PATH=/usr/local/bin:$PATH;gem install -n /usr/local/bin fir-cli
|
60
|
+
```
|
61
|
+
|
62
|
+
3\. 重写 Ruby Gem 的 bindir
|
63
|
+
|
64
|
+
```sh
|
65
|
+
$ echo 'gem: --bindir /usr/local/bin' >> ~/.gemrc
|
66
|
+
$ gem install fir-cli
|
67
|
+
```
|
data/doc/login.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
### fir login & fir me
|
2
|
+
|
3
|
+
`fir login` 命令用于使用 API token 登录 fir.im, 并使用发布应用等相关命令.
|
4
|
+
|
5
|
+
`fir me` 命令用于查看当前登录用户信息.
|
6
|
+
|
7
|
+
用户的 API token 可在 **[这里](http://fir.im/apps/apitoken)** 查看, 当使用 fir login 登录了之后, 后续命令都不需要加上 `-T` 参数, 会默认使用 **当前用户的 token** 进行相关操作.
|
8
|
+
|
9
|
+
```sh
|
10
|
+
$ fir login XXX_YOUR_API_TOKEN_XXX
|
11
|
+
I, [2016-03-08T12:48:56.499435 #13043] INFO -- : Login succeed, previous user's email: xxx@fir.im
|
12
|
+
I, [2016-03-08T12:48:56.507044 #13043] INFO -- : Login succeed, current user's email: xxx@fir.im
|
13
|
+
I, [2016-03-08T12:48:56.507147 #13043] INFO -- :
|
14
|
+
|
15
|
+
$ fir me
|
16
|
+
I, [2016-03-08T12:48:14.175488 #12986] INFO -- : Login succeed, current user's email: xxx@fir.im
|
17
|
+
I, [2016-03-08T12:48:14.175687 #12986] INFO -- : Login succeed, current user's name: xxx
|
18
|
+
I, [2016-03-08T12:48:14.175765 #12986] INFO -- :
|
19
|
+
```
|
data/doc/publish.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
### fir publish
|
2
|
+
|
3
|
+
`fir publish` 命令用于可以发布应用到 fir.im, 支持 ipa 和 apk 文件.
|
4
|
+
|
5
|
+
```sh
|
6
|
+
$ fir publish --help
|
7
|
+
Usage:
|
8
|
+
fir publish APP_FILE_PATH
|
9
|
+
|
10
|
+
Options:
|
11
|
+
-s, [--short=SHORT] # Set custom short link
|
12
|
+
-c, [--changelog=CHANGELOG] # Set changelog
|
13
|
+
-Q, [--qrcode], [--no-qrcode] # Generate qrcode
|
14
|
+
[--open], [--no-open] # true/false if open for everyone
|
15
|
+
[--password=PASSWORD] # Set password for app
|
16
|
+
-T, [--token=TOKEN] # User's API Token at fir.im
|
17
|
+
-L, [--logfile=LOGFILE] # Path to writable logfile
|
18
|
+
-R, [--need_release_id] # show release_id in download_url
|
19
|
+
-D, [--dingtalk_accesss_token=DINGTALK_ACCESS_TOKEN] # dingtalk notification
|
20
|
+
-V, [--verbose], [--no-verbose] # Show verbose
|
21
|
+
# Default: true
|
22
|
+
-q, [--quiet], [--no-quiet] # Silence commands
|
23
|
+
-h, [--help], [--no-help] # Show this help message and quit
|
24
|
+
```
|
25
|
+
|
26
|
+
相关参数详解:
|
27
|
+
|
28
|
+
- `-s` 参数, 自定义发布后的短链接地址.
|
29
|
+
- `-c` 参数, 自定义发布时的 changelog, 支持字符串与文件两种方式, 即 `--changelog='this is changelog'` 和 `--changelog='/Users/fir-cli/changelog'`.
|
30
|
+
- `-Q` 参数, 是否生成发布后二维码, 默认为不生成, 加上 `-Q` 参数后会在当前目录生成一张二维码图片, 扫描该图片即可下载该应用.
|
31
|
+
- `-R` 参数, 显示具体版本, 会在发布结束后的下载地址中生成指定的版本
|
32
|
+
- `-D` 参数, 钉钉机器人的access_token, 填写后当上传完毕, 会发送至钉钉机器人
|
33
|
+
- `--open` 参数, 设置发布后的应用是否开放给所有人下载, 关闭开放使用 `--no-open` 参数.
|
34
|
+
- `--password` 参数, 设置发布后的应用密码
|
35
|
+
|
data/doc/upgrade.md
ADDED
data/fir-cli.gemspec
ADDED
@@ -0,0 +1,52 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
3
|
+
lib = File.expand_path('../lib', __FILE__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'fir/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'fir-cli-x'
|
9
|
+
spec.version = FIR::VERSION
|
10
|
+
spec.authors = ['sparkrico','NaixSpirit', 'atpking']
|
11
|
+
spec.email = ['sparkrico@gmail.com']
|
12
|
+
spec.date = Time.now.strftime('%Y-%m-%d')
|
13
|
+
spec.summary = 'fir.im command tool'
|
14
|
+
spec.description = 'fir.im command tool, support iOS and Android'
|
15
|
+
spec.homepage = 'https://github.com/sparkrico/fir-cli'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
spec.files = `git ls-files -z`.split("\x0")
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
19
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.post_install_message = %q(
|
23
|
+
______________ ________ ____
|
24
|
+
/ ____/ _/ __ \ / ____/ / / _/
|
25
|
+
/ /_ / // /_/ /_____/ / / / / /
|
26
|
+
/ __/ _/ // _, _/_____/ /___/ /____/ /
|
27
|
+
/_/ /___/_/ |_| \____/_____/___/
|
28
|
+
|
29
|
+
## 更新记录
|
30
|
+
- (1.7.2.1) 修复label nil 的问题,更新了ruby_android_apk库
|
31
|
+
- (1.7.2) 修正了无论是否加参数都固定出现二维码图片的bug
|
32
|
+
- (1.7.1) 增加了 钉钉推送 , 增加了返回指定版本下载地址
|
33
|
+
- (1.7.0) 过期了ipa_build 功能, 增加了对 android manifest instant run 的兼容
|
34
|
+
- (1.6.13) 上传图标逻辑修改
|
35
|
+
- (1.6.12) 修复了部分机器没有默认安装 byebug 的问题
|
36
|
+
- (1.6.11) 变化了 ruby gem 仓库地址
|
37
|
+
- [fir-cli](https://github.com/firhq/fir-cli) 已经开源
|
38
|
+
- 欢迎 fork, issue 和 pull request
|
39
|
+
)
|
40
|
+
|
41
|
+
spec.add_development_dependency 'bundler'
|
42
|
+
spec.add_development_dependency 'rake'
|
43
|
+
spec.add_development_dependency 'minitest', '~> 5.7'
|
44
|
+
spec.add_development_dependency 'pry', '~> 0.10'
|
45
|
+
|
46
|
+
spec.add_dependency 'thor', '~> 0.19'
|
47
|
+
spec.add_dependency 'rest-client', '~> 2.0'
|
48
|
+
spec.add_dependency 'ruby_android_apk', '~> 0.7.7.1'
|
49
|
+
spec.add_dependency 'rqrcode', '~> 0.7'
|
50
|
+
spec.add_dependency 'CFPropertyList'
|
51
|
+
spec.add_dependency 'api_tools', '~> 0.1.0'
|
52
|
+
end
|
data/fir.sh
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#!/bin/sh
|
2
|
+
# because fir-cli dependent ruby enviroment, this shell is dependent ruby docker
|
3
|
+
# so xcode and gradle not use
|
4
|
+
# this shell only use to publish apk or ipa , build is not run
|
5
|
+
# fir publish **.apk
|
6
|
+
# echo $(curl https://raw.githubusercontent.com/FIRHQ/fir-cli/master/fir.sh) > /usr/local/bin/fir
|
7
|
+
|
8
|
+
mountFolder=$HOME/fir-cli/data
|
9
|
+
destFolder=/fir-cli
|
10
|
+
|
11
|
+
mkdir -p $mountFolder
|
12
|
+
|
13
|
+
# find path file name
|
14
|
+
function findFileName() {
|
15
|
+
echo ${1##*/}
|
16
|
+
}
|
17
|
+
|
18
|
+
# move file to mount folder
|
19
|
+
tmpFiles=()
|
20
|
+
cmds=()
|
21
|
+
for i in $@; do
|
22
|
+
if [ -d $i ];then
|
23
|
+
cp -r $i $mountFolder
|
24
|
+
elif [ -f $i ];then
|
25
|
+
cp $i $mountFolder
|
26
|
+
else
|
27
|
+
cmds+=($i)
|
28
|
+
continue
|
29
|
+
fi
|
30
|
+
destFile=$destFolder/$(findFileName $i)
|
31
|
+
cmds+=($destFile)
|
32
|
+
tmpFiles+=($mountFolder/$(findFileName $i))
|
33
|
+
done
|
34
|
+
|
35
|
+
# start docker to run fir cmd
|
36
|
+
docker run -v $HOME/fir-cli/data:/fir-cli flowci/fir-cli fir ${cmds[@]}
|
37
|
+
|
38
|
+
# clean folder
|
39
|
+
for i in ${tmpFiles}; do
|
40
|
+
if [ -d $i ];then
|
41
|
+
rm -rf $i
|
42
|
+
elif [ -f $i ];then
|
43
|
+
rm $i
|
44
|
+
fi
|
45
|
+
done
|
46
|
+
|
data/install.sh
ADDED
@@ -0,0 +1,210 @@
|
|
1
|
+
#!/usr/bin/env bash
|
2
|
+
#
|
3
|
+
# Copy from: ruby-bootstrap.sh
|
4
|
+
# Description: This script bootstraps rvm, Ruby
|
5
|
+
|
6
|
+
RVM_FRESH_INSTALL=0 # 0=false, 1=true
|
7
|
+
MIRROR_CHINA_INSTALL=1 # 0=false, 1=true
|
8
|
+
|
9
|
+
|
10
|
+
###
|
11
|
+
### Helper variables and functions
|
12
|
+
###
|
13
|
+
|
14
|
+
# Make the operating system of this host available as $OS.
|
15
|
+
OS_UNKNOWN="os-unknown"
|
16
|
+
OS_MAC="mac"
|
17
|
+
OS_LINUX="linux"
|
18
|
+
case `uname` in
|
19
|
+
Linux*)
|
20
|
+
OS=$OS_LINUX
|
21
|
+
;;
|
22
|
+
Darwin*)
|
23
|
+
OS=$OS_MAC
|
24
|
+
;;
|
25
|
+
*)
|
26
|
+
OS=$OS_UNKNOWN
|
27
|
+
;;
|
28
|
+
esac
|
29
|
+
|
30
|
+
# Colors for shell output
|
31
|
+
if [ "$OS" = "$OS_MAC" ]; then
|
32
|
+
red='\x1B[1;31m'
|
33
|
+
green='\x1B[1;32m'
|
34
|
+
yellow='\x1B[1;33m'
|
35
|
+
blue='\x1B[1;34m'
|
36
|
+
nocolor='\x1B[0m'
|
37
|
+
else
|
38
|
+
red='\e[1;31m'
|
39
|
+
green='\e[1;32m'
|
40
|
+
yellow='\e[1;33m'
|
41
|
+
blue='\e[1;34m'
|
42
|
+
nocolor='\e[0m'
|
43
|
+
fi
|
44
|
+
|
45
|
+
function puts() {
|
46
|
+
local opts=''
|
47
|
+
if [ "$1" = "-n" ]; then
|
48
|
+
opts='-n'
|
49
|
+
shift
|
50
|
+
fi
|
51
|
+
msg="$@"
|
52
|
+
echo -e $opts "${blue}${msg}${nocolor}"
|
53
|
+
}
|
54
|
+
|
55
|
+
function warn() {
|
56
|
+
local opts=''
|
57
|
+
if [ "$1" = "-n" ]; then
|
58
|
+
opts='-n'
|
59
|
+
shift
|
60
|
+
fi
|
61
|
+
msg="$@"
|
62
|
+
echo -e $opts "${yellow}${msg}${nocolor}"
|
63
|
+
}
|
64
|
+
|
65
|
+
function error() {
|
66
|
+
local opts=''
|
67
|
+
if [ "$1" = "-n" ]; then
|
68
|
+
opts='-n'
|
69
|
+
shift
|
70
|
+
fi
|
71
|
+
msg="$@"
|
72
|
+
echo -e $opts "${red}${msg}${nocolor}"
|
73
|
+
}
|
74
|
+
|
75
|
+
function success() {
|
76
|
+
local opts=''
|
77
|
+
if [ "$1" = "-n" ]; then
|
78
|
+
opts='-n'
|
79
|
+
shift
|
80
|
+
fi
|
81
|
+
msg="$@"
|
82
|
+
echo -e $opts "${green}${msg}${nocolor}"
|
83
|
+
}
|
84
|
+
|
85
|
+
function rvm_post_install_message() {
|
86
|
+
warn "Important: We performed a fresh install of rvm for you."
|
87
|
+
warn " This means you manually perform two tasks now."
|
88
|
+
warn
|
89
|
+
warn "Task 1 of 2:"
|
90
|
+
warn "------------"
|
91
|
+
warn "Please run the following command in all your open shell windows to"
|
92
|
+
warn "start using rvm. In rare cases you need to reopen all shell windows."
|
93
|
+
warn
|
94
|
+
warn " source ~/.rvm/scripts/rvm"
|
95
|
+
warn
|
96
|
+
warn
|
97
|
+
warn "Task 2 of 2:"
|
98
|
+
warn "------------"
|
99
|
+
warn "Permanently update your shell environment to source/add rvm."
|
100
|
+
warn "The example below shows how to do this for Bash."
|
101
|
+
warn
|
102
|
+
warn "Add the following two lines to your ~/.bashrc:"
|
103
|
+
warn
|
104
|
+
warn " PATH=\$PATH:\$HOME/.rvm/bin # Add RVM to PATH for scripting"
|
105
|
+
warn " [[ -s \"\$HOME/.rvm/scripts/rvm\" ]] && source \"\$HOME/.rvm/scripts/rvm\" # Load RVM into a shell session *as a function*"
|
106
|
+
warn
|
107
|
+
warn "That's it! Sorry for the extra work but this is the safest"
|
108
|
+
warn "way to update your environment without breaking anything."
|
109
|
+
}
|
110
|
+
|
111
|
+
function find_ruby_version_file() {
|
112
|
+
local filename=".ruby-version"
|
113
|
+
local curr_dir=$1
|
114
|
+
curr_dir=`cd "$curr_dir"; pwd`
|
115
|
+
local candidate_file="$curr_dir/$filename"
|
116
|
+
while [ ! -f "$candidate_file" ]; do
|
117
|
+
parent_dir=`cd ..; pwd`
|
118
|
+
if [ "$parent_dir" = "$curr_dir" ]; then
|
119
|
+
# We have reached /, we can't go up any further.
|
120
|
+
candidate_file=""
|
121
|
+
break
|
122
|
+
else
|
123
|
+
curr_dir="$parent_dir"
|
124
|
+
candidate_file="$curr_dir/$filename"
|
125
|
+
fi
|
126
|
+
done
|
127
|
+
echo $candidate_file
|
128
|
+
}
|
129
|
+
|
130
|
+
function detect_desired_ruby_version() {
|
131
|
+
local desired_ruby_version=""
|
132
|
+
ruby_version_file=`find_ruby_version_file $(pwd)`
|
133
|
+
if [ -n "$ruby_version_file" ]; then
|
134
|
+
desired_ruby_version=`head -n 1 $ruby_version_file`
|
135
|
+
fi
|
136
|
+
echo $desired_ruby_version
|
137
|
+
}
|
138
|
+
|
139
|
+
# We must detect the desired Ruby version before rvm "manipulates" the shell environment for its own purposes.
|
140
|
+
# I assume the cause of the problem is rvm's variant of the 'cd' command (~/.rvm/scripts/cd), which may alter the
|
141
|
+
# normal behavior of 'cd' in a way that breaks our usage of 'cd' in the function 'find_ruby_version_file' above.
|
142
|
+
puts -n "Detecting desired Ruby version: "
|
143
|
+
|
144
|
+
RUBY_VERSION=`detect_desired_ruby_version`
|
145
|
+
|
146
|
+
if [ -z "$RUBY_VERSION" ]; then
|
147
|
+
warn "FAILED (could not find .ruby-version) -- falling back to latest stable Ruby version"
|
148
|
+
RUBY_VERSION="ruby" # 'ruby' defaults to latest stable version
|
149
|
+
else
|
150
|
+
success "OK ($RUBY_VERSION)"
|
151
|
+
fi
|
152
|
+
|
153
|
+
|
154
|
+
###
|
155
|
+
### Bootstrap RVM
|
156
|
+
###
|
157
|
+
puts -n "Checking for rvm: "
|
158
|
+
which rvm &>/dev/null
|
159
|
+
if [ $? -ne 0 ]; then
|
160
|
+
error "NOT FOUND (If you already ran ruby-bootstrap: have you performed the post-installation steps?)"
|
161
|
+
puts "Installing latest stable version of rvm..."
|
162
|
+
RVM_FRESH_INSTALL=1
|
163
|
+
curl -L https://get.rvm.io | bash -s stable --autolibs=enable --ignore-dotfiles || exit 1
|
164
|
+
else
|
165
|
+
success "OK"
|
166
|
+
fi
|
167
|
+
|
168
|
+
if [ -d ~/.rvm/bin ]; then
|
169
|
+
PATH=$PATH:~/.rvm/bin
|
170
|
+
fi
|
171
|
+
|
172
|
+
source ~/.rvm/scripts/rvm
|
173
|
+
|
174
|
+
if [ $MIRROR_CHINA_INSTALL -eq 1 ]; then
|
175
|
+
echo "ruby_url=https://cache.ruby-china.org/pub/ruby" > ~/.rvm/user/db
|
176
|
+
fi
|
177
|
+
###
|
178
|
+
### Install Ruby
|
179
|
+
###
|
180
|
+
puts "Installing Ruby version ${RUBY_VERSION}..."
|
181
|
+
|
182
|
+
rvm install $RUBY_VERSION
|
183
|
+
|
184
|
+
if [ $? -ne 0 -a $RVM_FRESH_INSTALL -eq 1 ]; then
|
185
|
+
rvm_post_install_message
|
186
|
+
exit 2
|
187
|
+
fi
|
188
|
+
if [ $MIRROR_CHINA_INSTALL -eq 1 ]; then
|
189
|
+
gem sources --add https://gems.ruby-china.org/ --remove https://rubygems.org/
|
190
|
+
fi
|
191
|
+
|
192
|
+
###
|
193
|
+
### Install Bundler
|
194
|
+
###
|
195
|
+
puts "Installing bundler..."
|
196
|
+
gem install bundler
|
197
|
+
if [ $? -ne 0 -a $RVM_FRESH_INSTALL -eq 1 ]; then
|
198
|
+
rvm_post_install_message
|
199
|
+
exit 3
|
200
|
+
fi
|
201
|
+
|
202
|
+
puts "Installing fir-cli gem"
|
203
|
+
gem install fir-cli --no-rdoc --no-ri
|
204
|
+
if [ $? -ne 0 -a $RVM_FRESH_INSTALL -eq 1 ]; then
|
205
|
+
rvm_post_install_message
|
206
|
+
exit 4
|
207
|
+
fi
|
208
|
+
|
209
|
+
|
210
|
+
puts "run fir -v to check"
|