Git pre-receive钩子自动运行当前插入到当前引用中的单元测试

时间:2019-05-03 04:07:40

标签: git unit-testing githooks

我的流程有问题,我设置了一个pre-receive钩子,以对分支masterdev进行单元测试,如下所示:

#!/bin/bash
while read oldrev newrev ref
do
        if [[ ${ref} = refs/heads/master ]];
        then
                BRANCH=master
                WORKING_DIR="/var/www/project/project_api"
        elif [[ ${ref} = refs/heads/dev ]]
        then
                BRANCH=dev
                WORKING_DIR="/var/www/project/project_api_dev"
        else
                echo "Ref $ref received. Will not run unit tests."
        fi
done

if (test "$BRANCH" != ""); then
        echo "Running Unit Tests..."
        cd "$WORKING_DIR"
        npm test
        rc=$?
        if [[ $rc != 0 ]] ; then
                echo "Unit Tests FAILED"
                echo "Push is REJECTED"
                exit $rc
        fi

        echo "Unit Tests PASSED"
fi

exit 0

通过这种设置,如果其中一个单元测试(被推送)失败,我想拒绝推送。

问题是它运行已经检出到工作目录$WORKING_DIR的测试,而不是运行在当前ref中推送的测试。

我想到总是在运行npm测试之前检出tests文件夹,但是我不确定这是否是在推送之前自动执行正在运行的单元测试的正确方法。

2 个答案:

答案 0 :(得分:1)

pre-receive hook被调用...就在之前开始更新远程存储库上的引用。

所以您的文件不会反映您所推送的内容。

您应该推送到一个中间的“ gate”存储库,其中有一个post-receveive钩子:

  • 运行测试
  • 如果通过则推送到实际的目标存储库
  • 发送电子邮件并在失败时重置目标分支

答案 1 :(得分:-1)

您可以“前进”到 Subversion。