Last active
February 7, 2023 06:52
-
-
Save yawillianpsb/f4cbd38cccabe0d2f4b607735123d893 to your computer and use it in GitHub Desktop.
Mr pipeline (Tests + code coverage)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
variables: | |
LC_ALL: "en_US.UTF-8" | |
LANG: "en_US.UTF-8" | |
MR_LINK: "[MR $CI_MERGE_REQUEST_IID](https://gitlab-01/ios/-/merge_requests/$CI_MERGE_REQUEST_IID)" | |
PIPELINE_URL: "https://gitlab-01/ios/pipelines/$CI_PIPELINE_ID" | |
# схемы тестов которые нужно прогонять | |
UNIT_TEST_SCHEMES: "PSBBaseTests" | |
# swift scripts | |
NOTIFY_TG: "swift ./build_scripts/telegram_send.swift $GITLAB_USER_LOGIN $TG_TOKEN $TG_CHATID $TG_USERS_LIST" | |
NOTIFY_TG_TESTS: "swift ./build_scripts/telegram_send_junit.swift $GITLAB_USER_LOGIN $TG_TOKEN $TG_CHATID $TG_USERS_LIST" | |
PROJ_URL: "https://gitlab-01/api/v4/projects/142/" | |
stages: | |
- mr_build_and_test | |
- mr_fail_if_tests_failed | |
- failed_job_mr | |
.failed_job_template: | |
variables: | |
GIT_STRATEGY: none | |
tags: | |
- ios | |
- smb | |
script: | |
- ${NOTIFY_TG} "❗ Ошибка при исполнении пайплайна. [PIPELINE LINK]($PIPELINE_URL)" | |
when: on_failure | |
.unit_test_pattern: | |
variables: | |
GIT_STRATEGY: fetch | |
tags: | |
- ios | |
- smb | |
before_script: | |
- ${NOTIFY_TG} "⌛ - ${CI_COMMIT_TAG} ${CI_JOB_NAME}" | |
script: | |
- fastlane unit_test schemes:${UNIT_TEST_SCHEMES} | |
- ${NOTIFY_TG_TESTS} "✅ - ${CI_COMMIT_TAG} ${CI_JOB_NAME}" "schemes_${UNIT_TEST_SCHEMES}" | |
artifacts: | |
paths: | |
- $CI_PROJECT_DIR/tests/PSBBaseTests_report/report.html | |
expire_in: 1 week | |
reports: | |
junit: $CI_PROJECT_DIR/tests/PSBBaseTests_report/report.junit | |
mr_build_and_test: | |
extends: .unit_test_pattern | |
stage: mr_build_and_test | |
before_script: | |
- ${NOTIFY_TG} "⌛ - started [mr pipeline]($PIPELINE_URL). $MR_LINK" | |
script: | |
- ./Pods/SwiftLint/swiftlint lint --strict | |
- fastlane unit_test schemes:${UNIT_TEST_SCHEMES} | |
- fastlane code_coverage scheme:${UNIT_TEST_SCHEMES} | |
- swift ./build_scripts/write_percent_of_coverage.swift scheme_${UNIT_TEST_SCHEMES} | |
- CURRENT=`cat coverage/.current` | |
- swift ./build_scripts/write_coverage_to_file.swift baseUrl_$PROJ_URL token_$CI_MAINTAINER_TOKEN from_master filename_.max | |
- MAX=`if [ -f coverage/.max ] ; then cat coverage/.max ; else echo 0 ; fi` | |
- echo MAX coverage = $MAX | |
- echo CURRENT coverage = $CURRENT | |
- LOG_ERROR="🆘 CURRENT($CURRENT) coverage must be at least MAX($MAX)" | |
- TG_ERROR="🆘 - текущий процент покрытия $CURRENT меньше минимального порога $MAX [mr pipeline]($PIPELINE_URL). $MR_LINK" | |
- if (( $(echo "$CURRENT < $MAX" |bc -l) )) ; then echo $LOG_ERROR; ${NOTIFY_TG} "$TG_ERROR"; exit 1 ; fi | |
- ${NOTIFY_TG_TESTS} "✅ - succeed [mr pipeline]($PIPELINE_URL). $MR_LINK" "schemes_${UNIT_TEST_SCHEMES}" | |
only: | |
- merge_requests | |
allow_failure: false | |
artifacts: | |
paths: | |
- $CI_PROJECT_DIR/tests/PSBBaseTests_report/report.html | |
expire_in: 1 week | |
reports: | |
junit: $CI_PROJECT_DIR/tests/PSBBaseTests_report/report.junit | |
mr_fail_if_tests_failed: | |
variables: | |
GIT_STRATEGY: fetch | |
tags: | |
- ios | |
- smb | |
stage: mr_fail_if_tests_failed | |
script: | |
- FILE='tests/PSBBaseTests_report/report.html' | |
- TEXT=`if [ -f $FILE ] ; then cat $FILE ; else echo "Failed load tests report"; exit 1 ; fi` | |
- echo $TEXT | |
- SED=`echo $TEXT | sed -e 's/.*<h2 id="fail-count"><span class="number">\(.*\)<\/span> failures<\/h2>.*/\1/'` | |
- echo $SED | |
- FAILS_COUNT=`(echo $SED | grep -Eq '^\d+$') && echo $SED || echo 0` | |
- echo $FAILS_COUNT | |
- if [[ $FAILS_COUNT > 0 ]] ; then echo "🆘 есть зафейленные тесты"; exit 1; else echo SUCCESS ; fi | |
only: | |
- merge_requests | |
allow_failure: false | |
failed_job_mr: | |
extends: .failed_job_template | |
stage: failed_job_mr | |
only: | |
- merge_requests |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment