Skip to content

arkuznetsov/yard

Repository files navigation

GitHub release GitHub license GitHub Releases GitHub All Releases

Build Status Quality Gate Coverage Tech debt

Checked by Silver Bulleters SonarQube BSL plugin

Yet another release downloader (YARD)

Приложение oscript для загрузки и обработки релизов конфигураций 1С.

Требуются следующие библиотеки и инструменты:

Важно 1: Архиватор 7-zip должен поддерживать распаковку rar-архивов. Для этого на linux нужно поставить пакет с поддержкой такого режима. Например, на Ubuntu:

apt-get install p7zip-rar p7zip-full

Важно 2: Для ковентации в формат ЕДТ необходима установленная ЕДТ и ring

Общие сведения

  • выполняет загрузку приложений с сайта релизов 1С

  • для релизов конфигураций доступны следующие возможности

    • загрузка указанных версий конфигурации
    • распаковка архива конфигурации (требуется 7-zip)
    • распаковка файлов шаблона конфигурации в указанный каталог (из формата EFD)
    • последовательная сборка CF-фалов конфигурации из CFU-файлов обновлений (требуется начальный CF)
    • Конвертация в формат ЕДТ (при необходимости)
    • последовательная выгрузка версий конфигурации в формате XML в указанный репозитарий GIT
  • Реализованы 2 варианта работы:

    • запуск отдельных команд для каждого этапа обработки релизов конфигураций
    • экспериментальный пакетный режим с конвейерной обработкой данных (pipeline), т.е. каждая порция данных, полученная в текущей обработке передается в указанный(-ные) в настройках обработчик(-и) для последующе обработки
  • настройки пакетного режима описываются в формате JSON (см. Файл настроек)

Команды

  • process (p) - выполняет обработку данных настройкам из файла (.json)

    • --work-dir - путь к рабочему каталогу (по умолчанию: текущий каталог)
    • <Путь> - путь к файлу настроек (по умолчанию ./yardsettings.json)

    Пользователя и пароль портала 1С можно передать с помощью переменных среды:

    • YARD_RELEASES_USER - пользователь портала 1С;
    • YARD_RELEASES_PWD - пароль пользователя портала 1С.

Пример:

yard process --work-dir "c:\tmp" ".\examples\releases2templates.json"

см. Файл настроек

  • releases (r) - работа с релизами с сайта 1С
    • --user - пользователь портала 1С

    • --pwd - пароль пользователя портала 1С

    • list (l) - получение списка приложений и версий с портала 1С

      • --app-filter - фильтр приложений по имени (регулярное выражение)
      • --version-filter - фильтр версий по номеру (регулярное выражение)
      • --version-start-date - фильтр по начальной дате версии (формат: dd.MM.yyyy, включая дату)
      • --version-end-date - фильтр по последней дате версии (формат: dd.MM.yyyy, включая дату)
      • --output-file - путь к фалу (json) для сохранения списка приложений и версий

Пример:

yard releases --user "user" --pwd "pwd" list --app-filter "Библиотека стандартных подсистем.*3\.1" --version-filter 3\.1.* --version-start-date "01.01.2019" --output-file ".\tmp\releases.json"
  • get (g) - загрузка указанных версий, указанных приложений с портала 1С
    • --app-filter - фильтр приложений по имени (регулярное выражение)
    • --version-filter - фильтр версий по номеру (регулярное выражение)
    • --version-start-date - фильтр по начальной дате версии (формат: dd.MM.yyyy, включая дату)
    • --version-end-date - фильтр по последней дате версии (формат: dd.MM.yyyy, включая дату)
    • --distr-filter - фильтр заголовков ссылок на скачивание дистрибутива если не указан, то будет выполнена проверка наличия ссылки ""Полный дистрибутив"", затем ""Дистрибутив обновления""
    • --path - каталог для загрузки релизов 1С
    • --from-last-version - флаг загрузки версий с номером старше последней версии в каталоге для загрузки (проверяются файлы description.json)
    • --last-version-description - путь к файлу description.json с описанием последней загруженной версией
    • --download-existing - флаг принудительной загрузки ранее загруженных версий в каталоге для загрузки (проверяются файлы description.json)
    • --download-limit - ограничение количества загружаемых версий за 1 запуск
    • --download-only - только скачать дистрибутив с сайта и не выполнять дальнейшую обработку
    • --extract - флаг распаковки загруженного архива
    • --extract-path - каталог для распаковки загруженного архива
    • --extract-dir - регулярное выражение, отбора каталогов в архиве EFD для распаковки
    • --extract-files - список файлов для распаковки из архива дистрибутива, разделенный "|"
    • --extract-existing - флаг принудительной распаковки ранее распакованных дистрибутивов версий в каталоге для распаковки (проверяются файлы description.json)
    • --delete - флаг удаления загруженного архива после распаковки

