Отчёты и графики для travis-ci и drone.io


    В больших проектах уже довольно давно привык к плюшкам ci: прогону тестов, отчётам и автоматическому деплою. При разработке небольших проектов этого не хватает. 1 и 3 покрывает travis-ci (ну или drone.io), но вот визуализации результата нет никакой.

    И сразу придумалось простое решение:
    • прогонять анализаторы на стороне ci;
    • отправлять их себе;
    • парсить результат и красиво отображать.


    И это всё вылилось в небольшое приложение — coviolations.io (исходники сервера и приложения), сейчас оно
    • работает с публичными и приватными репозиториями на github;
    • работает с travis-ci, drone.io и при желании с jenkins;
    • умеет парсить результат pep8, sloccount, python unittest, pip-review и testem;
    • умеет рисовать статус-плашку ;
    • умеет комментировать пул реквесты в публичные проекты, использующие travis-ci;
    • не умеет работать с репозиториями организаций.


    Как подключить к проекту?


    Для подключения к проекту надо добавить файл .covio.yml, например:
    violations:
      pep8: pep8 . --exclude='*migrations*'
      sloccount: sloccount .
      pip_review: pip-review
      py_unittest: cat python_tests.txt
      testem: cat testem.out
    

    Где слева название анализатора, а справа команда для получения его вывода.

    Включить проект в управлении проектами и добавить вызов covio.
    Для .travis.yml это будет:
    after_script:
      - pip install coviolations_app
      - covio
    

    А для droner.io и jenkins:
    pip install coviolations_app
    COVIO_TOKEN="token" covio
    

    token можно получить на странице проекта.

    Нет парсера нужного анализатора?


    Если нет нужного парсера, его легко сделать. Сам парсер это просто функция на python:
    from tasks.const import STATUS_SUCCESS, STATUS_FAILED
    from .base import library
    
    
    @library.register('название анализоатора')
    def parse_violation(data):
        # data['raw'] - необработанный вывод анализатора
        data['preview'] = data['raw'][:10] # краткий обработанный результат
        data['prepared'] = data['raw'] + '!' # полный обработанный результат
        data['status'] = STATUS_SUCCESS # или STATUS_FAILED, если всё плохо
        data['plot'] = { # значения для отображения на графики
            'lines_count': len(data['raw'].split('\n')),
            'random_value': 5,
        }
        return data
    

    Доступные парсеры лежат в violations.

    Что внутри?




    Серверная часть написана на django, api реализовано через tastypie. Обработка результатов анализаторов происходит в пачке воркеров, сделанных с rq. Всё общение на стороне сервера происходит через redis. Данные хранятся в mongodb и postgresql. Браузерный клиент написан на coffeescript с backbone.js. Графики рисуются при помощи chart.js. Клиент с сервером общается по rest api и sockjs.

    Как развернуть локально?


    Для того чтобы развернуть локальную версию, достаточно склонировать проект, установить fabric и bower:
    git clone https://github.com/nvbn/coviolations_web.git
    pip install fabric
    npm install bower
    

    Скопировать файл настроек из coviolations_web/settings/dist.py в coviolations_web/settings/local.py и заполнить его. В local_nvbn.py лежат мои локальные настройки, в local_production.py — настройки с продакшена.

    И развернуть всё с:
    fab install
    

    Для проверки можно запустить тесты с:
    ./manage.py test violations projects tasks services app push
    

    Для запуска нужно выполнить(каждая команда в отдельной консоле):
    ./manage.py runserver
    ./manage.py runpush
    ./manage.py rqworker
    

    Для отправки результатов из covio на локально развёрнутый инстанст надо добавить в .covio.yml:
    endpoint: http://localhost:8000/api/v1/tasks/
    


    Планы


    Сейчас планируется добавить поддержку репозиториев организаций, проверку pull реквестов с автоматическим комментированием их и много-много парсеров. Ещё хочется из результатов анализаторов делать аннотации к коду, но это, скорее всего, нереально.

    Ссылки


    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 3

      0
      Очень интересно. Хотел задать вопрос, но увидел в тексте ответ
        0
        Лицензия на серверный код тоже MIT?
          0
          Да.

        Only users with full accounts can post comments. Log in, please.