Принудительное увеличение покрытия в gitlab PR - PullRequest
0 голосов
/ 05 февраля 2019

Чтобы увеличить покрытие тестами, требуя юнит-тестов для каждого запроса на извлечение в моем проекте EmberJS, размещенном на gitlab, я хочу, чтобы конвейеры не работали с , если покрытие не увеличивается .

Я могу получить выходное покрытие, используя Стамбул и получить значок покрытия, отображаемый правильно, используя следующее регулярное выражение:

Gitlab CI screenshot

И используяthis gitlab-ci.yml:

image: sergiolepore/ember-cli

before_script:
  - yarn --ignore-engines
  - bower --allow-root install

"Ember Unit Tests":
  script:
    - COVERAGE=true npm test -- --filter=Unit
    - grep -o '"pct":\d*\.\d*' coverage/coverage-summary.json | head -1

Как я могу заставить следующий конвейер выйти из строя, если покрытие уменьшается в PR?

1 Ответ

0 голосов
/ 06 февраля 2019

После долгих поисков https://docs.gitlab.com/ee/ci/yaml/, вот решение, которое я нашел:

1.Генерировать покрытие кода при выполнении тестов

. Этот конвейер будет хранить процент покрытия под coverage/.current между заданиями с использованием артефактов

"Ember Unit Tests":
  artifacts:
    paths:
      - coverage/.current
  script:
    - COVERAGE=true yarn test --filter=Unit
  after_script:
    - grep -o <regex> coverage.json >> coverage/.current

2.Сравните покрытие кода с сохраненным «максимальным» покрытием (по умолчанию 0)

Если покрытие уменьшилось, просто верните ненулевой код выхода (Спасибо, Люкс!)

"Increase Coverage":
  before_script:
    - MAX=`if [ -f coverage/.max ] ; then cat coverage/.max ; else echo 00.00 ; fi`
    - CURRENT=`cat coverage/.current`
  script: if [[ $CURRENT < $MAX ]] ; then exit 1 ; fi

3.Обновите покрытие "max" при объединении запросов извлечения

"Update Max Coverage":
  except:
    - pushes
  before_script:
    - NEW_MAX=`cat coverage/.current`
  script: echo $NEW_MAX > coverage/.max

Запустите эти три конвейера подряд, используя stage , и не забудьте кэшировать покрытие "max" между конвейерами:

cache:
  paths:
    - coverage/.max
...