devpi: вручную загрузить toxresult.json

В настоящее время у меня есть конвейер Jenkins, который создает и тестирует мой пакет Python, используя tox. Если все юнит-тесты пройдены, они будут загружены в мой локальный индекс devpi.

Используя devpi test <mypackage>, я могу прикрепить результаты теста к файлу выпуска в файле index. Но это снова загрузит уже собранный пакет, повторит все уже пройденные наборы тестов, определенные в файле tox.ini, и только затем загрузит результаты в виде файла toxresult.json.

Есть ли способ напрямую загрузить toxresult.json вместе с файлами релиза? Согласно быстрый старт и документация тестовой команды, кажется, нет опции командной строки, и ни в загрузить команду.

Конечно, я мог бы изменить свой конвейер Jenkins, чтобы пропустить тесты перед загрузкой, а затем собрать, загрузить и протестировать пакет с помощью devpi. Если команда devpi test не удалась, я могу удалить пакет из индекса. Но я бы предпочел не загружать пакет с непройденными тестами.


person dudenr33    schedule 29.12.2019    source источник


Ответы (1)


Анонимные загрузки

Это относительно просто, если вы разрешите анонимному пользователю загружать результаты теста (что является настройкой IIRC по умолчанию). Сделайте POST запрос к URL-адресу загруженного дистрибутива, передав tox результатов в качестве полезной нагрузки JSON. Пример:

$ curl -i \
    -H "content-type: application/json" \
    -X POST \
    --data-binary "@/tmp/toxreport.json" \
    http://my-server/myuser/myindex/+f/19b/d3544d03b1716/mypkg-1.0.tar.gz

В случае успеха вы должны получить результат, аналогичный

HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Content-Length: 143
Content-Type: application/json
Date: Wed, 08 Jan 2020 15:48:32 GMT
Server: waitress
X-Devpi-Api-Version: 2
X-Devpi-Master-Uuid: d800735d04a14c2d9bde920149cb8dbc
X-Devpi-Serial: 42
X-Devpi-Server-Version: 5.3.1
X-Devpi-Uuid: d800735d04a14c2d9bde920149cb8dbc

{
  "result": "myuser/myindex/+f/19b/d3544d03b1716/mypkg-1.0.tar.gz.toxresult-20200108154832-0",
  "type": "toxresultpath"
}

Вы можете найти целевой URL в столбце File таблицы файлов на странице проекта. Или запросите JSON API и отфильтруйте результаты, например.

$ devpi getjson /myuser/myindex/mypkg | jq -r '[ .result[] | .["+links"][] | .href ]'

Аутентифицированные загрузки

devpi использует базовую аутентификацию, поэтому просто передайте учетные данные в кодировке base64 в заголовке Authorization: Basic. Пример, снова с curl:

$ curl -i \
    --user myuser:mypass \
    -H "content-type: application/json" \
    -X POST \
    --data-binary "@/tmp/toxreport.json" \
    http://my-server/myuser/myindex/+f/19b/d3544d03b1716/mypkg-1.0.tar.gz

Если вам нужны подробности об аутентификации тестовой загрузки, ознакомьтесь с моим другим ответом здесь.

person hoefling    schedule 08.01.2020
comment
Спасибо. Я надеялся, что будет готовое расширение devpi, реализующее то, что вы здесь набросали, но, по крайней мере, это не так уж сложно реализовать самому. - person dudenr33; 12.01.2020