【问题标题】:GitHub custom checksGitHub 自定义检查
【发布时间】:2019-10-29 09:07:46
【问题描述】:

我想将自定义检查集成到一些存储库中,但我想不出最好的方法。

我们拥有相当庞大的开发团队,并且我们引入了一些命名约定来保持我们的代码库的一致性。例如,每个提交描述应该包含X,每个分支名称应该包含YZ,或者与某个正则表达式匹配。

如何对拉取请求执行一些自定义检查,正在检查的分支是否符合这些指定规则? 简单地说,当推送的提交在其描述中没有 Jira 引用时 - 合并操作被阻止。我们还希望在 PR 中看到这些检查,例如那些可以通过或失败的 CI 检查。

我已经阅读了有关 github 应用程序、操作、api、市场等的信息。找不到简单明了的东西。

我应该使用什么应用程序或方法来完成这样的任务?

【问题讨论】:

    标签: github


    【解决方案1】:

    执行此操作的最简单方法是使用 GitHub Action,它允许您执行任何您想要实现 CI 或 linting 检查的代码。

    您可以在您的存储库中创建一个 shell 脚本(例如,script/lint),该脚本接受两个参数,即基本分支和正在测试的分支。 lint 并检查您想要的任何内容,打印有用的错误消息并在提交可接受时退出零,如果提交不可接受则退出非零。

    然后在.github/workflow/lint.yml 中创建一个类似这样的工作流(如果需要,更改脚本名称):

    name: lint
    on: pull_request
    
    jobs:
      lint:
        name: Lint
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@master
        - run: script/lint "$GITHUB_SHA" "$GITHUB_REF"
    

    这将像其他 CI 检查一样出现在检查界面中,名称为“Lint”。您可以自定义名称字段以更改名称。

    检查提交消息中的 JIRA 标记的示例 lint 脚本可能如下所示:

    #!/bin/sh
    
    RET=0
    
    for i in $(git rev-list "$1".."$2")
    do
        printf "Checking $i for JIRA reference..."
        if git log -1 --format="%B" $i | grep -qsE "[A-Z]+-[0-9]+"
        then
            echo "looks ok."
        else
            echo "failed."
            RET=1
        fi
    done
    
    exit $RET
    

    【讨论】:

    • 感谢您的回答!这对我的私人仓库非常有效,但是当我尝试将它应用到我们的组织帐户时,我发现在公司级别禁止操作。是否有可能在不采取行动的情况下以某种方式做到这一点?如果是的话,你知道我应该研究哪种方式吗? (Webhooks、api 或 github 应用程序)
    • 可以使用自定义机器人帐户。有人可能已经构建了这样的东西,或者可能有一个 GitHub 应用程序将检查 JIRA 标签作为 CI 的一部分。
    猜你喜欢
    • 2019-09-05
    • 2022-07-28
    • 2013-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2016-04-29
    • 1970-01-01
    • 2016-07-14
    相关资源
    最近更新 更多