# Запуск приложения разработчиком

Для разработки используется:
    python 3.11 
    poetry 1.7.1
### 1. Клонировать приложения с git:

    git clone git@github.com:TheStageAI/launcher-cli.git .

### 2. Установка poetry:
    
    pip install poetry==1.7.1

### 3. Установка зависимостей
    poetry install 

### 4. Первый запуск приложения разработчиком

Если нужно просто оценить работу приложения возможен запуск в таком формате:

    python -m tsr --help 
    
### 5. Для дебага приложения: 

Что б дебажить создан отдельный скрипт `debug_main.py`

В нем можно указать конкретную команду, добавить в pycharm как скрипт запуска 


### 6. Билдинг приложения

    poetry build

Создает папку dist в которой будет архив приложения и *.whl файл для установки.
Позже будет добавлен `push` в публичный репозиторий


# Установка приложения клиентом 
На текущий момент возможно установка с файла *.whl
    
    pip install tsr-*.*.*-py3-none-any.whl

# Первое знакомство с приложением 
Для приложения прописан help для каждой команды, даст возможность быстро разобраться с доступным функционалом

    tsr --help
    tsr sketch --help
    tsr sketch run --help

# Доступные команды для запуска:

В большинстве команд используется опция `working-directory`, она позволяет изменить рабочую директорию.
По умолчанию приложение будет работать с папкой в которой запущено.
Приложение хранит конфигурацию в папке `.tsr`, в рабочей папке(LOCAL), или в глобальной папке `~/.tsr/*`.
Хранить конфигы необходимые для работы приложения. Параметры рабочего скетча храняться только в LOCAL конфигах.  
    
## Работа c config
На текущий момент позволяет изменить токен если он был указан не верно 

    tsr config --help
    Пример: tsr config --change-token

## Работа с sketch
Дает возможность работать с sketch. На текущий момент позволяет 

### Инициализация скетча в текущей папке 
    
    tsr sketch init  --help
    Пример: tsr sketch init  --sketch-slug=test_sketch_1

Можно указать опцию `sketch-slug` указывает слаг существующего sketch, если не указать приложение опросить перейти на сайт и создать.
Утилита проверить наличие токена и попросит его ввести если не найдет. Проверит скетч и инициализирует `git` с репозитория скетча в рабочей папке.

### Клонирование скетча в текущей папке 
    
    tsr sketch clone --help
    Пример: tsr sketch clone --sketch-slug=test_sketch_1

Можно указать опцию `sketch-slug` указывает слаг существующего sketch, если не указать приложение опросить перейти на сайт и создать.
Утилита проверить наличие токена и попросит его ввести если не найдет. Проверит скетч и клонирует `git` в рабочую папку.
ВАЖНО! клон возможен только в пустую папку.

### Запуск task sketch 
    
    tsr sketch run --help
    Пример: tsr sketch run --command="pip install -r requirements.txt && CUDA_VISIBLE_DEVICES=0 python nin_cifar.py" --task-title="test task 1"

Важно указать команду которую будет запускать. Для запуска таски в рабочей директории должен быть инициализирован скетч.
Для команды можно указать опцию `--tail-output`=[1 или 0] 1 - (по умолчанию) дает возможность просматривать вывод таски пока она не будет завершена, 
0 - после установки таски выходит с приложения. 
    
    `--commit-hash` - запустит таску с конкретного хеша репозитория, если у нас в папке есть не закомиченые изменения, приложения предложит закомитить и использует его хеш для старта.
    `--instance-slug`, `--strage-slug` - дает возможность указать другой инстанс или сторейдж, если они не переданы будет использоваьться дефолтный с скетча.

### Получить список тасок скетча
    
    tsr sketch list-runs --help

Дополнительные опции:
    
    --page - номер страницы
    --row  - количество строк в таблице

Выводит список тасок скетча. Позволяет потом переключаться между страницами

### Получить информацию по конкретной таске
    
    tsr sketch run-details --help
    tsr sketch run-details --task-id=12345

Вернет информацию про задачу ид которой указано в task-id


### Получить лог по конкретной таске
    
    tsr sketch run-details --help
    tsr sketch run-log --task-id=12345

Вернет логи выполнения задачи ид которой указано в task-id
