Git 自动预接收挂钩 运行 单元测试被推送到当前 ref

Git pre-receive hook automatically run unit tests being pushed in the current ref

我的流程有问题,我设置了一个 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 文件夹,但我不确定这是否是自动化 运行 进行单元测试的正确方法推动之前。

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

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

您应该推送到中间 "gate" 存储库,其中 post-receveive 挂钩将:

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