Пример:

yard releases --user "user" --pwd "pwd" get --app-filter "Библиотека стандартных подсистем.*3\.1" --version-filter 3\.1.* --version-start-date "01.01.2019" --path ".\tmp\distr" --extract --extract-path ".\tmp\tmplts"
  • extract (e) - распаковка шаблона конфигурации 1С из EFD-файла дистрибутива конфигурации 1С
    • --path - путь к дистрибутиву конфигурации 1С
    • --extract-path - каталог для распаковки загруженного архива
    • --extract-dir - регулярное выражение, отбора каталогов в архиве EFD для распаковки
    • --extract-files - список файлов для распаковки из архива дистрибутива, разделенный "|"
    • --extract-existing - флаг принудительной распаковки ранее распакованных дистрибутивов в каталоге для распаковки (проверяются файлы description.json)
    • --app-name - имя конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
    • --app-id - идентификатор конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
    • --app-version - версия конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)

Пример:

yard unpack --app-name "Библиотека стандартных подсистем, редакция 3.1" --app-id "SSL31" --app-version "3.1.2.332" --path ".\tmp\distr\SSL31\3.1.2.332" --extract-path ".\tmp\tmplts"
  • extract-all (ea) - для всех дистрибутивов в каталоге выполняет распаковку шаблонов конфигураций 1С из EFD-файлов
    • --path - путь к каталогу содержащему дистрибутивы конфигурации для распаковки
    • --extract-path - каталог для распаковки шаблонов конфигурации
    • --extract-dir - регулярное выражение, отбора каталогов в архиве EFD для распаковки
    • --extract-files - список файлов для распаковки из архива дистрибутива, разделенный "|"
    • --extract-existing - флаг принудительной распаковки ранее распакованных дистрибутивов в каталоге для распаковки (проверяются файлы description.json)

Пример:

yard unpack --app-name "Библиотека стандартных подсистем, редакция 3.1" --app-id "SSL31" --app-version "3.1.2.332" --path ".\tmp\distr\SSL31\3.1.2.332" --extract-path ".\tmp\tmplts"
  • build-cf (b) - выполняет обновление конфигурации (CF) файлом обновления (CFU) и помещает результат в новый файл CF
    • --cf-path - путь к файлу конфигурации (CF) предыдущей версии
    • --cfu-path - путь к файлу обновления (CFU) новой версии
    • --ibconnection - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)

Пример:

yard build-cf --cf-path ".\tmp\tmplts\1c\AccountingCorp\3_0_64_54\1cv8.cf" --cfu-path ".\tmp\tmplts\1c\AccountingCorp\3_0_66_53\1cv8.cfu" --ibconnection "/SMyServer\TMP_BASE"
  • build-all (ba) - для всех файлов обновления (CFU) в каталоге ищет доступные для обновления файлы(CF) и выполняет обновление
    • --path - путь к каталогу содержащему версии конфигурации для формирования CF-файлов
    • --ibconnection - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)

Пример:

yard build-all --path ".\tmp\tmplts\1c\AccountingCorp" --ibconnection "/SMyServer\TMP_BASE"
  • upload-cf (ucf) - выполняет выгрузку конфигурации 1С из файла конфигурации (CF) в репозитарий git
    • --cf-path - путь к файлу конфигурации (CF) для выгрузки
    • --git-path - путь к репозитарию git
    • --git-branch - имя ветки git в которую будет выполняться выгрузка (по умолчанию: base1c)
    • --git-author - имя автора коммита в git (по умолчанию: 1c)
    • --git-author-email - почта автора коммита в git (по умолчанию: [email protected])
    • --git-commit-date - дата коммита в git в формате POSIX (формат: yyyy-MM-dd hh:mm:ss, по умолчанию: <ТекущаяУниверсальнаяДата>)
    • --git-commit-message - сообщение коммита в git
    • --ibconnection - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)

Пример:

yard upload-cf --cf-path ".\tmp\tmplts\SSL31\3.1.1.91\1cv8.cf" --git-path ".\tmp\repo\SSL31" --git-commit-message "Тест выгрузки БСП 3.1.1.91" --ibconnection "/SMyServer\TMP_BASE"
  • upload-all (ua) - выполняет выгрузку всех версий конфигурации 1С в каталоге в репозитарий git
    • --path - путь к каталогу содержащему версии конфигурации для выгрузки в git
    • _--cf-name - имя файла конфигурации (по умолчанию: 1cv8.cf)
    • --git-path - путь к репозитарию git
    • --git-author - имя автора коммита в git (по умолчанию: 1c)
    • --git-author-email - почта автора коммита в git (по умолчанию: [email protected])
    • --ibconnection - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)

Пример:

yard upload-all --path ".\tmp\tmplts\SSL31\" --cfname "1cv8.cf" --git-path ".\tmp\repo\SSL31" --ibconnection "/SMyServer\TMP_BASE"

Управляющие обработки

МенеджерОбработкиДанных.os

Управляющая обработка-менеджер, читает настройки, запускает и управляет обработкой данных.

yard.os

Обработка для интерактивного выполнения команд обработки релизов.

Стандартный программный интерфейс обработки

Функция ОписаниеПараметров() - возвращает структуру с описанием параметров обработки

Функция МенеджерОбработкиДанных() - возвращает ссылку на вызывающую/управляющую обработку - менеджер обработки данных

Процедура УстановитьМенеджерОбработкиДанных(Знач НовыйМенеджерОбработкиДанных) - устанавливает ссылку на вызывающую/управляющую обработку - менеджер обработки данных

Функция Идентификатор() - возвращает идентификатор обработки, установленный при инициализации в менеджере обработки данных

Процедура УстановитьИдентификатор(Знач НовыйИдентификатор) - устанавливает идентификатор обработки, вызывается при инициализации в менеджере обработки данных

Функция ПараметрыОбработкиДанных() - возвращает значения параметров обработки данных

Процедура УстановитьПараметрыОбработкиДанных(Знач НовыеПараметры) - устанавливает значения параметров обработки данных

Функция ПараметрОбработкиДанных(Знач ИмяПараметра) - возвращает значение указанного параметра обработки данных

Процедура УстановитьПараметрОбработкиДанных(Знач ИмяПараметра, Знач Значение) - устанавливает значение указанного параметра обработки

Процедура УстановитьДанные(Знач ВходящиеДанные) - устанавливает данные для обработки

Процедура ОбработатьДанные() - выполняет обработку данных

Функция РезультатОбработки() - возвращает результаты обработки данных

Процедура ЗавершениеОбработкиДанных() - выполняет действия при окончании обработки данных и оповещает обработку-менеджер о завершении обработки данных

Обработчики данных

СписокРелизов1С.os

Получает с сайта 1С список релизов и выводит в консоль или в указанный файл.

Параметры

  • ИмяПользователя - Имя пользователя сайта релизов 1С
  • ПарольПользователя - Пароль пользователя сайта релизов 1С
  • ВремяОжиданияОтвета - Время ожидания ответа от внешнего ресурса (HTTP) в секундах
  • ФильтрПриложений - Фильтр имен приложений
  • ФильтрВерсий - Фильтр номеров версий
  • ФильтрВерсийНачинаяСДаты - Фильтр по начальной дате версии (включая)
  • ФильтрВерсийДоДаты - Фильтр по последней дате версии (включая)
  • ПутьКФайлуДляСохранения - путь к фалу (json) для сохранения списка приложений и версий

ЗагрузчикРелизов1С.os

Выполняет загрузку указанных приложений и версий с сайта 1С и, при необходимости, распаковывает файлы шаблона конфигурации 1С.

