pindo 5.13.9 → 5.13.11
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/lib/pindo/base/funlog.rb +13 -0
- data/lib/pindo/base/git_handler.rb +247 -42
- data/lib/pindo/command/android/autobuild.rb +72 -30
- data/lib/pindo/command/android/autoresign.rb +23 -322
- data/lib/pindo/command/android/keystore.rb +7 -130
- data/lib/pindo/command/appstore/adhocbuild.rb +5 -14
- data/lib/pindo/command/appstore/autobuild.rb +64 -14
- data/lib/pindo/command/appstore/autoresign.rb +1 -3
- data/lib/pindo/command/ios/autobuild.rb +71 -53
- data/lib/pindo/command/ios/build.rb +8 -186
- data/lib/pindo/command/jps/media.rb +146 -0
- data/lib/pindo/command/jps/upload.rb +48 -20
- data/lib/pindo/command/jps.rb +1 -0
- data/lib/pindo/command/unity/autobuild.rb +99 -27
- data/lib/pindo/command/unity/packpush.rb +5 -8
- data/lib/pindo/command/utils/repoinit.rb +0 -2
- data/lib/pindo/command/utils/tag.rb +58 -26
- data/lib/pindo/command/utils.rb +0 -1
- data/lib/pindo/command/web/autobuild.rb +71 -37
- data/lib/pindo/command.rb +0 -56
- data/lib/pindo/config/build_info_manager.rb +7 -8
- data/lib/pindo/module/android/android_config_helper.rb +2 -11
- data/lib/pindo/module/appselect.rb +15 -41
- data/lib/pindo/module/appstore/itcapp_helper.rb +3 -6
- data/lib/pindo/module/build/build_helper.rb +28 -18
- data/lib/pindo/module/build/git_repo_helper.rb +284 -405
- data/lib/pindo/module/cert/pem_helper.rb +3 -6
- data/lib/pindo/module/pgyer/pgyerhelper.rb +193 -25
- data/lib/pindo/module/task/model/appstore/appstore_task.rb +5 -0
- data/lib/pindo/module/task/model/build/android_build_adhoc_task.rb +13 -187
- data/lib/pindo/module/task/model/build/android_build_dev_task.rb +36 -34
- data/lib/pindo/module/task/model/build/android_build_gplay_task.rb +13 -187
- data/lib/pindo/module/task/model/build/ios_build_adhoc_task.rb +9 -6
- data/lib/pindo/module/task/model/build/ios_build_appstore_task.rb +9 -6
- data/lib/pindo/module/task/model/build/ios_build_dev_task.rb +37 -32
- data/lib/pindo/module/task/model/build/web_build_dev_task.rb +7 -5
- data/lib/pindo/module/task/model/build_task.rb +8 -11
- data/lib/pindo/module/task/model/git/git_commit_task.rb +118 -0
- data/lib/pindo/module/task/model/git/git_tag_task.rb +125 -0
- data/lib/pindo/module/task/model/git_task.rb +75 -0
- data/lib/pindo/module/task/model/jps/jps_message_task.rb +178 -0
- data/lib/pindo/module/task/model/{resign → jps}/jps_resign_task.rb +13 -22
- data/lib/pindo/module/task/model/jps/jps_upload_media_task.rb +248 -0
- data/lib/pindo/module/task/model/jps/jps_upload_task.rb +38 -93
- data/lib/pindo/module/task/model/jps_task.rb +43 -0
- data/lib/pindo/module/task/model/resign/ipa_local_resign_task.rb +5 -0
- data/lib/pindo/module/task/model/unity/unity_config_task.rb +0 -4
- data/lib/pindo/module/task/model/unity/unity_export_task.rb +8 -7
- data/lib/pindo/module/task/model/unity/unity_update_task.rb +4 -3
- data/lib/pindo/module/task/model/unity/unity_yoo_asset_task.rb +8 -7
- data/lib/pindo/module/task/model/unity_task.rb +7 -2
- data/lib/pindo/module/task/pindo_task.rb +101 -1
- data/lib/pindo/module/task/task_manager.rb +29 -32
- data/lib/pindo/module/unity/nuget_helper.rb +7 -7
- data/lib/pindo/options/core/global_options_state.rb +96 -26
- data/lib/pindo/options/core/option_configuration.rb +3 -0
- data/lib/pindo/options/core/option_item.rb +36 -0
- data/lib/pindo/options/groups/build_options.rb +23 -6
- data/lib/pindo/options/groups/git_options.rb +115 -0
- data/lib/pindo/options/groups/jps_options.rb +7 -0
- data/lib/pindo/options/groups/option_group.rb +15 -0
- data/lib/pindo/options/groups/unity_options.rb +49 -0
- data/lib/pindo/options/options.rb +2 -0
- data/lib/pindo/version.rb +2 -2
- metadata +15 -11
- data/lib/pindo/base/githelper.rb +0 -686
- data/lib/pindo/base/pindocontext.rb +0 -602
- data/lib/pindo/command/utils/feishu.rb +0 -134
- data/lib/pindo/module/build/version_helper.rb +0 -146
- data/lib/pindo/module/task/model/git_tag_task.rb +0 -80
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
require 'highline/import'
|
|
2
|
+
require 'fileutils'
|
|
3
|
+
require 'json'
|
|
4
|
+
require 'pindo/module/pgyer/pgyerhelper'
|
|
5
|
+
require 'pindo/module/task/task_manager'
|
|
6
|
+
require 'pindo/module/task/model/jps/jps_upload_media_task'
|
|
7
|
+
|
|
8
|
+
module Pindo
|
|
9
|
+
class Command
|
|
10
|
+
class Jps < Command
|
|
11
|
+
class Media < Jps
|
|
12
|
+
|
|
13
|
+
self.summary = '上传media文件到jps提交记录'
|
|
14
|
+
|
|
15
|
+
self.description = <<-DESC
|
|
16
|
+
上传media文件(图片、视频等)到jps提交记录。
|
|
17
|
+
|
|
18
|
+
支持功能:
|
|
19
|
+
|
|
20
|
+
* 上传多个media文件(图片、视频等)
|
|
21
|
+
* 并发上传,支持重试
|
|
22
|
+
* 自动关联到指定的commit记录
|
|
23
|
+
* 支持追加模式(保留已有附件)
|
|
24
|
+
* 自动模式:从项目 JPSMedia/ 目录查找文件
|
|
25
|
+
|
|
26
|
+
使用示例:
|
|
27
|
+
|
|
28
|
+
$ pindo jps media # 自动模式:使用 HEAD commit,从 JPSMedia/ 查找文件
|
|
29
|
+
|
|
30
|
+
$ pindo jps media path/to/1.png path/to/2.mov # 自动模式:使用 HEAD commit,上传指定文件
|
|
31
|
+
|
|
32
|
+
$ pindo jps media --commit_id=9e959ffd # 指定 git commit id
|
|
33
|
+
|
|
34
|
+
$ pindo jps media --workflow_id=2720 # 指定工作流ID
|
|
35
|
+
|
|
36
|
+
$ pindo jps media --proj=demo *.png # 指定项目
|
|
37
|
+
|
|
38
|
+
DESC
|
|
39
|
+
|
|
40
|
+
self.arguments = [
|
|
41
|
+
CLAide::Argument.new('files...', false),
|
|
42
|
+
]
|
|
43
|
+
|
|
44
|
+
def self.options
|
|
45
|
+
[
|
|
46
|
+
['--commit_id', '指定 git commit id(默认使用 HEAD)'],
|
|
47
|
+
['--workflow_id', '指定工作流ID(用于查找 commit_log)'],
|
|
48
|
+
['--proj', '指定项目代号名称'],
|
|
49
|
+
['--login', '强制再次登录jps网站'],
|
|
50
|
+
].concat(super)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
def initialize(argv)
|
|
54
|
+
# 收集所有文件参数
|
|
55
|
+
@file_paths = []
|
|
56
|
+
while (arg = argv.shift_argument)
|
|
57
|
+
@file_paths << arg.strip.gsub(/\"/, '')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
@args_commit_id = argv.option('commit_id')
|
|
61
|
+
@args_workflow_id = argv.option('workflow_id')
|
|
62
|
+
@args_proj_name = argv.option('proj')
|
|
63
|
+
@args_login_flag = argv.flag?('login', false)
|
|
64
|
+
|
|
65
|
+
# 转换 workflow_id 为整数
|
|
66
|
+
if @args_workflow_id
|
|
67
|
+
@args_workflow_id = @args_workflow_id.to_i
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
super(argv)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def validate!
|
|
74
|
+
super
|
|
75
|
+
# 不再强制要求参数,Task 会自动从 git 获取
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
def run
|
|
79
|
+
project_path = Dir.pwd
|
|
80
|
+
|
|
81
|
+
# 展开文件路径(支持通配符)
|
|
82
|
+
expanded_files = expand_file_paths(@file_paths)
|
|
83
|
+
|
|
84
|
+
# 设置 PgyerHelper 登录选项
|
|
85
|
+
PgyerHelper.share_instace.setForeLogin(beforeLogin: @args_login_flag)
|
|
86
|
+
|
|
87
|
+
# 创建并执行任务
|
|
88
|
+
# 所有逻辑都在 Task 中处理:
|
|
89
|
+
# - 自动查找 git 仓库和 HEAD 信息
|
|
90
|
+
# - 自动查找 JPSMedia/ 目录
|
|
91
|
+
# - 匹配 git_commit_id 到 JPS commit_log
|
|
92
|
+
task = Pindo::TaskSystem::JPSUploadMediaTask.new(
|
|
93
|
+
expanded_files,
|
|
94
|
+
git_commit_id: @args_commit_id,
|
|
95
|
+
workflow_id: @args_workflow_id,
|
|
96
|
+
project_name: @args_proj_name,
|
|
97
|
+
project_path: project_path
|
|
98
|
+
)
|
|
99
|
+
|
|
100
|
+
task_manager = Pindo::TaskSystem::TaskManager.instance
|
|
101
|
+
task_manager.clear_all
|
|
102
|
+
task_manager.add_task(task)
|
|
103
|
+
task_manager.start
|
|
104
|
+
|
|
105
|
+
# 输出结果
|
|
106
|
+
report = task_manager.execution_report
|
|
107
|
+
if report[:success] > 0
|
|
108
|
+
puts "\n上传完成!"
|
|
109
|
+
else
|
|
110
|
+
raise Informative, "上传失败"
|
|
111
|
+
end
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
private
|
|
115
|
+
|
|
116
|
+
# 展开文件路径(支持通配符和目录)
|
|
117
|
+
def expand_file_paths(paths)
|
|
118
|
+
return [] if paths.nil? || paths.empty?
|
|
119
|
+
|
|
120
|
+
expanded = []
|
|
121
|
+
media_extensions = %w[png jpg jpeg gif bmp webp mp4 mov avi mkv webm]
|
|
122
|
+
|
|
123
|
+
paths.each do |path|
|
|
124
|
+
if path.include?('*')
|
|
125
|
+
# 通配符展开
|
|
126
|
+
expanded.concat(Dir.glob(path))
|
|
127
|
+
elsif File.directory?(path)
|
|
128
|
+
# 目录:查找所有图片和视频文件
|
|
129
|
+
pattern = File.join(path, "**", "*.{#{media_extensions.join(',')}}")
|
|
130
|
+
expanded.concat(Dir.glob(pattern))
|
|
131
|
+
elsif File.exist?(path)
|
|
132
|
+
# 单个文件
|
|
133
|
+
expanded << path
|
|
134
|
+
else
|
|
135
|
+
Funlog.instance.warning("文件不存在: #{path}")
|
|
136
|
+
end
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
# 去重并过滤有效文件
|
|
140
|
+
expanded.uniq.select { |f| File.file?(f) }
|
|
141
|
+
end
|
|
142
|
+
|
|
143
|
+
end
|
|
144
|
+
end
|
|
145
|
+
end
|
|
146
|
+
end
|
|
@@ -7,7 +7,9 @@ require 'pindo/module/build/git_repo_helper'
|
|
|
7
7
|
require 'pindo/module/build/build_helper'
|
|
8
8
|
require 'pindo/module/task/task_manager'
|
|
9
9
|
require 'pindo/module/task/model/jps/jps_upload_task'
|
|
10
|
-
require 'pindo/module/task/model/
|
|
10
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
11
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
12
|
+
require 'pindo/options/options'
|
|
11
13
|
|
|
12
14
|
module Pindo
|
|
13
15
|
class Command
|
|
@@ -42,29 +44,34 @@ module Pindo
|
|
|
42
44
|
$ pindo jps upload --resign # 上传后重签名
|
|
43
45
|
|
|
44
46
|
$ pindo jps upload --send # 上传后发送企业微信测试信息
|
|
47
|
+
|
|
48
|
+
$ pindo jps upload --ver_inc=main # 大版本号增加
|
|
49
|
+
|
|
50
|
+
$ pindo jps upload --tag_type=recreate # 重新创建当前版本tag
|
|
45
51
|
DESC
|
|
46
52
|
|
|
47
53
|
self.arguments = [
|
|
48
54
|
CLAide::Argument.new('path/to/demo.ipa', false),
|
|
49
55
|
]
|
|
50
56
|
|
|
57
|
+
# 定义此命令使用的参数项
|
|
58
|
+
def self.option_items
|
|
59
|
+
@option_items ||= Pindo::Options::OptionGroup.merge(
|
|
60
|
+
Pindo::Options::JPSOptions.except(:upload), # 排除 upload 参数(本命令就是上传)
|
|
61
|
+
Pindo::Options::GitOptions.all
|
|
62
|
+
)
|
|
63
|
+
end
|
|
64
|
+
|
|
51
65
|
def self.options
|
|
52
66
|
[
|
|
53
|
-
['--login', '强制再次登录jps
|
|
54
|
-
['--ipa', '强制指定上传的ipa
|
|
55
|
-
['--
|
|
56
|
-
|
|
57
|
-
['--send', '发送消息到项目群(注意:不带此参数也会发送给自己),用法:pindo jps upload --send'],
|
|
58
|
-
['--desc', '指定上传的备注信息: -pindo jps upload -desc="1.upload message"'],
|
|
59
|
-
['--resign', '上传到之后是否重签名,用法:pindo jps upload --resign'],
|
|
60
|
-
['--certid', '设置重签名的正式id,用法:pindo jps upload --certid=com.test.bundleid'],
|
|
61
|
-
|
|
62
|
-
].concat(super)
|
|
67
|
+
['--login', '强制再次登录jps网站'],
|
|
68
|
+
['--ipa', '强制指定上传的ipa文件'],
|
|
69
|
+
['--attach', '指定需要和ipa一起上传的附件'],
|
|
70
|
+
].concat(option_items.map(&:to_claide_option)).concat(super)
|
|
63
71
|
end
|
|
64
72
|
|
|
65
73
|
|
|
66
74
|
def initialize(argv)
|
|
67
|
-
|
|
68
75
|
@args_ipa_file = argv.shift_argument
|
|
69
76
|
@ipa_file = argv.option('ipa')
|
|
70
77
|
|
|
@@ -76,20 +83,27 @@ module Pindo
|
|
|
76
83
|
end
|
|
77
84
|
|
|
78
85
|
@args_login_flag = argv.flag?('login', false)
|
|
79
|
-
@args_send_flag = argv.flag?('send', false)
|
|
80
|
-
@args_resign_flag = argv.flag?('resign', false)
|
|
81
|
-
|
|
82
|
-
@args_proj_name = argv.option('proj')
|
|
83
86
|
@args_attach_name = argv.option('attach')
|
|
84
|
-
@args_upload_desc = argv.option('desc')
|
|
85
|
-
@args_cert_id = argv.option('certid')
|
|
86
87
|
|
|
88
|
+
# 使用 Options 系统解析参数
|
|
89
|
+
@options = initialize_options(argv)
|
|
87
90
|
|
|
91
|
+
# JPS 参数
|
|
92
|
+
@args_proj_name = @options[:proj]
|
|
93
|
+
@args_send_flag = @options[:send] || false
|
|
94
|
+
@args_resign_flag = @options[:resign] || false
|
|
95
|
+
@args_upload_desc = @options[:desc]
|
|
96
|
+
@args_cert_id = @options[:certid]
|
|
88
97
|
|
|
89
98
|
if @args_upload_desc && !@args_upload_desc.empty?
|
|
90
99
|
@args_upload_desc = @args_upload_desc.strip.gsub(/\"/, '')
|
|
91
100
|
end
|
|
92
101
|
|
|
102
|
+
# Git 参数
|
|
103
|
+
@args_release_branch = @options[:release_branch] || 'master'
|
|
104
|
+
@args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
|
|
105
|
+
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
|
|
106
|
+
@args_tag_pre = @options[:tag_pre] || 'v'
|
|
93
107
|
|
|
94
108
|
if !@args_cert_id.nil? && !@args_cert_id.empty?
|
|
95
109
|
@args_resign_flag = true
|
|
@@ -141,8 +155,22 @@ module Pindo
|
|
|
141
155
|
def make_upload_tasks(project_dir)
|
|
142
156
|
tasks = []
|
|
143
157
|
|
|
144
|
-
#
|
|
145
|
-
|
|
158
|
+
# Git 参数
|
|
159
|
+
git_options = {
|
|
160
|
+
release_branch: @args_release_branch,
|
|
161
|
+
ver_inc: @args_ver_inc,
|
|
162
|
+
tag_type: @args_tag_type,
|
|
163
|
+
tag_pre: @args_tag_pre
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
# 1. Git 提交和标签任务
|
|
167
|
+
# 1.1 Git 提交任务
|
|
168
|
+
git_commit_task = Pindo::TaskSystem::GitCommitTask.new(project_dir, git_options)
|
|
169
|
+
tasks << git_commit_task
|
|
170
|
+
|
|
171
|
+
# 1.2 Git 标签任务(依赖提交任务)
|
|
172
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(project_dir, git_options)
|
|
173
|
+
git_tag_task.dependencies << git_commit_task.id
|
|
146
174
|
tasks << git_tag_task
|
|
147
175
|
|
|
148
176
|
# 2. 查找并创建上传任务
|
data/lib/pindo/command/jps.rb
CHANGED
|
@@ -13,9 +13,12 @@ require 'pindo/module/task/model/unity/unity_update_task'
|
|
|
13
13
|
require 'pindo/module/task/model/unity/unity_yoo_asset_task'
|
|
14
14
|
require 'pindo/module/task/model/unity/unity_export_task'
|
|
15
15
|
require 'pindo/module/task/model/jps/jps_upload_task'
|
|
16
|
-
require 'pindo/module/task/model/
|
|
16
|
+
require 'pindo/module/task/model/jps/jps_message_task'
|
|
17
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
18
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
17
19
|
require 'pindo/config/build_info_manager'
|
|
18
20
|
require 'pindo/config/ios_config_parser'
|
|
21
|
+
require 'pindo/options/options'
|
|
19
22
|
|
|
20
23
|
module Pindo
|
|
21
24
|
class Command
|
|
@@ -23,8 +26,7 @@ module Pindo
|
|
|
23
26
|
class Autobuild < Unity
|
|
24
27
|
|
|
25
28
|
include Appselect
|
|
26
|
-
|
|
27
|
-
include Pindo::Githelper
|
|
29
|
+
|
|
28
30
|
# Unity 多平台编译和上传命令
|
|
29
31
|
self.summary = '编译Unity工程,生成IPA、APK、Html文件(默认编译三个平台的包)并支持上传到JPS平台'
|
|
30
32
|
|
|
@@ -68,37 +70,49 @@ module Pindo
|
|
|
68
70
|
# 暂无参数
|
|
69
71
|
]
|
|
70
72
|
|
|
73
|
+
# 定义此命令使用的参数项
|
|
74
|
+
def self.option_items
|
|
75
|
+
@option_items ||= Pindo::Options::OptionGroup.merge(
|
|
76
|
+
Pindo::Options::JPSOptions.select(:proj, :upload, :send),
|
|
77
|
+
Pindo::Options::UnityOptions.select(:skiplib, :skipyoo),
|
|
78
|
+
Pindo::Options::UnityOptions.select_with_defaults(skipconfig: true),
|
|
79
|
+
Pindo::Options::GitOptions.all
|
|
80
|
+
)
|
|
81
|
+
end
|
|
82
|
+
|
|
71
83
|
# 命令选项
|
|
72
84
|
def self.options
|
|
73
85
|
[
|
|
74
86
|
['--bundleid=ID', '指定iOS打包的bundleID'],
|
|
75
87
|
['--bundle_name=NAME', '指定Android Package Name(如com.example.app,会拉取对应配置)'],
|
|
76
|
-
['--proj=NAME', '指定上传到测试平台的项目名称'],
|
|
77
88
|
['--types=TYPES', '指定要构建的类型,逗号分隔(如:ipa,apk,html),默认全部类型'],
|
|
78
|
-
['--upload', '上传编译后的IPA/APK到测试平台'],
|
|
79
|
-
['--send', '发送通知到测试群组(同时也会发送给自己)'],
|
|
80
89
|
['--adhoc', '使用AdHoc证书打包iOS(默认使用Dev证书)'],
|
|
81
90
|
['--deploy', '使用发布证书打包iOS'],
|
|
82
|
-
['--release', '使用Release模式构建Android(默认使用Debug)']
|
|
83
|
-
|
|
84
|
-
['--skipyoo', '跳过YooAsset资源打包(加快构建速度)']
|
|
85
|
-
].concat(super)
|
|
91
|
+
['--release', '使用Release模式构建Android(默认使用Debug)']
|
|
92
|
+
].concat(option_items.map(&:to_claide_option)).concat(super)
|
|
86
93
|
end
|
|
87
94
|
|
|
88
95
|
|
|
89
96
|
def initialize(argv)
|
|
97
|
+
@options = initialize_options(argv)
|
|
90
98
|
|
|
91
|
-
@args_proj_name =
|
|
92
|
-
@args_upload_flag =
|
|
93
|
-
@args_send_flag =
|
|
99
|
+
@args_proj_name = @options[:proj]
|
|
100
|
+
@args_upload_flag = @options[:upload] || false
|
|
101
|
+
@args_send_flag = @options[:send] || false
|
|
94
102
|
@args_adhoc_flag = argv.flag?('adhoc', false)
|
|
95
103
|
@args_deploy_flag = argv.flag?('deploy', false)
|
|
96
104
|
@args_release_flag = argv.flag?('release', false)
|
|
97
105
|
@args_bundle_id = argv.option('bundleid')
|
|
98
106
|
@args_bundle_name = argv.option('bundle_name')
|
|
99
107
|
@args_types = argv.option('types')
|
|
100
|
-
@args_skip_lib =
|
|
101
|
-
@args_skip_yoo =
|
|
108
|
+
@args_skip_lib = @options[:skiplib] || false
|
|
109
|
+
@args_skip_yoo = @options[:skipyoo] || false
|
|
110
|
+
|
|
111
|
+
# Git 参数
|
|
112
|
+
@args_release_branch = @options[:release_branch] || 'master'
|
|
113
|
+
@args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
|
|
114
|
+
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
|
|
115
|
+
@args_tag_pre = @options[:tag_pre] || 'v'
|
|
102
116
|
|
|
103
117
|
# 如果开启 send,自动开启 upload
|
|
104
118
|
if @args_send_flag
|
|
@@ -175,12 +189,39 @@ module Pindo
|
|
|
175
189
|
all_tasks = []
|
|
176
190
|
platform_build_tasks = {} # 存储平台对应的构建任务
|
|
177
191
|
|
|
178
|
-
#
|
|
179
|
-
|
|
180
|
-
|
|
192
|
+
# 按优先级排序:iOS → Android → Web
|
|
193
|
+
platform_order = ['ios', 'android', 'web']
|
|
194
|
+
selected_platforms = selected_platforms.sort_by { |p| platform_order.index(p) || 999 }
|
|
195
|
+
|
|
196
|
+
# 第零步:创建 Git 提交任务
|
|
197
|
+
git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
|
|
198
|
+
Dir.pwd,
|
|
199
|
+
release_branch: @args_release_branch,
|
|
200
|
+
ver_inc: @args_ver_inc,
|
|
201
|
+
tag_type: @args_tag_type,
|
|
202
|
+
tag_pre: @args_tag_pre
|
|
203
|
+
)
|
|
204
|
+
all_tasks << git_commit_task
|
|
181
205
|
|
|
182
206
|
# 记录依赖任务(用于后续平台任务的依赖链)
|
|
183
|
-
common_dependency_task =
|
|
207
|
+
common_dependency_task = git_commit_task
|
|
208
|
+
|
|
209
|
+
# 判断是否只有 web 平台(web 平台需要在导出前创建 Tag)
|
|
210
|
+
only_web_platform = selected_platforms == ['web']
|
|
211
|
+
|
|
212
|
+
# 如果只有 web 平台,在 Unity 导出之前创建 Git 标签任务
|
|
213
|
+
if only_web_platform
|
|
214
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
215
|
+
Dir.pwd,
|
|
216
|
+
release_branch: @args_release_branch,
|
|
217
|
+
ver_inc: @args_ver_inc,
|
|
218
|
+
tag_type: @args_tag_type,
|
|
219
|
+
tag_pre: @args_tag_pre
|
|
220
|
+
)
|
|
221
|
+
git_tag_task.dependencies << git_commit_task.id
|
|
222
|
+
all_tasks << git_tag_task
|
|
223
|
+
common_dependency_task = git_tag_task
|
|
224
|
+
end
|
|
184
225
|
|
|
185
226
|
# 第一步:创建 Unity 更新任务(所有平台共享,可选)
|
|
186
227
|
unless @args_skip_lib
|
|
@@ -225,13 +266,43 @@ module Pindo
|
|
|
225
266
|
platform_build_tasks[platform] = build_task
|
|
226
267
|
end
|
|
227
268
|
|
|
228
|
-
#
|
|
229
|
-
#
|
|
269
|
+
# 第三步:创建 Git 标签任务(依赖第一个平台的构建任务)
|
|
270
|
+
# 注意:如果只有 web 平台,GitTagTask 已在前面创建,这里跳过
|
|
271
|
+
unless only_web_platform
|
|
272
|
+
first_build_task = platform_build_tasks[selected_platforms.first]
|
|
273
|
+
if first_build_task
|
|
274
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
275
|
+
Dir.pwd,
|
|
276
|
+
release_branch: @args_release_branch,
|
|
277
|
+
ver_inc: @args_ver_inc,
|
|
278
|
+
tag_type: @args_tag_type,
|
|
279
|
+
tag_pre: @args_tag_pre
|
|
280
|
+
)
|
|
281
|
+
git_tag_task.dependencies << first_build_task.id
|
|
282
|
+
all_tasks << git_tag_task
|
|
283
|
+
end
|
|
284
|
+
end
|
|
285
|
+
|
|
286
|
+
# 第四步:创建所有上传和消息发送任务(最后添加,只依赖对应平台的构建任务)
|
|
230
287
|
if @args_upload_flag
|
|
231
288
|
selected_platforms.each do |platform|
|
|
232
289
|
build_task = platform_build_tasks[platform]
|
|
290
|
+
platform_config = all_platform_configs[platform]
|
|
291
|
+
|
|
292
|
+
# 创建上传任务
|
|
233
293
|
upload_task = create_upload_task(platform, all_platform_configs, build_task)
|
|
234
294
|
all_tasks << upload_task
|
|
295
|
+
|
|
296
|
+
# 创建消息发送任务(依赖上传任务)
|
|
297
|
+
message_task = Pindo::TaskSystem::JPSMessageTask.new(
|
|
298
|
+
nil, # app_version_info 为 nil,从依赖任务获取
|
|
299
|
+
app_info_obj: all_platform_configs["app_info_obj"],
|
|
300
|
+
project_name: all_platform_configs["project_name"],
|
|
301
|
+
send_message_type: @args_send_flag ? 'group' : 'self',
|
|
302
|
+
data_dependencies: [upload_task.id] # 从 upload_task 获取数据
|
|
303
|
+
)
|
|
304
|
+
message_task.dependencies << upload_task.id # 执行顺序依赖
|
|
305
|
+
all_tasks << message_task
|
|
235
306
|
end
|
|
236
307
|
end
|
|
237
308
|
|
|
@@ -298,7 +369,11 @@ module Pindo
|
|
|
298
369
|
send: @args_send_flag,
|
|
299
370
|
app_info_obj: all_platform_configs["app_info_obj"], # 共享的项目信息
|
|
300
371
|
workflow_info: platform_config["workflow_info"], # 平台特定的工作流
|
|
301
|
-
project_path: platform_path
|
|
372
|
+
project_path: platform_path,
|
|
373
|
+
# Git 版本参数
|
|
374
|
+
ver_inc: @args_ver_inc,
|
|
375
|
+
tag_type: @args_tag_type,
|
|
376
|
+
tag_pre: @args_tag_pre
|
|
302
377
|
}
|
|
303
378
|
|
|
304
379
|
# 设置平台特定参数
|
|
@@ -352,12 +427,9 @@ module Pindo
|
|
|
352
427
|
nil,
|
|
353
428
|
app_info_obj: all_platform_configs["app_info_obj"], # 使用共享的项目信息
|
|
354
429
|
workflow_info: platform_config["workflow_info"], # 使用平台特定的工作流
|
|
355
|
-
project_name: all_platform_configs["project_name"]
|
|
356
|
-
context: {
|
|
357
|
-
send_to_chat: @args_send_flag # 是否发送到测试群
|
|
358
|
-
},
|
|
359
|
-
dependencies: [build_task.id] # 依赖构建任务
|
|
430
|
+
project_name: all_platform_configs["project_name"]
|
|
360
431
|
)
|
|
432
|
+
upload_task.dependencies << build_task.id # 依赖构建任务
|
|
361
433
|
|
|
362
434
|
upload_task
|
|
363
435
|
end
|
|
@@ -9,9 +9,6 @@ module Pindo
|
|
|
9
9
|
class Command
|
|
10
10
|
class Unity < Command
|
|
11
11
|
class Packpush < Unity
|
|
12
|
-
include Pindo::Githelper
|
|
13
|
-
extend Pindo::Executable
|
|
14
|
-
executable :git
|
|
15
12
|
|
|
16
13
|
self.summary = 'NuGet: 将NuGet包到推送到JPS系统'
|
|
17
14
|
|
|
@@ -311,9 +308,9 @@ module Pindo
|
|
|
311
308
|
|
|
312
309
|
def check_uncommitted_files(package_dir)
|
|
313
310
|
# 获取未跟踪和已修改的文件
|
|
314
|
-
untracked_files = git!(%W(-C #{package_dir} ls-files --others --exclude-standard)).strip
|
|
315
|
-
modified_files = git!(%W(-C #{package_dir} diff --name-only)).strip
|
|
316
|
-
staged_files = git!(%W(-C #{package_dir} diff --cached --name-only)).strip
|
|
311
|
+
untracked_files = Pindo::GitHandler.git!(%W(-C #{package_dir} ls-files --others --exclude-standard)).strip
|
|
312
|
+
modified_files = Pindo::GitHandler.git!(%W(-C #{package_dir} diff --name-only)).strip
|
|
313
|
+
staged_files = Pindo::GitHandler.git!(%W(-C #{package_dir} diff --cached --name-only)).strip
|
|
317
314
|
|
|
318
315
|
all_uncommitted = []
|
|
319
316
|
all_uncommitted += untracked_files.split("\n").reject(&:empty?) if !untracked_files.empty?
|
|
@@ -386,8 +383,8 @@ module Pindo
|
|
|
386
383
|
|
|
387
384
|
# 提交 .gitignore 的更改
|
|
388
385
|
begin
|
|
389
|
-
git!(%W(-C #{package_dir} add .gitignore))
|
|
390
|
-
git!(%W(-C #{package_dir} commit -m "chore: 添加 build 目录到 .gitignore"))
|
|
386
|
+
Pindo::GitHandler.git!(%W(-C #{package_dir} add .gitignore))
|
|
387
|
+
Pindo::GitHandler.git!(%W(-C #{package_dir} commit -m "chore: 添加 build 目录到 .gitignore"))
|
|
391
388
|
puts "✅ 已提交 .gitignore 更改"
|
|
392
389
|
rescue => e
|
|
393
390
|
puts "⚠️ 提交 .gitignore 失败: #{e.message}"
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
require 'highline/import'
|
|
2
2
|
require 'fileutils'
|
|
3
|
+
require 'pindo/base/git_handler'
|
|
3
4
|
require 'pindo/module/build/git_repo_helper'
|
|
5
|
+
require 'pindo/module/task/task_manager'
|
|
6
|
+
require 'pindo/module/task/model/git/git_commit_task'
|
|
7
|
+
require 'pindo/module/task/model/git/git_tag_task'
|
|
8
|
+
require 'pindo/options/options'
|
|
4
9
|
|
|
5
10
|
module Pindo
|
|
6
11
|
class Command
|
|
@@ -23,55 +28,82 @@ module Pindo
|
|
|
23
28
|
|
|
24
29
|
使用示例:
|
|
25
30
|
|
|
26
|
-
$ pindo utils tag
|
|
31
|
+
$ pindo utils tag # 使用默认参数创建tag
|
|
27
32
|
|
|
28
|
-
$ pindo utils tag --
|
|
33
|
+
$ pindo utils tag --ver_inc=main # 大版本号增加
|
|
29
34
|
|
|
30
|
-
$ pindo utils tag --
|
|
35
|
+
$ pindo utils tag --ver_inc=patch # 补丁版本号增加
|
|
31
36
|
|
|
32
|
-
$ pindo utils tag --
|
|
37
|
+
$ pindo utils tag --tag_type=recreate # 重新创建当前版本tag
|
|
33
38
|
|
|
34
|
-
$ pindo utils tag --
|
|
39
|
+
$ pindo utils tag --release_branch=main # 指定发布分支
|
|
35
40
|
DESC
|
|
36
41
|
|
|
37
42
|
# 命令的参数列表
|
|
38
43
|
self.arguments = []
|
|
39
44
|
|
|
45
|
+
# 定义此命令使用的参数项
|
|
46
|
+
def self.option_items
|
|
47
|
+
@option_items ||= Pindo::Options::GitOptions.all
|
|
48
|
+
end
|
|
49
|
+
|
|
40
50
|
# 命令的选项列表
|
|
41
51
|
def self.options
|
|
42
|
-
|
|
43
|
-
['--mode', '指定版本号增加模式(major/minor/patch),默认minor'],
|
|
44
|
-
['--retag', '强制重新打最新的tag'],
|
|
45
|
-
['--tag', '直接指定tag版本号(如 1.1.3),会自动添加v前缀']
|
|
46
|
-
].concat(super)
|
|
52
|
+
option_items.map(&:to_claide_option).concat(super)
|
|
47
53
|
end
|
|
48
54
|
|
|
49
55
|
def initialize(argv)
|
|
50
|
-
@
|
|
51
|
-
@force_retag = argv.flag?('retag', false)
|
|
52
|
-
@custom_tag = argv.option('tag')
|
|
56
|
+
@options = initialize_options(argv)
|
|
53
57
|
|
|
54
|
-
#
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
+
# Git 参数
|
|
59
|
+
@args_release_branch = @options[:release_branch] || 'master'
|
|
60
|
+
@args_ver_inc = Pindo::Options::GitOptions.parse_version_increase_type(@options[:ver_inc] || 'mini')
|
|
61
|
+
@args_tag_type = Pindo::Options::GitOptions.parse_create_tag_type(@options[:tag_type] || 'new')
|
|
62
|
+
@args_tag_pre = @options[:tag_pre] || 'v'
|
|
58
63
|
|
|
59
64
|
super
|
|
60
65
|
@additional_args = argv.remainder!
|
|
61
66
|
end
|
|
62
67
|
|
|
63
68
|
def run
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
pindo_project_dir = Dir.pwd
|
|
70
|
+
|
|
71
|
+
# 验证是否是 Git 仓库
|
|
72
|
+
unless Pindo::GitHandler.is_git_directory?(local_repo_dir: pindo_project_dir)
|
|
73
|
+
raise Informative, "当前目录不是 Git 仓库"
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
# 创建任务列表
|
|
77
|
+
tasks = []
|
|
78
|
+
|
|
79
|
+
# 1. Git 提交任务
|
|
80
|
+
git_commit_task = Pindo::TaskSystem::GitCommitTask.new(
|
|
81
|
+
pindo_project_dir,
|
|
82
|
+
release_branch: @args_release_branch,
|
|
83
|
+
ver_inc: @args_ver_inc,
|
|
84
|
+
tag_type: @args_tag_type,
|
|
85
|
+
tag_pre: @args_tag_pre
|
|
86
|
+
)
|
|
87
|
+
tasks << git_commit_task
|
|
88
|
+
|
|
89
|
+
# 2. Git 标签任务(依赖提交任务)
|
|
90
|
+
git_tag_task = Pindo::TaskSystem::GitTagTask.new(
|
|
91
|
+
pindo_project_dir,
|
|
92
|
+
release_branch: @args_release_branch,
|
|
93
|
+
ver_inc: @args_ver_inc,
|
|
94
|
+
tag_type: @args_tag_type,
|
|
95
|
+
tag_pre: @args_tag_pre
|
|
72
96
|
)
|
|
97
|
+
git_tag_task.dependencies << git_commit_task.id
|
|
98
|
+
tasks << git_tag_task
|
|
99
|
+
|
|
100
|
+
# 添加到任务管理器并执行
|
|
101
|
+
task_manager = Pindo::TaskSystem::TaskManager.instance
|
|
102
|
+
task_manager.clear_all
|
|
103
|
+
tasks.each { |task| task_manager.add_task(task) }
|
|
104
|
+
task_manager.start
|
|
73
105
|
end
|
|
74
106
|
end
|
|
75
107
|
end
|
|
76
108
|
end
|
|
77
|
-
end
|
|
109
|
+
end
|
data/lib/pindo/command/utils.rb
CHANGED
|
@@ -8,7 +8,6 @@ require 'pindo/command/utils/device'
|
|
|
8
8
|
# require 'pindo/command/utils/boss'
|
|
9
9
|
require 'pindo/command/utils/renewcert'
|
|
10
10
|
require 'pindo/command/utils/repoinit'
|
|
11
|
-
require 'pindo/command/utils/feishu'
|
|
12
11
|
require 'pindo/command/utils/tag'
|
|
13
12
|
require 'pindo/command/utils/updateconfig'
|
|
14
13
|
require 'pindo/command/utils/fabric'
|