После нескольких часов выхода из регулярных выражений я добавил это к своему .gitlab-ci.yml
:
- json_badge_info=$(curl -H "PRIVATE-TOKEN:$API_TOKEN" -X GET https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/badges)
- pylint_badge_id=$(expr match "$json_badge_info" '.*https[^"]*-blue\.svg\",\"id\":\([0-9]\+\),')
Таким образом, весь этап выглядит так:
lint:
stage: unittest-lint
script:
- python -m pip install setuptools pylint pylint-exit
- pylint src/*.py | tee pylint.txt || pylint-exit $?
- score=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' pylint.txt)
- echo "Pylint score was $score"
# get the json with all badge urls via API and regex the id of the badge with 'blue.svg' in it
- json_badge_info=$(curl -H "PRIVATE-TOKEN:$API_TOKEN" -X GET https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/badges)
- pylint_badge_id=$(expr match "$json_badge_info" '.*https[^"]*-blue\.svg\",\"id\":\([0-9]\+\),')
- echo $pylint_badge_id
- badge_url=https://img.shields.io/badge/lint%20score-$score-blue.svg
- >-
curl https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/badges/$pylint_badge_id
-X PUT
-H "PRIVATE-TOKEN: $API_TOKEN"
-H "Content-Type: application/json"
-d '{"image_url": "'"$badge_url"'"}'
artifacts:
paths:
- pylint.txt
Это решение зависит от порядкаэлементов в регулярном выражении ищет -blue.svg
в JSON, который должен быть перед идентификатором значка.