Skip to content

Commit

Permalink
Команда set-version
Browse files Browse the repository at this point in the history
- новый класс МенеджерВерсийФайлов1С
- БДД-фича
#493
  • Loading branch information
artbear committed Mar 13, 2022
1 parent 1cfe61a commit 6616870
Show file tree
Hide file tree
Showing 5 changed files with 217 additions and 2 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
# language: ru

Функционал: Установка номера версии или сборки файлов конфигурации, расширений, внешних обработок, отчетов
Как Разработчик/Инженер по тестированию
Я Хочу иметь возможность автоматической\автоматизированной установки номеров версий или сборок файлов 1С
Чтобы быстро выпускать новые релизы или собирать артефакты, отличающиеся номерами

Контекст:
Допустим я подготовил репозиторий и рабочий каталог проекта
И я подготовил рабочую базу проекта "./build/ib" по умолчанию

И Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога

И Я сохраняю значение "INFO" в переменную окружения "LOGOS_LEVEL"
Дано Я очищаю параметры команды "oscript" в контексте

Сценарий: Изменение версии конфигурации, указан файла конфигурации

# И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL"
Тогда файл "cf/Configuration.xml" содержит "<Version>1.0.0.0</Version>"

Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript"
И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript"
И Я добавляю параметр "--file cf/Configuration.xml" для команды "oscript"

Когда Я выполняю команду "oscript"
# И Я сообщаю вывод команды "oscript"
Тогда Вывод команды "oscript" содержит
| Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 |
| Старая версия 1.0.0.0 |

И Код возврата команды "oscript" равен 0

Тогда файл "cf/Configuration.xml" содержит "<Version>2.0.0.0</Version>"

Сценарий: Изменение версии конфигурации, указан файл расширения

Дано Я копирую каталог "cfe" из каталога "tests/fixtures" проекта в рабочий каталог
Тогда файл "cfe/Configuration.xml" содержит "<Version>1.1.0.0</Version>"

Когда Я добавляю параметр "<КаталогПроекта>/src/main.os set-version" для команды "oscript"
И Я добавляю параметр "--new-version 2.0.0.0" для команды "oscript"
И Я добавляю параметр "--file cfe/Configuration.xml" для команды "oscript"

Когда Я выполняю команду "oscript"
Тогда Вывод команды "oscript" содержит
| Изменяю версию в исходниках конфигурации 1С на 2.0.0.0 |
| Старая версия 1.1.0.0 |

И Код возврата команды "oscript" равен 0

Тогда файл "cfe/Configuration.xml" содержит "<Version>2.0.0.0</Version>"
50 changes: 50 additions & 0 deletions src/Классы/КомандаУстановкаВерсии.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
///////////////////////////////////////////////////////////////////
//
// Служебный модуль с реализацией работы команды set-version
//
// Структура модуля реализована в соответствии с рекомендациями
// oscript-app-template (C) EvilBeaver
//
///////////////////////////////////////////////////////////////////

#Использовать logos

Перем Лог;

Процедура ЗарегистрироватьКоманду(Знач ИмяКоманды, Знач Парсер) Экспорт

ОписаниеКоманды = Парсер.ОписаниеКоманды(ИмяКоманды, " Установка номера версии файлов 1С (конфигурации, расширения, внешние обработки\отчеты).");

Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--new-version",
"Номер версии, который нужно установить");
Парсер.ДобавитьИменованныйПараметрКоманды(ОписаниеКоманды, "--file",
"Путь Configuration.xml - для исходников конфигурации или расширения");

Парсер.ДобавитьКоманду(ОписаниеКоманды);

КонецПроцедуры // ЗарегистрироватьКоманду

// Выполняет логику команды
//
// Параметры:
// ПараметрыКоманды - Соответствие - Соответствие ключей командной строки и их значений
// ДополнительныеПараметры - Соответствие - дополнительные параметры (необязательно)
//
Функция ВыполнитьКоманду(Знач ПараметрыКоманды, Знач ДополнительныеПараметры) Экспорт

Лог = ДополнительныеПараметры.Лог;

НомерВерсии = ПараметрыКоманды["--new-version"];
ПутьФайла = ПараметрыКоманды["--file"];

Лог.Информация("Изменяю версию в исходниках конфигурации 1С на %1", НомерВерсии);

МенеджерВерсийФайлов1С = Новый МенеджерВерсийФайлов1С;
СтараяВерсия = МенеджерВерсийФайлов1С.УстановитьВерсиюКонфигурации(ПутьФайла, НомерВерсии);

Лог.Информация(" Старая версия %1", СтараяВерсия);

//Сообщить(ПараметрыСистемы.ВерсияПродукта());
Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех;

КонецФункции // ВыполнитьКоманду
109 changes: 109 additions & 0 deletions src/Классы/МенеджерВерсийФайлов1С.os
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
#Использовать logos
#Использовать v8runner
#Использовать fs
#Использовать json
#Использовать v8unpack

#Область ОписаниеПеременных

Перем Лог;

#КонецОбласти

#Область ПрограммныйИнтерфейс

