ocean_package 0.3.0 → 0.9.0
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 +4 -4
- data/.idea/ocean_package.iml +2 -0
- data/Gemfile +1 -0
- data/Gemfile.lock +10 -1
- data/README.md +19 -6
- data/lib/ocean_package.rb +4 -10
- data/lib/ocean_package/command.rb +30 -1
- data/lib/ocean_package/constants.rb +3 -3
- data/lib/ocean_package/fir.rb +36 -23
- data/lib/ocean_package/logger.rb +6 -0
- data/lib/ocean_package/package.rb +8 -0
- data/lib/ocean_package/pgy.rb +148 -0
- data/lib/ocean_package/version.rb +1 -1
- data/ocean_package.gemspec +6 -0
- metadata +73 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 1a4bc23aa666b52c1c5721d116d66b4b5d8e45e271546c4a1b40c9f293d86048
|
|
4
|
+
data.tar.gz: bb5a19d0acc1d8c61bf213d39942733ed53d3b3680d124c8c92bfee1a5fa5c38
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d9322243e7b67e171b0d65f8b4b6ccdb7fb0ee4e3f977eae87941a7749934b1280e64fe222449bde23c1e756f14bace4314ee11775de285992f8079156fb5859
|
|
7
|
+
data.tar.gz: cd19248c665e3b5856870aa583bc6f28fb0b034d5e8b4b6324073923501df3b5d3fcaf4dff318a64c9cbbdcda69179dbe418ea35b10a9069076d52cbb1548665
|
data/.idea/ocean_package.iml
CHANGED
|
@@ -16,11 +16,13 @@
|
|
|
16
16
|
<orderEntry type="library" scope="PROVIDED" name="claide (v1.0.3, ruby-2.6.3-p62) [gem]" level="application" />
|
|
17
17
|
<orderEntry type="library" scope="PROVIDED" name="concurrent-ruby (v1.1.6, ruby-2.6.3-p62) [gem]" level="application" />
|
|
18
18
|
<orderEntry type="library" scope="PROVIDED" name="dingbot (v0.2.3, ruby-2.6.3-p62) [gem]" level="application" />
|
|
19
|
+
<orderEntry type="library" scope="PROVIDED" name="faraday (v1.0.1, ruby-2.6.3-p62) [gem]" level="application" />
|
|
19
20
|
<orderEntry type="library" scope="PROVIDED" name="httparty (v0.18.1, ruby-2.6.3-p62) [gem]" level="application" />
|
|
20
21
|
<orderEntry type="library" scope="PROVIDED" name="mime-types (v3.3.1, ruby-2.6.3-p62) [gem]" level="application" />
|
|
21
22
|
<orderEntry type="library" scope="PROVIDED" name="mime-types-data (v3.2020.0512, ruby-2.6.3-p62) [gem]" level="application" />
|
|
22
23
|
<orderEntry type="library" scope="PROVIDED" name="minitest (v5.11.3, ruby-2.6.3-p62) [gem]" level="application" />
|
|
23
24
|
<orderEntry type="library" scope="PROVIDED" name="multi_xml (v0.6.0, ruby-2.6.3-p62) [gem]" level="application" />
|
|
25
|
+
<orderEntry type="library" scope="PROVIDED" name="multipart-post (v2.1.1, ruby-2.6.3-p62) [gem]" level="application" />
|
|
24
26
|
<orderEntry type="library" scope="PROVIDED" name="rake (v10.5.0, ruby-2.6.3-p62) [gem]" level="application" />
|
|
25
27
|
<orderEntry type="library" scope="PROVIDED" name="semantic_logger (v4.7.1, ruby-2.6.3-p62) [gem]" level="application" />
|
|
26
28
|
</component>
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
ocean_package (0.
|
|
4
|
+
ocean_package (0.8.0)
|
|
5
|
+
CFPropertyList
|
|
6
|
+
dingbot
|
|
7
|
+
faraday
|
|
8
|
+
multipart-post
|
|
9
|
+
semantic_logger
|
|
5
10
|
|
|
6
11
|
GEM
|
|
7
12
|
remote: https://rubygems.org/
|
|
@@ -11,6 +16,8 @@ GEM
|
|
|
11
16
|
concurrent-ruby (1.1.6)
|
|
12
17
|
dingbot (0.2.3)
|
|
13
18
|
httparty
|
|
19
|
+
faraday (1.0.1)
|
|
20
|
+
multipart-post (>= 1.2, < 3)
|
|
14
21
|
httparty (0.18.1)
|
|
15
22
|
mime-types (~> 3.0)
|
|
16
23
|
multi_xml (>= 0.5.2)
|
|
@@ -19,6 +26,7 @@ GEM
|
|
|
19
26
|
mime-types-data (3.2020.0512)
|
|
20
27
|
minitest (5.11.3)
|
|
21
28
|
multi_xml (0.6.0)
|
|
29
|
+
multipart-post (2.1.1)
|
|
22
30
|
rake (10.5.0)
|
|
23
31
|
semantic_logger (4.7.1)
|
|
24
32
|
concurrent-ruby (~> 1.0)
|
|
@@ -31,6 +39,7 @@ DEPENDENCIES
|
|
|
31
39
|
bundler (~> 1.17.2)
|
|
32
40
|
claide (~> 1.0, >= 1.0.3)
|
|
33
41
|
dingbot
|
|
42
|
+
faraday
|
|
34
43
|
minitest (~> 5.0)
|
|
35
44
|
ocean_package!
|
|
36
45
|
rake (~> 10.0)
|
data/README.md
CHANGED
|
@@ -24,24 +24,37 @@ or
|
|
|
24
24
|
|
|
25
25
|
$ sudo gem install ocean_package
|
|
26
26
|
|
|
27
|
+
其他需要安装的依赖
|
|
28
|
+
|
|
29
|
+
- `fir-cli`, [链接](https://github.com/FIRHQ/fir-cli)
|
|
30
|
+
- `ossutil`, [链接](https://help.aliyun.com/document_detail/120075.html?spm=a2c4g.11186623.2.45.6e491c7akyZ5HE)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
sudo gem install dingbot
|
|
35
|
+
sudo gem install semantic_logger
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
|
|
27
39
|
## Usage
|
|
28
40
|
|
|
29
41
|
```
|
|
30
|
-
oceanpackage --workspace-path=/Users/ocean/Desktop/code/iOS/MyApp.xcworkspace --scheme=MyApp --configuration=Debug --archive-path=/Users/ocean/Documents/myipas --export-options-plist=/Users/ocean/Desktop/code/iOS/Company/MyApp/AdHocExportOptions.plist --company-name=MyCompany --fir-token=fir平台的token --change-log=测试一下 --oss-bucket-name=bucket名称 --oss-bucket-path=bucket路径 --oss-endpoint=oss的endpoint --ding-token=钉钉群机器人token --at-mobiles=需要@的人手机号
|
|
42
|
+
oceanpackage --workspace-path=/Users/ocean/Desktop/code/iOS/MyApp.xcworkspace --scheme=MyApp --configuration=Debug --archive-path=/Users/ocean/Documents/myipas --export-options-plist=/Users/ocean/Desktop/code/iOS/Company/MyApp/AdHocExportOptions.plist --company-name=MyCompany --fir-token=fir平台的token --pgy-api-key=蒲公英平台的apikey --change-log=测试一下 --oss-bucket-name=bucket名称 --oss-bucket-path=bucket路径 --oss-endpoint=oss的endpoint --ding-token=钉钉群机器人token --at-mobiles=需要@的人手机号
|
|
31
43
|
```
|
|
32
44
|
|
|
33
45
|
- `--workspace-path`: `.xcworkspace` 文件路径
|
|
34
46
|
- `--scheme`: `scheme`
|
|
35
|
-
- `--configuration`: Debug 和 Release
|
|
47
|
+
- `--configuration`: `Debug` 和 `Release`
|
|
36
48
|
- `--archive-path`: 生成的 `.xcarchive` 文件目录
|
|
37
49
|
- `--export-options-plist`: 打包用到的 `export-options` plist 文件路径
|
|
38
50
|
- `--company-name`: 公司名称,可以不填
|
|
39
51
|
- `--fir-token`: fir 平台的 token
|
|
52
|
+
- `--pgy-api-key`: 蒲公英平台的 api key
|
|
40
53
|
- `--change-log`: 更新描述
|
|
41
|
-
- `--oss-bucket-name`: oss bucket 名称
|
|
42
|
-
- `--oss-bucket-path`: oss bucket 路径
|
|
43
|
-
- `--oss-endpoint`: oss 的 endpoint
|
|
44
|
-
- `--ding-token`:
|
|
54
|
+
- `--oss-bucket-name`: `oss bucket` 名称
|
|
55
|
+
- `--oss-bucket-path`: `oss bucket` 路径
|
|
56
|
+
- `--oss-endpoint`: `oss` 的 `endpoint`
|
|
57
|
+
- `--ding-token`: 钉钉群机器人的`token`
|
|
45
58
|
- `--at-mobiles`: 钉钉群需要 @ 的人手机号,多个用 `,` 拼接
|
|
46
59
|
|
|
47
60
|
|
data/lib/ocean_package.rb
CHANGED
|
@@ -2,6 +2,9 @@ require 'fileutils'
|
|
|
2
2
|
require 'dingbot'
|
|
3
3
|
require 'cfpropertylist'
|
|
4
4
|
require 'semantic_logger'
|
|
5
|
+
require 'multipart_post'
|
|
6
|
+
require 'net/http/post/multipart'
|
|
7
|
+
require 'json'
|
|
5
8
|
|
|
6
9
|
# 注意:这里使用 require_relative 来引用文件
|
|
7
10
|
require_relative 'ocean_package/version'
|
|
@@ -14,6 +17,7 @@ require_relative 'ocean_package/dingtalk'
|
|
|
14
17
|
require_relative 'ocean_package/ipa'
|
|
15
18
|
require_relative 'ocean_package/logger'
|
|
16
19
|
require_relative 'ocean_package/package'
|
|
20
|
+
require_relative 'ocean_package/pgy'
|
|
17
21
|
|
|
18
22
|
module OceanPackage
|
|
19
23
|
require 'claide'
|
|
@@ -26,16 +30,6 @@ module OceanPackage
|
|
|
26
30
|
command = OceanPackage::Command.new(argvs)
|
|
27
31
|
command.run
|
|
28
32
|
|
|
29
|
-
|
|
30
|
-
# # command = OceanPackage::Command.new(config)
|
|
31
|
-
#
|
|
32
|
-
# argv = CLAide::ARGV.new(ARGV)
|
|
33
|
-
# if !argv.arguments.include?("oceanpackage")
|
|
34
|
-
# puts "不包含命令 oceanpackage"
|
|
35
|
-
# exit 1
|
|
36
|
-
# end
|
|
37
|
-
#
|
|
38
|
-
# puts "包含命令 oceanpackage"
|
|
39
33
|
end
|
|
40
34
|
|
|
41
35
|
end
|
|
@@ -6,6 +6,8 @@ module OceanPackage
|
|
|
6
6
|
attr_accessor :package
|
|
7
7
|
# fir 平台
|
|
8
8
|
attr_accessor :fir
|
|
9
|
+
# 蒲公英平台
|
|
10
|
+
attr_accessor :pgy
|
|
9
11
|
# oss 对象
|
|
10
12
|
attr_accessor :oss
|
|
11
13
|
# ding ding
|
|
@@ -56,6 +58,11 @@ module OceanPackage
|
|
|
56
58
|
fir_log_path = @package.final_archive_path + 'fir.log'
|
|
57
59
|
@fir = OceanPackage::Fir.new(fir_token, final_change_log, @package.ipa_file_path, fir_log_path)
|
|
58
60
|
|
|
61
|
+
##### 蒲公英 #####
|
|
62
|
+
pgy_api_key = argv.option("pgy-api-key", "")
|
|
63
|
+
@pgy = OceanPackage::Pgy.new(pgy_api_key, final_change_log, @package.ipa_file_path)
|
|
64
|
+
Log.info("pgy_api_key: #{pgy_api_key}")
|
|
65
|
+
|
|
59
66
|
##### oss #####
|
|
60
67
|
oss_bucket_name = argv.option("oss-bucket-name", "")
|
|
61
68
|
Log.info("oss_bucket_name: #{oss_bucket_name}")
|
|
@@ -96,9 +103,22 @@ module OceanPackage
|
|
|
96
103
|
|
|
97
104
|
# 上传 ipa 文件
|
|
98
105
|
def upload
|
|
99
|
-
|
|
106
|
+
can_fir = fir.check
|
|
107
|
+
can_pgy = pgy.check
|
|
108
|
+
if can_fir
|
|
109
|
+
Log.info("publish platform: fir")
|
|
110
|
+
upload_to_fir
|
|
111
|
+
elsif can_pgy
|
|
112
|
+
Log.info("publish platform: pgy")
|
|
113
|
+
upload_to_pgy
|
|
114
|
+
else
|
|
115
|
+
Log.info("publish platform: none, exit")
|
|
116
|
+
exit(1)
|
|
117
|
+
end
|
|
100
118
|
end
|
|
101
119
|
|
|
120
|
+
# ------ fir 平台 -------
|
|
121
|
+
|
|
102
122
|
# 上传到 fir 平台
|
|
103
123
|
def upload_to_fir
|
|
104
124
|
fir.run
|
|
@@ -112,6 +132,13 @@ module OceanPackage
|
|
|
112
132
|
@qr_code_url = oss.upload(path, name)
|
|
113
133
|
end
|
|
114
134
|
|
|
135
|
+
# ------ pgy 平台 -------
|
|
136
|
+
def upload_to_pgy
|
|
137
|
+
pgy.run
|
|
138
|
+
@qr_code_url = pgy.get_qr_code_url
|
|
139
|
+
@ipa_download_link = pgy.get_download_url
|
|
140
|
+
end
|
|
141
|
+
|
|
115
142
|
# 总共时间,单位 秒 s
|
|
116
143
|
def compute_total_time
|
|
117
144
|
time1 = package.start_time
|
|
@@ -145,7 +172,9 @@ module OceanPackage
|
|
|
145
172
|
content += "下载链接: [点我](#{@ipa_download_link})" + "\n\n"
|
|
146
173
|
content += ""
|
|
147
174
|
|
|
175
|
+
Log.divider
|
|
148
176
|
Log.info("web hook message: \n#{content}")
|
|
177
|
+
Log.divider
|
|
149
178
|
|
|
150
179
|
content
|
|
151
180
|
end
|
|
@@ -5,9 +5,9 @@ module OceanPackage
|
|
|
5
5
|
|
|
6
6
|
# 有效的 CONFIGURATION 值
|
|
7
7
|
AVAILABLE_CONFIGURATIONS = %w(Debug Release)
|
|
8
|
-
DEFAULT_CONFIGURATION =
|
|
9
|
-
DEFAULT_COMPANY_NAME =
|
|
10
|
-
DEFAULT_ARCHIVE_PATH =
|
|
8
|
+
DEFAULT_CONFIGURATION = "Debug"
|
|
9
|
+
DEFAULT_COMPANY_NAME = "YourCompanyName"
|
|
10
|
+
DEFAULT_ARCHIVE_PATH = "#{Dir.home}/Documents/Ipas/"
|
|
11
11
|
|
|
12
12
|
end
|
|
13
13
|
|
data/lib/ocean_package/fir.rb
CHANGED
|
@@ -37,11 +37,12 @@ module OceanPackage
|
|
|
37
37
|
|
|
38
38
|
# 命令:上传ipa文件到fir平台
|
|
39
39
|
def publish_cmd
|
|
40
|
-
|
|
41
|
-
cmd
|
|
42
|
-
cmd +=
|
|
43
|
-
cmd +=
|
|
44
|
-
cmd +=
|
|
40
|
+
# @ipa_file_path @change_log @log_path 需要是字符串值!!!!!
|
|
41
|
+
cmd = "fir publish"
|
|
42
|
+
cmd += " " + "'#{@ipa_file_path}'"
|
|
43
|
+
cmd += " -c " + "'#{@change_log}'"
|
|
44
|
+
cmd += " -Q"
|
|
45
|
+
cmd += " | tee " + "'#{@log_path}'"
|
|
45
46
|
|
|
46
47
|
Log.divider
|
|
47
48
|
Log.info("fir publish command: #{cmd}")
|
|
@@ -109,14 +110,18 @@ module OceanPackage
|
|
|
109
110
|
# 正则表达式匹配
|
|
110
111
|
pattern = /.*Release id is.*/
|
|
111
112
|
release_id = ''
|
|
112
|
-
File.
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
113
|
+
if File.exist?("#{@log_path}")
|
|
114
|
+
File.open(@log_path, "r") do |f|
|
|
115
|
+
f.each_line do |line|
|
|
116
|
+
line_s = "#{line}"
|
|
117
|
+
if line_s =~ pattern
|
|
118
|
+
release_id = line_s.split(' ').last
|
|
119
|
+
break
|
|
120
|
+
end
|
|
118
121
|
end
|
|
119
122
|
end
|
|
123
|
+
else
|
|
124
|
+
Log.info("fir log path not exist !!!")
|
|
120
125
|
end
|
|
121
126
|
Log.info("fir release id value: #{release_id}")
|
|
122
127
|
release_id
|
|
@@ -127,14 +132,18 @@ module OceanPackage
|
|
|
127
132
|
# 正则表达式匹配
|
|
128
133
|
pattern = /.*Published succeed:.*/
|
|
129
134
|
link = ''
|
|
130
|
-
File.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
135
|
+
if File.exist?("#{@log_path}")
|
|
136
|
+
File.open(@log_path, "r") do |f|
|
|
137
|
+
f.each_line do |line|
|
|
138
|
+
line_s = "#{line}"
|
|
139
|
+
if line_s =~ pattern
|
|
140
|
+
link = line_s.split(' ').last
|
|
141
|
+
break
|
|
142
|
+
end
|
|
136
143
|
end
|
|
137
144
|
end
|
|
145
|
+
else
|
|
146
|
+
Log.info("fir log path not exist !!!")
|
|
138
147
|
end
|
|
139
148
|
Log.info("fir link value: #{link}")
|
|
140
149
|
link
|
|
@@ -156,14 +165,18 @@ module OceanPackage
|
|
|
156
165
|
# 正则表达式匹配
|
|
157
166
|
pattern = /.*Local qrcode file:.*/
|
|
158
167
|
path = ''
|
|
159
|
-
File.
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
168
|
+
if File.exist?("#{@log_path}")
|
|
169
|
+
File.open(@log_path, "r") do |f|
|
|
170
|
+
f.each_line do |line|
|
|
171
|
+
line_s = "#{line}"
|
|
172
|
+
if line_s =~ pattern
|
|
173
|
+
path = line_s.split(' ').last
|
|
174
|
+
break
|
|
175
|
+
end
|
|
165
176
|
end
|
|
166
177
|
end
|
|
178
|
+
else
|
|
179
|
+
Log.info("fir log path not exist !!!")
|
|
167
180
|
end
|
|
168
181
|
Log.info("fir qr code path value: #{path}")
|
|
169
182
|
path
|
data/lib/ocean_package/logger.rb
CHANGED
|
@@ -60,6 +60,7 @@ module OceanPackage
|
|
|
60
60
|
@end_time = Time.now
|
|
61
61
|
# 返回打包成功的 ipa 文件路径
|
|
62
62
|
ipa_file_path
|
|
63
|
+
open_ipa_file_path
|
|
63
64
|
end
|
|
64
65
|
|
|
65
66
|
# 一些校验
|
|
@@ -239,6 +240,13 @@ module OceanPackage
|
|
|
239
240
|
# 也可以在该目录下查找 ipa 后缀的文件
|
|
240
241
|
end
|
|
241
242
|
|
|
243
|
+
# 打开所在目录
|
|
244
|
+
def open_ipa_file_path
|
|
245
|
+
path = final_archive_path
|
|
246
|
+
open_cmd = "open #{path}"
|
|
247
|
+
system(open_cmd)
|
|
248
|
+
end
|
|
249
|
+
|
|
242
250
|
end
|
|
243
251
|
|
|
244
252
|
end
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
|
|
2
|
+
module OceanPackage
|
|
3
|
+
class Pgy
|
|
4
|
+
require 'multipart_post'
|
|
5
|
+
require 'net/http/post/multipart'
|
|
6
|
+
require 'json'
|
|
7
|
+
|
|
8
|
+
# # 用户Key,用来标识当前用户的身份
|
|
9
|
+
# attr_accessor :user_key
|
|
10
|
+
# API Key,用来识别API调用者的身份,如不特别说明,每个接口中都需要含有此参数。
|
|
11
|
+
attr_accessor :api_key
|
|
12
|
+
# # 表示一个App组的唯一Key。
|
|
13
|
+
# attr_accessor :app_key
|
|
14
|
+
# 更新日志
|
|
15
|
+
attr_accessor :change_log
|
|
16
|
+
# ipa文件包路径
|
|
17
|
+
attr_accessor :ipa_file_path
|
|
18
|
+
|
|
19
|
+
# 短链接
|
|
20
|
+
attr_accessor :short_url
|
|
21
|
+
# 二维码链接
|
|
22
|
+
attr_accessor :qr_code_url
|
|
23
|
+
|
|
24
|
+
# 初始化
|
|
25
|
+
def initialize(api_key, change_log, ipa_file_path)
|
|
26
|
+
@api_key = api_key
|
|
27
|
+
@change_log = change_log
|
|
28
|
+
@ipa_file_path = ipa_file_path
|
|
29
|
+
@short_url = ""
|
|
30
|
+
@qr_code_url = ""
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
# 校验
|
|
34
|
+
def check
|
|
35
|
+
|
|
36
|
+
# user_key_value = "#{@user_key}"
|
|
37
|
+
# if user_key_value.empty?
|
|
38
|
+
# Log.error("pgy user key is empty, please check !!!")
|
|
39
|
+
# return false
|
|
40
|
+
# end
|
|
41
|
+
|
|
42
|
+
api_key_value = "#{@api_key}"
|
|
43
|
+
if api_key_value.empty?
|
|
44
|
+
Log.error("pgy api key is empty, please check !!!")
|
|
45
|
+
return false
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
# app_key_value = "#{@app_key}"
|
|
49
|
+
# if app_key_value.empty?
|
|
50
|
+
# Log.error("pgy app key is empty, please check !!!")
|
|
51
|
+
# return false
|
|
52
|
+
# end
|
|
53
|
+
|
|
54
|
+
ipa_file_path_value = "#{@ipa_file_path}"
|
|
55
|
+
if ipa_file_path_value.empty?
|
|
56
|
+
Log.error("ipa file path is empty, please check !!!")
|
|
57
|
+
return false
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
return true
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# 运行
|
|
64
|
+
def run
|
|
65
|
+
unless check
|
|
66
|
+
return
|
|
67
|
+
end
|
|
68
|
+
publish
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# 上传
|
|
72
|
+
def publish
|
|
73
|
+
url = URI.parse('https://www.pgyer.com/apiv2/app/upload')
|
|
74
|
+
File.open("#{@ipa_file_path}") do |ipa|
|
|
75
|
+
|
|
76
|
+
# 构建必要的参数
|
|
77
|
+
ipa_file_name = Time.new.strftime("%Y-%m-%d_%H-%M-%S") + ".ipa"
|
|
78
|
+
require_params = {
|
|
79
|
+
"file" => UploadIO.new(ipa, "multipart/form-data", ipa_file_name),
|
|
80
|
+
"_api_key" => "#{@api_key}",
|
|
81
|
+
"buildUpdateDescription" => "#{@change_log}",
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# 构造请求
|
|
85
|
+
req = Net::HTTP::Post::Multipart.new(url.path, require_params)
|
|
86
|
+
|
|
87
|
+
# 网络http
|
|
88
|
+
net = Net::HTTP.new(url.host, url.port)
|
|
89
|
+
# 这里需要设置,否则会有 EPIPE: Broken pipe 错误
|
|
90
|
+
net.use_ssl = true
|
|
91
|
+
net.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
92
|
+
net.set_debug_output($stdout)
|
|
93
|
+
|
|
94
|
+
# 发起请求
|
|
95
|
+
res = net.start do |http|
|
|
96
|
+
http.use_ssl = true
|
|
97
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
|
98
|
+
http.request(req)
|
|
99
|
+
end
|
|
100
|
+
|
|
101
|
+
Log.divider
|
|
102
|
+
Log.info(res)
|
|
103
|
+
|
|
104
|
+
# 具体参考 https://www.pgyer.com/doc/view/api#paramInfo
|
|
105
|
+
case res
|
|
106
|
+
when Net::HTTPSuccess
|
|
107
|
+
# 响应是字符串类型,需要转为json进行处理
|
|
108
|
+
json_value = JSON.parse(res.body)
|
|
109
|
+
Log.divider
|
|
110
|
+
Log.info(json_value)
|
|
111
|
+
# 成功
|
|
112
|
+
data = json_value["data"]
|
|
113
|
+
short_url = data["buildShortcutUrl"]
|
|
114
|
+
qr_code_url = data["buildQRCodeURL"]
|
|
115
|
+
@short_url = short_url
|
|
116
|
+
@qr_code_url = qr_code_url
|
|
117
|
+
Log.error(@short_url)
|
|
118
|
+
Log.error(@qr_code_url)
|
|
119
|
+
else
|
|
120
|
+
# 失败
|
|
121
|
+
Log.error("pgy publish fail, please check !!!")
|
|
122
|
+
exit(1)
|
|
123
|
+
end
|
|
124
|
+
end
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
# 获取下载链接
|
|
128
|
+
def get_download_url
|
|
129
|
+
# 需要有固定的前缀
|
|
130
|
+
url = "https://www.pgyer.com/" + @short_url
|
|
131
|
+
|
|
132
|
+
Log.divider
|
|
133
|
+
Log.info(url)
|
|
134
|
+
|
|
135
|
+
url
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
# 获取二维码链接
|
|
139
|
+
def get_qr_code_url
|
|
140
|
+
url = "#{@qr_code_url}"
|
|
141
|
+
|
|
142
|
+
Log.divider
|
|
143
|
+
Log.info(url)
|
|
144
|
+
|
|
145
|
+
url
|
|
146
|
+
end
|
|
147
|
+
end
|
|
148
|
+
end
|
data/ocean_package.gemspec
CHANGED
|
@@ -37,6 +37,12 @@ Gem::Specification.new do |spec|
|
|
|
37
37
|
spec.executables << 'oceanpackage'
|
|
38
38
|
spec.require_paths = ["lib"]
|
|
39
39
|
|
|
40
|
+
spec.add_dependency 'dingbot'
|
|
41
|
+
spec.add_dependency 'CFPropertyList'
|
|
42
|
+
spec.add_dependency 'semantic_logger'
|
|
43
|
+
spec.add_dependency 'faraday'
|
|
44
|
+
spec.add_dependency 'multipart-post'
|
|
45
|
+
|
|
40
46
|
spec.add_development_dependency "bundler", "~> 1.17.2"
|
|
41
47
|
spec.add_development_dependency "rake", "~> 10.0"
|
|
42
48
|
spec.add_development_dependency "minitest", "~> 5.0"
|
metadata
CHANGED
|
@@ -1,15 +1,85 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ocean_package
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.9.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- ocean
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-08-
|
|
11
|
+
date: 2020-08-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: dingbot
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: CFPropertyList
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - ">="
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '0'
|
|
34
|
+
type: :runtime
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - ">="
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: semantic_logger
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - ">="
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '0'
|
|
48
|
+
type: :runtime
|
|
49
|
+
prerelease: false
|
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
51
|
+
requirements:
|
|
52
|
+
- - ">="
|
|
53
|
+
- !ruby/object:Gem::Version
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: faraday
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - ">="
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: '0'
|
|
62
|
+
type: :runtime
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - ">="
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: '0'
|
|
69
|
+
- !ruby/object:Gem::Dependency
|
|
70
|
+
name: multipart-post
|
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
|
72
|
+
requirements:
|
|
73
|
+
- - ">="
|
|
74
|
+
- !ruby/object:Gem::Version
|
|
75
|
+
version: '0'
|
|
76
|
+
type: :runtime
|
|
77
|
+
prerelease: false
|
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
79
|
+
requirements:
|
|
80
|
+
- - ">="
|
|
81
|
+
- !ruby/object:Gem::Version
|
|
82
|
+
version: '0'
|
|
13
83
|
- !ruby/object:Gem::Dependency
|
|
14
84
|
name: bundler
|
|
15
85
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -89,6 +159,7 @@ files:
|
|
|
89
159
|
- lib/ocean_package/logger.rb
|
|
90
160
|
- lib/ocean_package/oss.rb
|
|
91
161
|
- lib/ocean_package/package.rb
|
|
162
|
+
- lib/ocean_package/pgy.rb
|
|
92
163
|
- lib/ocean_package/version.rb
|
|
93
164
|
- ocean_package.gemspec
|
|
94
165
|
homepage: https://github.com/oceanfive/ocean_package
|