Инструмент для анализа и обновления версий зависимостей в манифесте пакета OneScript
Пакет лежит в основном пуле хаба, а opm знает этот хаб по умолчанию: короткой формы достаточно.
opm install deposСкачанный файл ставится командой opm install -f <файл> — сеть для этого уже не нужна.
Описание
depos
depos - инструмент для анализа и обновления версий зависимостей в манифесте пакета OneScript.
- Читает манифесты
packagedefиopm-metadata.xml. - Обновляет версии зависимостей в
packagedefдо последней, минорной или патч-версии. - Выявляет отсутствующие, неиспользуемые и неустановленные зависимости.
- Обнаруживает конфликты версий установленных пакетов и транзитивных зависимостей.
[!IMPORTANT] depos не является пакетным менеджером и не устанавливает пакеты. Для установки используйте
opm installпосле обновления манифеста.
Оглавление
Установка <a name="installation"></a>
Для работы требуется OneScript 2.1.0 или новее. Версия OneScript 1.9.3 поддерживалась до depos 0.4.0 включительно.
opm install depos
Быстрый старт <a name="quick-start"></a>
# Перейти в каталог проекта
cd path/to/project
# Проверить зависимости на наличие проблем
depos doctor
# Проверить доступные обновления
depos check
# Обновить версии зависимостей в packagedef
depos upgrade
# Установить обновленные пакеты
opm install
check
Проверяет наличие обновлений для зависимостей без изменения манифеста. Выводит список пакетов с указанием текущих и доступных версий.
Синтаксис:
depos check [-m|--manifest <путь>] [-p|--package <имя>] [-d|--deprecated]
[-f|--filter <выражение>] [-x|--exclude <выражение>]
[-t|--target <тип>] [-o|--output <файл>]
[--registry <адрес|имя>] [--registry-proxy <URL>]
| Опция | Описание |
|---|---|
| -m, --manifest <путь> | Путь к файлу манифеста или его каталогу. (по умолчанию: текущая директория) |
| -p, --package <имя> | Имя установленного пакета. |
| -d, --deprecated | Показывать только устаревшие пакеты. |
| -f, --filter <выражение> | Оставляет зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -x, --exclude <выражение> | Исключает зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -t, --target <тип> | Тип целевой версии (по умолчанию: latest): <br>- latest - последняя доступная версия пакета.<br>- minor - последняя минорная или патч-версия в пределах основной версии.<br>- patch - последняя патч-версия в пределах минорной версии. |
| -o, --output <файл> | Экспорт результатов проверки в JSON-файл. |
| --registry <адрес или имя> | Адрес реестра или имя сервера из opm.cfg. |
| --registry-proxy <URL> | Адрес HTTP proxy для запросов к реестру. |
Примеры использования:
# Проверка в текущем каталоге
depos check
# Проверка конкретного манифеста
depos check --manifest /path/to/packagedef
# Проверка установленного пакета
depos check --package autumn
# Только минорные обновления
depos check --target minor
# Только устаревшие пакеты
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-*'
Пример вывода:
Проверка зависимостей: 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
upgrade
Обновляет версии зависимостей в файле packagedef до указанных целевых версий. После обновления требуется установка новых версий пакетов с помощью opm install.
[!CAUTION] Убедитесь, что файл
packagedefнаходится в системе контроля версий, и все изменения зафиксированы. Это действие перезапишет ваш файл.
Синтаксис:
depos upgrade [-m|--manifest <путь>] [--backup]
[-f|--filter <выражение>] [-x|--exclude <выражение>]
[-t|--target <тип>] [-o|--output <файл>]
[--registry <адрес|имя>] [--registry-proxy <URL>]
| Опция | Описание |
|---|---|
| -m, --manifest <путь> | Путь к файлу packagedef или его каталогу. (по умолчанию: текущая директория) |
| --backup | Создать резервную копию файла packagedef перед изменением. |
| -f, --filter <выражение> | Оставляет зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -x, --exclude <выражение> | Исключает зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| -t, --target <тип> | Тип целевой версии (по умолчанию: latest): <br>- latest - последняя доступная версия пакета.<br>- minor - последняя минорная или патч-версия в пределах основной версии.<br>- patch - последняя патч-версия в пределах минорной версии. |
| -o, --output <файл> | Экспорт отчета об обновлениях в JSON-файл. |
| --registry <адрес или имя> | Адрес реестра или имя сервера из opm.cfg. |
| --registry-proxy <URL> | Адрес HTTP proxy для запросов к реестру. |
Примеры использования:
# Обновление всех пакетов в манифесте
depos upgrade
# С резервной копией
depos upgrade --backup
# Конкретный манифест
depos upgrade --manifest /path/to/project/packagedef
# Только патч-версии
depos upgrade --target patch
# Оставить по именам
depos upgrade -f 'autumn,1connector'
# Оставить по маске
depos upgrade -f 'autumn-*'
# Оставить по регулярному выражению
depos upgrade -f '/^autumn-.*$/'
# Исключить зависимости из обновления
depos upgrade -x 'autumn-*'
Пример вывода:
Обновление зависимостей: 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 для установки новых версий пакетов.
doctor
Выполняет комплексную диагностику проекта и выявляет проблемы:
- Отсутствующие в манифесте пакеты, используемые в коде
- Неиспользуемые пакеты, объявленные в манифесте
- Неустановленные пакеты
- Несоответствие версий установленных пакетов
- Конфликты версий транзитивных зависимостей
Синтаксис:
depos doctor [-m|--manifest <путь>] [-p|--package <имя>]
[--src-dirs <каталоги>] [--dev-dirs <каталоги>]
[--checks <проверки>] [-x|--exclude <выражение>]
[--ignore-dev] [--strict]
| Опция | Описание |
|---|---|
| -m, --manifest <путь> | Путь к файлу манифеста или его каталогу. (по умолчанию: текущая директория) |
| -p, --package <имя> | Имя установленного пакета. |
| --src-dirs <каталоги> | Каталоги с исходным кодом для анализа (через запятую). (по умолчанию: src) |
| --dev-dirs <каталоги> | Каталоги с вспомогательным кодом для анализа (через запятую). (по умолчанию: tests и tasks) |
| --checks <проверки> | Выполняемые проверки: usage, installed, transitive или их комбинация через запятую. По умолчанию выполняются все проверки. |
| -x, --exclude <выражение> | Исключает зависимости, имена которых соответствуют выражению: список имен через запятую или пробел, маска (*, ?) или регулярное выражение. |
| --ignore-dev | Игнорировать зависимости для разработки при анализе. Всегда Истина при указании опции -p, --package |
| --strict | Завершать выполнение с ненулевым кодом при обнаружении проблем. |
Примеры использования:
# Диагностика проекта
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
Пример вывода:
Диагностика зависимостей: path/to/packagedef
Найдено проблем: 10
2 отсутствуют в манифесте
2 не используются
1 не установлен
2 конфликта версий
3 конфликта транзитивных зависимостей
[1] Отсутствуют в манифесте
jason
├─ path/to/src/МойКласс1.os
└─ path/to/src/МойКласс2.os
asserts (dev)
└─ path/to/tests/Тесты.os
[2] Объявлены, но не используются
cli
1bdd (dev)
[3] Не установлены
1connector
[4] Несоответствие версий
autumn
установлена: 3.3.0
требуется: >=4.3.0
путь: path/to/lib/autumn
asserts (dev)
установлена: 1.5.0
требуется: >=1.6.0
путь: path/to/additional_lib/asserts
[5] Конфликты транзитивных зависимостей
configor
причина: установленная версия не соответствует требованию
установлена: 0.9.0
требуется: >=0.9.1
источник: autumn
цепочка: autumn -> configor
collectionos
причина: несовместимые требования
установлена: 0.7.2
требуется: >=0.8.2; <=0.6.0
источники: package1, package2
цепочки:
├─ package1 -> collectionos
└─ package2 -> collectionos
missing
причина: транзитивная зависимость не установлена
требуется: >=0.6.1
источник: autumn
цепочка: autumn -> fluent
Обнаружены проблемы с зависимостями.
Настройки
Команды 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.
Пулы OpenHub
Если в opm.cfg задан путь /api/v1/pools/<пул>/download, depos берёт из него имя пула и сразу использует API
OpenHub.
Если пул не указан, для OpenHub используется пул по умолчанию. Если он указан у последнего проверяемого сервера, после неудачных попыток depos проверяет на этом сервере пул по умолчанию. Уже проверенный пул того же реестра повторно не запрашивается.
Настройки 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.default-pool |
DEPOS_REGISTRY_DEFAULT_POOL |
default |
Пул OpenHub по умолчанию. |
GitHub Action
Автоматизация обновления зависимостей с созданием 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@v1
with:
filter: autumn-* # Обновлять только пакеты autumn
target: minor # До минорных версий
message-prefix: build(deps)
token: ${{ secrets.PAT }}
Подробная документация: depos-action.