From 6616870880adca70634c341ca64701a6fd8319a0 Mon Sep 17 00:00:00 2001 From: Artur Ayukhanov Date: Sun, 13 Mar 2022 13:48:27 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9A=D0=BE=D0=BC=D0=B0=D0=BD=D0=B4=D0=B0=20se?= =?UTF-8?q?t-version?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - новый класс МенеджерВерсийФайлов1С - БДД-фича #493 --- ...1\320\276\321\200\320\272\320\270.feature" | 52 +++++++++ ...20\265\321\200\321\201\320\270\320\270.os" | 50 ++++++++ ...0\271\320\273\320\276\320\2621\320\241.os" | 109 ++++++++++++++++++ ...21\201\321\202\320\265\320\274\321\213.os" | 4 + tests/fixtures/cfe/Configuration.xml | 4 +- 5 files changed, 217 insertions(+), 2 deletions(-) create mode 100644 "features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" create mode 100644 "src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" diff --git "a/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" "b/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" new file mode 100644 index 00000000..bc671cd0 --- /dev/null +++ "b/features/\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\235\320\276\320\274\320\265\321\200\320\260\320\222\320\265\321\200\321\201\320\270\320\270_\320\270\320\273\320\270_\320\241\320\261\320\276\321\200\320\272\320\270.feature" @@ -0,0 +1,52 @@ +# language: ru + +Функционал: Установка номера версии или сборки файлов конфигурации, расширений, внешних обработок, отчетов + Как Разработчик/Инженер по тестированию + Я Хочу иметь возможность автоматической\автоматизированной установки номеров версий или сборок файлов 1С + Чтобы быстро выпускать новые релизы или собирать артефакты, отличающиеся номерами + +Контекст: + Допустим я подготовил репозиторий и рабочий каталог проекта + И я подготовил рабочую базу проекта "./build/ib" по умолчанию + + И Я копирую каталог "xdd_test" из каталога "tests/fixtures" проекта в подкаталог "build" рабочего каталога + + И Я сохраняю значение "INFO" в переменную окружения "LOGOS_LEVEL" + Дано Я очищаю параметры команды "oscript" в контексте + +Сценарий: Изменение версии конфигурации, указан файла конфигурации + + # И Я сохраняю значение "DEBUG" в переменную окружения "LOGOS_LEVEL" + Тогда файл "cf/Configuration.xml" содержит "1.0.0.0" + + Когда Я добавляю параметр "<КаталогПроекта>/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" содержит "2.0.0.0" + +Сценарий: Изменение версии конфигурации, указан файл расширения + + Дано Я копирую каталог "cfe" из каталога "tests/fixtures" проекта в рабочий каталог + Тогда файл "cfe/Configuration.xml" содержит "1.1.0.0" + + Когда Я добавляю параметр "<КаталогПроекта>/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" содержит "2.0.0.0" diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" new file mode 100644 index 00000000..f8362b6f --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\232\320\276\320\274\320\260\320\275\320\264\320\260\320\243\321\201\321\202\320\260\320\275\320\276\320\262\320\272\320\260\320\222\320\265\321\200\321\201\320\270\320\270.os" @@ -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", СтараяВерсия); + + //Сообщить(ПараметрыСистемы.ВерсияПродукта()); + Возврат МенеджерКомандПриложения.РезультатыКоманд().Успех; + +КонецФункции // ВыполнитьКоманду diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" new file mode 100644 index 00000000..5ca7d15a --- /dev/null +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/\320\234\320\265\320\275\320\265\320\264\320\266\320\265\321\200\320\222\320\265\321\200\321\201\320\270\320\271\320\244\320\260\320\271\320\273\320\276\320\2621\320\241.os" @@ -0,0 +1,109 @@ +#Использовать logos +#Использовать v8runner +#Использовать fs +#Использовать json +#Использовать v8unpack + +#Область ОписаниеПеременных + +Перем Лог; + +#КонецОбласти + +#Область ПрограммныйИнтерфейс + +Функция ВерсияКонфигурации(Знач ПутьФайлаКонфигурации) Экспорт + + //ИмяФайлаКонфигурации = ИмяФайлаКонфигурации(КаталогИсходников); + Лог.Отладка("читаю версию из исходников конфигурации %1", ПутьФайлаКонфигурации); + + СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации); + Результат = ВерсияКонфигурацииПоХМЛ(СтрокаXML); + + Возврат Результат; + +КонецФункции + +Функция УстановитьВерсиюКонфигурации(Знач ПутьФайлаКонфигурации, Знач НовыйНомерВерсии) Экспорт + + Возврат ЗаписатьНомерВерсии(ПутьФайлаКонфигурации, НовыйНомерВерсии); + +КонецФункции + +#КонецОбласти + +#Область СлужебныйПрограммныйИнтерфейс + +#КонецОбласти + +#Область СлужебныеПроцедурыИФункции + +Функция ПрочитатьФайл(Знач ПутьФайлаКонфигурации) + + //ИмяФайлаКонфигурации = ИмяФайлаКонфигурации(КаталогИсходников); + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.Прочитать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8); + Возврат ТекстовыйДокумент.ПолучитьТекст(); + +КонецФункции + +Функция ВерсияКонфигурацииПоХМЛ(Знач ХМЛСтрокаФайлаКонфигурации) + + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+)<\/Version>"); + Совпадения = РегулярноеВыражение.НайтиСовпадения(ХМЛСтрокаФайлаКонфигурации); + Если Совпадения.Количество() = 0 Тогда + ВызватьИсключение "Версия проекта не определена"; + КонецЕсли; + + Результат = Совпадения[0].Группы[1].Значение; + + Лог.Отладка("текущая версия %1", Результат); + + Возврат Результат; + +КонецФункции + +Функция ЗаписатьНомерВерсии(ПутьФайлаКонфигурации, НомерВерсии) + + //ИмяФайлаКонфигурации = ИмяФайлаКонфигурации(КаталогИсходников); + + Лог.Отладка("устанавливаю версию %1 в исходниках конфигурации %2", НомерВерсии, ПутьФайлаКонфигурации); + СтрокаXML = ПрочитатьФайл(ПутьФайлаКонфигурации); + + Результат = ВерсияКонфигурацииПоХМЛ(СтрокаXML); + + ШаблонПодстановки = СтрШаблон("%1", НомерВерсии); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+.\d+<\/Version>)"); + НоваяСтрокаXML = РегулярноеВыражение.Заменить(СтрокаXML, ШаблонПодстановки); + + ТекстовыйДокумент = Новый ТекстовыйДокумент(); + ТекстовыйДокумент.УстановитьТекст(НоваяСтрокаXML); + ТекстовыйДокумент.Записать(ПутьФайлаКонфигурации, КодировкаТекста.UTF8); + + Возврат Результат; + +КонецФункции + +Функция ВерсияСоСборкой(Знач НомерВерсии, Знач НомерСборки) + + ШаблонПодстановки = СтрШаблон("$1.%1", НомерСборки); + РегулярноеВыражение = Новый РегулярноеВыражение("(\d+.\d+.\d+).(\d+)"); + Возврат РегулярноеВыражение.Заменить(НомерВерсии, ШаблонПодстановки); + +КонецФункции + +Функция ПутьФайлаКонфигурации(Знач КаталогИсходников) + Возврат ОбъединитьПути(КаталогИсходников, "Configuration.xml"); +КонецФункции + +Функция ПолучитьЛог() + Если Лог = Неопределено Тогда + Лог = Логирование.ПолучитьЛог(ПараметрыСистемы.ИмяЛогаСистемы()); + КонецЕсли; + Возврат Лог; +КонецФункции + +#КонецОбласти + +ПолучитьЛог(); diff --git "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" index 865184be..f92fb0c2 100644 --- "a/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" +++ "b/src/\320\234\320\276\320\264\321\203\320\273\320\270/\320\237\320\260\321\200\320\260\320\274\320\265\321\202\321\200\321\213\320\241\320\270\321\201\321\202\320\265\320\274\321\213.os" @@ -101,6 +101,8 @@ мВозможныеКоманды.Вставить("ПроверкаПроектаEDT", "edt-validate"); + мВозможныеКоманды.Вставить("УстановкаВерсии", "set-version"); + мВозможныеКоманды = Новый ФиксированнаяСтруктура(мВозможныеКоманды); КонецЕсли; @@ -163,6 +165,8 @@ КлассыРеализацииКоманд[ВозможныеКоманды().ПроверкаСинтаксиса] = "КомандаПроверкаСинтаксиса"; КлассыРеализацииКоманд[ВозможныеКоманды().ПроверкаПроектаEDT] = "КомандаПроверкаПроектаEDT"; + + КлассыРеализацииКоманд[ВозможныеКоманды().УстановкаВерсии] = "КомандаУстановкаВерсии"; //... //КлассыРеализацииКоманд["<имя команды>"] = "<КлассРеализации>"; diff --git a/tests/fixtures/cfe/Configuration.xml b/tests/fixtures/cfe/Configuration.xml index bea4db61..8983bcd9 100644 --- a/tests/fixtures/cfe/Configuration.xml +++ b/tests/fixtures/cfe/Configuration.xml @@ -46,7 +46,7 @@ Russian - + 1.1.0.0 Language.Русский Taxi Version8_3_10 @@ -55,4 +55,4 @@ Русский - \ No newline at end of file +