Параметры

  • ИмяПользователя - Имя пользователя сайта релизов 1С
  • ПарольПользователя - Пароль пользователя сайта релизов 1С
  • ВремяОжиданияОтвета - Время ожидания ответа от внешнего ресурса (HTTP) в секундах
  • ФильтрПриложений - Фильтр имен приложений
  • ФильтрВерсий - Фильтр номеров версий
  • ФильтрВерсийНачинаяСДаты - Фильтр по начальной дате версии (включая)
  • ФильтрВерсийДоДаты - Фильтр по последней дате версии (включая)
  • ФильтрДистрибутива - фильтр заголовков ссылок на скачивание дистрибутива если не указан, то будет выполнена проверка наличия ссылки "Полный дистрибутив", затем "Дистрибутив обновления"
  • ПолучатьБетаВерсии - Истина - будут получены ознакомительные версии
  • КаталогДляСохранения - каталог для загрузки релизов 1С
  • НачатьСПоследнейВерсии - Истина - будут загружены релизы с версией старше последней найденной в каталоге для загрузки (проверяются файлы description.json) Ложь - будут загружены все релизы с учетом других настроек
  • ОписаниеПоследнейВерсии - путь к файлу description.json с описанием последней загруженной версии Ложь - будут загружены все релизы с учетом других настроек
  • ЗагружатьСуществующие - Истина - будут загружены все найденные релизы независимо от существующих в каталоге для загрузки Ложь - будут загружены только отсутствующие в каталоге для загрузки релизы (проверяются файлы description.json)
  • ОграничениеКоличества - ограничение количества загружаемых за 1 раз версий
  • ТолькоСкачать - Истина - только скачать дистрибутив с сайта и не выполнять дальнейшую обработку
  • РаспаковыватьEFD - Истина - если загруженный архив содержит упакованный шаблонконфигурации (содержит файл 1cv8.efd), то он будет распакован
  • КаталогДляРаспаковкиEFD - каталог для распаковки шаблона конфигурации
  • КаталогВАрхивеДляРаспаковкиEFD - регулярное выражение, отбора каталогов в архиве EFD для распаковки
  • ФайлыДляРаспаковкиEFD - список файлов для распаковки из архива EFD дистрибутива конфигурации, если не указан, то распаковываются все файлы
  • РаспаковыватьСуществующие - Истина - будут распакованы все найденные дистрибутивы независимо от существующих в каталоге для распаковки Ложь - будут оаспакованы только отсутствующие в каталоге для распаковки дистрибутивы (проверяются файлы description.json)
  • УдалитьПослеРаспаковкиEFD - Истина - после рапаковки загруженный архив будет удален

РаспаковщикРелизов1С.os

Выполняет распаковку файлов шаблона конфигурации 1С из EFD-файла дистрибутива.

Параметры

  • Приложение_Имя - имя конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
  • Приложение_Ид - идентификатор конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
  • Приложение_Версия - версия конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
  • ПутьКДистрибутиву - путь к дистрибутиву конфигурации 1С
  • КаталогДляРаспаковкиEFD - каталог для распаковки шаблона конфигурации
  • КаталогВАрхивеДляРаспаковкиEFD - регулярное выражение, отбора каталогов в архиве EFD для распаковки
  • ФайлыДляРаспаковкиEFD - список файлов для распаковки из архива EFD дистрибутива конфигурации, если не указан, то распаковываются все файлы
  • РаспаковыватьСуществующие - Истина - будут распакованы все найденные дистрибутивы независимо от существующих в каталоге для распаковки Ложь - будут оаспакованы только отсутствующие в каталоге для распаковки дистрибутивы (проверяются файлы description.json)

РаспаковщикКаталогаРелизов1С.os

Выполняет распаковку файлов шаблона конфигурации 1С из EFD-файла дистрибутива.

Параметры

  • Приложение_Имя - имя конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
  • Приложение_Ид - идентификатор конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
  • Приложение_Версия - версия конфигурации 1С (если не указано, значение будет считано из файла 1cv8.mft дистрибутива)
  • ПутьКДистрибутиву - путь к дистрибутиву конфигурации 1С
  • КаталогДляРаспаковкиEFD - каталог для распаковки шаблона конфигурации
  • КаталогВАрхивеДляРаспаковкиEFD - регулярное выражение, отбора каталогов в архиве EFD для распаковки
  • ФайлыДляРаспаковкиEFD - список файлов для распаковки из архива EFD дистрибутива конфигурации, если не указан, то распаковываются все файлы
  • РаспаковыватьСуществующие - Истина - будут распакованы все найденные дистрибутивы независимо от существующих в каталоге для распаковки Ложь - будут оаспакованы только отсутствующие в каталоге для распаковки дистрибутивы (проверяются файлы description.json)

СборщикКонфигураций1С.os

Выполняет обновление конфигурации (CF) файлом обновления (CFU) и помещает результат в новый файл CF.

Параметры

  • ПутьККонфигурации - путь к файлу конфигурации (CF) предыдущей версии
  • ПутьКОбновлению - путь к файлу обновления (CFU) новой версии
  • База_СтрокаСоединения - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)

СборщикКонфигураций1СВКаталоге.os

Для всех файлов обновления (CFU) в каталоге ищет доступные для обновления файлы(CF) и выполняет обновление.

Параметры

  • ПутьККаталогуКонфигураций - путь к каталогу содержащему версии конфигурации для формирования CF-файлов
  • База_СтрокаСоединения - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)

ВыгрузкаКонфигурацииВГит.os

