Skip to content
oscript-libraryPublic
forked from Stivo182/depos

About

Инструмент для анализа и обновления версий зависимостей в манифесте пакета OneScript

Resources

Stars

0 stars

Watchers

0 watching

Forks

 
 

Repository files navigation

depos

Release Тестирование Статус порога качества License: MIT

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

check

Проверяет наличие обновлений для зависимостей без изменения манифеста. Выводит список пакетов с указанием текущих и доступных версий.

Опция Описание
-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

upgrade

Обновляет версии зависимостей в файле 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 для установки новых версий пакетов.

doctor

Выполняет комплексную диагностику проекта и выявляет проблемы:

  • Отсутствующие в манифесте пакеты, используемые в коде
  • Неиспользуемые пакеты, объявленные в манифесте
  • Неустановленные пакеты
  • Несоответствие версий установленных пакетов
  • Зависимости требуют более новую версию среды, чем заявлено в манифесте
  • Конфликты версий транзитивных зависимостей

Также выводит информационные рекомендации по удалению избыточных минимальных версий зависимостей.

Пометки после объявления зависимости:

Пометка Действие
// Неявная, // 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.

Пулы 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.timeout DEPOS_REGISTRY_TIMEOUT 5 Таймаут соединения и запроса, сек.
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@v2
        with:
          filter: autumn-* # Обновлять только пакеты autumn
          target: minor    # До минорных версий
          message-prefix: build(deps)
          token: ${{ secrets.PAT }}

Подробная документация: depos-action.

About

Инструмент для анализа и обновления версий зависимостей в манифесте пакета OneScript

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages