Class: Pindo::Command::Jps::Upload

Inherits:
Pindo::Command::Jps show all
Defined in:
lib/pindo/command/jps/upload.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(argv) ⇒ Upload

Returns a new instance of Upload.



61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/pindo/command/jps/upload.rb', line 61

def initialize(argv)

    @args_ipa_file = argv.shift_argument
    @ipa_file = argv.option('ipa')

    if !@ipa_file.nil?
        @args_ipa_file = @ipa_file
    end
    if @args_ipa_file && !@args_ipa_file.empty?
        @args_ipa_file = @args_ipa_file.strip.gsub(/\"/, '')
    end

    @args_login_flag = argv.flag?('login', false)
    @args_send_flag = argv.flag?('send', false)
    @args_resign_flag = argv.flag?('resign', false)

    @args_proj_name = argv.option('proj')
    @args_attach_name = argv.option('attach')
    @args_upload_desc = argv.option('desc')
    @args_cert_id = argv.option('certid')



    if @args_upload_desc && !@args_upload_desc.empty?
        @args_upload_desc = @args_upload_desc.strip.gsub(/\"/, '')
    end


    if !@args_cert_id.nil? && !@args_cert_id.empty?
        @args_resign_flag = true
    end
    if @args_resign_flag
        @args_send_flag = true
    end

    super(argv)
    @additional_args = argv.remainder!
end

Class Method Details

.optionsObject



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/pindo/command/jps/upload.rb', line 46

def self.options
  [
    ['--login', '强制再次登录jps网站,用法: pindo jps upload --login'],
    ['--ipa', '强制指定上传的ipa文件: pindo jps upload --ipa=path/to/demo.ipa'],
    ['--proj', '指定哪个项目(忽略大小写空格等等字符),用法:pindo jps upload --proj=prancksoundv4'],
    ['--attach', '指定需要和ipa一起上传的附件: pindo jps upload --attach=path/to/attach.zip'],
    ['--send',  '发送消息到项目群(注意:不带此参数也会发送给自己),用法:pindo jps upload --send'],
    ['--desc', '指定上传的备注信息: -pindo jps upload -desc="1.upload message"'],
    ['--resign',  '上传到之后是否重签名,用法:pindo jps upload --resign'],
    ['--certid',  '设置重签名的正式id,用法:pindo jps upload --certid=com.test.bundleid'],

  ].concat(super)
end

Instance Method Details

#runObject



105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
# File 'lib/pindo/command/jps/upload.rb', line 105

def run

    current_project_dir = Dir.pwd
    build_helper = Pindo::BuildHelper.share_instance

    Dir.chdir(current_project_dir)
    is_need_add_tag,tag_action_parms = build_helper.check_is_need_add_tag?(current_project_dir)
    if is_need_add_tag
        Pindo::Command::Dev::Tag::run(tag_action_parms)
    end

    if @args_ipa_file.nil? || !File.exist?(@args_ipa_file)
        # 获取build目录下的ipa文件
        project_type = build_helper.project_type(current_project_dir)
        case project_type
        when :ios
            build_path = File.join(current_project_dir, "build", "*.{ipa,app}")
            @args_ipa_file = Dir.glob(build_path).max_by {|f| File.mtime(f)}
        when :android
            build_path = File.join(current_project_dir, "build", "*.{apk}")
            @args_ipa_file = Dir.glob(build_path).max_by {|f| File.mtime(f)}
        when :unity

            if File.exist?(File.join(current_project_dir, "GoodPlatform/BaseiOS"))
                build_path = File.join(current_project_dir, "GoodPlatform/BaseiOS/build", "*.{ipa,app}")
                @args_ipa_file = Dir.glob(build_path).max_by {|f| File.mtime(f)}
            else
                build_path = File.join(current_project_dir, "GoodPlatform/iOS/build", "*.{ipa,app}")
                @args_ipa_file = Dir.glob(build_path).max_by {|f| File.mtime(f)}
            end
        else
            raise Informative, "当前目录不是工程目录,不能编译"
        end


        if @args_ipa_file.nil?
            build_path = File.join(current_project_dir, "*.{ipa,app,apk}")
            @args_ipa_file = Dir.glob(build_path).max_by {|f| File.mtime(f)}
        end

        if !@args_ipa_file.nil?
            answer = agree("需要上传的文件是: #{@args_ipa_file} ?(Y/n)")
            if !answer
                @args_ipa_file = nil
            end
        end

        if !@args_ipa_file.nil? && File.exist?(@args_ipa_file)
        else
            @args_ipa_file = ask('需要上传的文件:') || nil
            @args_ipa_file = @args_ipa_file.strip.gsub(/\\ /, ' ')
        end
    end

    if !File.exist?(@args_ipa_file)
        raise Informative, "#{@args_ipa_file} 文件不存在"
    end

    PgyerHelper.share_instace.setForeLogin(beforeLogin:@args_login_flag)
    app_info_obj = PgyerHelper.share_instace.prepare_upload(working_directory:Dir.pwd, proj_name:@args_proj_name)

    if app_info_obj.nil?
        raise Informative, "#{@args_proj_name} 错误, 请输入正确的App代号名称, jps网站没有该App"
    end

    result_data = PgyerHelper.share_instace.start_upload(app_info_obj:app_info_obj, ipa_file_upload:@args_ipa_file, description:@args_upload_desc)
    if !result_data.nil? && !result_data["data"].nil? && !result_data["data"]["id"].nil?
        PgyerHelper.share_instace.print_app_version_info(
            app_info_obj: app_info_obj,
            app_version_info_obj: result_data["data"]
        )

        if @args_resign_flag
            args = []
            if @args_send_flag
                args << "--send"
            end
            if !@args_cert_id.nil? && !@args_cert_id.empty?
                args << "--certid=#{@args_cert_id}"
            end
            if !@args_proj_name.nil? && !@args_proj_name.empty?
                args << "--proj=#{@args_proj_name}"
            end
            Pindo::Command::Jps::Resign::run(args)
        else
            # 始终发送给自己
            PgyerHelper.share_instace.send_apptest_msg(
                app_info_obj: app_info_obj,
                app_version_info_obj: result_data["data"],
                receiveType: "self"
            )

            # 如果有 --send 参数,额外发送到测试群
            if @args_send_flag
                PgyerHelper.share_instace.send_apptest_msg(
                    app_info_obj: app_info_obj,
                    app_version_info_obj: result_data["data"],
                    chatEnv: "DevTest",
                    receiveType: "chat"
                )
            end
        end
    end

end

#validate!Object



100
101
102
103
# File 'lib/pindo/command/jps/upload.rb', line 100

def validate!

    super
end