Skip to content

Commit

Permalink
Merge pull request #472 from bia-technologies/feature/468
Browse files Browse the repository at this point in the history
468 / cборка простых внешних обработок.
  • Loading branch information
alkoleft authored Dec 18, 2024
2 parents 9fcb7c3 + 03a360b commit ab80185
Show file tree
Hide file tree
Showing 26 changed files with 387 additions and 38 deletions.
38 changes: 19 additions & 19 deletions .github/workflows/step-export-xml.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,19 @@ on:
edt_version:
type: string
required: true

artifact_name:
type: string
required: true

engine_only:
type: boolean
required: false
default: false
outputs:
yaxunit_version:
value: ${{ jobs.export.outputs.yaxunit_version }}

smoke_version:
value: ${{ jobs.export.outputs.smoke_version }}

Expand All @@ -32,15 +32,15 @@ jobs:
outputs:
yaxunit_version: ${{ steps.extract_version.outputs.version }}
smoke_version: ${{ steps.extract_smoke_version.outputs.version }}

steps:
- name: Извлечение исходников PR
if: github.event_name == 'pull_request_target' || github.event_name == 'pull_request'
uses: actions/checkout@v4
with:
ref: refs/pull/${{ github.event.number }}/merge # Для поддержки pull_request и pull_request_target


- name: Извлечение исходников ветки ${{ github.ref_name }}
if: github.event_name == 'push'
uses: actions/checkout@v4
Expand All @@ -63,49 +63,49 @@ jobs:
type: edt
edt_version: ${{ inputs.edt_version }}
cache: true
env:
env:
ONEC_USERNAME: ${{ secrets.ONEC_USERNAME }}
ONEC_PASSWORD: ${{ secrets.ONEC_PASSWORD }}
timeout-minutes: 30

- name: Ковертация исходников конфигурации
if: ${{ !inputs.engine_only }}
uses: alkoleft/onec-edtcli-command-action@main
with:
export: true
from: fixtures/demo-configuration
to: export/configuration
timeout: 5
timeout-minutes: 10
timeout: 15
timeout-minutes: 15

- name: Ковертация исходников YAxUnit
uses: alkoleft/onec-edtcli-command-action@main
with:
export: true
from: exts/yaxunit
to: export/yaxunit
timeout: 5
timeout-minutes: 10
timeout: 15
timeout-minutes: 15

- name: Ковертация исходников тестов
if: ${{ !inputs.engine_only }}
uses: alkoleft/onec-edtcli-command-action@main
with:
export: true
from: tests
to: export/tests
timeout: 5
timeout-minutes: 10
timeout: 15
timeout-minutes: 15

- name: Ковертация исходников дымовых тестов
uses: alkoleft/onec-edtcli-command-action@main
with:
export: true
from: exts/smoke
to: export/smoke
timeout: 5
timeout-minutes: 10
timeout: 15
timeout-minutes: 15

- name: Упаковка исходников в архив
run: |
cd export
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
//©///////////////////////////////////////////////////////////////////////////©//
//
// 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"); // BSLLS:UsingSynchronousCalls-off BSLLS:TempFilesDir-off
ПодготовитьРабочийКаталог(РабочийКаталог);

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

УдалитьФайлы(КаталогСборки); // BSLLS:UsingSynchronousCalls-off
СоздатьКаталог(КаталогСборки); // BSLLS:UsingSynchronousCalls-off

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

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

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

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

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

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

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

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

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

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

Если ЮТФайлы.Существует(РабочийКаталог) И НайтиФайлы(РабочийКаталог, "*").Количество() Тогда // BSLLS:UsingSynchronousCalls-off
Возврат;
КонецЕсли;

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

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

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

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

Если ЮТОкружение.ЭтоWindows() Тогда
Команда = "unpack-epf.bat";
Иначе
Команда = "/bin/bash unpack-epf.sh"; // BSLLS:UsingHardcodePath-off
КонецЕсли;

ВыполнитьКомандуСистемы(РабочийКаталог, Команда, "Распаковка шаблона обработки");

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

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

Если ЮТОкружение.ЭтоWindows() Тогда
Команда = "build-epf.bat";
Иначе
Команда = "/bin/bash build-epf.sh"; // BSLLS:UsingHardcodePath-off
КонецЕсли;

ВыполнитьКомандуСистемы(РабочийКаталог, Команда, "Сборка обработки");

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

Процедура ВыполнитьКомандуСистемы(РабочийКаталог, Знач Команда, Описание)

КодВозврата = Неопределено;
ФайлЛога = ПолучитьИмяВременногоФайла("log");
Команда = СтрШаблон("%1 > %2 2>&1", Команда, ФайлЛога);

Если ЮТОкружение.ЭтоWindows() Тогда
КодВозврата = ВыполнитьКомандуОСБезПоказаЧерногоОкна(Команда, РабочийКаталог);
Иначе
Команда = "timeout 5s " + Команда;
КодВозврата = Неопределено;
ЗапуститьПриложение(Команда, РабочийКаталог, Истина, КодВозврата); // BSLLS:UsingSynchronousCalls-off
КонецЕсли;

Если КодВозврата <> 0 Тогда
Сообщение = СтрШаблон("%1 завершилась с ошибкой. Команда: `%2`; рабочий каталог: `%3`", Описание, Команда, РабочийКаталог);
Если ЮТФайлы.Существует(ФайлЛога) Тогда
Сообщение = СтрШаблон("%1
|Вывод команды:
|%2", Сообщение, ЮТФайлы.ДанныеТекстовогоФайла(ФайлЛога));
УдалитьФайлы(ФайлЛога); // BSLLS:UsingSynchronousCalls-off
КонецЕсли;

ВызватьИсключение Сообщение;
КонецЕсли;

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

Функция ВыполнитьКомандуОСБезПоказаЧерногоОкна(ТекстКоманды, РабочийКаталог) Экспорт

#Если НЕ ВебКлиент Тогда

WshShell = Новый COMОбъект("WScript.Shell"); // BSLLS:UsingObjectNotAvailableUnix-off
WshShell.CurrentDirectory = РабочийКаталог;
Рез = WshShell.Run(ТекстКоманды, 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>
Original file line number Diff line number Diff line change
Expand Up @@ -507,10 +507,13 @@

Функция ВыполнитьТестыМодуля(ТестовыйМодуль)

МетаданныеМодуля = ТестовыйМодуль.Метаданные;
ЮТЛогирование.Информация(СтрШаблон("Запуск тестов модуля `%1.%2`", МетаданныеМодуля.Расширение, МетаданныеМодуля.Имя));

Наборы = НаборыТестовПоКонтекстам(ТестовыйМодуль);
ТестовыйМодульОблегченный = ЮТКоллекции.СкопироватьСтруктуру(ТестовыйМодуль);
ТестовыйМодульОблегченный.НаборыТестов = Новый Массив();

РезультатыКлиентскихТестов = Неопределено;
РезультатыСерверныхТестов = Неопределено;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -193,8 +193,6 @@
Контекст.КоличествоВыполненныхТестов = ПрогрессСервер;
КонецЕсли;
#КонецЕсли
МетаданныеМодуля = ОписаниеСобытия.Модуль.Метаданные;
ЮТЛогирование.Информация(СтрШаблон("Запуск тестов модуля `%1.%2`", МетаданныеМодуля.Расширение, МетаданныеМодуля.Имя));

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

Expand Down
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
Loading

0 comments on commit ab80185

Please sign in to comment.