pindo 4.6.9
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/pindo +35 -0
- data/lib/pindo/base/aeshelper.rb +31 -0
- data/lib/pindo/base/deviceinfo.rb +90 -0
- data/lib/pindo/base/executable.rb +224 -0
- data/lib/pindo/base/githelper.rb +489 -0
- data/lib/pindo/base/hashhelper.rb +134 -0
- data/lib/pindo/base/plaininformative.rb +15 -0
- data/lib/pindo/base/plistbuddyexecutable.rb +121 -0
- data/lib/pindo/base/standarderror.rb +14 -0
- data/lib/pindo/client/applovinclient.rb +156 -0
- data/lib/pindo/client/aws3sclient.rb +183 -0
- data/lib/pindo/client/bossclient.rb +229 -0
- data/lib/pindo/client/bossconfigclient.rb +175 -0
- data/lib/pindo/client/giteeclient.rb +65 -0
- data/lib/pindo/client/httpclient.rb +40 -0
- data/lib/pindo/client/pgyerclient.rb +439 -0
- data/lib/pindo/client/tgateclient.rb +103 -0
- data/lib/pindo/command.rb +101 -0
- data/lib/pindo/config/pindoconfig.rb +439 -0
- data/lib/pindo/config/pindouserlocalconfig.rb +81 -0
- data/lib/pindo/deploy/Fastfile +233 -0
- data/lib/pindo/deploy/build.rb +167 -0
- data/lib/pindo/deploy/bundleid.rb +245 -0
- data/lib/pindo/deploy/cert.rb +508 -0
- data/lib/pindo/deploy/check.rb +79 -0
- data/lib/pindo/deploy/configproj.rb +89 -0
- data/lib/pindo/deploy/confusecode.rb +248 -0
- data/lib/pindo/deploy/confuseproj.rb +112 -0
- data/lib/pindo/deploy/fabric.rb +58 -0
- data/lib/pindo/deploy/getitcinfo.rb +248 -0
- data/lib/pindo/deploy/iap.rb +796 -0
- data/lib/pindo/deploy/initconfig.rb +128 -0
- data/lib/pindo/deploy/itcapp.rb +147 -0
- data/lib/pindo/deploy/itcinfo.rb +369 -0
- data/lib/pindo/deploy/pem.rb +55 -0
- data/lib/pindo/deploy/pullconfig.rb +46 -0
- data/lib/pindo/deploy/pushconfig.rb +83 -0
- data/lib/pindo/deploy/quswark.rb +146 -0
- data/lib/pindo/deploy/quswauth.rb +67 -0
- data/lib/pindo/deploy/reportbug.rb +135 -0
- data/lib/pindo/deploy/resign.rb +338 -0
- data/lib/pindo/deploy/tag.rb +108 -0
- data/lib/pindo/deploy/updateconfig.rb +129 -0
- data/lib/pindo/deploy/uploadipa.rb +63 -0
- data/lib/pindo/deploy.rb +44 -0
- data/lib/pindo/dev/autobuild.rb +204 -0
- data/lib/pindo/dev/autoresign.rb +186 -0
- data/lib/pindo/dev/confusecode.rb +127 -0
- data/lib/pindo/dev/confuseproj.rb +111 -0
- data/lib/pindo/dev/createbuild.rb +159 -0
- data/lib/pindo/dev/debug.rb +141 -0
- data/lib/pindo/dev/pub.rb +171 -0
- data/lib/pindo/dev/renewcert.rb +142 -0
- data/lib/pindo/dev.rb +23 -0
- data/lib/pindo/env/dreamstudio.rb +53 -0
- data/lib/pindo/env/flutter.rb +59 -0
- data/lib/pindo/env/flutter.sh +116 -0
- data/lib/pindo/env/quarkenv.rb +58 -0
- data/lib/pindo/env/swarkenv.rb +62 -0
- data/lib/pindo/env/workhard.rb +56 -0
- data/lib/pindo/env.rb +17 -0
- data/lib/pindo/ipa/autoresign.rb +188 -0
- data/lib/pindo/ipa/import.rb +261 -0
- data/lib/pindo/ipa/output.rb +396 -0
- data/lib/pindo/ipa.rb +22 -0
- data/lib/pindo/lib/forcepush.rb +159 -0
- data/lib/pindo/lib/lint.rb +115 -0
- data/lib/pindo/lib/push.rb +143 -0
- data/lib/pindo/lib/update.rb +75 -0
- data/lib/pindo/lib.rb +18 -0
- data/lib/pindo/module/appselect.rb +200 -0
- data/lib/pindo/module/appstore_in_app_purchase.rb +1803 -0
- data/lib/pindo/module/appstore_metadata_connect_api_helper.rb +12 -0
- data/lib/pindo/module/appstore_metadata_fastlane_helper.rb +922 -0
- data/lib/pindo/module/buildconfighelper.rb +13 -0
- data/lib/pindo/module/buildhelper.rb +76 -0
- data/lib/pindo/module/commonconfuseproj.rb +271 -0
- data/lib/pindo/module/config_project.sh +143 -0
- data/lib/pindo/module/configprojhelper.rb +631 -0
- data/lib/pindo/module/iap_tier.json +813 -0
- data/lib/pindo/module/icon_contents.json +116 -0
- data/lib/pindo/module/imessage_icon.json +91 -0
- data/lib/pindo/module/imgset_contents.json +21 -0
- data/lib/pindo/module/launchimg_contents.json +21 -0
- data/lib/pindo/module/pemcreate.rb +63 -0
- data/lib/pindo/module/pgyerhelper.rb +339 -0
- data/lib/pindo/module/xcodebuildpre.rb +258 -0
- data/lib/pindo/module/xcodehelper.rb +521 -0
- data/lib/pindo/options/appconfigoptions.rb +23 -0
- data/lib/pindo/options/deployoptions.rb +363 -0
- data/lib/pindo/pgyer/apptest.rb +104 -0
- data/lib/pindo/pgyer/comment.rb +95 -0
- data/lib/pindo/pgyer/download.rb +105 -0
- data/lib/pindo/pgyer/login.rb +61 -0
- data/lib/pindo/pgyer/upload.rb +234 -0
- data/lib/pindo/pgyer.rb +17 -0
- data/lib/pindo/repo/clone.rb +78 -0
- data/lib/pindo/repo/create.rb +55 -0
- data/lib/pindo/repo/login.rb +64 -0
- data/lib/pindo/repo/search.rb +60 -0
- data/lib/pindo/repo.rb +16 -0
- data/lib/pindo/setup.rb +60 -0
- data/lib/pindo/upgrade.rb +56 -0
- data/lib/pindo/utils/applovin.rb +213 -0
- data/lib/pindo/utils/boss.rb +209 -0
- data/lib/pindo/utils/clearcert.rb +60 -0
- data/lib/pindo/utils/device.rb +279 -0
- data/lib/pindo/utils/icon.rb +91 -0
- data/lib/pindo/utils/icon.sh +133 -0
- data/lib/pindo/utils/podindex.rb +56 -0
- data/lib/pindo/utils/podindex.sh +30 -0
- data/lib/pindo/utils/renewproj.rb +146 -0
- data/lib/pindo/utils/tgate.rb +159 -0
- data/lib/pindo/utils/xcassets.rb +46 -0
- data/lib/pindo/utils/xcassets.sh +88 -0
- data/lib/pindo/utils.rb +29 -0
- data/lib/pindo/version.rb +110 -0
- data/lib/pindo.rb +34 -0
- metadata +364 -0
@@ -0,0 +1,159 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'match'
|
3
|
+
require 'pindo/client/giteeclient'
|
4
|
+
|
5
|
+
module Pindo
|
6
|
+
class Command
|
7
|
+
class Dev < Command
|
8
|
+
class Createbuild < Dev
|
9
|
+
|
10
|
+
include Appselect
|
11
|
+
include Buildconfighelper
|
12
|
+
|
13
|
+
|
14
|
+
self.summary = '创建工程编译选项'
|
15
|
+
|
16
|
+
self.description = <<-DESC
|
17
|
+
|
18
|
+
创建工程编译选项, 用法:pindo dev createbuild,按照提示填写。创建完成之后, 使用pindo dev autobuild编译时可以选择创建好的编译选项
|
19
|
+
|
20
|
+
DESC
|
21
|
+
|
22
|
+
self.arguments = [
|
23
|
+
|
24
|
+
]
|
25
|
+
|
26
|
+
def self.options
|
27
|
+
[
|
28
|
+
['--deploy', '默认用开发的bundle id,使用--deploy设置使用发布bundle id来重签名, 用法: --deploy'],
|
29
|
+
].concat(super)
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(argv)
|
33
|
+
@args_deploy_flag = argv.flag?('deploy', false)
|
34
|
+
super
|
35
|
+
end
|
36
|
+
|
37
|
+
def validate!
|
38
|
+
super
|
39
|
+
|
40
|
+
@app_type = ask('App的代号(必填): ')
|
41
|
+
help! '需要一个唯一的代号' if @app_type.nil? || @app_type.empty?
|
42
|
+
|
43
|
+
@platform_name = ask('使用的Boss平台名称(必填): ')
|
44
|
+
help! '需要指定Boss平台' if @platform_name.nil? || @platform_name.empty?
|
45
|
+
@git_repo_name = @platform_name
|
46
|
+
|
47
|
+
@app_desc = ask('请填写App代号的描述(可不填): ')
|
48
|
+
|
49
|
+
|
50
|
+
|
51
|
+
@selected_bundleid= nil
|
52
|
+
if @args_deploy_flag
|
53
|
+
@selected_bundleid = get_selected_deploy_bundleid()
|
54
|
+
else
|
55
|
+
@selected_bundleid = get_selected_dev_bundleid()
|
56
|
+
end
|
57
|
+
|
58
|
+
puts "选择使用的bundle id: #{@selected_bundleid}"
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
def run
|
63
|
+
|
64
|
+
@gitee_client = GiteeClient.new(access_token:pindo_single_config.gitee_api_key)
|
65
|
+
pindo_setting_dir = pindo_single_config.pindo_env_configdir
|
66
|
+
|
67
|
+
setting_file = 'dev_build_setting.json'
|
68
|
+
if @args_deploy_flag
|
69
|
+
setting_file = 'deploy_build_setting.json'
|
70
|
+
end
|
71
|
+
|
72
|
+
setting_file_fullname = File.join(pindo_setting_dir, setting_file)
|
73
|
+
setting_file_json = JSON.parse(File.read(setting_file_fullname))
|
74
|
+
if setting_file_json[@app_type]
|
75
|
+
answer = agree("输入的App代号已存,重新创建?(Y/n):")
|
76
|
+
unless answer
|
77
|
+
raise Informative, "输入的App代号已存在!!!"
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
puts "========================="
|
82
|
+
puts "========================="
|
83
|
+
puts
|
84
|
+
puts
|
85
|
+
puts "App的代号: #{@app_type}"
|
86
|
+
puts "Boss平台名称: #{@platform_name}"
|
87
|
+
puts "App选择的bundle id: #{@selected_bundleid}"
|
88
|
+
puts "仓库名称: #{@git_repo_name}"
|
89
|
+
puts "App的描述: #{@app_desc}"
|
90
|
+
puts
|
91
|
+
|
92
|
+
answer = agree("请确认上面信息是否正确(Y/n):")
|
93
|
+
unless answer
|
94
|
+
raise Informative, "重新输入 !!!"
|
95
|
+
end
|
96
|
+
|
97
|
+
args_temp = [@git_repo_name]
|
98
|
+
args_temp << "--test"
|
99
|
+
Pindo::Command::Deploy::Initconfig::run(args_temp)
|
100
|
+
|
101
|
+
modify_build_setting
|
102
|
+
|
103
|
+
modify_build_config_json
|
104
|
+
|
105
|
+
end
|
106
|
+
|
107
|
+
|
108
|
+
|
109
|
+
def modify_build_setting
|
110
|
+
|
111
|
+
pindo_setting_dir = clone_pindo_env_config_repo(force_delete:false)
|
112
|
+
setting_file = 'dev_build_setting.json'
|
113
|
+
if @args_deploy_flag
|
114
|
+
setting_file = 'deploy_build_setting.json'
|
115
|
+
end
|
116
|
+
setting_file_fullname = File.join(pindo_setting_dir, setting_file)
|
117
|
+
setting_file_json = JSON.parse(File.read(setting_file_fullname))
|
118
|
+
setting_file_json[@app_type] = {}
|
119
|
+
setting_file_json[@app_type]['git_repo_name'] = @git_repo_name
|
120
|
+
setting_file_json[@app_type]['build_desc'] = @app_desc
|
121
|
+
setting_file_json = Hash[setting_file_json.sort]
|
122
|
+
File.open(setting_file_fullname, "w") do |f|
|
123
|
+
f.write(JSON.pretty_generate(setting_file_json))
|
124
|
+
end
|
125
|
+
|
126
|
+
git_addpush_repo(path:pindo_setting_dir, message:"add app_type: #{@app_type}", commit_file_params:[setting_file])
|
127
|
+
end
|
128
|
+
|
129
|
+
def modify_build_config_json
|
130
|
+
|
131
|
+
pindo_dir = pindo_single_config.pindo_dir
|
132
|
+
app_config_dir = File.join(pindo_dir, @git_repo_name)
|
133
|
+
|
134
|
+
selected_config_dir = clong_buildconfig_repo(repo_name: @selected_bundleid)
|
135
|
+
if File.exist?(File.join(selected_config_dir, "config.json"))
|
136
|
+
FileUtils.cp_r(File.join(selected_config_dir, "config.json"), app_config_dir)
|
137
|
+
end
|
138
|
+
|
139
|
+
app_config_file = File.join(app_config_dir, "config.json")
|
140
|
+
app_config_json = JSON.parse(File.read(app_config_file))
|
141
|
+
|
142
|
+
app_config_json = app_config_json || {}
|
143
|
+
app_config_json["project_info"]["app_type"] = @app_type
|
144
|
+
app_config_json["project_info"]["app_desc"] = @app_desc
|
145
|
+
app_config_json["app_setting"]["kGUKeyAppPlatform"] = @platform_name
|
146
|
+
|
147
|
+
File.open(app_config_file, "w") do |f|
|
148
|
+
f.write(JSON.pretty_generate(app_config_json))
|
149
|
+
end
|
150
|
+
git_addpush_repo(path:app_config_dir, message:"更新配置")
|
151
|
+
end
|
152
|
+
|
153
|
+
|
154
|
+
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
@@ -0,0 +1,141 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Pindo
|
4
|
+
class Command
|
5
|
+
class Dev < Command
|
6
|
+
class Debug < Dev
|
7
|
+
|
8
|
+
include Appselect
|
9
|
+
|
10
|
+
include Xcodebuildpre
|
11
|
+
|
12
|
+
self.summary = '更新证书并使用新证书设置工程'
|
13
|
+
|
14
|
+
self.description = <<-DESC
|
15
|
+
|
16
|
+
更新证书并使用新证书设置工程,如果在工程目录下执行,会自动给工程设置对应的证书。用法:pindo dev debug 默认使用开发bundle id, 使用dev证书。
|
17
|
+
使用发布相关bundle id 或者adhoc证书,用法如下:pindo dev debug --deploy --adhoc
|
18
|
+
|
19
|
+
DESC
|
20
|
+
|
21
|
+
self.arguments = [
|
22
|
+
|
23
|
+
]
|
24
|
+
|
25
|
+
def self.options
|
26
|
+
[
|
27
|
+
['--deploy', '默认用开发的bundle id,使用--deploy设置使用发布bundle id'],
|
28
|
+
['--adhoc', '默认用dev证书,使用--adhoc设置使用adhoc证书'],
|
29
|
+
].concat(super)
|
30
|
+
end
|
31
|
+
|
32
|
+
def initialize(argv)
|
33
|
+
@args_adhoc_flag = argv.flag?('adhoc', false)
|
34
|
+
@args_deploy_flag = argv.flag?('deploy', false)
|
35
|
+
super
|
36
|
+
end
|
37
|
+
|
38
|
+
|
39
|
+
def run
|
40
|
+
|
41
|
+
mainapp_bundleid= nil
|
42
|
+
if @args_deploy_flag
|
43
|
+
mainapp_bundleid = get_selected_deploy_bundleid()
|
44
|
+
else
|
45
|
+
mainapp_bundleid = get_selected_dev_bundleid()
|
46
|
+
end
|
47
|
+
puts "选择使用的bundle id: #{mainapp_bundleid}"
|
48
|
+
|
49
|
+
args_temp = []
|
50
|
+
args_temp << mainapp_bundleid
|
51
|
+
Pindo::Command::Deploy::Pullconfig::run(args_temp)
|
52
|
+
|
53
|
+
|
54
|
+
project_dir = Dir.pwd
|
55
|
+
Dir.chdir(project_dir)
|
56
|
+
config_json_file = File.join(project_dir,"config.json")
|
57
|
+
Debug::modify_cert_with_project(project_dir:project_dir, config_file:config_json_file)
|
58
|
+
|
59
|
+
args_temp = []
|
60
|
+
if @args_adhoc_flag
|
61
|
+
args_temp << "--adhoc"
|
62
|
+
else
|
63
|
+
args_temp << "--dev"
|
64
|
+
end
|
65
|
+
|
66
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
67
|
+
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.modify_cert_with_project(project_dir:nil, config_file:nil)
|
71
|
+
|
72
|
+
|
73
|
+
project_fullname = ""
|
74
|
+
Dir.foreach(project_dir) do |file|
|
75
|
+
if file =~ /(.*).xcodeproj/
|
76
|
+
project_fullname = file
|
77
|
+
break;
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
if !project_fullname.nil?
|
82
|
+
proj_name = File.basename(project_fullname, ".xcodeproj")
|
83
|
+
|
84
|
+
entitlements_plist_path = File.join(project_dir, proj_name + ".entitlements")
|
85
|
+
proj_fullname = File.join(project_dir, proj_name) + ".xcodeproj"
|
86
|
+
if File.exist?(proj_fullname)
|
87
|
+
project_obj = Xcodeproj::Project.open(proj_fullname)
|
88
|
+
project_obj.targets.each do |target|
|
89
|
+
if target.product_type.to_s.eql?("com.apple.product-type.application") then
|
90
|
+
temp_entitlements_file = target.build_configurations.first.build_settings['CODE_SIGN_ENTITLEMENTS']
|
91
|
+
if !temp_entitlements_file.nil? && !temp_entitlements_file.empty?
|
92
|
+
entitlements_plist_path = File.join(project_dir, temp_entitlements_file)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# puts entitlements_plist_path
|
99
|
+
if File.exist?(entitlements_plist_path)
|
100
|
+
|
101
|
+
config_json = nil
|
102
|
+
if File.exist?(config_file)
|
103
|
+
config_json = JSON.parse(File.read(config_file))
|
104
|
+
end
|
105
|
+
|
106
|
+
entitlements_plist_dict = Xcodeproj::Plist.read_from_path(entitlements_plist_path)
|
107
|
+
|
108
|
+
if entitlements_plist_dict["com.apple.developer.icloud-container-identifiers"].nil?
|
109
|
+
if !config_json.nil? && !config_json["app_info"]['app_icloud_id'].nil?
|
110
|
+
config_json["app_info"].delete('app_icloud_id')
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
|
115
|
+
if entitlements_plist_dict["com.apple.security.application-groups"].nil?
|
116
|
+
if !config_json.nil? && !config_json["app_info"]['app_group_id'].nil?
|
117
|
+
config_json["app_info"].delete('app_group_id')
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
# puts JSON.pretty_generate(config_json)
|
122
|
+
if !config_json.nil?
|
123
|
+
File.open(config_file, "w") do |f|
|
124
|
+
f.write(JSON.pretty_generate(config_json))
|
125
|
+
end
|
126
|
+
|
127
|
+
end
|
128
|
+
|
129
|
+
end
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
|
@@ -0,0 +1,171 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Pindo
|
4
|
+
class Command
|
5
|
+
class Dev < Command
|
6
|
+
class Pub < Dev
|
7
|
+
|
8
|
+
self.summary = '发布代码,添加tag,添加发布信息,并合并到发布分支'
|
9
|
+
|
10
|
+
self.description = <<-DESC
|
11
|
+
发布代码,添加tag,添加发布信息,并合并到发布分支。用法:在当前代码仓库下执行pindo dev pub
|
12
|
+
DESC
|
13
|
+
|
14
|
+
self.arguments = [
|
15
|
+
|
16
|
+
]
|
17
|
+
|
18
|
+
def self.options
|
19
|
+
[
|
20
|
+
].concat(super)
|
21
|
+
end
|
22
|
+
|
23
|
+
def initialize(argv)
|
24
|
+
|
25
|
+
super
|
26
|
+
@additional_args = argv.remainder!
|
27
|
+
end
|
28
|
+
|
29
|
+
def run
|
30
|
+
|
31
|
+
release_branch = "master"
|
32
|
+
current_project_dir = Dir.pwd
|
33
|
+
|
34
|
+
process_need_add_files(project_dir:current_project_dir)
|
35
|
+
|
36
|
+
answer = agree("是否添加发布备注信息?(Y/n)")
|
37
|
+
if answer
|
38
|
+
add_release_info(project_dir:current_project_dir)
|
39
|
+
end
|
40
|
+
|
41
|
+
answer = agree("是否将代码合并到master分支?(Y/n)")
|
42
|
+
|
43
|
+
if answer
|
44
|
+
current_branch = git!(%W(-C #{current_project_dir} rev-parse --abbrev-ref HEAD)).strip
|
45
|
+
coding_branch = current_branch
|
46
|
+
merge_to_release_branch(project_dir:current_project_dir, release_branch:release_branch, coding_branch:coding_branch)
|
47
|
+
add_release_tag(project_dir:current_project_dir)
|
48
|
+
end
|
49
|
+
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
def add_release_info(project_dir:nil)
|
54
|
+
|
55
|
+
puts
|
56
|
+
puts "输入Release 备注:"
|
57
|
+
description = PgyerHelper.share_instace.get_description()
|
58
|
+
File.open("#{project_dir}/.release_info", 'w') { |f| f.write(description) }
|
59
|
+
git_addpush_repo(path:project_dir, message:"update release info", commit_file_params:[".release_info"])
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
def add_release_tag(project_dir:nil)
|
64
|
+
|
65
|
+
time_str = Time.now.strftime('%Y_%m_%d')
|
66
|
+
tag_name = "dev_" + time_str
|
67
|
+
remove_tag(local_repo_dir:project_dir, tag_name:tag_name)
|
68
|
+
result = add_tag(local_repo_dir:project_dir, tag_name:tag_name)
|
69
|
+
|
70
|
+
puts
|
71
|
+
puts "已经为当前仓库添加tag: #{tag_name}"
|
72
|
+
puts "仓库路径:#{project_dir}"
|
73
|
+
puts
|
74
|
+
|
75
|
+
end
|
76
|
+
|
77
|
+
|
78
|
+
def merge_to_release_branch(project_dir:nil, release_branch:nil, coding_branch:nil)
|
79
|
+
|
80
|
+
current_project_dir = project_dir
|
81
|
+
|
82
|
+
|
83
|
+
if !coding_branch.eql?(release_branch)
|
84
|
+
|
85
|
+
coding_branch_commit_id = git!(%W(-C #{current_project_dir} rev-parse #{coding_branch})).strip
|
86
|
+
release_branch_commit_id = "111"
|
87
|
+
|
88
|
+
if remote_branch_exists?(local_repo_dir: current_project_dir, branch:release_branch)
|
89
|
+
if local_branch_exists?(local_repo_dir: current_project_dir, branch:release_branch)
|
90
|
+
puts "存在#{release_branch}远程分支"
|
91
|
+
puts "存在#{release_branch}本地分支"
|
92
|
+
git!(%W(-C #{current_project_dir} checkout #{release_branch}))
|
93
|
+
else
|
94
|
+
puts "存在#{release_branch}远程分支"
|
95
|
+
puts "不存在#{release_branch}本地分支"
|
96
|
+
git!(%W(-C #{current_project_dir} checkout -b #{release_branch} origin/#{release_branch}))
|
97
|
+
end
|
98
|
+
|
99
|
+
git!(%W(-C #{current_project_dir} branch --set-upstream-to=origin/#{release_branch} #{release_branch}))
|
100
|
+
git!(%W(-C #{current_project_dir} pull))
|
101
|
+
# git!(%W(-C #{current_project_dir} merge #{coding_branch} --quiet))
|
102
|
+
res_data = Executable.capture_command('git', %W(merge #{coding_branch}), :capture => :out)
|
103
|
+
|
104
|
+
conflict_filelist = git!(%W(-C #{current_project_dir} diff --name-only --diff-filter=U --relative))
|
105
|
+
if !conflict_filelist.nil? && conflict_filelist.size > 0
|
106
|
+
puts "合并代码冲突, 冲突文件如下:"
|
107
|
+
|
108
|
+
raise Informative, "请手动处理冲突的文件!!!"
|
109
|
+
|
110
|
+
else
|
111
|
+
git!(%W(-C #{current_project_dir} push))
|
112
|
+
|
113
|
+
|
114
|
+
puts ""
|
115
|
+
puts "===================================="
|
116
|
+
puts "代码已经合并到#{release_branch}分支"
|
117
|
+
puts "===================================="
|
118
|
+
puts ""
|
119
|
+
release_branch_commit_id = git!(%W(-C #{current_project_dir} rev-parse #{release_branch})).strip
|
120
|
+
end
|
121
|
+
|
122
|
+
else
|
123
|
+
if local_branch_exists?(local_repo_dir: current_project_dir, branch:release_branch)
|
124
|
+
puts "不存在#{release_branch}远程分支"
|
125
|
+
puts "存在#{release_branch}本地分支"
|
126
|
+
git!(%W(-C #{current_project_dir} checkout #{release_branch}))
|
127
|
+
git!(%W(-C #{current_project_dir} checkout -b #{release_branch}_temp))
|
128
|
+
git!(%W(-C #{current_project_dir} checkout #{coding_branch}))
|
129
|
+
git!(%W(-C #{current_project_dir} branch -D #{release_branch}))
|
130
|
+
else
|
131
|
+
puts "不存在#{release_branch}远程分支"
|
132
|
+
puts "不存在#{release_branch}本地分支"
|
133
|
+
end
|
134
|
+
|
135
|
+
git!(%W(-C #{current_project_dir} checkout -b #{release_branch}))
|
136
|
+
git!(%W(-C #{current_project_dir} push origin #{release_branch}))
|
137
|
+
git!(%W(-C #{current_project_dir} branch --set-upstream-to=origin/#{release_branch} #{release_branch}))
|
138
|
+
|
139
|
+
|
140
|
+
puts ""
|
141
|
+
puts "===================================="
|
142
|
+
puts "代码已经合并到#{release_branch}分支"
|
143
|
+
puts "===================================="
|
144
|
+
puts ""
|
145
|
+
release_branch_commit_id = git!(%W(-C #{current_project_dir} rev-parse #{release_branch})).strip
|
146
|
+
end
|
147
|
+
|
148
|
+
|
149
|
+
git!(%W(-C #{current_project_dir} checkout #{coding_branch}))
|
150
|
+
if !release_branch_commit_id.eql?(coding_branch_commit_id)
|
151
|
+
git!(%W(-C #{current_project_dir} merge #{release_branch}))
|
152
|
+
puts
|
153
|
+
puts "已将#{release_branch}合并到#{coding_branch}"
|
154
|
+
puts
|
155
|
+
end
|
156
|
+
|
157
|
+
else
|
158
|
+
puts ""
|
159
|
+
puts "===================================="
|
160
|
+
puts "代码处于#{coding_branch}分支,无需合并"
|
161
|
+
puts "===================================="
|
162
|
+
puts ""
|
163
|
+
end
|
164
|
+
|
165
|
+
end
|
166
|
+
|
167
|
+
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|
171
|
+
end
|
@@ -0,0 +1,142 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
|
3
|
+
module Pindo
|
4
|
+
class Command
|
5
|
+
class Dev < Command
|
6
|
+
class Renewcert < Dev
|
7
|
+
|
8
|
+
include Appselect
|
9
|
+
|
10
|
+
self.summary = '更新证书下所有的Provisioning Profile文件'
|
11
|
+
|
12
|
+
self.description = <<-DESC
|
13
|
+
如果不存在证书,会自动生成新证书,重新生成证书下所有Provisioning Profile文件. 添加新设备或者证书过期时使用, 一般情况请勿操作!!!
|
14
|
+
用法:pindo dev renewcert
|
15
|
+
DESC
|
16
|
+
|
17
|
+
self.arguments = [
|
18
|
+
|
19
|
+
]
|
20
|
+
|
21
|
+
def self.options
|
22
|
+
[
|
23
|
+
|
24
|
+
['--fast', '快速更新证书,开发用bundle id只更新dev证书,发布bundle id只更新adhoc证书'],
|
25
|
+
['--fixedid', '重新更新bundle id的功能,检查bundle id的功能是否更新'],
|
26
|
+
].concat(super)
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def initialize(argv)
|
31
|
+
|
32
|
+
@fast_flag = argv.flag?('fast', false)
|
33
|
+
@fixedid_flag = argv.flag?('fixedid', false)
|
34
|
+
|
35
|
+
super
|
36
|
+
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
def run
|
41
|
+
|
42
|
+
auto_fixed_cert
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
def auto_fixed_cert
|
47
|
+
|
48
|
+
|
49
|
+
@dev_bundle_id_array = all_dev_bundleid() + all_tool_bundleid()
|
50
|
+
@deploy_bundle_id_array = all_release_bundleid()
|
51
|
+
@all_bundle_id_array = all_itc_bundleid()
|
52
|
+
|
53
|
+
|
54
|
+
fixed_bundleid = @fixedid_flag
|
55
|
+
|
56
|
+
|
57
|
+
fixed_bundleid_array = @all_bundle_id_array
|
58
|
+
puts fixed_bundleid_array
|
59
|
+
|
60
|
+
fixed_bundleid_array.each do |bundle_id|
|
61
|
+
begin
|
62
|
+
fixed_cert(bundle_id:bundle_id, fixed_bundleid:@fixedid_flag)
|
63
|
+
rescue => err
|
64
|
+
puts
|
65
|
+
puts
|
66
|
+
puts "Fixed #{bundle_id} cert---------Error-------!!!"
|
67
|
+
puts
|
68
|
+
puts
|
69
|
+
end
|
70
|
+
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
|
75
|
+
def fixed_cert(bundle_id:nil, fixed_bundleid: )
|
76
|
+
puts "#{bundle_id}"
|
77
|
+
|
78
|
+
args_temp = []
|
79
|
+
args_temp << "#{bundle_id}"
|
80
|
+
|
81
|
+
Pindo::Command::Deploy::Pullconfig::run(args_temp)
|
82
|
+
|
83
|
+
if fixed_bundleid
|
84
|
+
Pindo::Command::Deploy::Bundleid::run([])
|
85
|
+
end
|
86
|
+
|
87
|
+
if @fast_flag
|
88
|
+
|
89
|
+
if @dev_bundle_id_array.include?(bundle_id)
|
90
|
+
args_temp = []
|
91
|
+
args_temp << "--a=#{bundle_id}"
|
92
|
+
args_temp << "--dev"
|
93
|
+
args_temp << "--renew"
|
94
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
95
|
+
end
|
96
|
+
|
97
|
+
if @deploy_bundle_id_array.include?(bundle_id)
|
98
|
+
args_temp = []
|
99
|
+
args_temp << "--a=#{bundle_id}"
|
100
|
+
args_temp << "--adhoc"
|
101
|
+
args_temp << "--renew"
|
102
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
103
|
+
end
|
104
|
+
|
105
|
+
else
|
106
|
+
|
107
|
+
# args_temp = []
|
108
|
+
# args_temp << "--a=#{bundle_id}"
|
109
|
+
# args_temp << "--dev"
|
110
|
+
# args_temp << "--renew"
|
111
|
+
# Pindo::Command::Deploy::Cert::run(args_temp)
|
112
|
+
|
113
|
+
args_temp = []
|
114
|
+
args_temp << "--a=#{bundle_id}"
|
115
|
+
args_temp << "--adhoc"
|
116
|
+
args_temp << "--renew"
|
117
|
+
Pindo::Command::Deploy::Cert::run(args_temp)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
|
122
|
+
def fixed_push(bundle_id:nil, fixed_bundleid: false)
|
123
|
+
|
124
|
+
Pindo::Command::Deploy::Pullconfig::run(args_temp)
|
125
|
+
|
126
|
+
args_temp = []
|
127
|
+
args_temp << "--a=#{bundle_id}"
|
128
|
+
args_temp << "--dev"
|
129
|
+
Pindo::Command::Deploy::Pem::run(args_temp)
|
130
|
+
|
131
|
+
args_temp = []
|
132
|
+
args_temp << "--a=#{bundle_id}"
|
133
|
+
args_temp << "--adhoc"
|
134
|
+
Pindo::Command::Deploy::Pem::run(args_temp)
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
|
data/lib/pindo/dev.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# require 'pindo/dev/create'
|
2
|
+
|
3
|
+
|
4
|
+
# require 'pindo/dev/confuseproj'
|
5
|
+
# require 'pindo/dev/confusecode'
|
6
|
+
# require 'pindo/dev/cert'
|
7
|
+
require 'pindo/dev/pub'
|
8
|
+
require 'pindo/dev/debug'
|
9
|
+
require 'pindo/dev/autoresign'
|
10
|
+
require 'pindo/dev/autobuild'
|
11
|
+
require 'pindo/dev/renewcert'
|
12
|
+
require 'pindo/dev/createbuild'
|
13
|
+
|
14
|
+
module Pindo
|
15
|
+
class Command
|
16
|
+
|
17
|
+
class Dev < Command
|
18
|
+
self.abstract_command = true
|
19
|
+
self.summary = '开发阶段使用的相关命令'
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
|
2
|
+
require 'fileutils'
|
3
|
+
|
4
|
+
module Pindo
|
5
|
+
class Command
|
6
|
+
class Env < Command
|
7
|
+
class Dreamstudio < Env
|
8
|
+
|
9
|
+
self.summary = '切换到 dreamstudio 环境'
|
10
|
+
|
11
|
+
self.description = <<-DESC
|
12
|
+
切换到 dreamstudio 环境,终端下运行: pindo env dreamstudio
|
13
|
+
DESC
|
14
|
+
|
15
|
+
|
16
|
+
self.arguments = [
|
17
|
+
|
18
|
+
]
|
19
|
+
|
20
|
+
def self.options
|
21
|
+
[
|
22
|
+
|
23
|
+
].concat(super)
|
24
|
+
end
|
25
|
+
|
26
|
+
def initialize(argv)
|
27
|
+
super(argv)
|
28
|
+
@additional_args = argv.remainder!
|
29
|
+
end
|
30
|
+
|
31
|
+
def validate!
|
32
|
+
super
|
33
|
+
end
|
34
|
+
|
35
|
+
def run
|
36
|
+
|
37
|
+
clone_pindo_common_config_repo(force_delete:false)
|
38
|
+
|
39
|
+
pindo_single_config.update_pindo_env(env_name:"dreamstudio_config")
|
40
|
+
Pindoconfig.reload_instance
|
41
|
+
|
42
|
+
pindo_env_dir = pindo_single_config.pindo_env_configdir
|
43
|
+
if File.exist?(pindo_env_dir)
|
44
|
+
FileUtils.rm_rf(pindo_env_dir)
|
45
|
+
end
|
46
|
+
clone_pindo_env_config_repo(force_delete:true)
|
47
|
+
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|