Git pre-receive hook автоматически запускает юнит-тесты в текущем реф - PullRequest
1 голос
/ 03 мая 2019

У меня возникла проблема в потоке, я установил хук pre-receive для запуска модульных тестов для веток master и dev следующим образом:

#!/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

С помощью этой настройки я хочу отклонить push, если один из модульных тестов (нажатие) завершится неудачей.

Проблема в том, что он запускает тесты, которые уже извлечены в рабочий каталог $WORKING_DIR, а не тесты, которые выдвигаются в текущем ref.

Я думал о том, чтобы всегда проверять папку tests перед запуском теста npm, но я не уверен, является ли это правильным способом автоматизации выполнения модульных тестов перед нажатием.

1 Ответ

1 голос
/ 03 мая 2019

Вызывается pre-receive ловушка ... просто до начала обновления ссылок в удаленном репозитории.

Таким образом, ваши файлы не будут отражать то, чтовы нажали.

Вы должны нажать на промежуточный репозиторий "gate", где post-receveive ловушка будет:

  • запустить тест
  • нажать нафактическое целевое хранилище, если оно прошло
  • отправить электронное письмо обратно и сбросить целевую ветку в случае неудачи
...