В Gitlab есть функции для создания значков о состоянии сборки и проценте покрытия.
Можно ли создать собственный значок для отображения результатов Pylint? Или просто отобразить эти результаты в README.md?
У меня уже есть задание CI для Pylint
Значок Pylint в gitlab
Ответы (4)
Я написал пакет для создания значков на Python, который создает значки, очень визуально похожие на основные службы значков. Он очень гибкий, вы можете импортировать и использовать его в своем коде Python или запускать из командной строки.
Я использую это в GitLab CI для отображения оценок pylint и охвата.
Есть и другие способы сделать это с помощью shields.io (см. другой ответ от kubouch), но этот подход можно использовать в ситуациях, когда у вас может не быть внешнего доступа в Интернет, например, в корпоративной среде, где брандмауэры или прокси-серверы блокируют доступ в Интернет. .
Настройка GitLab CI
1. Создайте значок
В моем конвейере CI есть шаг, который запускает pylint, и я использовал sed
для извлечения оценки из выходного текста. Затем я использую anybadge
(подробности ниже), чтобы сгенерировать значок оценки Pylint, и сохранить его как public/pylint.svg
.
pylint:
stage: test
script:
- pylint --rcfile=.pylintrc --output-format=text <LIST-OF-FILES-TO-RUN-PYLINT-AGAINST> | tee pylint.txt
- score=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' pylint.txt)
- echo "Pylint score was $score"
- anybadge --value=$score --file=public/pylint.svg pylint
Если pylint сгенерирует ненулевой rc, то GitLab расценит это как ошибку команды, и задание завершится ошибкой, то есть значок не будет создан, а отсутствующее изображение покажет, где используется значок.
ПРИМЕЧАНИЕ: pylint ЧАСТО БУДЕТ генерировать ненулевые коды возврата, поскольку он использует код выхода для сообщения о состоянии проверки lint. Я предлагаю использовать что-то вроде pylint-exit для обработки кодов возврата pylint в конвейерах CI.
2. Зарегистрируйте значок как артефакт конвейера
Я регистрирую сгенерированный файл значка как артефакт в задании CI, включив его в .gitlab-ci.yml
:
pylint:
...
- echo "Pylint score was $score"
- anybadge --value=$score --file=public/pylint.svg pylint
artifacts:
paths:
- public/pylint.svg
3. Опубликовать значок на страницах GitLab
Я включаю шаг публикации страниц, который развертывает все в публичном каталоге на страницах GitLab:
pages:
stage: deploy
artifacts:
paths:
- public
only:
- master
4. Включить бейдж в README.md
Когда главный конвейер запускается для проекта, файл pylint.svg
публикуется на страницах GitLab, и затем я могу ссылаться на изображение из моего проекта README.md
, чтобы отображался последний значок pylint.
Если вы используете https://gitlab.com для своего проекта, URL-адрес файла svg артефакт обычно будет примерно таким (замените NAMESPACE своим именем пользователя или именем группы, если ваш проект находится в группе — подробнее здесь):
https://NAMESPACE.gitlab.io/pyling.svg
В свой README.md вы можете включить изображение с:
![pylint](https://NAMESPACE.gitlab.io/pyling.svg)
Если вы хотите превратить изображение в ссылку, вы можете использовать:
[![pylint](https://NAMESPACE.gitlab.io/pyling.svg)](LINKTARGET)
Дайте мне знать, если вам нужна дополнительная информация о какой-либо настройке.
Пакет Anybadge Python
Вот еще немного информации о пакете anybadge Python:
Вы можете установить метку и значение значка, а также установить цвет на основе пороговых значений. Имеются готовые настройки для pylint, охвата и успешного конвейера, но вы можете создать любой значок, который вам нравится.
Вот ссылка на проект github с более подробной документацией: https://github.com/jongracecox/anybadge
Установить с помощью pip install anybadge
Пример кода питона:
import anybadge
# Define thresholds: <2=red, <4=orange <8=yellow <10=green
thresholds = {2: 'red',
4: 'orange',
6: 'yellow',
10: 'green'}
badge = anybadge.Badge('pylint', 2.22, thresholds=thresholds)
badge.write_badge('pylint.svg')
Пример использования командной строки:
anybadge --label pylint --value 2.22 --file pylint.svg 2=red 4=orange 8=yellow 10=green
Обновление 2019
Использование GitLab Pages больше не требуется
Теперь можно непосредственно получить доступ к последний артефакт, упрощающий обходной путь.
- Используйте специальный артефакт
pylint
вместоpublic
и удалите ненужный шагdeploy
(или отредактируйте его, если он уже используется):
pylint:
stage: test
before_script:
- pip install pylint pylint-exit anybadge
script:
- mkdir ./pylint
- pylint --output-format=text . | tee ./pylint/pylint.log || pylint-exit $?
- PYLINT_SCORE=$(sed -n 's/^Your code has been rated at \([-0-9.]*\)\/.*/\1/p' ./pylint/pylint.log)
- anybadge --label=Pylint --file=pylint/pylint.svg --value=$PYLINT_SCORE 2=red 4=orange 8=yellow 10=green
- echo "Pylint score is $PYLINT_SCORE"
artifacts:
paths:
- ./pylint/
Обратите внимание, что здесь я копирую файл журнала Pylint в артефакт папки, таким образом, он будет доступен без просмотра журналов конвейера.
После этого изображение значка будет доступно по адресу https://gitlab.example.com/john-doe/foo/-/jobs/artifacts/master/raw/pylint/pylint.svg?job=pylint
, а журнал Pylint — по адресу https://gitlab.example.com/john-doe/foo/-/jobs/artifacts/master/raw/pylint/pylint.log?job=pylint
.
2. Вы можете использовать встроенные значки GitLab вместо изображений в README.
GitLab теперь может включать значки в проект или группу, которые будут отображаться в заголовке проекта.
Дошли до Settings
/ General
/ Badges
, затем создаем новый значок, установив его ссылку и ссылку на изображение, как описано выше:
pylint
завершится ошибкой, а задание pages
в конвейере CI запустится, вы получите отсутствующее изображение, на котором отображается значок. Если шаг pages
не выполняется, вы, скорее всего, увидите старый значок. Это будет зависеть от того, есть ли у вас allow_failure: true
на вашей pylint
работе.
- person JGC; 20.08.2018
public
до запуска задания страниц. Затем убедитесь, что задание страниц запущено. Это должно подтвердить, что файл попал в нужное место и был опубликован на страницах. URL-адрес должен выглядеть примерно так: user.gitlab.io/pylint.svg. См. docs.gitlab.com/ee/user /project/pages/ для более подробной информации.
- person JGC; 29.01.2019
--exit-zero
в pylint, чтобы принудительно ввести код выхода 0.
- person Kirk Broadhurst; 13.07.2021
Если вы не хотите использовать README, страницы gitlab, любой бейдж или дропбокс, вы можете использовать https://img.shields.io/badge/lint%20score-$score-blue.svg, чтобы «создать» значок (который является просто URL-адресом) и изменить URL-адрес изображения значка через API гитлаба.
Подробности и этап проверки моего .gitlab-ci.yml
а>
Я разработал обходное решение для значков в реальном времени для каждой работы. Это не специфично для Pylint, но подход является общим, и вы можете легко изменить его так, как вам нужно.
В этом примере репозитория (ветвь badges
) создается собственный значок для каждого задания CI. Существует также полное пошаговое руководство, поэтому я не буду его копировать и вставлять сюда.
Основная идея (при условии, что вы сейчас находитесь внутри работающего задания CI):
- Создайте значок (например, скачайте его с сайта shields.io в файл).
- Загрузите файл значка в какое-либо хранилище в реальном времени, откуда его можно будет связать (например, Dropbox).
Dropbox поддерживает вызов своего API через HTTP-запросы (см. это). Таким образом, все вышеперечисленное можно сделать, например, с помощью запросы curl или Python — базовые инструменты. Вам просто нужно передать токен доступа Dropbox как секретную переменную и сохраните файл под тем же именем, чтобы перезаписать старый значок.
Затем вы можете напрямую связать значок Dropbox там, где вам нужно. Есть несколько хитростей, поэтому обязательно ознакомьтесь с моим репозиторием с примерами, если хотите его использовать. Для меня это работает довольно хорошо и, кажется, быстро.
Преимущество этого метода в том, что вам не нужно возиться с GitLab Pages. Вместо того, чтобы публиковать на Pages, вы размещаете его в Dropbox. Это простая передача файлов, вызываемая HTTP-запросом. Не более того.
Если вы используете flake8
для запуска pylint
, то простой способ создать значок — использовать genbadge
. Этот простой инструмент командной строки предоставляет возможности для создания значков для тестов, покрытия и Flake8.
Просто запустите
genbadge flake8 -i flake8stats.txt
для создания значка из файла статистики flake8, такого как этот: . Затем вы можете использовать значок, чтобы предоставить быструю ссылку на отчет HTML, созданный
flake8-html
. Подробности см. в документации (кстати, я автор !).