Проект gitsync-plugins — набор встроенных плагинов для gitsync, инструмента синхронизации конфигураций 1С с git.
Плагины написаны на OneScript (OScript) — русскоязычном диалекте, совместимом со встроенным языком 1С:Предприятие.
Плагин реализует интерфейс, определённый в src/Классы/plugin.os.template. Хостовое приложение gitsync вызывает хуки плагинов в фиксированной последовательности.
| Функция | Назначение |
|---|---|
Версия() |
Строка версии плагина |
Приоритет() |
Числовой приоритет (0 — по умолчанию) |
Описание() |
Краткое описание |
Справка() |
Подробная справочная информация с параметрами |
Имя() |
Уникальное имя плагина (используется для включения/отключения) |
ИмяЛога() |
Имя логера, формат oscript.lib.gitsync.plugins.<plugin-name> |
| Хук | Когда вызывается | Назначение |
|---|---|---|
ПриАктивизации(СтандартныйОбработчик) |
При включении плагина | Сохранение ссылки на стандартный обработчик, инициализация |
ПриРегистрацииКомандыПриложения(ИмяКоманды, КлассРеализации) |
При парсинге аргументов команды | Регистрация опций CLI через КлассРеализации.Опция() |
ПриПолученииПараметров(ПараметрыКоманды) |
После разбора аргументов | Чтение значений параметров из ПараметрыКоманды.Параметр() |
| Хук | Когда вызывается | Назначение |
|---|---|---|
ПередНачаломВыполнения(ПутьКХранилищу, КаталогРабочейКопии) |
Перед началом основного цикла | Чтение контекста, подготовка |
ПередВыгрузкойКонфигурациюВИсходники(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат) |
Перед каждой выгрузкой версии | Модификация конфигурации перед выгрузкой |
ПриВыгрузкеКонфигурациюВИсходники(Конфигуратор, КаталогВыгрузки, Формат, СтандартнаяОбработка) |
Вместо штатной выгрузки | Переопределение механизма выгрузки |
ПослеВыгрузкиКонфигурациюВИсходники(Конфигуратор, КаталогРабочейКопии, КаталогВыгрузки, ПутьКХранилищу, НомерВерсии, Формат) |
После выгрузки | Дополнительная обработка выгруженных файлов |
ПередПеремещениемВКаталогРабочейКопии(КаталогВыгрузки, КаталогРабочейКопии) |
Перед копированием из врем. каталога | Преобразование файлов (распаковка форм, EDT) |
ПриОчисткеКаталогаРабочейКопии(КаталогРабочейКопии, СтандартнаяОбработка) |
При очистке рабочей копии | Переопределение очистки |
ПриПеремещенииВКаталогРабочейКопии(КаталогВыгрузки, КаталогРабочейКопии, СтандартнаяОбработка) |
При копировании в рабочую копию | Переопределение копирования |
ПередОбработкойВерсииХранилища(СтрокаВерсии, СледующаяВерсия) |
Перед обработкой очередной версии | Чтение данных версии |
ПередНачаломЦиклаОбработкиВерсий(ТаблицаИсторииХранилища, ТекущаяВерсия, СледующаяВерсия, МаксимальнаяВерсияДляРазбора) |
Перед циклом по версиям | Корректировка границ цикла |
ПередКоммитом(ГитРепозиторий, КаталогРабочейКопии) |
Перед git-коммитом | Добавление файлов, изменение .gitignore |
ПослеКоммита(ГитРепозиторий, КаталогРабочейКопии) |
После коммита | Теги, промежуточный push |
ПослеОкончанияВыполнения(ГитРепозиторий, КаталогРабочейКопии) |
После завершения основного цикла | Финальные операции (push, очистка) |
| Хук | Когда вызывается | Назначение |
|---|---|---|
ПриКоммите(ГитРепозиторий, КаталогРабочейКопии) |
Вместо штатного коммита | Переопределение коммита |
ПослеПолученияТаблицыАвторов(ПутьКФайлуАвторов, ТаблицаАвторов) |
После загрузки AUTHORS |
Проверка/дополнение таблицы авторов |
ПослеПолученияТаблицыВерсий(ТаблицаВерсий) |
После получения списка версий | Модификация таблицы версий |
ПослеПолученияТаблицыПользователей(ТаблицаПользователей) |
После получения списка пользователей | Дополнение пользователей |
ПриЗагрузкеВерсииХранилищаВКонфигурацию(Конфигуратор, ПутьКХранилищу, НомерВерсии) |
При загрузке версии | Переопределение загрузки версии |
ПриПолученииТаблицыВерсий(ПутьКХранилищу, НачальнаяВерсия, КонечнаяВерсия, СтандартнаяОбработка) |
Вместо получения таблицы версий | Переопределение чтения истории |
В хуке ПриРегистрацииКомандыПриложения плагин регистрирует параметры:
// Флаговый параметр с переменной окружения
КлассРеализации.Опция("S skip-exists-tags", Ложь, "[*smart-tags] флаг пропуска ошибок")
.Флаговый()
.ВОкружении("GITSYNC_SKIP_EXISTS_TAGS");
// Строковый параметр с переменной окружения
КлассРеализации.Опция("b branch", "master", "[*sync-remote] Имя ветки")
.ВОкружении("GITSYNC_REMOTE_BRANCH");
// Числовой параметр
КлассРеализации.Опция("min-task-count", 0, "[*check-comments] Минимальное количество задач")
.ТЧисло();
Сигнатура .Опция(Спецификация, ЗначениеПоУмолчанию, Описание):
Спецификация:"короткийФлаг длинноеИмя"или просто"длинноеИмя"ЗначениеПоУмолчанию: определяет тип параметра (булев, строка, число)Описание: текст справки с префиксом категории[*имя-плагина]
Переменная КомандыПлагина (массив строк) определяет, для каких команд плагин регистрирует опции. Устанавливается в Инициализация():
КомандыПлагина = Новый Массив;
КомандыПлагина.Добавить("sync");
Если КомандыПлагина отсутствует — плагин подключается неявно ко всем командам.
Некоторые плагины (drop-config-dump, use-ibcmd) отключают несовместимые. Реализуется в ПриАктивизации:
СтандартныйОбработчик.МенеджерПлагинов.ОтключитьПлагин("increment");
Формат: oscript.lib.gitsync.plugins.<plugin-name>
Скопировать src/Классы/plugin.os.template в src/Классы/newPlugin.os.
Обязательные функции:
Версия(),Приоритет(),Описание(),Справка(),Имя(),ИмяЛога()
Опционально — хуки, в которых плагин должен участвовать.
В packagedef добавить:
.ОпределяетКласс("Плагин_НовыйПлагин", "src/Классы/newPlugin.os")
- Создать
features/new-plugin.featureс Gherkin-сценариями - При необходимости добавить шаги в
features/step_definitions/new-plugin.os - Шаг регистрируется в
ПолучитьСписокШагов():
ВсеШаги.Добавить("ИмяНовогоШага");
README.md— добавить описание плагина в списокdocs/user-guide.md— детальное описание с параметрами
export GITSYNC_V8VERSION=8.3.24.1691
export EDT_VERSION=2024.2.5
opm install --dev
opm install gitsync
opm run install-gitsync
opm testgitsync-plugins/
├── packagedef # Манифест пакета opm: версия, зависимости, классы
├── src/
│ └── Классы/
│ ├── *.os # Плагины (один файл — один плагин)
│ ├── plugin.os.template # Шаблон для новых плагинов
│ └── internal/ # Вспомогательные библиотеки
│ ├── tool1cd/ # Чтение файловой БД хранилища 1С
│ └── v8unpack/ # Распаковка контейнеров метаданных
├── features/
│ ├── *.feature # Сценарии BDD (Gherkin)
│ └── step_definitions/
│ ├── shared.os # Общие шаги для всех тестов
│ └── *.os # Шаги конкретных плагинов
├── tests/
│ └── fixtures/ # Тестовые данные
│ ├── *.1CD # Файловые хранилища 1С
│ ├── *.cf # Файлы конфигураций
│ ├── *.mxl # Отчёты по версиям
│ └── edtWorkspace/ # Тестовая рабочая область EDT
├── tasks/
│ ├── test.os # Запуск BDD-тестов
│ ├── coverage.os # Запуск с покрытием кода
│ ├── install-gitsync.os # Установка gitsync из исходников
│ └── install-plugins.os # Установка плагинов для тестов
├── docs/ # Документация
│ ├── user-guide.md # Пользовательская документация
│ └── technical.md # Техническая документация (этот файл)
└── .github/workflows/ # CI/CD
├── testing.yml # Матрица тестов (Windows/Linux, 1C/EDT версии)
├── qa.yml # SonarQube + покрытие кода
└── release.yml # Сборка и публикация .ospx
Библиотека для чтения файловой базы данных хранилища 1С (1cv8ddb.1CD):
ЧтениеХранилищаКонфигурации— выгрузка версий конфигурации из хранилищаЧтениеТаблицФайловойБазыДанных— чтение таблицVERSIONSиUSERSСконвертироватьФайлКонфигурации— конвертация между форматами 1C
Распаковщик контейнеров метаданных обычных форм:
Распаковщик.Распаковать()— извлекает содержимоеForm.bin
Тесты построены на BDD-фреймворке 1bdd. Каждый плагин имеет свой .feature-файл. Общие шаги вынесены в features/step_definitions/shared.os.
- Платформа 1С:Предприятие (версия из
GITSYNC_V8VERSION) - EDT (версия из
EDT_VERSION, по умолчанию2022.2.5) - Java 11 (для EDT ≤2023) или Java 17 (для EDT ≥2024)
- Локаль
ru_RU
# Все тесты
opm test
# С покрытием кода
opm run coverage
# Отдельный тестовый файл (через oscript напрямую)
oscript ./tasks/test.osТестовыйФайлХранилища1С.1CD— файловое хранилище с несколькими версиями (используется большинством тестов)ТестовыйФайлКонфигурации.cf— выгруженная конфигурацияТестовыйФайлКонфигурации_8_2_17.cf— конфигурация в старом форматеedtWorkspace/— тестовая рабочая область EDTОтчетПоВерсиямХранилища.mxl— эталонный отчёт по версиям
Матрица: OScript [1.9.2, 2.0.0] × 1C [8.3.21, 8.3.24] × EDT [2023.3.6, 2024.2.5] × OS [windows, ubuntu].
Особенности Linux:
- Требуется
libenchant1c2aдля 1C 8.3.21 - Wine для работы
tool1CD - XVFB для headless-тестов
- Запускается только для репозитория
oscript-library/gitsync-plugins - Собирает покрытие кода через
opm run coverage - Отправляет результаты в SonarQube
- Версия пакета извлекается из
packagedefдля SonarQube
- Триггер: GitHub Release (published/edited)
- Собирает
.ospxпакет черезopm build - Публикует артефакт в релиз и на hub.oscript.io
- Поднять версию в
packagedef(.Версия("X.Y.Z")) - Создать PR, получить аппрув и мёрдж в
master - Создать GitHub Release — CI соберёт пакет и опубликует его
- Обновить ссылку на версию в репозитории gitsync в файле
tasks/get_plugins.os - Выпустить новую версию gitsync
- Язык комментариев и идентификаторов — русский
- Максимальная длина строки: 150 символов (см.
.bsl-language-server.json) - Имена логов:
oscript.lib.gitsync.plugins.<plugin-name> Приоритет()= 0, если плагину не требуется особый порядок выполнения- Файл — один плагин, имя файла совпадает с
Имя() - Переменная
Логинициализируется вИнициализация()илиПриАктивизации():Лог = Логирование.ПолучитьЛог(ИмяЛога());