Greasy Fork is available in English.

获取分支

创建bug、关闭bug等操作时,可以快速获取分支

// ==UserScript==
// @name         获取分支
// @namespace    ydr
// @version      1.8
// @description  创建bug、关闭bug等操作时,可以快速获取分支
// @author       ydr
// @match        https://jira.meitu.com/*
// @grant        GM_xmlhttpRequest
// @grant        GM_setValue
// @grant        GM_getValue
// ==/UserScript==

(function () {
    'use strict';
    const refreshTime = 1000;
    //评论上的获取分支按钮
    function addCommentButton() {
        // 生成获取分支对应输入框和按钮UI
        let $branch_span_comment = $('<span style="font-size: 15px" id="comment_text">输入id:</span>');
        let $input_text = $('<input type="text" class="text medium-field" id="build_id_comment">');
        let $branch_btn_comment = $('<input class="aui-button" type="button" value="获取分支" id="get_branch_btn_comment">');
        let $last_branch_btn_comment = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_comment">');
        let $camera_template_btn_comment = $('<input type="button" class="aui-button" value="相机模板" id="get_camera_template_btn_comment">');
        let $camera_file_btn_comment = $('<input type="button" class="aui-button" value="相机附件" id="get_camera_file_btn_comment">');
        // 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
        var is_btn = document.getElementById('get_branch_btn_comment');
        if (!is_btn) {
            let $b = $branch_span_comment.append($input_text).append($branch_btn_comment).append($last_branch_btn_comment).append($camera_template_btn_comment).append($camera_file_btn_comment);
            $("#addcomment").after($b);
        }
    }
    //关闭jira时获取分支按钮
    function closeJiraButton() {
        // 因点击关闭按钮时,弹窗元素需要等一会才弹出,所以这边设置了展示延迟
        setTimeout(function () {
            // 生成获取分支对应输入框和按钮UI
            let $branch_span_close = $('<span id="close_text">输入id:</span>');
            let $input_text_close = $('<input type="text" class="text medium-field" id="build_id_close">');
            let $branch_btn_close = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn_close">');
            let $last_branch_btn_close = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_close">');
            // 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
            var is_close_btn = document.getElementById('get_branch_btn_close');
            if (!is_close_btn) {
                let $c = $branch_span_close.append($input_text_close).append($branch_btn_close).append($last_branch_btn_close);
                $("#issue-workflow-transition-submit").before($c);
            }
        }, 800);
    }
    //重新打开jira时获取分支按钮
    function openJiraButton() {
        // 因点击重新打开按钮时,弹窗元素需要等一会才弹出,所以这边设置了展示延迟
        setTimeout(function () {
            // 生成获取分支对应输入框和按钮UI
            let $branch_span_open = $('<span id="open_text">输入id:</span>');
            let $input_text_open = $('<input type="text" class="text medium-field" id="build_id_open">');
            let $branch_btn_open = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn_open"><br>');
            let $last_branch_btn_open = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn_open">');
            // 判断UI是否存在,存在则不再重复添加,不存在则添加到对应的位置
            var is_open_btn = document.getElementById('get_branch_btn_open');
            if (!is_open_btn) {
                let $d = $branch_span_open.append($input_text_open).append($branch_btn_open).append($last_branch_btn_open);
                $("#issue-workflow-transition-submit").before($d);
            }
        }, 800);

    }

    // 创建jira时添加获取分支按钮
    function addJiraButton() {
        //创建jira上的获取分支按钮
        let $branch_span = $('<label for="customfield_10304"></label>');
        let $branch_btn = $('<input type="button" class="aui-button" value="获取分支" id="get_branch_btn">');
        let $a = $branch_span.append($branch_btn);
        $("#customfield_10303").after($a);
        let $last_branch_btn = $('<input type="button" class="aui-button" value="上次分支" id="last_branch_btn">');
        $branch_span.append($last_branch_btn);
    }

    // 通过平台+build id,获取对应分支,并回调到对应的函数上
    function get_branch(platform, build_id) {
        var url = '';
        var branch = '';
        var result = '';
        // 获取iOS的分支
        if (platform == 'iOS') {
            url = 'http://ios.meitu-int.com/ipa/mtxx/build/' + build_id;
            GM_xmlhttpRequest({
                url: url,
                method: 'GET',
                onload: function (res) {
                    if (res.status === 200) {
                        // 通过正则匹配获取分支名称
                        var r = '<span class="branch-name">(.*?)</span>';
                        try {
                            branch = res.responseText.match(r)[1];
                        } catch {
                            branch = '未找到该包的分支';
                        }
                    } else {
                        branch = '未找到该包的分支';
                    }
                        // 拼接成分支+build id并返回
                        result = branch + '#' + build_id;
                        GM_setValue('branch_value', result);
                },
                onerror: function (err) {
                    result = '接口请求失败,建议重新关闭开启脚本再试试';
                    GM_setValue('branch_value', result);
                }
            });
        }
        // 获取Android的分支
        else if (platform == 'Android') {
            url = 'https://api-ci-data.meitu.city/ci/api/v2/build?project=Meitu&build=' + build_id;
            GM_xmlhttpRequest({
                url: url,
                method: 'GET',
                onload: function (res) {
                    if (res.status === 200) {
                        // 通过正则匹配获取分支名称
                        var r = '"branch":"(.*?)"';
                        try {
                            branch = res.responseText.match(r)[1];
                        } catch {
                            branch = '未找到该包的分支';
                        }
                    } else {
                        console.log("失败");
                        branch = '未找到该包的分支';
                    }
                    // 拼接成分支+build id并返回
                        // 拼接成分支+build id并返回
                        result = branch + '#' + build_id;
                        console.log("Android分支:" + result);
                        GM_setValue('branch_value', result);
                        console.log("Android分支设置成功:" + result);
                },
                onerror: function (err) {
                    result = '接口请求失败,建议重新关闭开启脚本再试试';
                    GM_setValue('branch_value', result);
                    console.log("error");
                    console.log(err);
                }
            });
        }
    }

    // 当是jira域名时,才触发后续的操作,如果不是则不触发
    if (location.href.indexOf('jira.meitu.com') > 0) {
        clearInterval(refreshTime);
        setInterval(function () {
            // 因创建jira入口较多,这边默认1s刷新一次
            addJiraButton();
            // 点击【备注】时,进行插入UI相关操作
            $('#footer-comment-button').unbind("click").click(function () {
                addJiraButton(); // 评论位置加入icon
                var is_btn_comment = document.getElementById('get_branch_btn_comment');
                // 如果不存在则添加
                if (!is_btn_comment) {
                    addCommentButton();
                }
            });
            // 点击【重新打开】时,进行插入UI相关操作
            $('#action_id_31').unbind("click").click(function () {
                var is_btn_open = document.getElementById('get_branch_btn_open');
                // 如果不存在则添加
                if (!is_btn_open) {
                    openJiraButton();
                }
            });
            // 点击【关闭问题】时,进行插入UI相关操作
            $('#action_id_21').unbind("click").click(function () {
                console.log("点击几次");
                //var is_btn_close_dialog =  document.getElementById('workflow-transition-21-dialog');
                var is_btn_close = document.getElementById('get_branch_btn_close');
                // 如果不存在则添加
                if (!is_btn_close) {
                    closeJiraButton();
                }
            });
            // 评论入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn_comment").unbind("click").click(function () {
                // 获取bug页面的平台
                var platform_text = $("#customfield_10301-val").text();
                var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
                var input_build_id_comment = document.getElementById("build_id_comment").value;
                var build_id_comment = input_build_id_comment.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                var comment_text = $("#addcomment textarea[id='comment']").val();
                // 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
                if (platform == '' || platform == "Web") {
                    get_branch('Android', build_id_comment);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_comment);
                        var default_value = '未找到该包的分支'+"#"+build_id_comment
                        if (value == default_value){
                            get_branch('iOS', build_id_comment);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_comment);
                        document.getElementById('build_id_comment').value = value;
                        var result_value = comment_text + value;
                        $("#addcomment textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_comment"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#addcomment textarea[id='comment']").focus();
                    }, 500);
                    }, 500);
                }
                else {
                    get_branch(platform, build_id_comment);
                    // 支持直接复制分支操作,设置了300ms的延迟,避免接口没来得及返回
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_comment);
                        // 增加重试机制,等1s再重新取一次
                        if(value.indexOf(build_id_comment) != -1){
                            setTimeout(function () {
                                var value = GM_getValue('branch_value', build_id_comment);
                                }, 1000);
                        }
                        document.getElementById('build_id_comment').value = value;
                        var result_value = comment_text + value;
                        $("#addcomment textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_comment"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#addcomment textarea[id='comment']").focus();
                    }, 500);
                }
            })
            // 重新打开jira入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn_open").unbind("click").click(function () {
                // 获取bug页面的平台
                var platform_text = $("#customfield_10301-val").text();
                var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
                var open_text = $("#workflow-transition-31-dialog textarea[id='comment']").val();
                console.log("jira上的平台:", platform);
                var input_build_id_open = document.getElementById("build_id_open").value;
                var build_id_open = input_build_id_open.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                // 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
                if (platform == '' || platform == "Web") {
                    get_branch('Android', build_id_open);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_open);
                        var default_value = '未找到该包的分支'+"#"+build_id_open
                        if (value == default_value){
                            get_branch('iOS', build_id_open);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_open);
                        document.getElementById('build_id_open').value = value;
                        var result_value = open_text + value;
                        $("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_open"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-31-dialog textarea[id='comment']").focus();
                    }, 500);
                    }, 500);
                } else {
                    get_branch(platform, build_id_open);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_open);
                        console.log("重新打开jira获取的分支:",value);
                        // 增加重试机制,等1s再重新取一次
                        if(value.indexOf(build_id_open) != -1){
                            setTimeout(function () {
                                var value = GM_getValue('branch_value', build_id_open);
                                }, 1000);
                        }
                        document.getElementById('build_id_open').value = value;
                        var result_value = open_text + value;
                        $("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
                        var e = document.getElementById("build_id_open"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-31-dialog textarea[id='comment']").focus();
                    }, 500);
                }
            })
            // 关闭jira入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn_close").unbind("click").click(function () {
                // 获取bug页面的平台
                var platform_text = $("#customfield_10301-val").text();
                var platform = platform_text.replace(/(^\s*)|(\s*$)/g, ""); //去掉前后的空格
                console.log("jira上的平台:", platform);
                var close_text = $("#workflow-transition-21-dialog textarea[id='comment']").val();
                console.log("有获取到吗?",close_text);
                var input_build_id_close = document.getElementById("build_id_close").value;
                var build_id_close = input_build_id_close.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                // 判断平台是否正确,如果不正确则弹出弹窗提示,正确则调用回调函数
                if (platform == '' || platform == "Web") {
                    get_branch('Android', build_id_close);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_close);
                        var default_value = '未找到该包的分支'+"#"+build_id_close
                        if (value == default_value){
                            get_branch('iOS', build_id_close);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_close);
                        var result_value = close_text + value;
                        console.log("关闭jira获取的总文案:",result_value);
                        $("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
                        console.log("最终有执行到这边吗?",result_value);
                        document.getElementById('build_id_close').value = value;
                        var e = document.getElementById("build_id_close"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-21-dialog textarea[id='comment']").focus();
                    }, 500);
                    }, 500);
                } else {
                    get_branch(platform, build_id_close);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id_close);
                        // 增加重试机制,等1s再重新取一次
                         if(value.indexOf(build_id_close) != -1){
                            setTimeout(function () {
                                var value = GM_getValue('branch_value', build_id_close);
                                }, 1000);
                        }
                        var result_value = close_text + value;
                        console.log("关闭jira获取的总文案:",result_value);
                        $("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
                        console.log("最终有执行到这边吗?",result_value);
                        document.getElementById('build_id_close').value = value;
                        var e = document.getElementById("build_id_close"); //对象是contents
                        e.select(); //选择对象 (全选)
                        document.execCommand("Copy"); //执行浏览器复制命令
                        $("#workflow-transition-21-dialog textarea[id='comment']").focus();
                    }, 500);
                }
            })
            // 创建jira入口,点击【获取分支】按钮时,获取对应分支
            $("#get_branch_btn").unbind("click").click(function () {
                //获取创建bug页面上的平台
                var create_platform = '';
                var platform_list = ['Android', 'iOS', 'Web'];
                let inputs = document.getElementsByName("customfield_10301");
                // 遍历获取哪个平台是被选中的,从而根据平台去获取分支
                for (var i = 0; i < inputs.length; i++) {
                    if (inputs[i].checked) { // 选中则代表指向该平台
                        create_platform = platform_list[i]
                    }
                };
                var input_build_id = document.getElementById("customfield_10303").value;
                var build_id = input_build_id.replace(/[^0-9]/ig, ""); //只提取里面的数字,避免有空格之类的
                if (create_platform == '' || create_platform == "Web") {
                    get_branch('Android', build_id);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id);
                        var default_value = '未找到该包的分支'+"#"+build_id
                        if (value == default_value){
                            get_branch('iOS', build_id);
                        }
                        setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id);
                        console.log("创建jira获取的分支:",value);
                        // 创建jira时的分支展示的地方
                        document.getElementById('customfield_10303').value = value;
                    }, 500);
                    }, 500);
                    //alert("请选择Android或iOS平台");
                } else {
                    get_branch(create_platform, build_id);
                    setTimeout(function () {
                        var value = GM_getValue('branch_value', build_id);
                        console.log("创建jira获取的分支:",value);
                        // 增加重试机制,等1s再重新取一次
                        if(value.indexOf(build_id) != -1){
                            setTimeout(function () {
                                var value = GM_getValue('branch_value', build_id);
                                }, 1000);
                        }
                        // 创建jira时的分支展示的地方
                        document.getElementById('customfield_10303').value = value;
                    }, 500);
                }
            });
            // 创建bug获取上次分支按钮
            $("#last_branch_btn").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                document.getElementById('customfield_10303').value = value;
            });
            // 重新打开bug获取上次分支按钮
            $("#last_branch_btn_open").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                var open_text = $("#workflow-transition-31-dialog textarea[id='comment']").val();
                var result_value = open_text + value;
                $("#workflow-transition-31-dialog textarea[id='comment']").val(result_value);
                $("#workflow-transition-31-dialog textarea[id='comment']").focus();
            });
            // 关闭bug获取上次分支按钮
            $("#last_branch_btn_close").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                var close_text = $("#workflow-transition-21-dialog textarea[id='comment']").val();
                var result_value = close_text + value;
                $("#workflow-transition-21-dialog textarea[id='comment']").val(result_value);
                $("#workflow-transition-21-dialog textarea[id='comment']").focus();
            });
            // 评论bug获取上次分支按钮
            $("#last_branch_btn_comment").unbind("click").click(function () {
                var value = GM_getValue('branch_value', '未找到记录');
                var comment_text = $("#addcomment textarea[id='comment']").val();
                var result_value = comment_text + value;
                $("#addcomment textarea[id='comment']").val(result_value);
                $("#addcomment textarea[id='comment']").focus();
            });
            // 评论入口,点击【相机模板】按钮时,获取对应分支
            $("#get_camera_template_btn_comment").unbind("click").click(function () {
                let camera_text = "h1. 模板示例 \n【效果引擎--前置check】{color:red}check结果备注{color}\n 1、AI引擎版本是否满足需求(引擎日志查看版本;确认是否引入期望的版本;排查maven/pod导致版本覆盖)\n 2、模型引擎正确设置(引擎日志确认模型是否下载;是否存在读取模型失败)\n 3、AI引擎相关功能是否正确开启(引擎日志确认是否存在依赖未开启 \n \n【效果引擎】\n 1、配置信息(Dump效果配置是否加载;效果参数值):{color:red}xx{color} \n \n【AI引擎--前置check】{color:red}check结果备注{color}\n 1、相关配置是否加载(可在config信息中,查看加载的配置是否存在)\n 2、相关参数是否生效(可在config信息中,查看相关参数是否生效)\n 3、相关数据是否设置\n \n【AI引擎】\n 1、AI引擎模型内置or线上:{color:red}xx{color}\n 2、AI引擎日志(初始化时Debug模式,关键词 “mtai:”):{color:red}附件{color}\n 3、素材配置的方式:{color:red}xx{color}\n \n 【LDS链接】\n https://techgit.meitu.com/MTLabEngines/libs/mtlablds/-/blob/0.9.0-support-mtxx-beta-51-beautyResource-7/mtlablds.txt\n {color:red}链接替换成当前{color}\n【LDS对比】\n http://mtat.meitu.com/TestManageProject/upload.jhtml?p=ldsTool&code=nxRmi8lQ-DSXKPUrrHh2o5Xp9lOtk57NeLtzDudltZI&state=undefined&appid=wxb7b291e71c4e8823 \n{color:#707070}使用上面👆地址,对比结果{color},{color:red}结果粘贴在此处{color}\n【其他】\n 1、已经查到的信息\n 2、排查思路建议";
                $("#addcomment textarea[id='comment']").val(camera_text);
                //$("#addcomment textarea[id='comment']").focus();
            });
            // 评论入口,点击【相机附件】按钮时,获取对应分支
            $("#get_camera_file_btn_comment").unbind("click").click(function () {
                let camera_file = 'jira单要求一定有附件:\n 1、原图、结果图(保存出来的 不要截屏)\n 2、效果差异:提供原图、结果图、旧版本原图、旧版本的结果图(保存出来的 不要截屏)\n 3、单机/全机问题:手机系统写清楚\n 4、客户端版本:影响版本字段\n 5、分支信息:分支链接,如:https://ci.meitu.city/build/Meitu/number/45084\n 6、dump日志:查看方式 https://cf.meitu.com/confluence/pages/viewpage.action?pageId=294610610\n 7、log信息 \n \n默认指派给客户端开发,备注相关信息后可指给中台:\n 安卓:xxx\n iOS:xxx123';
                $("#addcomment textarea[id='comment']").val(camera_file);
            });
s

        }, refreshTime);
    }


    // Your code here...
})();