Metadata-Version: 2.4
Name: savetest-cli
Version: 0.1.1
Summary: CLI for SaveTest: zip Allure results and upload them to SaveTest
License-Expression: MIT
Requires-Python: >=3.8
Description-Content-Type: text/markdown
Requires-Dist: click>=8.0
Requires-Dist: requests>=2.28

<p align="center">
  <img src="savetest_cli/pwa-512x512.png" alt="SaveTest" width="128">
</p>

# savetest-cli

CLI-утилита для упаковки Allure-результатов в ZIP и загрузки их в [SaveTest](https://save-test.ru).

## Установка

```bash
pip install savetest-cli
```

## Команды

### `savetest zip_report <path>`

Упаковывает директорию с Allure-результатами в ZIP-архив.

```bash
savetest zip_report ./AllureReport
```

| Параметр | По умолчанию | Описание |
|---|---|---|
| `path` | — | Путь к директории с Allure-результатами |
| `--output`, `-o` | `allure-results.zip` | Путь к выходному ZIP-файлу |
| `--include-attachments` | `false` | Включить вложения (картинки, видео, `*-attachment.json`) |
| `--no-include-attachments` | — | Исключить вложения (быстрее, меньше объём) |

**Примеры:**

```bash
# Упаковать без вложений (быстрее)
savetest zip_report ./AllureReport

# Указать выходной файл
savetest zip_report ./AllureReport --output my-report.zip

# Включить вложения
savetest zip_report ./AllureReport --include-attachments
```

---

### `savetest upload`

Загружает ZIP-архив в SaveTest по частям (чанками).

```bash
savetest upload --token sat_xxx --project-id 40
```

| Параметр | Env-переменная | По умолчанию | Описание |
|---|---|---|---|
| `--zip-file`, `-z` | — | `allure-results.zip` | Путь к ZIP-файлу |
| `--host` | `SAVETEST_HOST` | `https://save-test.ptnl.moscow` | Хост SaveTest |
| `--token`, `-t` | `SAVETEST_TOKEN` | — | API-токен (**обязательно**) |
| `--project-id`, `-p` | `SAVETEST_PROJECT_ID` | — | ID проекта (**обязательно**) |
| `--test-run-id` | `SAVETEST_TEST_RUN_ID` | — | ID существующего тест-рана (иначе создаётся новый) |
| `--test-run-name` | `SAVETEST_TEST_RUN_NAME` | — | Имя нового тест-рана |
| `--branch`, `-b` | `SAVETEST_BRANCH` | — | Ветка Git |
| `--include-attachments` | `SAVETEST_INCLUDE_ATTACHMENTS` | `false` | Сообщить серверу, что ZIP содержит вложения |
| `--chunk-size` | — | `50` | Размер чанка при загрузке (МБ) |
| `--wait` / `--no-wait` | — | `--wait` | Дождаться завершения импорта и создания тест-рана |
| `--poll-interval` | — | `1.5` | Интервал опроса статуса (сек) |
| `--timeout` | — | `3600` | Таймаут ожидания обработки (сек) |

**Примеры:**

```bash
# Минимальный вызов (токен через переменную окружения)
export SAVETEST_TOKEN=sat_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
savetest upload --project-id 40

# Создать новый тест-ран с именем
savetest upload \
  --token sat_xxx \
  --project-id 40 \
  --test-run-name "Smoke DEV #42" \
  --branch dev

# Загрузить в существующий тест-ран
savetest upload \
  --token sat_xxx \
  --project-id 40 \
  --test-run-id 7

# Загрузить с вложениями из другого файла
savetest upload \
  --token sat_xxx \
  --project-id 40 \
  --zip-file my-report.zip \
  --include-attachments
```

---

## Типичный сценарий

```bash
# 1. Упаковать результаты (без вложений)
savetest zip_report ./AllureReport

# 2. Загрузить в SaveTest (CLI дождётся импорта и выведет ссылку на тест-ран)
export SAVETEST_TOKEN=sat_xxx
savetest upload --project-id 40 --branch dev --test-run-name "CI build #123"
```

По умолчанию `upload` ждёт полной обработки. Чтобы вернуться сразу после приёма чанков: `--no-wait`.

## Соответствие параметрам Jenkins Pipeline

| Jenkins-параметр | CLI-опция |
|---|---|
| `savetest_host` | `--host` |
| `savetest_project_id` | `--project-id` |
| `savetest_test_run_id` | `--test-run-id` |
| `savetest_include_attachments` | `--include-attachments` / `--no-include-attachments` |
| `branch` | `--branch` |
| токен (захардкожен) | `--token` / `SAVETEST_TOKEN` |
