Skip to content

Commit

Permalink
feat: #468 алгоритм сборки простых внешних обработок.
Browse files Browse the repository at this point in the history
  • Loading branch information
alkoleft committed Dec 15, 2024
1 parent a6f008a commit 30f05bf
Show file tree
Hide file tree
Showing 20 changed files with 302 additions and 13 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//

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

Функция СкомпилирватьВнешнуюОбработку(ТекстМодуляОбъект = "", Знач ТекстМодуляФормы = "") Экспорт

// Для сборки используется утилита v8unpack - https://github.com/e8tools/v8unpack

ИдентификаторМодуляОбъекта = "00ab4620-8498-4b18-a4f8-18b53138fcb5.0";
ИдентификаторФормы = "a10cd1fd-c4ba-437c-9925-b7354192a1ea.0";

РабочийКаталог = ЮТФайлы.ОбъединитьПути(КаталогВременныхФайлов(), "yaxunit-v8unpack");
ПодготовитьРабочийКаталог(РабочийКаталог);

КаталогСборки = ЮТФайлы.ОбъединитьПути(РабочийКаталог, "build");
КаталогФайловОбработки = ЮТФайлы.ОбъединитьПути(КаталогСборки, "unpack");

УдалитьФайлы(КаталогСборки);
СоздатьКаталог(КаталогСборки);

РаспаковатьОбработку(РабочийКаталог);

ЮТФайлы.СкопироватьКаталог(ЮТФайлы.ОбъединитьПути(РабочийКаталог, "unpack"), КаталогФайловОбработки);

// Модуль объекта
ИмяФайлаМодуляОбъекта = ЮТФайлы.ОбъединитьПути(КаталогФайловОбработки, ИдентификаторМодуляОбъекта, "text");
ЮТФайлы.ЗаписатьТекстВФайла(ИмяФайлаМодуляОбъекта, ТекстМодуляОбъект);

