npm package: @s21toolkit/cli
Description: Консольный интерфейс для работы с платформой школы 21.
Latest version: 0.15.0

# s21cli 🗿👍

Консольный интерфейс для работы с платформой школы 21.

## Установка

Пакет через `npm` (необходим Node.js >=20 версии):

```sh
npm install --global @s21toolkit/cli
```

Независимый исполняемый файл через скрипт (доступны не для всех платформ):

```sh
curl -fsSL https://raw.githubusercontent.com/s21toolkit/s21cli/master/scripts/install_binary.sh | sh
```

> [!IMPORTANT]
> По умолчанию устанавливает s21cli в `$HOME/.s21`.
> Задать свой путь установки можно через переменную окружения `S21_HOME`.
> Эта переменная так же будет использоваться для обновления, поэтому рекомендуется сделать её постоянной.

Независимый исполняемый файл вручную: [[Релизы](https://github.com/s21toolkit/s21cli/releases)]

## Настройка

Поддерживаемые настройки:

```yaml
параметр: <тип_данных> # Описание [значение по умолчанию]

username: <string> # Логин (с почтой) от платформы
password: <string> # Пароль от платформы

token: <string> # Токен API (используется вместо логина и пароля)

prDirectory: <string> # Папка для клонирования репозиториев пир ревью

debugRawErrors: <boolean> # Включает отображение детальной информации об ошибках [false]

cache:
  enabled: <boolean> # Выключает кеширование в значении `false` [true]
  local: <boolean> # Использует кеш из рабочей директории вместо глобального [false]
  flat: <boolean> # Запрещает создавать подпапки для кешей [false]
  zip: <boolean> # Архивирует кеш для уменьшения использования памяти [false]
```

> [!NOTE]
> Аутентификация производится либо через логин/пароль, либо через токен (дополнительно можно указать SchoolID).
>
> Если в конфигурации указан токен, использоваться будет он. При использовании готового токена он не будет обновляться автоматически.
> Если при аутентификации через токен не указан SchoolID, он будет запрошен.
>
> Если токен не указан, будет использоваться логин/пароль.
> Если не указано ничего из вышеперечисленного произойдёт ошибка.

s21cli загружает настройки через из локального/глобального файлов конфигурации и из окружения. Локальный конфиг берётся из рабочей директории, глобальный из `$HOME`.

Файлы конфигурации являются скриптами на JS и должны именоваться `.s21.js` (либо `.cjs`/`.mjs`).

Пример заполнения `.s21.mjs`:

```mjs
export default {
  username: "example@student.21-school.ru",
  password: "qwerty123",
  prDirectory: `${process.env.HOME}/school21/peer_reviews`
}
```

Переменные окружения должны иметь формат `S21_<настройка>`, например:

```sh
export S21_prDirectory=$HOME/school21/peer_reviews
```

Приоритет загрузки: Глобальные настройки < Локальные настройки < Окружение

То есть настройки из окружения перезаписывают настройки из файлов и тд.

## Использование

```sh
s21 <...commands> [...args]
```

## Команды

Для всех команд доступен флаг `-h` для получения справки.

- `s21`
  - `pr`
    - `link` - Получает ссылки на репозиторий текущего пир ревью
    - `clone` - Клонирует проект текущего пир ревью в новую папку
    - `list` - Отображает список текущих пир ревью
  - `wfs` - Автоматическая запись на проверку для выбранного проекта (пока не работает для интенсивов)
  - `project`
    - `info` - Отображает информацию о выбранном проекте
  - `test` - Отправляет тестовый запрос к платформе
  - `api` - Выполняет указанный метод API, возвращает данные в формате JSON (см. [s21docs/api-operations](https://github.com/s21toolkit/s21docs/blob/master/operations.md))
  - `gql` - Выполняет указанный GQL запрос, возвращает данные в формате JSON
  - `auth` - Выполняет аутентификацию по логину и паролю, возвращает токен и schoolId
  - `update` - Обновляет s21cli до последней версии (для бинарных релизов)
  - `cache`
    - `clean` - Очищает кеш