depos - инструмент для анализа и обновления версий зависимостей в манифесте пакета OneScript.
- Читает манифесты
packagedefиopm-metadata.xml. - Обновляет версии зависимостей в
packagedefдо последней, минорной или патч-версии. - Выявляет отсутствующие, неиспользуемые и неустановленные зависимости.
- Обнаруживает конфликты версий установленных пакетов и транзитивных зависимостей.
Important
depos не является пакетным менеджером и не устанавливает пакеты. Для установки используйте opm install после обновления манифеста.
Для работы требуется OneScript 2.2.0 или новее. Версия OneScript 1.9.3 поддерживалась до depos 0.4.0 включительно.
opm install -s depos# Перейти в каталог проекта
cd path/to/project
# Проверить зависимости на наличие проблем
depos doctor
# Проверить доступные обновления
depos check
# Обновить версии зависимостей в packagedef
depos upgrade
# Установить обновленные пакеты
opm installПроверяет наличие обновлений для зависимостей без изменения манифеста. Выводит список пакетов с указанием текущих и доступных версий.
| Опция | Описание |
|---|---|
| -m, --manifest <путь> | Путь к файлу манифеста или его каталогу. (по умолчанию: текущая директория) |
| -p, --package <имя> | Имя установленного пакета. |
| -f, --filter <выражение> | Оставляет зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -x, --exclude <выражение> | Исключает зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -d, --deprecated | Показывать только устаревшие пакеты. |
| -t, --target <тип> | Тип целевой версии (по умолчанию: latest): - latest - последняя доступная версия пакета.- minor - последняя минорная или патч-версия в пределах основной версии.- patch - последняя патч-версия в пределах минорной версии. |
| -e, --engine <версия|auto|current> | Версия OneScript для подбора зависимостей (по умолчанию: проверка совместимости выключена): - версия - SemVer, включая 2.2.1-rc.1, или четырёхкомпонентная версия, например 1.0.21.5.- auto - требование из манифеста, а если его нет, версия запущенного OneScript.- current - версия запущенного OneScript. |
| --registry <адрес или имя> | Адрес реестра или имя сервера из opm.cfg. |
| --registry-proxy | Адрес HTTP proxy для запросов к реестру. |
| --format text|json | Формат отчета (по умолчанию: text; неизвестное значение заменяется значением по умолчанию). |
| -o, --output <файл> | Сохранить отчет в файл. |
Note
depos поддерживает SemVer, включая пререлизы и метаданные сборки, а также четырехкомпонентные версии A.B.C.D.
В этом формате A.B образуют мажорную версию, C является минорной, а D — патчем.
Примеры использования:
# Проверка в текущем каталоге
depos check
# Проверка конкретного манифеста
depos check --manifest /path/to/packagedef
# Проверка установленного пакета
depos check --package autumn
# Только минорные обновления
depos check --target minor
# Подбор для минимальной версии OneScript из манифеста
depos check -e auto
# Только устаревшие пакеты
depos check --deprecated
# Оставить по именам
depos check -f autumn,oint
depos check -f 'autumn oint'
# Оставить по маске
depos check -f 'autumn-*'
# Оставить по регулярному выражению
depos check -f '/^autumn-.*$/'
# Исключить зависимости из выборки
depos check -x 'autumn-*'
# Сохранить JSON-отчет
depos check --format json --output check.jsonПример вывода:
Проверка зависимостей: path/to/packagedef
↑ 1connector 2.3.1 → 2.3.3
↑ autumn 3.3.0 → 4.3.11
↑ autumn-cli 1.1.0 → 1.2.0
semver 1.0.0 → 1.0.0
Найдено обновлений: 3Обновляет версии зависимостей в файле packagedef до указанных целевых версий. После обновления требуется установка новых версий пакетов с помощью opm install.
Caution
Убедитесь, что файл packagedef находится в системе контроля версий, и все изменения зафиксированы. Это действие перезапишет ваш файл.
| Опция | Описание |
|---|---|
| -m, --manifest <путь> | Путь к файлу packagedef или его каталогу. (по умолчанию: текущая директория) |
| --backup | Создать резервную копию файла packagedef перед изменением. |
| -f, --filter <выражение> | Оставляет зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -x, --exclude <выражение> | Исключает зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -t, --target <тип> | Тип целевой версии (по умолчанию: latest): - latest - последняя доступная версия пакета.- minor - последняя минорная или патч-версия в пределах основной версии.- patch - последняя патч-версия в пределах минорной версии. |
| -e, --engine <версия|auto|current> | Версия OneScript для подбора зависимостей (по умолчанию: проверка совместимости выключена): - версия - SemVer, включая 2.2.1-rc.1, или четырёхкомпонентная версия, например 1.0.21.5.- auto - требование из манифеста, а если его нет, версия запущенного OneScript.- current - версия запущенного OneScript. |
| --registry <адрес или имя> | Адрес реестра или имя сервера из opm.cfg. |
| --registry-proxy | Адрес HTTP proxy для запросов к реестру. |
| --format text|json | Формат отчета (по умолчанию: text; неизвестное значение заменяется значением по умолчанию). |
| -o, --output <файл> | Сохранить отчет об обновлениях в файл. |
Примеры использования:
# Обновление всех пакетов в манифесте
depos upgrade
# С резервной копией
depos upgrade --backup
# Конкретный манифест
depos upgrade --manifest /path/to/project/packagedef
# Только патч-версии
depos upgrade --target patch
# Обновление с учетом OneScript 2.1.0
depos upgrade --engine 2.1.0
# Оставить по именам
depos upgrade -f 'autumn,1connector'
# Оставить по маске
depos upgrade -f 'autumn-*'
# Оставить по регулярному выражению
depos upgrade -f '/^autumn-.*$/'
# Исключить зависимости из обновления
depos upgrade -x 'autumn-*'
# Сохранить JSON-отчет
depos upgrade --format json --output upgrade.jsonПример вывода:
Обновление зависимостей: path/to/packagedef
✓ 1connector 2.3.1 → 2.3.3
✓ autumn 3.3.0 → 4.3.11
✓ autumn-cli 1.1.0 → 1.2.0
Выполните opm install для установки новых версий пакетов.Выполняет комплексную диагностику проекта и выявляет проблемы:
- Отсутствующие в манифесте пакеты, используемые в коде
- Неиспользуемые пакеты, объявленные в манифесте
- Неустановленные пакеты
- Несоответствие версий установленных пакетов
- Зависимости требуют более новую версию среды, чем заявлено в манифесте
- Конфликты версий транзитивных зависимостей
Также выводит информационные рекомендации по удалению избыточных минимальных версий зависимостей.
Пометки после объявления зависимости:
| Пометка | Действие |
|---|---|
// Неявная, // Implicit |
Пакет используется, но doctor не видит его использование в коде. Скрывает только предупреждение об отсутствии прямого использования. |
// Транзитивная, // Transitive |
Пакет нужен через другую зависимость проекта. doctor скрывает предупреждение о прямом неиспользовании и при полной проверке подтверждает эту связь. Если связи нет, сообщает о неподтверждённой пометке. |
Регистр пометки не важен. Пометка у вызова с именем пакета из переменной игнорируется.
Причину можно указать после -:
Описание
.ЗависитОт("autumn-data", "3.0.0")
.ЗависитОт("entity") // Транзитивная - ограничение версии задаёт autumn-data
.РазработкаЗависитОт("oneunit", "0.5.2"); // Неявная - используется как CLI для запуска тестов| Опция | Описание |
|---|---|
| -m, --manifest <путь> | Путь к файлу манифеста или его каталогу. (по умолчанию: текущая директория) |
| -p, --package <имя> | Имя установленного пакета. |
| --checks <проверки> | Выполняемые проверки: usage, installed, transitive или их комбинация через запятую. По умолчанию выполняются все проверки. |
| --src-dirs <каталоги> | Каталоги с исходным кодом для анализа (через запятую). (по умолчанию: src) |
| --dev-dirs <каталоги> | Каталоги с вспомогательным кодом для анализа (через запятую). (по умолчанию: tests и tasks) |
| -x, --exclude <выражение> | Исключает зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| --ignore-dev | Игнорировать прямые зависимости проекта для разработки. Всегда Истина при указании опции -p, --package. |
| --strict | Завершать выполнение с ненулевым кодом при обнаружении проблем. |
| -v, --verbose | Вывести все доступные детали диагностики. |
| --format text|json | Формат отчета (по умолчанию: text; неизвестное значение заменяется значением по умолчанию). |
| -o, --output <файл> | Сохранить отчет в файл. |
Примеры использования:
# Диагностика проекта
depos doctor
# Конкретный манифест
depos doctor --manifest /path/to/project/packagedef
# Диагностика установленного пакета
depos doctor --package autumn
# Кастомные каталоги исходников
depos doctor --src-dirs src,lib,modules
# Кастомные dev-каталоги
depos doctor --dev-dirs tests,tasks,benchmark
# Без dev-зависимостей
depos doctor --ignore-dev
# Только использование и установленные пакеты
depos doctor --checks usage,installed
# Исключить зависимости из анализа
depos doctor -x 'autumn-*'
# Строгий режим (ненулевой код возврата при проблемах)
depos doctor --strict
# Подробный текстовый отчет
depos doctor -v --output doctor.txt
# JSON-отчет
depos doctor --format json --output doctor.jsonПример вывода:
Диагностика зависимостей: C:\project\packagedef
✕ 1 проблема ℹ 1 рекомендация
────────────────────────────────────────────────────────────
01 Не обнаружено прямого использования
⚠ source_equal
────────────────────────────────────────────────────────────
02 Рекомендации по версиям
Прямые ограничения версий уже обеспечены транзитивными зависимостями
ℹ candidate
>=5.4.3 → не указывать
└─ source_equal -> candidate (>=5.4.3)
────────────────────────────────────────────────────────────
Найдено проблем: 1
Для подробностей запустите команду с --verboseКоманды check и upgrade используют opm.cfg, если он есть: из него берутся серверы пакетов и настройки proxy.
Файл нужен для работы с настроенными в OPM реестрами, но создавать его специально для depos не требуется. Если
opm.cfg отсутствует и реестр не задан другим способом, depos сначала обращается к основному реестру, затем к
резервному. Их адреса можно изменить настройками ниже.
Опция --registry задает конкретный адрес реестра или имя сервера из opm.cfg. Без этой опции depos использует
серверы из opm.cfg в порядке записи. Переменная OPM_HUB_MIRROR оставляет из них только сервер с указанным именем.
Если подходящих серверов нет, используются основной и резервный реестры depos.
opm.cfg ищется в порядке OPM: в текущем каталоге, профиле пользователя, системном каталоге и рядом со стартовым
сценарием. Читается первый найденный файл. Приоритет источников proxy: --registry-proxy, затем
depos.registry.proxy (DEPOS_REGISTRY_PROXY), затем opm.cfg.
Если в opm.cfg задан путь /api/v1/pools/<пул>/download, depos берет из него имя пула и сразу использует API
OpenHub.
Если пул не указан, для OpenHub используется пул по умолчанию. Если он указан у последнего проверяемого сервера, после неудачных попыток depos проверяет на этом сервере пул по умолчанию. Уже проверенный пул того же реестра повторно не запрашивается.
Значения задаются в autumn-properties.json или соответствующими переменными среды.
| Настройка | Переменная среды | По умолчанию | Описание |
|---|---|---|---|
depos.registry.primary |
DEPOS_REGISTRY_PRIMARY |
https://hub.oscript.io |
Основной реестр. |
depos.registry.fallback |
DEPOS_REGISTRY_FALLBACK |
http://hub.oscript.ru |
Резервный реестр. |
depos.registry.proxy |
DEPOS_REGISTRY_PROXY |
"" |
Прокси для запросов к реестру. |
depos.registry.timeout |
DEPOS_REGISTRY_TIMEOUT |
5 |
Таймаут соединения и запроса, сек. |
depos.registry.default-pool |
DEPOS_REGISTRY_DEFAULT_POOL |
default |
Пул OpenHub по умолчанию. |
Автоматизация обновления зависимостей с созданием Pull Request:
name: Обновление зависимостей
on:
schedule:
- cron: '0 0 * * 1' # Каждый понедельник
workflow_dispatch:
jobs:
update-dependencies:
# if: github.repository_owner == '<your-username>'
runs-on: ubuntu-latest
steps:
- name: Обновление зависимостей
uses: Stivo182/depos-action@v2
with:
filter: autumn-* # Обновлять только пакеты autumn
target: minor # До минорных версий
message-prefix: build(deps)
token: ${{ secrets.PAT }}Подробная документация: depos-action.