Выполняет выгрузку конфигурации 1С из файла конфигурации (CF) в репозитарий git.

Параметры

  • ПутьККонфигурации - путь к файлу конфигурации (CF) для выгрузки
  • РепозитарийГит - путь к репозитарию git
  • ИмяВеткиГит - имя ветки git в которую будет выполняться выгрузка (по умолчанию: base1c)
  • ИмяАвтора - имя автора коммита в git (по умолчанию: 1c)
  • ПочтаАвтора - почта автора коммита в git (по умолчанию: [email protected])
  • ДатаКоммита - дата коммита в git в формате POSIX
  • СообщениеКоммита - сообщение коммита в git
  • База_СтрокаСоединения - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)
  • Конвертировать в формат ЕДТ - флаг конвертации в формат ЕДТ
  • Относительный путь к исходникам - Относительный путь внутри репозитории к исходникам проекта, по умолчанию (src/cf)

ВыгрузкаКаталогаКонфигурацииВГит.os

Выполняет выгрузку конфигурации 1С из файла конфигурации (CF) в репозитарий git.

Параметры

  • ПутьККонфигурации - путь к каталогу содержащему версии конфигурации для выгрузки в git
  • ИмяФайлаКонфигурации - имя файла конфигурации (по умолчанию: "1Cv8.cf")
  • РепозитарийГит - путь к репозитарию git
  • ИмяАвтора - имя автора коммита в git (по умолчанию: 1c)
  • ПочтаАвтора - почта автора коммита в git (по умолчанию: [email protected])
  • База_СтрокаСоединения - строка подключения к служебной базе 1С для выполнения обновления (если не указана, будет использована временная ИБ)
  • Конвертировать в формат ЕДТ - флаг конвертации в формат ЕДТ
  • Относительный путь к исходникам - Относительный путь внутри репозитории к исходникам проекта, по умолчанию (src/cf)

Файл настроек (JSON)

Структура файла настроек

Файл настроек описывает последовательность вызова обработчиков для обработки данных. обработчик = обработка 1С реализующая вышеуказанный API.

    |-> Описание обработчика
    |      |- ИдОбработчика     - строковый идентификатор обработчика (необязательный)
    |      |- ИмяОбработки      - имя класса обработчика
    |      |- ПутьКОбработке    - путь к oscript-файлу класса обработчика
    |      |- Параметры         - структура параметров обработки
    |      |      |- <просто параметр>                 - параметр простого типа
    |      |      |- <параметр из данных обработчика>  - параметр вычисляемый обработчиком
    |      |      |      |- ИдОбработчика              - идентификатор обработчика из которого будет получен параметр
    |      |      |      |- ФункцияПолученияЗначения   - имя функции получения значения параметра (по умолчанию: "ПолучитьРезультат")
    |      |- Обработчики      - массив обработчиков данных полученных на текущем уровне
    |             |- <Описание обработчика>*           - структура, аналогичная данной
    |____________________|

Доступные подстановки

  • $settingsDir - каталог файла настроек
  • $yardDir - каталог запуска скрипта
  • $workDir - указанный при запуске рабочий каталог (по умолчанию: каталог файла настроек)

Пример файла настроек

Пример файла настроек чтения словарей журнала регистрации

{
    // имя класса обработчика получения списка релизов
    "ИмяОбработки":"СписокРелизов1С",
    "Параметры":{
        "ИмяПользователя" : "user",
        "ПарольПользователя" : "password",
        "ВремяОжиданияОтвета" : 30,
        // Регулярки для фильтра приложений/конфигураций по имени
        "ФильтрПриложений" : ["Библиотека стандартных подсистем.*3\\.1"],
        // Регулярки для фильтра версий по номеру
        "ФильтрВерсий" : ["3\\.1\\.2.*"],
        "ФильтрВерсийНачинаяСДаты" : "2020-01-01T00:00:00",
    },
    "Обработчики":[
        {
            // имя класса обработчика загрузки релизов
            "ИмяОбработки":"ЗагрузчикРелизов1С",
            "ИдОбработчика":"ЗагрузчикБСП",
            "Параметры":{
                "ИмяПользователя" : "user",
                "ПарольПользователя" : "password",
                "КаталогДляСохранения" : "$workDir\\tmp\\distr",
                // флаг распаковки шаблона
                "РаспаковыватьEFD" : true,
                // путь распаковки шаблона конфигурации
                "КаталогДляРаспаковкиEFD" : "$workDir\\tmp\\tmplts"
            }
        }
    ]
}

Больше примеров расположены в каталоге examples.