Skip to content

Instantly share code, notes, and snippets.

@yawillianpsb
Last active February 7, 2023 06:52
Show Gist options
  • Save yawillianpsb/f4cbd38cccabe0d2f4b607735123d893 to your computer and use it in GitHub Desktop.
Save yawillianpsb/f4cbd38cccabe0d2f4b607735123d893 to your computer and use it in GitHub Desktop.
Mr pipeline (Tests + code coverage)
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