// Модуль формы
ИмяФайлаФормы = ЮТФайлы.ОбъединитьПути(КаталогФайловОбработки, ИдентификаторФормы);
ДанныеФормы = ЮТФайлы.ДанныеТекстовогоФайла(ИмяФайлаФормы);
ТекстМодуляФормы = СтрЗаменить(ТекстМодуляФормы, """", """""");
ДанныеФормы = СтрЗаменить(ДанныеФормы, "MODULE_PLACEHOLDER", ТекстМодуляФормы);
ЮТФайлы.ЗаписатьТекстВФайла(ИмяФайлаФормы, ДанныеФормы);

СобратьОбработку(РабочийКаталог);

Возврат ЮТФайлы.ОбъединитьПути(КаталогСборки, "out.epf");

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

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

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

Процедура ПодготовитьРабочийКаталог(РабочийКаталог)

Если ЮТФайлы.Существует(РабочийКаталог) Тогда
Возврат;
КонецЕсли;

СоздатьКаталог(РабочийКаталог);
Данные = ПолучитьОбщийМакет("ЮТV8UnpackWS");
Архив = Новый ЧтениеZipФайла(Данные.ОткрытьПотокДляЧтения());
Архив.ИзвлечьВсе(РабочийКаталог);
Архив.Закрыть();

КонецПроцедуры

Процедура РаспаковатьОбработку(РабочийКаталог)

Если ЮТФайлы.Существует(ЮТФайлы.ОбъединитьПути(РабочийКаталог, "unpack")) Тогда
Возврат;
КонецЕсли;

Если ЮТОкружение.ЭтоWindows() Тогда
Команда = "v8unpack.exe -P template_managment.epf unpack";
Иначе
Команда = "/bin/bash unpack-epf.sh > build/unpack.log";
КонецЕсли;

КодВозврата = Неопределено;
ЗапуститьПриложение(Команда, РабочийКаталог, Истина, КодВозврата);

Если КодВозврата <> 0 Тогда
ВызватьИсключение СтрШаблон("Не удалось распаковать шаблон обработки. Команда: `%1`", Команда);
КонецЕсли;

КонецПроцедуры

Процедура СобратьОбработку(РабочийКаталог)

Если ЮТОкружение.ЭтоWindows() Тогда
Команда = "v8unpack.exe -B build\unpack build\out.epf";
Иначе
Команда = "/bin/bash build-epf.sh > build/build.log";
КонецЕсли;

КодВозврата = Неопределено;
ЗапуститьПриложение(Команда, РабочийКаталог, Истина, КодВозврата);

Если КодВозврата <> 0 Тогда
ВызватьИсключение СтрШаблон("Не удалось собрать обработку. Команда: `%1`", Команда);
КонецЕсли;

КонецПроцедуры

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="8c504a00-5ff1-46bb-9895-ee06bcb64454">
<name>ЮТВнешниеОбработкиСлужебныйСервер</name>
<synonym>
<key>ru</key>
<value>Внешние обработки служебный сервер</value>
</synonym>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
12 changes: 2 additions & 10 deletions exts/yaxunit/src/CommonModules/ЮТОбщий/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -160,16 +160,8 @@

Функция ДанныеТекстовогоФайла(ИмяФайла) Экспорт

#Если НЕ ВебКлиент Тогда
Чтение = Новый ЧтениеТекста;
Чтение.Открыть(ИмяФайла, "UTF-8");
Текст = Чтение.Прочитать();
Чтение.Закрыть();

Возврат Текст;
#Иначе
ВызватьИсключение "Чтение данных текстовых файлов в веб-клиенте не поддерживается";
#КонецЕсли
ЮТМетодыСлужебный.ВызовУстаревшегоМетода("ЮТОбщий.ДанныеТекстовогоФайла", "ЮТФайлы.ДанныеТекстовогоФайла", "24.12");
Возврат ЮТФайлы.ДанныеТекстовогоФайла(ИмяФайла);

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

Expand Down
33 changes: 33 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТОкружение/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,39 @@

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

// Проверяет тип текущей операционной системы
//
// Возвращаемое значение:
// Булево
Функция ЭтоWindows() Экспорт

Информация = Новый СистемнаяИнформация();
Возврат Информация.ТипПлатформы = ТипПлатформы.Windows_x86 Или Информация.ТипПлатформы = ТипПлатформы.Windows_x86_64;

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

// Проверяет тип текущей операционной системы
//
// Возвращаемое значение:
// Булево
Функция ЭтоLinux() Экспорт

Информация = Новый СистемнаяИнформация();
Возврат Информация.ТипПлатформы = ТипПлатформы.Linux_x86 Или Информация.ТипПлатформы = ТипПлатформы.Linux_x86_64;

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

// Проверяет тип текущей операционной системы
//
// Возвращаемое значение:
// Булево
Функция ЭтоMac() Экспорт

Информация = Новый СистемнаяИнформация();
Возврат Информация.ТипПлатформы = ТипПлатформы.MacOS_x86 Или Информация.ТипПлатформы = ТипПлатформы.MacOS_x86_64;

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

// Возвращает код языка интерфейса.
//
// Возвращаемое значение:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@

Попытка

Текст = ЮТОбщий.ДанныеТекстовогоФайла(ПутьКФайлу);
Текст = ЮТФайлы.ДанныеТекстовогоФайла(ПутьКФайлу);

Если ЗначениеЗаполнено(Текст) Тогда
ДанныеФайла = ЮТОбщий.ЗначениеИзJSON(Текст);
Expand Down
48 changes: 48 additions & 0 deletions exts/yaxunit/src/CommonModules/ЮТФайлы/Module.bsl
Original file line number Diff line number Diff line change
Expand Up @@ -148,6 +148,26 @@

КонецПроцедуры

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

Если НЕ Существует(КаталогПриемник) Тогда
СоздатьКаталог(КаталогПриемник);
КонецЕсли;

Для Каждого Файл Из НайтиФайлы(КаталогИсточник, "*") Цикл

Если СтрСравнить(Файл.ПолноеИмя, КаталогИсточник) = 0 Тогда
Продолжить;
ИначеЕсли Файл.ЭтоКаталог() Тогда
СкопироватьКаталог(Файл.ПолноеИмя, ОбъединитьПути(КаталогПриемник, Файл.Имя));
Иначе
КопироватьФайл(Файл.ПолноеИмя, ОбъединитьПути(КаталогПриемник, Файл.Имя));
КонецЕсли;

КонецЦикла;

КонецПроцедуры

Процедура СоздатьКаталогРекурсивно(Путь) Экспорт

Файл = Новый Файл(Путь);
Expand All @@ -174,6 +194,34 @@

КонецПроцедуры

Функция ДанныеТекстовогоФайла(ИмяФайла) Экспорт

#Если НЕ ВебКлиент Тогда
Чтение = Новый ЧтениеТекста;
Чтение.Открыть(ИмяФайла, "UTF-8");
Текст = Чтение.Прочитать();
Чтение.Закрыть();

Возврат Текст;
#Иначе
ВызватьИсключение "Чтение данных текстовых файлов в веб-клиенте не поддерживается";
#КонецЕсли

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

Процедура ЗаписатьТекстВФайла(ИмяФайла, Данные) Экспорт

#Если НЕ ВебКлиент Тогда
Запись = Новый ЗаписьТекста(ИмяФайла, "UTF-8");
Запись.Записать(Данные);
Запись.Закрыть();

#Иначе
ВызватьИсключение "Запись данных текстовых файлов в веб-клиенте не поддерживается";
#КонецЕсли

КонецПроцедуры

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

#Область СлужебныеПроцедурыИФункции
Expand Down
Binary file not shown.
10 changes: 10 additions & 0 deletions exts/yaxunit/src/CommonTemplates/ЮТV8UnpackWS/ЮТV8UnpackWS.mdo
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonTemplate xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="c08cb885-86fb-41fb-b8fc-9a407c087f60">
<name>ЮТV8UnpackWS</name>
<synonym>
<key>ru</key>
<value>v8unpack рабочий каталог</value>
</synonym>
<comment>Содержит исполняемые файлы, скрипты и шаблоны обработок</comment>
<templateType>BinaryData</templateType>
</mdclass:CommonTemplate>
2 changes: 2 additions & 0 deletions exts/yaxunit/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@
<commonTemplates>CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеОтчества_ru</commonTemplates>
<commonTemplates>CommonTemplate.ЮТ_СловарьПодражателя_Люди_МужскиеФамилии_ru</commonTemplates>
<commonTemplates>CommonTemplate.ЮТRegEx1CAddin</commonTemplates>
<commonTemplates>CommonTemplate.ЮТV8UnpackWS</commonTemplates>
<commonTemplates>CommonTemplate.ЮТYaxUnitAddIn</commonTemplates>
<commonTemplates>CommonTemplate.ЮТИнформацияОбОшибке</commonTemplates>
<commonTemplates>CommonTemplate.ЮТОписаниеМетаданных</commonTemplates>
Expand All @@ -64,6 +65,7 @@
<commonModules>CommonModule.МокитоПроверки</commonModules>
<commonModules>CommonModule.МокитоСлужебный</commonModules>
<commonModules>CommonModule.ЮТАсинхроннаяОбработкаСлужебныйКлиент</commonModules>
<commonModules>CommonModule.ЮТВнешниеОбработкиСлужебныйСервер</commonModules>
<commonModules>CommonModule.ЮТДымовыеТесты</commonModules>
<commonModules>CommonModule.ЮТДымовыеТестыСлужебныйВызовСервера</commonModules>
<commonModules>CommonModule.ЮТДымовыеТестыСлужебныйКлиентСервер</commonModules>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// Copyright 2021-2024 BIA-Technologies Limited Liability Company
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
//©///////////////////////////////////////////////////////////////////////////©//

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

Процедура ИсполняемыеСценарии() Экспорт

ЮТТесты
.ДобавитьТест("СкомпилирватьВнешнуюОбработку")
;

КонецПроцедуры

Процедура СкомпилирватьВнешнуюОбработку() Экспорт

Значение = ЮТест.Данные().СлучайнаяСтрока();
Алгоритм = СтрШаблон("Перем Реквизит Экспорт;
|Реквизит = ""%1"";", Значение);
ИмяФайлаОбработки = ЮТВнешниеОбработкиСлужебныйСервер.СкомпилирватьВнешнуюОбработку(Алгоритм);

ЮТест.ОжидаетЧто(ИмяФайлаОбработки)
.Заполнено();
ЮТест.ОжидаетЧто(ЮТФайлы.Существует(ИмяФайлаОбработки), "Не существует файл созданной обработки")
.ЭтоИстина();

Обработка = ВнешниеОбработки.Создать(ИмяФайлаОбработки);

ЮТест.ОжидаетЧто(Обработка)
.Свойство("Реквизит")
.Равно(Значение);

КонецПроцедуры

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

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

#КонецОбласти
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<mdclass:CommonModule xmlns:mdclass="http://g5.1c.ru/v8/dt/metadata/mdclass" uuid="ef210801-2b91-4498-8998-ba1a285b2a2c">
<name>ОМ_ЮТВнешниеОбработкиСлужебныйСервер</name>
<server>true</server>
<clientOrdinaryApplication>true</clientOrdinaryApplication>
</mdclass:CommonModule>
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@
ЮТест.ОжидаетЧто(ЮТФайлы.Существует(ПолноеИмяФайла), "Файл каталога проекта не существует")
.ЭтоИстина();

Данные = ЮТОбщий.ДанныеТекстовогоФайла(ПолноеИмяФайла);
Данные = ЮТФайлы.ДанныеТекстовогоФайла(ПолноеИмяФайла);
ЮТест.ОжидаетЧто(Данные, "Содержимое файла")
.Содержит("ConfigDumpInfo.xml");

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@
КонецФункции

Процедура ПроверитьРезультатВыполнения(ИмяФайлаРезультата, ОжидаемыйРезультат)
РезультатВыполнения = СокрЛП(ЮТОбщий.ДанныеТекстовогоФайла(ИмяФайлаРезультата));
РезультатВыполнения = СокрЛП(ЮТФайлы.ДанныеТекстовогоФайла(ИмяФайлаРезультата));
ЮТест.ОжидаетЧто(РезультатВыполнения)
.ИмеетТип("Строка")
.Равно(ОжидаемыйРезультат)
Expand Down
1 change: 1 addition & 0 deletions tests/src/Configuration/Configuration.mdo
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
<commonModules>CommonModule.ОМ_МокитоОбучение</commonModules>
<commonModules>CommonModule.ОМ_МокитоСлужебный</commonModules>
<commonModules>CommonModule.ОМ_ОшибкаЗагрузкиСценариев</commonModules>
<commonModules>CommonModule.ОМ_ЮТВнешниеОбработкиСлужебныйСервер</commonModules>
<commonModules>CommonModule.ОМ_ЮТест</commonModules>
<commonModules>CommonModule.ОМ_ЮТестПереопределяемый</commonModules>
<commonModules>CommonModule.ОМ_ЮТЗависимостиСлужебный</commonModules>
Expand Down
10 changes: 10 additions & 0 deletions tools/build-template.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
#!/bin/bash

CURRENT_PATH=$(pwd)
SCRIPTPATH="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )"

cd ${SCRIPTPATH}/v8unpack
ls -lna
zip -r -9 ../v8unpack.zip ./
mv ../v8unpack.zip ../../exts/yaxunit/src/CommonTemplates/ЮТV8UnpackLinux/Template.bin
cd ${CURRENT_PATH}
5 changes: 5 additions & 0 deletions tools/v8unpack/build-epf.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

export LC_ALL=C

v8unpack -B build/unpack build/out.epf
Binary file added tools/v8unpack/template_managment.epf
Binary file not shown.
5 changes: 5 additions & 0 deletions tools/v8unpack/unpack-epf.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#!/bin/bash

export LC_ALL=C

v8unpack -P template_managment.epf unpack
Binary file added tools/v8unpack/v8unpack
Binary file not shown.
Binary file added tools/v8unpack/v8unpack.exe
Binary file not shown.

0 comments on commit 30f05bf

Please sign in to comment.