Функция ВерсияКонфигурации(Знач ПутьФайлаКонфигурации) Экспорт

//ИмяФайлаКонфигурации = ИмяФайлаКонфигурации(КаталогИсходников);
Лог.Отладка("читаю версию из исходников конфигурации %1", ПутьФайлаКонфигурации);

СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации);
Результат = ВерсияКонфигурацииПоХМЛ(СтрокаXML);

Возврат Результат;

КонецФункции

Функция УстановитьВерсиюКонфигурации(Знач ПутьФайлаКонфигурации, Знач НовыйНомерВерсии) Экспорт

Возврат ЗаписатьНомерВерсии(ПутьФайлаКонфигурации, НовыйНомерВерсии);

КонецФункции

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

Функция ПрочитатьФайл(Знач ПутьФайлаКонфигурации)

//ИмяФайлаКонфигурации = ИмяФайлаКонфигурации(КаталогИсходников);

ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.Прочитать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8);
Возврат ТекстовыйДокумент.ПолучитьТекст();

КонецФункции

Функция ВерсияКонфигурацииПоХМЛ(Знач ХМЛСтрокаФайлаКонфигурации)

РегулярноеВыражение = Новый РегулярноеВыражение("<Version>(\d+.\d+.\d+.\d+)<\/Version>");
Совпадения = РегулярноеВыражение.НайтиСовпадения(ХМЛСтрокаФайлаКонфигурации);
Если Совпадения.Количество() = 0 Тогда
ВызватьИсключение "Версия проекта не определена";
КонецЕсли;

Результат = Совпадения[0].Группы[1].Значение;

Лог.Отладка("текущая версия %1", Результат);

Возврат Результат;

КонецФункции

Функция ЗаписатьНомерВерсии(ПутьФайлаКонфигурации, НомерВерсии)

//ИмяФайлаКонфигурации = ИмяФайлаКонфигурации(КаталогИсходников);

Лог.Отладка("устанавливаю версию %1 в исходниках конфигурации %2", НомерВерсии, ПутьФайлаКонфигурации);
СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации);

Результат = ВерсияКонфигурацииПоХМЛ(СтрокаXML);

ШаблонПодстановки = СтрШаблон("<Version>%1</Version>", НомерВерсии);
РегулярноеВыражение = Новый РегулярноеВыражение("(<Version>\d+.\d+.\d+.\d+<\/Version>)");
НоваяСтрокаXML = РегулярноеВыражение.Заменить(СтрокаXML, ШаблонПодстановки);

ТекстовыйДокумент = Новый ТекстовыйДокумент();
ТекстовыйДокумент.УстановитьТекст(НоваяСтрокаXML);
ТекстовыйДокумент.Записать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8);

Возврат Результат;

КонецФункции

Функция ВерсияСоСборкой(Знач НомерВерсии, Знач НомерСборки)

ШаблонПодстановки = СтрШаблон("$1.%1", НомерСборки);
РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+).(\d+)");
Возврат РегулярноеВыражение.Заменить(НомерВерсии, ШаблонПодстановки);

КонецФункции

Функция ПутьФайлаКонфигурации(Знач КаталогИсходников)
Возврат ОбъединитьПути(КаталогИсходников, "Configuration.xml");
КонецФункции

Функция ПолучитьЛог()
Если Лог = Неопределено Тогда
Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы());
КонецЕсли;
Возврат Лог;
КонецФункции

#КонецОбласти

ПолучитьЛог();
4 changes: 4 additions & 0 deletions src/Модули/ПараметрыСистемы.os
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@

мВозможныеКоманды.Вставить("ПроверкаПроектаEDT", "edt-validate");

мВозможныеКоманды.Вставить("УстановкаВерсии", "set-version");

мВозможныеКоманды = Новый ФиксированнаяСтруктура(мВозможныеКоманды);

КонецЕсли;
Expand Down Expand Up @@ -163,6 +165,8 @@

КлассыРеализацииКоманд[ВозможныеКоманды().ПроверкаСинтаксиса] = "КомандаПроверкаСинтаксиса";
КлассыРеализацииКоманд[ВозможныеКоманды().ПроверкаПроектаEDT] = "КомандаПроверкаПроектаEDT";

КлассыРеализацииКоманд[ВозможныеКоманды().УстановкаВерсии] = "КомандаУстановкаВерсии";
//...
//КлассыРеализацииКоманд["<имя команды>"] = "<КлассРеализации>";

Expand Down
4 changes: 2 additions & 2 deletions tests/fixtures/cfe/Configuration.xml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@
</UsePurposes>
<ScriptVariant>Russian</ScriptVariant>
<Vendor/>
<Version/>
<Version>1.1.0.0</Version>
<DefaultLanguage>Language.Русский</DefaultLanguage>
<InterfaceCompatibilityMode>Taxi</InterfaceCompatibilityMode>
<CompatibilityMode>Version8_3_10</CompatibilityMode>
Expand All @@ -55,4 +55,4 @@
<Language>Русский</Language>
</ChildObjects>
</Configuration>
</MetaDataObject>
</MetaDataObject>

0 comments on commit 6616870

Please sign in to comment.