#Использовать "./internal" #Использовать "./internal/Modules/internal" Перем ПутьPackagedef; Перем ОсновнойПутьИсходников; Перем СоответствиеЗамен; Перем ПутьПакета; Перем Версия; Перем Языки; Перем КаталогСловарей; Перем ФайлыПеревода; Перем ФайлыРазбораСловаря; Перем ФайлыФорматирования; Перем Корень; Перем ОсновнойЯзык; Перем КаталогWorkflow; Перем КаталогJenkins; Перем КаталогПараметровЛок; Перем КаталогДополнений; Перем ФайлПроверкиНабораТестов; Перем СоответствиеНесовпадающихИмен; Процедура ПриСозданииОбъекта() ДанныеПроекта = ОбщиеМетоды.ПолучитьДанныеПроекта(); // Основные Корень = ДанныеПроекта["root"]; КаталогПакета = ДанныеПроекта["packageSrc"]; ОсновнойЯзык = ДанныеПроекта["mainLang"]; Версия = ДанныеПроекта["version"]; Языки = ДанныеПроекта["additionalLangs"]; КаталогСловарей = ДанныеПроекта["dictionariesSrc"]; КаталогWorkflow = ДанныеПроекта["workflowsSrc"]; КаталогJenkins = ДанныеПроекта["jenkinsSrc"]; КаталогПараметровЛок = ДанныеПроекта["locVarsSrc"]; КаталогДополнений = ДанныеПроекта["paramsExamplesSrc"]; ОсновнойПутьИсходников = Корень + ОсновнойЯзык + "/"; ПутьПакета = ОсновнойПутьИсходников + КаталогПакета; ПутьPackagedef = ПутьПакета + "packagedef"; // Замены для OneScript СоответствиеЗамен = Новый Соответствие(); СоответствиеЗамен.Вставить("// #Использовать" , "#Использовать"); СоответствиеЗамен.Вставить("//#Использовать" , "#Использовать"); СоответствиеЗамен.Вставить("УстановитьБезопасныйРежим(Истина);" , ""); СоответствиеЗамен.Вставить("УстановитьБезопасныйРежим(Ложь);" , ""); СоответствиеЗамен.Вставить("// !OInt " , ""); СоответствиеЗамен.Вставить("#КонецЕсли" , "// #КонецЕсли"); СоответствиеЗамен.Вставить("#Если" , "// #Если"); // Файлы перевода ФайлыРазбораСловаря = ОпределитьНаборФайловДляСловаря(); ФайлыПеревода = ОпределитьНаборФайловПеревода(); // Переводы имен файлов СоответствиеНесовпадающихИмен = Новый Соответствие(); СоответствиеНесовпадающихИмен.Вставить("OPI_Инструменты" , "OPI_Tools"); СоответствиеНесовпадающихИмен.Вставить("OPI_Криптография" , "OPI_Cryptography"); СоответствиеНесовпадающихИмен.Вставить("OPI_HTTPКлиент" , "OPI_HTTPClient"); СоответствиеНесовпадающихИмен.Вставить("OPI_Компоненты" , "OPI_AddIns"); СоответствиеНесовпадающихИмен.Вставить("OPI_ЗапросыHTTP" , "OPI_HTTPRequests"); СоответствиеНесовпадающихИмен.Вставить("OPI_ЗапросыSQL" , "OPI_SQLQueries"); СоответствиеНесовпадающихИмен.Вставить("OPI_ПолучениеДанныхТестов", "OPI_TestDataRetrieval"); СоответствиеНесовпадающихИмен.Вставить("OPI_ПреобразованиеТипов" , "OPI_TypeConversion"); КонецПроцедуры Процедура ОсновнаяОбработка() Экспорт СоответствиеМодулей = МетодыКонвертации.ПолучитьСопоставлениеФайлов(ОсновнойПутьИсходников); ЛокальныеПараметры = НайтиФайлы(КаталогПараметровЛок, "*.json"); Сообщить("Актуализация словарей"); ЕстьНовыеСлова = МетодыСловарей.СоздатьНаборСловарей(ФайлыРазбораСловаря, Языки, КаталогСловарей); Если Не ЕстьНовыеСлова Тогда Сообщить("Обновление номеров версий"); МетодыВерсионирования.ОбновитьНомераВерсий(ПутьPackagedef, Версия); Сообщить("Обновление libconfig"); МетодыВерсионирования.ОбновитьLibConfig(СоответствиеМодулей, ПутьПакета, СоответствиеНесовпадающихИмен); Сообщить("Конвертация 1С в OS"); МетодыКонвертации.ПортироватьНабор(СоответствиеМодулей, СоответствиеЗамен); Сообщить("Перевод кодовой базы"); МетодыПеревода.ПеревестиПроект(КаталогСловарей, Корень, ОсновнойЯзык, Языки, ФайлыПеревода); Сообщить("Форматирование кода"); ФайлыФорматирования = ОпределитьНаборФайловФорматирования(); МетодыФорматирования.ОтформатироватьНабор(ФайлыФорматирования); Сообщить("Создание примеров кода для документации"); Для Каждого ФайлПараметров Из ЛокальныеПараметры Цикл ТекущиеПараметры = Инструменты.ПрочитатьФайлJSON(ФайлПараметров.ПолноеИмя); МодульТестов = ТекущиеПараметры["testsModulePath"]; КаталогПримеров = ТекущиеПараметры["codeExamplesSrc"]; КаталогЗначенийТестов = ТекущиеПараметры["testValuesSrc"]; ИмяОбласти = ТекущиеПараметры["testsRegionName"]; МетодыПримеровКода.ПолучитьПримерыКодаДокументации(МодульТестов , КаталогПримеров , КаталогЗначенийТестов , ИмяОбласти); КонецЦикла; Языки.Добавить(ОсновнойЯзык); Сообщить("Формирование CLI версии"); МетодыCLI.СформироватьCLI(Корень, Языки, КаталогДополнений); Сообщить("Создание дублеров в модулях"); МетодыДобавленияДублеров.ДобавитьДублеры(Языки, ПутьПакета, СоответствиеНесовпадающихИмен); Сообщить("Конвертация тестов в тесты для CLI"); МетодыФормированияТестовCLI.СформироватьТестыCLI(Корень, Языки); Сообщить("Формирование jenkinsfile тестирования"); МетодыФормированияТестовJenkins.СоздатьНаборWorkflow(Языки, КаталогПараметровЛок, КаталогJenkins); Сообщить("Создание списка библиотек"); МетодыКаталогаAPI.СформироватьКаталог(ФайлыФорматирования); Сообщить("Формирование индекса тестов"); МетодыСозданияИндексаТестов.СформироватьИндексТестов(Корень, Языки); Иначе Сообщить("В словарях есть новые слова без перевода. Перевод и создание CLI не выполнено!"); ЗавершитьРаботу(111); КонецЕсли; Сообщить("Обновление хеш-суммы сборки"); ОбновитьХэшСумму(); Сообщить("Обработка завершена!"); КонецПроцедуры Функция ОпределитьНаборФайловДляСловаря() ВсеФайлы = НайтиФайлы(ОсновнойПутьИсходников, "*", Истина); МассивФайлов = Новый Массив; МассивИсключаемыхРасширений = Новый Массив; МассивИсключаемыхРасширений.Добавить(".bin"); МассивИсключаемыхРасширений.Добавить(".addin"); МассивИсключаемыхРасширений.Добавить(".dll"); МассивИсключаемыхРасширений.Добавить(".so"); МассивИсключаемыхРасширений.Добавить(".exe"); МассивИсключаемыхРасширений.Добавить(".zip"); Для Каждого ФайлПроекта Из ВсеФайлы Цикл Признак = СтрНайти(ФайлПроекта.ПолноеИмя, "cli\data\Classes\internal\Classes") = 0 И СтрНайти(ФайлПроекта.ПолноеИмя, "cli/data/Classes/internal/Classes") = 0 И СтрНайти(ФайлПроекта.ПолноеИмя, ".metadata") = 0 И Не ФайлПроекта.ЭтоКаталог(); Для Каждого Расширение Из МассивИсключаемыхРасширений Цикл Если ФайлПроекта.Расширение = Расширение Тогда Признак = Ложь; Прервать; КонецЕсли; КонецЦикла; Если Признак Тогда МассивФайлов.Добавить(ФайлПроекта); КонецЕсли; КонецЦикла; Возврат МассивФайлов; КонецФункции Функция ОпределитьНаборФайловФорматирования() // Наборы файлов ВсеФайлы = НайтиФайлы(Корень, "*", Истина); МассивФайлов = Новый Массив; Для Каждого ФайлПроекта Из ВсеФайлы Цикл Признак = (ФайлПроекта.Расширение = ".os" Или ФайлПроекта.Расширение = ".bsl") И СтрНайти(ФайлПроекта.ПолноеИмя, "cli/") = 0 И СтрНайти(ФайлПроекта.ПолноеИмя, "cli\") = 0; Если Признак Тогда МассивФайлов.Добавить(ФайлПроекта); КонецЕсли; КонецЦикла; Возврат МассивФайлов; КонецФункции Функция ОпределитьНаборФайловПеревода() // Наборы файлов ВсеФайлы = НайтиФайлы(ОсновнойПутьИсходников, "*", Истина); МассивФайлов = Новый Массив; Для Каждого ФайлПроекта Из ВсеФайлы Цикл Признак = СтрНайти(ФайлПроекта.ПолноеИмя, "cli") = 0; Если Признак Тогда МассивФайлов.Добавить(ФайлПроекта); КонецЕсли; КонецЦикла; Возврат МассивФайлов; КонецФункции Процедура ОбновитьХэшСумму() Сообщить(СтрШаблон("Начало расчета хеш-суммы: %1", ТекущаяДата())); Хеширование = Новый ХешированиеДанных(ХешФункция.SHA256); Для Каждого Файл Из НайтиФайлы("./src/ru", "*", Истина) Цикл Если Не Файл.ЭтоКаталог() И Не Файл.ИмяБезРасширения = "OPI_BuildHash" Тогда Хеширование.Добавить(Новый ДвоичныеДанные(Файл.ПолноеИмя)); КонецЕсли; КонецЦикла; Для Каждого Файл Из НайтиФайлы("./src/en", "*", Истина) Цикл Если Не Файл.ЭтоКаталог() И Не Файл.ИмяБезРасширения = "OPI_BuildHash" Тогда Хеширование.Добавить(Новый ДвоичныеДанные(Файл.ПолноеИмя)); КонецЕсли; КонецЦикла; Сумма = Хеширование.ХешСуммаСтрокой; Сообщить(СтрШаблон("Окончание расчета хеш-суммы: %1", ТекущаяДата())); Сообщить(СтрШаблон("Хеш сумма: %1", Сумма)); Для Каждого Файл Из НайтиФайлы("./src", "*", Истина) Цикл Если Не Файл.ИмяБезРасширения = "OPI_BuildHash" Тогда Продолжить; КонецЕсли; ПутьМодуляХеша = Файл.ПолноеИмя; ПутьМодуляХеша = СтрЗаменить(ПутьМодуляХеша, "\", "/"); ПутьМодуляХеша = ?(Файл.ЭтоКаталог(), ПутьМодуляХеша + "/Module.bsl", ПутьМодуляХеша); МодульИнструментов = Новый ТекстовыйДокумент(); МодульИнструментов.Прочитать(ПутьМодуляХеша); Для Н = 1 По МодульИнструментов.КоличествоСтрок() Цикл ТекущаяСтрока = МодульИнструментов.ПолучитьСтроку(Н); Если СтрНайти(ТекущаяСтрока, "LastBuildHash") > 0 Тогда МодульИнструментов.ЗаменитьСтроку(Н, СтрШаблон(" LastBuildHash = ""%1"";", Сумма)); Прервать; КонецЕсли; КонецЦикла; МодульИнструментов.Записать(ПутьМодуляХеша, , Символы.ПС); КонецЦикла; ПолучитьДвоичныеДанныеИзСтроки(Сумма).Записать("./service/last_build_hash.txt"); КонецПроцедуры ПриСозданииОбъекта(); ОсновнаяОбработка();