From 06eedb9133c5ed5d47cfb7e3cf6ff10e849136e3 Mon Sep 17 00:00:00 2001 From: Romanov Date: Sun, 16 Jun 2024 13:48:38 +0300 Subject: [PATCH 01/69] add T param --- .../useIbcmd.os" | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 285f427..fe73d84 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -15,6 +15,7 @@ Перем ПользовательБД; // Строка - имя пользователя базы данных Перем ПарольБД; // Строка - пароль пользователя базы данных Перем Инкрементально; // Булево - Истина - будет выполнена инкрементальная выгрузка если возможно +Перем ЧислоПотоков; // Число - 0 - Количество потоков используемых при экспорте. Перем ИнкрементальнаяВыгрузкаВозможна; // Булево - Истина - инкрементальная выгрузка возможна Перем ПутьКФайлуДампаИзменений; // Строка - путь к файлу ConfigDumpInfo.xml @@ -92,6 +93,7 @@ ПользовательБД = "sa"; ПарольБД = ""; Инкрементально = Ложь; + ЧислоПотоков = 0; Если НЕ (ВРег(ТекущаяКоманда) = "ALL" ИЛИ ВРег(ТекущаяКоманда) = "SYNC") Тогда @@ -157,6 +159,11 @@ КлассРеализации.Опция("P ibcmd-db-pwd", "", "[*use-ibcmd] пароль пользователя базы данных (при использовании ibcmd)") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_PWD"); + + КлассРеализации.Опция("j ibcmd-threads", "", "[*use-ibcmd] Количество потоков используемых при экспорте") + .ТЧисло() + .ВОкружении("GITSYNC_IBCMD_DB_THREADS"); + КлассРеализации.Опция("i increment", Ложь, "[*use-ibcmd] флаг использования инкрементальной выгрузки конфигурации, если возможно") @@ -173,6 +180,7 @@ ИмяБД = ПараметрыКоманды.Параметр("ibcmd-db-name" , ""); ПользовательБД = ПараметрыКоманды.Параметр("ibcmd-db-user" , "sa"); ПарольБД = ПараметрыКоманды.Параметр("ibcmd-db-pwd" , ""); + ЧислоПотоков = ПараметрыКоманды.Параметр("ibcmd-threads" , 0); Если НЕ Инкрементально Тогда Инкрементально = ПараметрыКоманды.Параметр("increment", Ложь); КонецЕсли; @@ -242,6 +250,10 @@ КомандаIBCMD.ДобавитьПараметр("infobase config export"); КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); + Если ЧислоПотоков > 0 Тогда + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--threads=%1", ЧислоПотоков)); + КонецЕсли; + ДобавитьПараметрыПодключенияКИБ(КомандаIBCMD, Конфигуратор); Если ИнкрементальнаяВыгрузкаВозможна Тогда From 1f5abf4f5206939f735d2f7b8c587cca58f756d6 Mon Sep 17 00:00:00 2001 From: Romanov Date: Sun, 16 Jun 2024 13:51:30 +0300 Subject: [PATCH 02/69] =?UTF-8?q?=D0=B8=D1=81=D0=B0=3D=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=20=D0=B8=D0=BC=D1=8F=20=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D0=BC=D0=B5=D1=82=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index fe73d84..f7cf279 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -162,7 +162,7 @@ КлассРеализации.Опция("j ibcmd-threads", "", "[*use-ibcmd] Количество потоков используемых при экспорте") .ТЧисло() - .ВОкружении("GITSYNC_IBCMD_DB_THREADS"); + .ВОкружении("GITSYNC_IBCMD_THREADS"); КлассРеализации.Опция("i increment", Ложь, From 51697dbf35cf8fa217a6f47c431e03d39602e8e7 Mon Sep 17 00:00:00 2001 From: komarovps Date: Fri, 4 Oct 2024 12:35:42 +0300 Subject: [PATCH 03/69] =?UTF-8?q?feat:=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=B8=D0=BB=20=D0=BF=D0=B0=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80?= =?UTF-8?q?=20push-options?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syncRemote.os" | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index ec8d0ca..7399156 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -16,6 +16,7 @@ Перем КоличествоКоммитовДоPush; Перем СчетчикКоммитов; Перем ОтправлятьТеги; +Перем PushOptions; Перем ГитРепозиторий; @@ -88,6 +89,7 @@ ПолучитьИзменения = Ложь; ОтправитьИзменения = Ложь; ОтправлятьТеги = Ложь; + PushOptions = ""; КоличествоКоммитовДоPush = 0; СчетчикКоммитов = 0; @@ -116,7 +118,10 @@ КлассРеализации.Опция("n push-n-commits", 0, "[*sync-remote] <число> количество коммитов до промежуточной отправки на удаленный сервер") .ТЧисло() .ВОкружении("GITSYNC_REMOTE_PUSH_N_COMMITS"); - + КлассРеализации.Опция("O push-options", "", "[*sync-remote] Дополнительные параметры для команды push, разделенные ;") + .ТСтрока() + .ВОкружении("GITSYNC_PUSH_OPTIONS"); + КлассРеализации.Аргумент("URL", "", "[*sync-remote] Адрес удаленного репозитория GIT.") .ВОкружении("GITSYNC_REPO_URL") .Обязательный(Ложь); @@ -131,6 +136,7 @@ ПолучитьИзменения = ПараметрыКоманды.Параметр("pull", Ложь); ОтправитьИзменения = ПараметрыКоманды.Параметр("push", Ложь); ОтправлятьТеги = ПараметрыКоманды.Параметр("push-tags", Ложь); + PushOptions = СтрРазделить(ПараметрыКоманды.Параметр("push-options", ""), ";"); КоличествоКоммитовДоPush = ПараметрыКоманды.Параметр("push-n-commits", 0); @@ -138,6 +144,7 @@ Лог.Отладка("Установлено получение изменений <%1> ", ПолучитьИзменения); Лог.Отладка("Установлено количество коммитов <%1>, после которых осуществляется отправка", КоличествоКоммитовДоPush); Лог.Отладка("Установлен флаг отправки меток в значение <%1> выгрузки версий", ОтправлятьТеги); + Лог.Отладка("Установлены дополнительные параметры команды push: <%1>", СтрСоединить(PushOptions, ", ")); КонецПроцедуры @@ -198,6 +205,12 @@ ПараметрыКомандыPush.Добавить(СтрЗаменить(URLРепозитория, "%", "%%")); ПараметрыКомандыPush.Добавить("-v"); + Для Каждого Опция Из PushOptions Цикл + Если Не ПустаяСтрока(Опция) Тогда + ПараметрыКомандыPush.Добавить("-o " + Опция); + КонецЕсли; + КонецЦикла; + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); Если ОтправлятьТеги Тогда @@ -207,6 +220,12 @@ ПараметрыКомандыPush.Добавить(СтрЗаменить(URLРепозитория, "%", "%%")); ПараметрыКомандыPush.Добавить("--tags"); + Для Каждого Опция Из PushOptions Цикл + Если Не ПустаяСтрока(Опция) Тогда + ПараметрыКомандыPush.Добавить("-o " + Опция); + КонецЕсли; + КонецЦикла; + ГитРепозиторий.ВыполнитьКоманду(ПараметрыКомандыPush); КонецЕсли; From 1a651e7c83825f1a47dffbc88265bac05238f263 Mon Sep 17 00:00:00 2001 From: komarovps Date: Fri, 4 Oct 2024 17:25:20 +0300 Subject: [PATCH 04/69] =?UTF-8?q?feat:=20=D0=BF=D0=BE=D0=B4=D0=BD=D1=8F?= =?UTF-8?q?=D0=BB=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8E=20=D0=B4=D0=BE=20?= =?UTF-8?q?1.7.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syncRemote.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index 7399156..dc37c34 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -28,7 +28,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "1.6.0"; + Возврат "1.7.0"; КонецФункции // Возвращает приоритет выполнения плагина From 5e7eabd717a303a393d6bdfcf5abc0bde519a886 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:04:07 +0300 Subject: [PATCH 05/69] =?UTF-8?q?fix:=20=D0=94=D0=BB=D1=8F=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=20sync-remote=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=20branch=20(B)=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81=D0=B8?= =?UTF-8?q?=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B8=D1=80=D1=83?= =?UTF-8?q?=D0=B5=D0=BC=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syncRemote.os" | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index ec8d0ca..5d4941c 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -27,7 +27,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "1.6.0"; + Возврат "1.6.1"; КонецФункции // Возвращает приоритет выполнения плагина @@ -110,6 +110,9 @@ КлассРеализации.Опция("G pull", Ложь, "[*sync-remote] Флаг получения изменений из удаленный репозитория перед синхронизацией") .Флаг() .ВОкружении("GITSYNC_REMOTE_PULL"); + КлассРеализации.Опция("B branch", Ложь, "[*sync-remote] Имя ветки") + .ТСтрока() + .ВОкружении("GITSYNC_REMOTE_BRANCH"); КлассРеализации.Опция("T push-tags", Ложь, "[*sync-remote] Флаг отправки тегов по версиям") .Флаг() .ВОкружении("GITSYNC_REMOTE_PUSH_TAGS"); @@ -134,8 +137,9 @@ КоличествоКоммитовДоPush = ПараметрыКоманды.Параметр("push-n-commits", 0); - Лог.Отладка("Установлена отправка изменений <%1> ", ОтправитьИзменения); Лог.Отладка("Установлено получение изменений <%1> ", ПолучитьИзменения); + Лог.Отладка("Установлено имя ветки <%1> ", ИмяВетки); + Лог.Отладка("Установлена отправка изменений <%1> ", ОтправитьИзменения); Лог.Отладка("Установлено количество коммитов <%1>, после которых осуществляется отправка", КоличествоКоммитовДоPush); Лог.Отладка("Установлен флаг отправки меток в значение <%1> выгрузки версий", ОтправлятьТеги); From 6851071d986280481b5a3cb9ea197a2d06813f7a Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:10:20 +0300 Subject: [PATCH 06/69] =?UTF-8?q?fix:=20=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=B0=20=D1=83=D1=82=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=D1=82=D1=8B=20ibcmd;=20=D0=94=D0=BE=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=D0=BD=D0=BA=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D1=81=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=D0=BC=20ibcmd=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index f7cf279..6395009 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -160,7 +160,7 @@ .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_PWD"); - КлассРеализации.Опция("j ibcmd-threads", "", "[*use-ibcmd] Количество потоков используемых при экспорте") + КлассРеализации.Опция("j ibcmd-threads", "", "[*use-ibcmd] Количество потоков используемых при экспорте") .ТЧисло() .ВОкружении("GITSYNC_IBCMD_THREADS"); @@ -211,8 +211,8 @@ ВыгрузитьКонфигурациюВФайлыIBCMD(Конфигуратор, КаталогВыгрузки); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Лог.Ошибка("Невозможно выгрузить конфигурацию в файлы. Ошибка:%1%2", Символы.ПС, ТекстОшибки); - ВызватьИсключение; + ТекстОшибки = СтрШаблон("Невозможно выгрузить конфигурацию в файлы. Ошибка:%1%2", Символы.ПС, ТекстОшибки); + ВызватьИсключение ТекстОшибки; КонецПопытки; КонецПроцедуры @@ -275,9 +275,10 @@ Если КодВозврата <> 0 Тогда ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); - Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD:%1%2", - Символы.ПС, - ТекстОшибки); + ТекстОшибки = СтрШаблон("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD:%1%2", + Символы.ПС, + ТекстОшибки); + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецПроцедуры // ВыгрузитьКонфигурациюВФайлыIBCMD() @@ -335,28 +336,28 @@ КодВозврата = КомандаIBCMD.Исполнить(); - Если КодВозврата <> 0 Тогда - ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); - Лог.КритичнаяОшибка("Не удалось получить информацию об изменениях конфигурации:%1%2", - Символы.ПС, - ТекстОшибки); - КонецЕсли; - - ФайлПроверки = Новый Файл(ПутьКФайлуПроверки); - - Если ФайлПроверки.Существует() Тогда - СтрокаПолныйДамп = "modified: all"; - ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлуПроверки); - СтрокаПроверки = Лев(ЧтениеФайла.ПрочитатьСтроку(), СтрДлина(СтрокаПолныйДамп)); - - Если Не ПустаяСтрока(СокрЛП(СтрокаПроверки)) Тогда - - Лог.Отладка("Строка проверки на возможность выгрузки конфигурации: <%1> = <%2> ", СтрокаПолныйДамп, СтрокаПроверки); - Результат = НЕ (ВРег(СтрокаПроверки) = ВРег(СтрокаПолныйДамп)); + Если КодВозврата = 0 Тогда + ФайлПроверки = Новый Файл(ПутьКФайлуПроверки); + Если ФайлПроверки.Существует() Тогда + СтрокаПолныйДамп = "modified: all"; + ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлуПроверки); + СтрокаПроверки = Лев(ЧтениеФайла.ПрочитатьСтроку(), СтрДлина(СтрокаПолныйДамп)); + + Если Не ПустаяСтрока(СокрЛП(СтрокаПроверки)) Тогда + + Лог.Отладка("Строка проверки на возможность выгрузки конфигурации: <%1> = <%2> ", СтрокаПолныйДамп, СтрокаПроверки); + Результат = НЕ (ВРег(СтрокаПроверки) = ВРег(СтрокаПолныйДамп)); + + КонецЕсли; + ЧтениеФайла.Закрыть(); + УдалитьФайлы(ПутьКФайлуПроверки); КонецЕсли; - ЧтениеФайла.Закрыть(); - УдалитьФайлы(ПутьКФайлуПроверки); + Иначе + ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); + Лог.Ошибка("Не удалось получить информацию об изменениях конфигурации:%1%2", + Символы.ПС, + ТекстОшибки); КонецЕсли; Лог.Отладка("Инкрементальная выгрузка конфигурации - %1", ?(Результат, "ВОЗМОЖНА", "НЕВОЗМОЖНА")); From 6028ba79265a8e7a134eb0a215578c836da911ff Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:11:02 +0300 Subject: [PATCH 07/69] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=20`use-ibcmd`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 6395009..002c053 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -28,7 +28,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "1.6.0"; + Возврат "1.6.1"; КонецФункции // Возвращает приоритет выполнения плагина From 94c9c04377237731705625aa299d4ffafd619bf5 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:11:41 +0300 Subject: [PATCH 08/69] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index 76ede8a..e634ac5 100644 --- a/packagedef +++ b/packagedef @@ -35,7 +35,7 @@ КонецПроцедуры Описание.Имя("gitsync-plugins") - .Версия("1.6.0") + .Версия("1.6.1") .Автор("Khorev A.A. and SilverBulleters") .АдресАвтора("khorevaa@gmail.com,help@silverbulleters.org") .Описание("Набор предустановленных плагинов для gitsync") From 3dbafa7fb10ac0ebc265ed0e4591e0f52fe86c60 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 11:15:32 +0300 Subject: [PATCH 09/69] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B6=D0=BA=D0=B0=20`edtcli`=20=D0=B4=D0=BB=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D0=B9=20EDT=202024=20=D0=B8=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D1=88=D0=B5.=20refactor:=20=D0=98=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=BA=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=BE=D0=B5=20=D0=B8=D0=BC=D1=8F=20=D0=BE=D0=BF=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20'--project-name'=20`P`=20->=20`PN`=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D1=81=20=D0=B4=D1=80=D1=83?= =?UTF-8?q?=D0=B3=D0=B8=D0=BC=D0=B8=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8;=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BA=D1=80=D0=B0=D1=82=D0=BA=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=BC=D1=8F=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B8=20'--base-p?= =?UTF-8?q?roject-name'=20`B`=20->=20`BP`=20=D0=B4=D0=BB=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20=D1=81=20=D0=B4=D1=80=D1=83=D0=B3=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?;=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=D0=B0=20`edt-export`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../edtExport.os" | 300 +++++++++++++++--- 1 file changed, 263 insertions(+), 37 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index a11aaef..1d85625 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -1,6 +1,7 @@ #Использовать logos #Использовать tempfiles #Использовать fs +#Использовать semver Перем ВерсияПлагина; Перем Лог; @@ -100,27 +101,25 @@ Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); - КлассРеализации.Опция("P project-name", "", "[*edtExport] Имя проекта") - .ТСтрока() - .ВОкружении("GITSYNC_PROJECT_NAME"); + КлассРеализации.Опция("PN project-name", "", "[*edtExport] Имя проекта") + .ТСтрока() + .ВОкружении("GITSYNC_PROJECT_NAME"); КлассРеализации.Опция("W workspace-location", "", "[*edtExport] расположение рабочей области") - .ТСтрока() - .ВОкружении("GITSYNC_WORKSPACE_LOCATION"); - - КлассРеализации.Опция( - "B base-project-name", - "", - "[*edtExport] имя базового проекта в рабочей области (для расширений))") - .ТСтрока() - .ВОкружении("GITSYNC_BASE_PROJECT_NAME"); - - КлассРеализации.Опция( - "M module", - "", - "[*edtExport] имя установленного модуля edt") - .ТСтрока() - .ВОкружении("GITSYNC_MODULE"); + .ТСтрока() + .ВОкружении("GITSYNC_WORKSPACE_LOCATION"); + + КлассРеализации.Опция("BP base-project-name", + "", + "[*edtExport] имя базового проекта в рабочей области (для расширений))") + .ТСтрока() + .ВОкружении("GITSYNC_BASE_PROJECT_NAME"); + + КлассРеализации.Опция("M module", + "", + "[*edtExport] имя установленного модуля edt") + .ТСтрока() + .ВОкружении("GITSYNC_MODULE"); КонецПроцедуры @@ -185,24 +184,8 @@ Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта); ФС.ОбеспечитьПустойКаталог(КаталогПроекта); - Команда = Новый Команда; - - Параметры = Новый Массив(); - Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); - Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", ВременноеРабочееПространство)); - Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); - - Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда - Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); - КонецЕсли; + Команда = КомандаКонвертации(КаталогВыгрузки, ВременноеРабочееПространство, КаталогПроекта); - Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring %1 workspace import", ИмяМодуля)); - Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); - Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport"); - Команда.ДобавитьПараметры(Параметры); - Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина); - Команда.ПоказыватьВыводНемедленно(Ложь); - Команда.УстановитьПравильныйКодВозврата(0); КодВозврата = Команда.Исполнить(); Лог.Отладка("Код возврата EDT: %1", КодВозврата); @@ -228,6 +211,249 @@ #Область Вспомогательные_процедуры_и_функции +// Функция - получает команду запуска утилиты ring для выполнения конвертации +// +// Возвращаемое значение: +// Команда - команда запуска утилиты ring для выполнения конвертации +// +Функция КомандаКонвертации(КаталогВыгрузки, РабочееПространство, КаталогПроекта) + + ВерсияEDT = ВерсияEDT(); + + Если Лев(ВерсияEDT(), 4) >= "2024" Тогда + Команда = КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта); + Иначе + Команда = КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта); + КонецЕсли; + + Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); + Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport"); + Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина); + Команда.ПоказыватьВыводНемедленно(Ложь); + Команда.УстановитьПравильныйКодВозврата(0); + + Возврат Команда; + +КонецФункции // КомандаКонвертации() + +// Функция - получает команду запуска утилиты ring для выполнения конвертации +// +// Возвращаемое значение: +// Команда - команда запуска утилиты ring для выполнения конвертации +// +Функция КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта) + + Команда = Новый Команда; + + Параметры = Новый Массив(); + Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); + Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", РабочееПространство)); + Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); + + Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда + Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); + КонецЕсли; + + ИсполняемыйФайл = НайтиRing(); + + Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 %2 workspace import", ИсполняемыйФайл, ИмяМодуля)); + Команда.ДобавитьПараметры(Параметры); + + Возврат Команда; + +КонецФункции // КомандаRing() + +// Функция - получает команду запуска утилиты edtcli для выполнения конвертации +// +// Возвращаемое значение: +// Команда - команда запуска утилиты edtcli для выполнения конвертации +// +Функция КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта) + + Команда = Новый Команда; + + Параметры = Новый Массив(); + Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); + Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); + // Параметры.Добавить(СтрШаблон("--version ""%1""", Параметры.ВерсияПлатформы)); + + Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда + Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); + КонецЕсли; + + ИсполняемыйФайл = НайтиEdtcli(); + + Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 -data ""%2"" -command import", + ИсполняемыйФайл, + РабочееПространство)); + Команда.ДобавитьПараметры(Параметры); + + Возврат Команда; + +КонецФункции // КомандаEdtcli() + +// Функция - выполняет поиск утилиты ring и возвращает полный путь к утилите +// +// Возвращаемое значение: +// Строка - полный путь к утилите ring +// +Функция НайтиRing() Экспорт + + РасположениеRing = НайтиКоманду("ring"); + + Если ЗначениеЗаполнено(РасположениеRing) Тогда + Возврат РасположениеRing; + КонецЕсли; + + Если ЭтоWindows() Тогда + КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); + Расширение = ".cmd"; + Иначе + КаталогПрограмм = "/opt"; + Расширение = ""; + КонецЕсли; + ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components"); + Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("ring%1", Расширение), Истина); + + Если Файлы.Количество() > 0 Тогда + Возврат Файлы[0].ПолноеИмя; + КонецЕсли; + + Возврат ""; + +КонецФункции // НайтиRing() + +// Функция - выполняет поиск утилиты edtcli и возвращает полный путь к утилите +// +// Возвращаемое значение: +// Строка - полный путь к утилите edtcli +// +Функция НайтиEdtcli() Экспорт + + РасположениеEdtcli = НайтиКоманду("1cedtcli"); + + Если ЗначениеЗаполнено(РасположениеEdtcli) Тогда + Возврат РасположениеEdtcli; + КонецЕсли; + + Если ЭтоWindows() Тогда + КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); + Расширение = ".exe"; + Иначе + КаталогПрограмм = "/opt"; + Расширение = ""; + КонецЕсли; + ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components"); + Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("1cedtcli%1", Расширение), Истина); + + Если Файлы.Количество() > 0 Тогда + Возврат Файлы[0].ПолноеИмя; + КонецЕсли; + + Возврат ""; + +КонецФункции // НайтиEdtcli() + +// Функция - выполняет поиск указанной команды в текущем каталоге или переменной окружения PATH +// +// Параметры: +// ИмяКоманды - Строка - имя команды для поиска +// +// Возвращаемое значение: +// Строка - полный путь к команде +// +Функция НайтиКоманду(Знач ИмяКоманды) + + ЭтоWindows = ЭтоWindows(); + + Команда = Новый Команда(); + Если ЭтоWindows Тогда + Команда.УстановитьКоманду("where"); + Иначе + Команда.УстановитьКоманду("which"); + КонецЕсли; + Команда.ДобавитьПараметр(ИмяКоманды); + + Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); + Команда.ПоказыватьВыводНемедленно(Ложь); + + КодВозврата = Команда.Исполнить(); + + ВыводКоманды = СокрЛП(Команда.ПолучитьВывод()); + + Если КодВозврата = 0 Тогда + Лог.Отладка("Найдена команда ""%1"": %2", ИмяКоманды, ВыводКоманды); + Иначе + Лог.Предупреждение("Команда ""%1"" не найдена в текущем каталоге или в переменной окружения PATH:%2%3", + ИмяКоманды, + Символы.ПС, + ВыводКоманды); + Возврат ""; + КонецЕсли; + + Если ФС.ФайлСуществует(ВыводКоманды) Тогда + Возврат ВыводКоманды; + КонецЕсли; + + Возврат ""; + +КонецФункции // НайтиКоманду() + +// Функция - проверяет, что скрипт выполняется в среде Windows +// +// Возвращаемое значение: +// Булево - Истина - скрипт выполняется в среде Windows +// +Функция ЭтоWindows() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + +КонецФункции // ЭтоWindows() + +// Функция - выполняет поиск утилиты ring и возвращает полный номер последней версии EDT +// +// Возвращаемое значение: +// Строка - полный номер последней версии EDT +// +Функция ВерсияEDT() Экспорт + + РасположениеEdtcli = НайтиEdtcli(); + + ФайлEdtcli = Новый Файл(РасположениеEdtcli); + КаталогEdtcli = Новый Файл(ФайлEdtcli.Путь); + КаталогEdtcli = Новый Файл(КаталогEdtcli.Путь); + + Файлы = НайтиФайлы(КаталогEdtcli.Путь, "1cedt.ini", Истина); + РВ = Новый РегулярноеВыражение("1c-edt-(\d+\.\d+\.\d+)\+"); + + НомераВерсий = Новый Массив(); + + Для Каждого ТекФайл Из Файлы Цикл + КаталогВерсии = Новый Файл(ТекФайл.Путь); + + Совпадения = РВ.НайтиСовпадения(КаталогВерсии.Имя); + + Если Совпадения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + НомераВерсий.Добавить(Совпадения[0].Группы[1].Значение); + Лог.Отладка("Найдена версия EDT ""%1"" в каталоге ""%2"".", Совпадения[0].Группы[1].Значение, ТекФайл.Путь); + КонецЦикла; + + Версии.СортироватьВерсии(НомераВерсий, "УБЫВ"); + + Если НомераВерсий.Количество() = 0 Тогда + Лог.Предупреждение("Не найдена версия EDT"); + КонецЕсли; + + Лог.Отладка("Найдена версия EDT ""%1"".", НомераВерсий[0]); + + Возврат НомераВерсий[0]; + +КонецФункции // ВерсияEDT() + Процедура ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки) ПутьКФайлуДополнительнойВыгрузки = ВременныеФайлы.НовоеИмяФайла(); @@ -390,7 +616,7 @@ Процедура Инициализация() - ВерсияПлагина = "1.3.0"; + ВерсияПлагина = "1.4.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); From 0650a618643339e375a91fb1aaf4f53221ec7731 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 11:16:35 +0300 Subject: [PATCH 10/69] =?UTF-8?q?refactor:=20=D0=98=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=BA=D1=80=D0=B0=D1=82=D0=BA=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=B8=D0=BC=D1=8F=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?'--push'=20P=20->=20PS=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=81=20=D0=B4=D1=80=D1=83=D0=B3=D0=B8=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syncRemote.os" | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index 5d4941c..05076ad 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -103,14 +103,13 @@ Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); - //КлассРеализации.Опция("b branch", "master", "<имя ветки git>").ВОкружении("GITSYNC_BRANCH"); - КлассРеализации.Опция("P push", Ложь, "[*sync-remote] Флаг отправки изменений на удаленный репозиторий") + КлассРеализации.Опция("PS push", Ложь, "[*sync-remote] Флаг отправки изменений на удаленный репозиторий") .Флаг() .ВОкружении("GITSYNC_REMOTE_PUSH"); КлассРеализации.Опция("G pull", Ложь, "[*sync-remote] Флаг получения изменений из удаленный репозитория перед синхронизацией") .Флаг() .ВОкружении("GITSYNC_REMOTE_PULL"); - КлассРеализации.Опция("B branch", Ложь, "[*sync-remote] Имя ветки") + КлассРеализации.Опция("b branch", "master", "[*sync-remote] Имя ветки") .ТСтрока() .ВОкружении("GITSYNC_REMOTE_BRANCH"); КлассРеализации.Опция("T push-tags", Ложь, "[*sync-remote] Флаг отправки тегов по версиям") From 208ba0f6ce0ae05000a772f8379e99ef9ab914b7 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 11:26:51 +0300 Subject: [PATCH 11/69] =?UTF-8?q?ci:=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=82=D1=80=D0=B5=D0=B1=D1=83=D0=B5=D0=BC?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20oscript.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- .github/workflows/testing.yml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 69c9a04..883533f 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.8.3'] + oscript_version: ['1.9.2'] steps: # Загрузка проекта diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 24dd142..bb91b3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.8.3'] + oscript_version: ['1.9.2'] package_mask: ["gitsync-plugins-*.ospx"] steps: diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 89799b4..8a90d98 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.8.3'] + oscript_version: ['1.9.2'] steps: # Загрузка проекта From 36e69002282155aa9b8ff8c2c287c7ea8ecec1e7 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 10:59:12 +0300 Subject: [PATCH 12/69] fix tests --- .github/scripts/add-1cedtcli-ring-to-path.bat | 35 +++++ .github/scripts/add-1cedtcli-ring-to-path.sh | 26 ++++ .github/workflows/testing.yml | 140 +++++++++++++++--- .gitignore | 5 +- CONTRIBUTING.md | 28 +++- bin/v8unpack/v8unpack.exe | Bin 65536 -> 0 bytes bin/v8unpack/zlib1.dll | Bin 59904 -> 0 bytes features/check-authors.feature | 8 +- features/check-comments.feature | 6 +- features/edtExport.feature | 17 ++- features/increment.feature | 10 +- features/limit.feature | 14 +- features/smart-tags.feature | 10 +- features/step_definitions/edtExport.os | 22 ++- features/step_definitions/limit.os | 2 +- features/step_definitions/shared.os | 48 +++--- features/sync-remote.feature | 16 +- features/tool1CD.feature | 8 +- features/unpackForm.feature | 26 ++-- packagedef | 56 +++---- .../edtExport.os" | 5 +- ...20\260\320\244\320\276\321\200\320\274.os" | 7 +- tasks/install-gitsync.os | 23 ++- tasks/make.os | 11 +- tasks/test.os | 5 +- tasks/testing-build.os | 64 ++------ 26 files changed, 371 insertions(+), 221 deletions(-) create mode 100644 .github/scripts/add-1cedtcli-ring-to-path.bat create mode 100755 .github/scripts/add-1cedtcli-ring-to-path.sh delete mode 100644 bin/v8unpack/v8unpack.exe delete mode 100644 bin/v8unpack/zlib1.dll diff --git a/.github/scripts/add-1cedtcli-ring-to-path.bat b/.github/scripts/add-1cedtcli-ring-to-path.bat new file mode 100644 index 0000000..56123ed --- /dev/null +++ b/.github/scripts/add-1cedtcli-ring-to-path.bat @@ -0,0 +1,35 @@ +@echo off +setlocal enabledelayedexpansion + +:: Search for the 1c-enterprise-ring directory +set "ring_dir=" +for /f "delims=" %%d in ('dir /b /ad /o-d "%ProgramFiles%\1C\1CE\components\1c-enterprise-ring-*-x86_64" 2^>nul') do ( + if not defined ring_dir set "ring_dir=%ProgramFiles%\1C\1CE\components\%%d" +) + +if not defined ring_dir ( + echo ::error::Could not find ring directory in %ProgramFiles%\1C\1CE\components\ +) else ( + echo %ring_dir%>> "%GITHUB_PATH%" +) + +:: Search for the 1cedtcli directory (optional) +set "edtcli_dir=" +for /f "delims=" %%d in ('dir /b /ad /o-d "%ProgramFiles%\1C\1CE\components\1c-edt-*-x86_64" 2^>nul') do ( + if exist "%ProgramFiles%\1C\1CE\components\%%d\1cedtcli.exe" ( + if not defined edtcli_dir set "edtcli_dir=%ProgramFiles%\1C\1CE\components\%%d" + ) +) + +:: Add edtcli_dir to path if found +if not defined edtcli_dir ( + echo ::error::Could not find 1cedtcli directory in %ProgramFiles%\1C\1CE\components\ +) else ( + echo %edtcli_dir%>> "%GITHUB_PATH%" +) + +echo ::group::Successfully added to PATH +echo %ring_dir% +if defined edtcli_dir echo %edtcli_dir% +echo ::endgroup:: +exit /b 0 \ No newline at end of file diff --git a/.github/scripts/add-1cedtcli-ring-to-path.sh b/.github/scripts/add-1cedtcli-ring-to-path.sh new file mode 100755 index 0000000..b88f4c7 --- /dev/null +++ b/.github/scripts/add-1cedtcli-ring-to-path.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Find and symlink 1c-enterprise-ring (required) +ring_path=$(find /opt/1C/1CE/components -name ring -type f -print -quit 2>/dev/null) +if [ -z "$ring_path" ]; then + echo "::error::Could not find ring executable in /opt/1C/1CE" >&2 + exit 1 +fi +sudo ln -sfn "$(dirname "$ring_path")" /opt/1C/1CE/components/1c-enterprise-ring + +# Find and symlink 1cedtcli (optional) +edtcli_path=$(find /opt/1C/1CE/components -name 1cedtcli -type f -print -quit 2>/dev/null) +if [ -n "$edtcli_path" ]; then + sudo ln -sfn "$(dirname "$edtcli_path")" /opt/1C/1CE/components/1cedtcli +fi + +# Update PATH (only add directories that exist) +PATH="/opt/1C/1CE/components/1c-enterprise-ring:$PATH" +if [ -d "/opt/1C/1CE/components/1cedtcli" ]; then + PATH="/opt/1C/1CE/components/1cedtcli:$PATH" +fi + +echo "::group::Successfully added to PATH" +echo "/opt/1C/1CE/components/1c-enterprise-ring" +[ -d "/opt/1C/1CE/components/1cedtcli" ] && echo "/opt/1C/1CE/components/1cedtcli" +echo "::endgroup::" \ No newline at end of file diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 89799b4..c22898a 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -7,24 +7,31 @@ name: Тестирование on: [push, pull_request] jobs: - build: + test: runs-on: ${{ matrix.os }} strategy: - fail-fast: false matrix: - os: [ubuntu-latest] - oscript_version: ['1.8.3'] - + oscript_version: ['1.9.2'] + v8_version: ['8.3.21.1624', '8.3.24.1691'] + edt_version: ['2023.3.6'] + os: [windows-latest, ubuntu-22.04] + locale: ['ru_RU'] + fail-fast: false steps: - # Загрузка проекта + - name: Set Russian locale + if: matrix.os == startsWith(matrix.os, 'windows') + run: | + powershell -Command "Set-WinUILanguageOverride -Language ru-RU" + powershell -Command "Set-WinUserLanguageList ru-RU -Force" + powershell -Command "Set-Culture ru-RU" + powershell -Command "Set-WinSystemLocale ru-RU" + - name: Актуализация - uses: actions/checkout@v2 + uses: actions/checkout@v4.2.2 # Установка OneScript конкретной версии - name: Установка OneScript - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true - uses: otymko/setup-onescript@v1.0 + uses: otymko/setup-onescript@v1.5 with: version: ${{ matrix.oscript_version }} @@ -33,16 +40,105 @@ jobs: run: | opm install opm opm install --dev - opm install 1testrunner - opm install 1bdd - opm install notify - opm install coverage - - # Задача тестирования, в результате ожидается успешное выполнение - - name: Тестирование Unit - run: oscript ./tasks/test.os true + opm install gitsync - # - name: Тестирование Integrated - # run: | - # docker run -e OSCRIPT_VERSION=${{ matrix.oscript_version }} -v $(pwd):/work_dir harmit/ci-image sh -c 'cd /work_dir; sh /work_dir/travis-ci.sh; exit' - # grep 'Результат прогона тестов <Да>' /tmp/test.log \ No newline at end of file + - name: Подготовка окружения (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y locales libwebkit2gtk-4.0-37 + sudo localedef -i ${{ matrix.locale }} -c -f UTF-8 -A /usr/share/locale/locale.alias ${{ matrix.locale }}.UTF-8 + + - name: Установка libenchant1c2a (Linux) + if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.v8_version, '8.3.21') + run: | + sudo echo "deb http://cz.archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list + sudo apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libenchant1c2a + + - name: Установка wine (требуется для Tool1CD) + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo dpkg --add-architecture i386 + sudo apt update + sudo apt install wine -y + + - name: Установка платформы 1С + uses: ovcharenko-di/onec-setup-action@bump-actions-cache + with: + type: onec # Тип устанавливаемого приложения + onec_version: ${{ matrix.v8_version }} + cache: true + cache_distr: true + env: + ONEC_USERNAME: ${{ secrets.ONEC_USERNAME }} + ONEC_PASSWORD: ${{ secrets.ONEC_PASSWORD }} + + - name: Установка Java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '11' + + - name: Установка EDT + uses: ovcharenko-di/onec-setup-action@bump-actions-cache + with: + type: edt # Тип устанавливаемого приложения + edt_version: ${{ matrix.edt_version }} + cache: true + cache_distr: true + env: + ONEC_USERNAME: ${{ secrets.ONEC_USERNAME }} + ONEC_PASSWORD: ${{ secrets.ONEC_PASSWORD }} + + - name: Настройка EDT (Windows) + if: startsWith(matrix.os, 'windows') + run: .github/scripts/add-1cedtcli-ring-to-path.bat + + - name: Настройка EDT (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: .github/scripts/add-1cedtcli-ring-to-path.sh + + - name: Установка лицензии (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: | + # Создание каталога + sudo mkdir -p /var/1C/licenses + + # Запись лицензии в файл + echo "${{ secrets.ONEC_LICENCE }}" | sudo tee /var/1C/licenses/licence.lic > /dev/null + + # Назначение прав + sudo chmod 777 -R /var/1C/licenses + shell: bash + env: + ONEC_LICENCE: ${{ secrets.ONEC_LICENCE }} + + - name: Установка лицензии (Windows) + if: startsWith(matrix.os, 'windows') + run: | + mkdir "C:\ProgramData\1C\licenses" -Force + echo $Env:ONEC_LICENCE | Out-File -FilePath "C:\ProgramData\1C\licenses\licence.lic" -Encoding ascii + shell: pwsh + env: + ONEC_LICENCE: ${{ secrets.ONEC_LICENCE }} + + - name: Установка gitsync (локально) + run: opm run install-gitsync + + - name: Тестирование + uses: coactions/setup-xvfb@v1 + env: + EDT_VERSION: ${{ matrix.edt_version }} + GITSYNC_V8VERSION: ${{ matrix.v8_version }} + with: + run: oscript ./tasks/test.os + + - name: Publish Test Report + if: always() + uses: mikepenz/action-junit-report@v5 + with: + report_paths: '**/build/reports/*.xml' + fail_on_failure: true + comment: true + check_name: 'Результаты тестов. ОС: ${{ matrix.os }}. Версия 1С: ${{ matrix.v8_version }}. Версия OneScript: ${{ steps.extract_oscript_version.outputs.version }}' \ No newline at end of file diff --git a/.gitignore b/.gitignore index ef10eb3..e99e07a 100644 --- a/.gitignore +++ b/.gitignore @@ -4,11 +4,10 @@ build/* bin/gitsync/* bin/gitsync.exe -bin/gitsync.bat +bin/build_gitsync.bat tests/*.xml -exec/*.log - +exec.log bdd-log*.xml .enabled-plugins diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index c826eaf..84a56c1 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,14 +2,26 @@ Доработка проводится по git-flow. Жду ваших PR. -## Первоначальная настройка +## Требования к окружению -- Необходимо предварительно выполнить команду - - `opm run install-gitsync` - - он устанавливает версию gitsync в каталог bin -- После необходимо собрать и установить плагины из исходников - - `opm run testing-build` +- Установленная Платформа 1С +- Установленная EDT + +## Запуск тестов + +- Установить значение переменной GITSYNC_V8VERSION, например: + - `set GITSYNC_V8VERSION=8.3.21` # Windows + - `export GITSYNC_V8VERSION=8.3.21` # Linux -А вот потом можно запускать тесты ) + По умолчанию версию платформы выберет библиотека v8find -- через команду `opm test` +- Установить значение переменной EDT_VERSION, например: + - `set EDT_VERSION=2023.3.6` # Windows + - `export EDT_VERSION=2023.3.6` # Linux + + По умолчанию используется версия 2022.2.5 + +- Необходимо предварительно выполнить команду, которая устанавливает gitsync в каталог bin + - `opm run install-gitsync` +- После чего можно запускать тесты + - `opm test` diff --git a/bin/v8unpack/v8unpack.exe b/bin/v8unpack/v8unpack.exe deleted file mode 100644 index af7ade9a3160fc4eb278a388477c5fe6edd6b27f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65536 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 edRg(78 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 diff --git a/bin/v8unpack/zlib1.dll b/bin/v8unpack/zlib1.dll deleted file mode 100644 index 1cf8a476e5a1c6df7632d973b02bb5199f7c4698..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59904 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�h 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 diff --git a/features/check-authors.feature b/features/check-authors.feature index 65c85c6..5c06516 100644 --- a/features/check-authors.feature +++ b/features/check-authors.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст check-authors Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,18 +15,18 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "check-authors" Сценарий: Cинхронизация c простым использованием - Допустим Я создаю неполный тестовой файл AUTHORS + Допустим Я создаю неполный тестовый файл AUTHORS И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" diff --git a/features/check-comments.feature b/features/check-comments.feature index 38a0762..86dfda9 100644 --- a/features/check-comments.feature +++ b/features/check-comments.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст check-comments Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,12 +15,12 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "check-comments" diff --git a/features/edtExport.feature b/features/edtExport.feature index 50bb491..1c63f98 100644 --- a/features/edtExport.feature +++ b/features/edtExport.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст edtExport Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -16,22 +16,23 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" - И Я добавляю параметр "-P test" для команды "gitsync" + И Я добавляю параметр "--project-name test" для команды "gitsync" + И Я вычисляю имя модуля edt по версии из переменной окружения "EDT_VERSION" в переменную "ИмяМодуляEDT" + И Я добавляю параметр "--module" для команды "gitsync" из переменной "ИмяМодуляEDT" И Я выключаю все плагины И Я включаю плагин "edtExport" - И Я включаю плагин "edtExport" Сценарий: Cинхронизация с использованием edtExport Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -42,7 +43,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -55,6 +56,6 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 diff --git a/features/increment.feature b/features/increment.feature index c3503ba..76cbb2f 100644 --- a/features/increment.feature +++ b/features/increment.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст increment Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,11 +15,11 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "increment" @@ -28,7 +28,7 @@ Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Тип выгрузки конфигурации в файлы:" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -39,7 +39,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Тип выгрузки конфигурации в файлы:" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 \ No newline at end of file diff --git a/features/limit.feature b/features/limit.feature index 1f79f83..8ae2709 100644 --- a/features/limit.feature +++ b/features/limit.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст limit Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,12 +15,12 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "limit" @@ -30,7 +30,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Количество коммитов должно быть "1" @@ -40,7 +40,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Количество коммитов должно быть "2" @@ -50,7 +50,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Количество коммитов должно быть "6" @@ -62,7 +62,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Количество коммитов должно быть "3" \ No newline at end of file diff --git a/features/smart-tags.feature b/features/smart-tags.feature index 26dea88..cbc6756 100644 --- a/features/smart-tags.feature +++ b/features/smart-tags.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст check-authors Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,12 +15,12 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "smart-tags" @@ -29,7 +29,7 @@ Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Тег "1.0" должен присутствовать в репозитории @@ -39,7 +39,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Тег "1.0" должен присутствовать в репозитории \ No newline at end of file diff --git a/features/step_definitions/edtExport.os b/features/step_definitions/edtExport.os index 7c0464d..6ca3ae6 100644 --- a/features/step_definitions/edtExport.os +++ b/features/step_definitions/edtExport.os @@ -1,6 +1,11 @@ -#Использовать fs +// BSLLS:LatinAndCyrillicSymbolInWord-off +// BSLLS:MissingReturnedValueDescription-off +// BSLLS:MissingParameterDescription-off + // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +#Использовать fs + Перем БДД; //контекст фреймворка 1bdd // Метод выдает список шагов, реализованных в данном файле-шагов @@ -10,6 +15,7 @@ ВсеШаги = Новый Массив; ВсеШаги.Добавить("ЯСкопировалКаталогРабочегоОкруженияEDTВКаталогИзПеременной"); + ВсеШаги.Добавить("ЯВычисляюИмяМодуляEdtПоВерсииИзПеременнойОкруженияВПеременную"); Возврат ВсеШаги; КонецФункции @@ -34,6 +40,20 @@ ФС.КопироватьСодержимоеКаталога(ПутьКРабочемуОкружениюEDT(), РабочееОкружениеEDT); КонецПроцедуры +//я вычисляю имя модуля edt по версии из переменной окружения "EDT_VERSION" в переменную "ИмяМодуляEDT" +Процедура ЯВычисляюИмяМодуляEdtПоВерсииИзПеременнойОкруженияВПеременную(Знач ИмяПеременнойОкружения, Знач ИмяПеременной) Экспорт + + ВерсияEDT = ПолучитьПеременнуюСреды(ИмяПеременнойОкружения); + + Если Не ЗначениеЗаполнено(ВерсияEDT) Тогда + ВерсияEDT = "2022.2.5"; // значение по умолчанию + КонецЕсли; + + ИмяМодуля = СтрШаблон("edt@%1:x86_64", ВерсияEDT); + БДД.СохранитьВКонтекст(ИмяПеременной, ИмяМодуля); + +КонецПроцедуры + Функция ПутьКРабочемуОкружениюEDT() Возврат ОбъединитьПути(КаталогFixtures(), "edtWorkspace"); diff --git a/features/step_definitions/limit.os b/features/step_definitions/limit.os index 9424aec..01472b3 100644 --- a/features/step_definitions/limit.os +++ b/features/step_definitions/limit.os @@ -40,7 +40,7 @@ ГитРепозиторий.ВыполнитьКоманду(ПараметрыКоманды); Вывод = ГитРепозиторий.ПолучитьВыводКоманды(); - МассивСтрок = СтрРазделить(Вывод, Символы.ПС); + МассивСтрок = СтрРазделить(Вывод, Символы.ПС, Ложь); КоличествоКоммитов = МассивСтрок.Количество(); diff --git a/features/step_definitions/shared.os b/features/step_definitions/shared.os index eb7a2ac..81545b6 100644 --- a/features/step_definitions/shared.os +++ b/features/step_definitions/shared.os @@ -1,4 +1,9 @@ -// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd +// BSLLS:UnusedParameters-off +// BSLLS:LatinAndCyrillicSymbolInWord-off +// BSLLS:MissingParameterDescription-off +// BSLLS:MissingReturnedValueDescription-off + +// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd #Использовать gitrunner #Использовать asserts #Использовать tempfiles @@ -15,22 +20,22 @@ ВсеШаги.Добавить("ЯУстанавливаюПутьВыполненияКомандыКТекущейБиблиотеке"); ВсеШаги.Добавить("ЯСкопировалКаталогТестовогоХранилищаКонфигурацииВоВременныйКаталог"); ВсеШаги.Добавить("ЯСохраняюЗначениеВременногоКаталогаВПеременной"); - ВсеШаги.Добавить("ЯСоздаюТестовойФайлAuthors"); + ВсеШаги.Добавить("ЯСоздаюТестовыйФайлAuthors"); ВсеШаги.Добавить("ЯЗаписываюВФайлVersion"); ВсеШаги.Добавить("ЯИнициализируюBareРепозиторийВоВременномКаталоге"); ВсеШаги.Добавить("ЯИнициализируюСвязьСВнешнимРепозиторием"); ВсеШаги.Добавить("ЯДобавляюПозиционныйПараметрДляКомандыИзПеременной"); ВсеШаги.Добавить("ЯДобавляюПараметрДляКомандыИзПеременной"); ВсеШаги.Добавить("ЯДобавляюПараметрыДляКоманды"); - ВсеШаги.Добавить("ЯСоздаюНеполныйТестовойФайлAuthors"); + ВсеШаги.Добавить("ЯСоздаюНеполныйТестовыйФайлAuthors"); ВсеШаги.Добавить("ЯСоздаюНовыйОбъектГитрепозиторий"); - ВсеШаги.Добавить("ЯУстанавливаюРабочейКаталогВоВременныйКаталог"); + ВсеШаги.Добавить("ЯУстанавливаюРабочийКаталогВоВременныйКаталог"); ВсеШаги.Добавить("ЯВключаюПлагин"); ВсеШаги.Добавить("ЯИнициализируюРепозиторийВКаталогеИзПеременной"); ВсеШаги.Добавить("ЯВыключаюВсеПлагины"); ВсеШаги.Добавить("ЯНаполняюBareРепозиторийИзПеременнойТестовымиДанными"); ВсеШаги.Добавить("ЯУстанавливаюПеременнуюОкруженияИзПеременной"); - ВсеШаги.Добавить("ЯУстанавливаюРабочейКаталогИзПеременной"); + ВсеШаги.Добавить("ЯУстанавливаюРабочийКаталогИзПеременной"); ВсеШаги.Добавить("ВКаталогеИзПеременнойСоздаетсяФайлИлиКаталог"); ВсеШаги.Добавить("ВКаталогеИзПеременнойНеСоздаетсяФайлИлиКаталог"); ВсеШаги.Добавить("ЯОчищаюЗначениеПеременныхОкружения"); @@ -82,8 +87,8 @@ КонецПроцедуры -//Я устанавливаю рабочей каталог из переменной "ПутьКаталогаИсходников" -Процедура ЯУстанавливаюРабочейКаталогИзПеременной(Знач ПутьКаталогаИсходников) Экспорт +//Я устанавливаю рабочий каталог из переменной "ПутьКаталогаИсходников" +Процедура ЯУстанавливаюРабочийКаталогИзПеременной(Знач ПутьКаталогаИсходников) Экспорт ВременныйКаталог = БДД.ПолучитьИзКонтекста(ПутьКаталогаИсходников); УстановитьТекущийКаталог(ОбъединитьПути(ТекущийКаталог(), ВременныйКаталог)); @@ -97,7 +102,6 @@ УстановитьДвижок(Команда); Команда.ДобавитьПараметр(ОбернутьВКавычки(ПутьКГитсинк())); Команда.ДобавитьПараметр("p d -a"); - //Команда.ДобавитьПараметр(ПарамСтрока1); КодВозврата = Команда.Исполнить(); Если Не КодВозврата = 0 Тогда @@ -126,6 +130,8 @@ ГитРепозиторий.УстановитьРабочийКаталог(ВременныйКаталог); ГитРепозиторий.Инициализировать(); + ГитРепозиторий.УстановитьНастройку("user.name", "John Doe", РежимУстановкиНастроекGit.Локально); + ГитРепозиторий.УстановитьНастройку("user.email", "jd@example.com", РежимУстановкиНастроекGit.Локально); КонецПроцедуры @@ -170,8 +176,8 @@ ВременныеФайлы.Удалить(); КонецПроцедуры -//Я устанавливаю рабочей каталог во временный каталог -Процедура ЯУстанавливаюРабочейКаталогВоВременныйКаталог() Экспорт +//Я устанавливаю рабочий каталог во временный каталог +Процедура ЯУстанавливаюРабочийКаталогВоВременныйКаталог() Экспорт УстановитьТекущийКаталог(ВременныеФайлы.СоздатьКаталог()); КонецПроцедуры @@ -212,8 +218,8 @@ КонецПроцедуры -//Я создаю тестовой файл AUTHORS -Процедура ЯСоздаюТестовойФайлAuthors() Экспорт +//Я создаю тестовый файл AUTHORS +Процедура ЯСоздаюТестовыйФайлAuthors() Экспорт ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); ФайлАвторов = Новый ЗаписьТекста; @@ -286,7 +292,7 @@ Процедура ЯДобавляюПараметрДляКомандыИзПеременной(Знач Параметр, Знач ИмяКоманды, Знач ИмяПеременной) Экспорт Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); ЗначениеПеременной = БДД.ПолучитьИзКонтекста(ИмяПеременной); - Команда.ДобавитьПараметр(СтрШаблон("%1 %2", Параметр, ЗначениеПеременной)) + Команда.ДобавитьПараметр(СтрШаблон("%1 %2", Параметр, ЗначениеПеременной)); КонецПроцедуры //Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке @@ -303,21 +309,17 @@ Процедура ЯСкопировалКаталогТестовогоХранилищаКонфигурацииВоВременныйКаталог() Экспорт ВременныйКаталог = БДД.ПолучитьИзКонтекста("ВременныйКаталог"); - КопироватьФайл(ПутьКВременномуФайлуХранилища1С(), ОбъединитьПути(ВременныйКаталог, "1cv8ddb.1CD")) + КопироватьФайл(ПутьКВременномуФайлуХранилища1С(), ОбъединитьПути(ВременныйКаталог, "1cv8ddb.1CD")); КонецПроцедуры // И Я устанавливаю текущие плагины Процедура ЯУстанавливаюТекущиеПлагины() Экспорт - КаталогПлагинов = ВременныеФайлы.СоздатьКаталог(); - - УстановитьПеременнуюСреды("GITSYNC_PLUGINS_PATH", КаталогПлагинов); - КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(КаталогГитсинк()); КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("run testing-build"); + КомандаOpm.ДобавитьПараметр("run install-plugins"); КодВозврата = КомандаOpm.Исполнить(); @@ -327,8 +329,8 @@ КонецПроцедуры -//Я создаю неполный тестовой файл AUTHORS -Процедура ЯСоздаюНеполныйТестовойФайлAuthors() Экспорт +//Я создаю неполный тестовый файл AUTHORS +Процедура ЯСоздаюНеполныйТестовыйФайлAuthors() Экспорт ПутьКаталогаИсходников = БДД.ПолучитьИзКонтекста("ПутьКаталогаИсходников"); ФайлАвторов = Новый ЗаписьТекста; @@ -345,8 +347,8 @@ Команда = БДД.ПолучитьИзКонтекста(КлючКоманды(ИмяКоманды)); Для Каждого Параметр из ТаблицаПараметров Цикл - Команда.ДобавитьПараметр(Параметр[0]) - КонецЦикла + Команда.ДобавитьПараметр(Параметр[0]); + КонецЦикла; КонецПроцедуры diff --git a/features/sync-remote.feature b/features/sync-remote.feature index db066e9..2c842cf 100644 --- a/features/sync-remote.feature +++ b/features/sync-remote.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,7 +15,7 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" @@ -24,7 +24,7 @@ И Я сохраняю значение временного каталога в переменной "URLРепозитория" И я инициализирую связь "ПутьКаталогаИсходников" с внешним репозиторием "URLРепозитория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "sync-remote" @@ -35,7 +35,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -45,7 +45,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -56,7 +56,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -67,7 +67,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 @@ -77,6 +77,6 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 diff --git a/features/tool1CD.feature b/features/tool1CD.feature index d3bf3c5..467f01d 100644 --- a/features/tool1CD.feature +++ b/features/tool1CD.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,12 +15,12 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "tool1CD" @@ -29,7 +29,7 @@ Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Использую tool1CD для работы с хранилищем" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 diff --git a/features/unpackForm.feature b/features/unpackForm.feature index e4a2ed3..a5251d2 100644 --- a/features/unpackForm.feature +++ b/features/unpackForm.feature @@ -7,7 +7,7 @@ Контекст: Тестовый контекст unpackForm Когда Я очищаю параметры команды "gitsync" в контексте - И Я устанавливаю рабочей каталог во временный каталог + И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке И Я устанавливаю текущие плагины @@ -15,41 +15,41 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовой файл AUTHORS + И Я создаю тестовый файл AUTHORS И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" - И Я добавляю параметр "-v" для команды "gitsync" + # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я выключаю все плагины И Я включаю плагин "unpackForm" -Сценарий: Распаковка форм +Сценарий: Распаковка форм без переименования Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" - И Вывод команды "gitsync" не содержит "Внешнее исключение" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + # И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Каталог из переменной "ПутьКаталогаИсходников" содержит файл "Catalogs/Справочник1/Forms/ФормаСписка/Ext/Form/module" -Сценарий: Переименование модулей module в module.bsl +Сценарий: Распаковка форм с Переименованием модулей module в Module.bsl Допустим Я добавляю параметр "-R" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" - И Вывод команды "gitsync" не содержит "Внешнее исключение" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + # И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 - И Каталог из переменной "ПутьКаталогаИсходников" содержит файл "Catalogs/Справочник1/Forms/ФормаСписка/Ext/Form/module.bsl" + И Каталог из переменной "ПутьКаталогаИсходников" содержит файл "Catalogs/Справочник1/Forms/ФормаСписка/Ext/Form/Module.bsl" -Сценарий: Переименование модулей form в form.txt +Сценарий: Распаковка форм с переименованием модулей form в form.txt Допустим Я добавляю параметр "-F" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Завершена синхронизации с git" - И Вывод команды "gitsync" не содержит "Внешнее исключение" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + # И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Каталог из переменной "ПутьКаталогаИсходников" содержит файл "Catalogs/Справочник1/Forms/ФормаСписка/Ext/Form/form.txt" diff --git a/packagedef b/packagedef index 76ede8a..2b06493 100644 --- a/packagedef +++ b/packagedef @@ -3,35 +3,35 @@ // Полную документацию см. на hub.oscript.io/packaging // Процедура ПередСборкой(Знач РабочийКаталог) Экспорт - - ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(РабочийКаталог, "oscript_modules")); - + + ФС.ОбеспечитьПустойКаталог(ОбъединитьПути(РабочийКаталог, "oscript_modules")); + Сообщить("Запаковка бинарных данных библиотек"); - КомандаOpm = Новый Команда; - - КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("run packdata "); - КомандаOpm.ДобавитьЛогВыводаКоманды("task.build"); - + КомандаOpm = Новый Команда; + + КомандаOpm.УстановитьКоманду("opm"); + КомандаOpm.ДобавитьПараметр("run pack"); + КомандаOpm.ДобавитьЛогВыводаКоманды("task.build"); + КодВозврата = КомандаOpm.Исполнить(); - - Если КодВозврата <> 0 Тогда + + Если КодВозврата <> 0 Тогда ВызватьИсключение КомандаOpm.ПолучитьВывод(); КонецЕсли; - - Сообщить("Установка локальных зависимостей библиотек"); - КомандаOpm = Новый Команда; - - КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("install -l"); - КомандаOpm.ДобавитьЛогВыводаКоманды("task.build"); - - КодВозврата = КомандаOpm.Исполнить(); - - Если КодВозврата <> 0 Тогда + + Сообщить("Установка локальных зависимостей библиотек"); + КомандаOpm = Новый Команда; + + КомандаOpm.УстановитьКоманду("opm"); + КомандаOpm.ДобавитьПараметр("install -l"); + КомандаOpm.ДобавитьЛогВыводаКоманды("task.build"); + + КодВозврата = КомандаOpm.Исполнить(); + + Если КодВозврата <> 0 Тогда ВызватьИсключение КомандаOpm.ПолучитьВывод(); - КонецЕсли; - + КонецЕсли; + КонецПроцедуры Описание.Имя("gitsync-plugins") @@ -39,11 +39,15 @@ .Автор("Khorev A.A. and SilverBulleters") .АдресАвтора("khorevaa@gmail.com,help@silverbulleters.org") .Описание("Набор предустановленных плагинов для gitsync") - .ВерсияСреды("1.7.0") + .ВерсияСреды("1.9.2") .ВключитьФайл("src") .ВключитьФайл("docs") .ВключитьФайл("oscript_modules") .ЗависитОт("strings", "0.4.1") + .РазработкаЗависитОт("1testrunner", "1.9.2") + .РазработкаЗависитОт("1bdd", "1.15.1") + .РазработкаЗависитОт("notify", "0.2.0") + .РазработкаЗависитОт("coverage", "0.7.0") .ОпределяетКласс("Плагин_ИнкрементальнаяВыгрузка", "src/Классы/increment.os") .ОпределяетКласс("Плагин_УстановкиЛимитов", "src/Классы/limit.os") .ОпределяетКласс("Плагин_ПроверкиАвторов", "src/Классы/checkAuthors.os") @@ -59,4 +63,4 @@ .ОпределяетКласс("Плагин_DropConfigDump", "src/Классы/dropConfigDump.os") .ОпределяетКласс("Плагин_DropSupport", "src/Классы/dropSupport.os") .ОпределяетКласс("Плагин_RoboCopy", "src/Классы/roboCopy.os") - ; + ; \ No newline at end of file diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index a11aaef..e7a3103 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -197,11 +197,8 @@ КонецЕсли; Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring %1 workspace import", ИмяМодуля)); - Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); - Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport"); + Команда.ДобавитьЛогВыводаКоманды(ИмяЛога()); Команда.ДобавитьПараметры(Параметры); - Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина); - Команда.ПоказыватьВыводНемедленно(Ложь); Команда.УстановитьПравильныйКодВозврата(0); КодВозврата = Команда.Исполнить(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/v8unpack/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\320\272\320\260\320\244\320\276\321\200\320\274.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/v8unpack/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\320\272\320\260\320\244\320\276\321\200\320\274.os" index 2651d5e..fbc0ba4 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/v8unpack/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\320\272\320\260\320\244\320\276\321\200\320\274.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/internal/v8unpack/\320\232\320\273\320\260\321\201\321\201\321\213/\320\240\320\260\321\201\320\277\320\260\320\272\320\276\320\262\320\272\320\260\320\244\320\276\321\200\320\274.os" @@ -1,3 +1,5 @@ +// BSLLS:LatinAndCyrillicSymbolInWord-off + #Использовать "../../bindata" #Использовать logos @@ -28,7 +30,7 @@ Лог = Логирование.ПолучитьЛог("oscript.lib.gitsync.plugins.unpackForm"); КомпонентаГотова = Ложь; - ЭтоСборкаEXE = ВРег(Прав(ТекущийСценарий().Источник, 3)) = "EXE"; + ЭтоСборкаEXE = ВРег(Прав(ТекущийСценарий().Источник, 3)) = "EXE"; // BSLLS:MagicNumber-off СистемнаяИнформация = Новый СистемнаяИнформация; ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; @@ -62,7 +64,6 @@ КомандаUnpack.ДобавитьПараметр("-P"); КомандаUnpack.ДобавитьПараметр(ФайлРаспаковки); КомандаUnpack.ДобавитьПараметр(КаталогРаспаковки); - // КомандаUnpack.ПоказыватьВыводНемедленно(Истина); КодВозврата = КомандаUnpack.Исполнить(); @@ -87,7 +88,7 @@ Иначе ПутьКФайлу = ЗагрузчикДвоичныхДанных.ПолучитьПутьКФайлу("v8unpack.dll"); - //Лог.Отладка("Выполняю подключение из файла <%1>", ПутьКФайлу); + Лог.Отладка("Выполняю подключение из файла <%1>", ПутьКФайлу); ПодключитьВнешнююКомпоненту(ПутьКФайлу); КонецЕсли; diff --git a/tasks/install-gitsync.os b/tasks/install-gitsync.os index 2f1c21d..5525ddc 100644 --- a/tasks/install-gitsync.os +++ b/tasks/install-gitsync.os @@ -36,20 +36,19 @@ КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(Каталог); КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("install"); - КомандаOpm.ДобавитьПараметр("-l"); + КомандаOpm.ДобавитьПараметр("install"); + КомандаOpm.ДобавитьПараметр("-l"); КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); КодВозврата = КомандаOpm.Исполнить(); - КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(Каталог); КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("build"); - КомандаOpm.ДобавитьПараметр("--mf"); - КомандаOpm.ДобавитьПараметр(ПутьКМанифестуСборки); - КомандаOpm.ДобавитьПараметр(Каталог); + КомандаOpm.ДобавитьПараметр("build"); + КомандаOpm.ДобавитьПараметр("--mf"); + КомандаOpm.ДобавитьПараметр(ПутьКМанифестуСборки); + КомандаOpm.ДобавитьПараметр(Каталог); КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); КодВозврата = КомандаOpm.Исполнить(); @@ -81,11 +80,11 @@ КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(КаталогПроектаGitsync); КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("install"); - КомандаOpm.ДобавитьПараметр("-f"); + КомандаOpm.ДобавитьПараметр("install"); + КомандаOpm.ДобавитьПараметр("-f"); КомандаOpm.ДобавитьПараметр(ФайлПлагина); - КомандаOpm.ДобавитьПараметр("--dest"); - КомандаOpm.ДобавитьПараметр(КаталогПроектаGitsync); + КомандаOpm.ДобавитьПараметр("--dest"); + КомандаOpm.ДобавитьПараметр(КаталогПроектаGitsync); КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); КодВозврата = КомандаOpm.Исполнить(); @@ -114,5 +113,3 @@ Лог = Логирование.ПолучитьЛог("task.install-opm"); ПолезнаяРабота(); - - diff --git a/tasks/make.os b/tasks/make.os index de2ccd3..9dfefbb 100644 --- a/tasks/make.os +++ b/tasks/make.os @@ -4,7 +4,6 @@ Перем Лог; Перем КаталогПроекта; - Процедура ВыполнитьСборкуEXE(КаталогУстановки) Лог.Информация("Выполнение создания exe в <%1>", КаталогУстановки); @@ -85,7 +84,6 @@ КонецПроцедуры - Процедура ОбработатьСтруктуруКаталоговПоСоглашению(Путь, МассивПлагинов) КаталогиКлассов = Новый Массив; @@ -100,7 +98,6 @@ КонецЦикла; - КонецПроцедуры Процедура ОбработатьКаталогКлассов(Знач Путь, МассивПлагинов) @@ -112,8 +109,7 @@ Для Каждого Файл Из Файлы Цикл Сообщить(СтрШаблон(" класс (по соглашению) %1, файл %2", Файл.ИмяБезРасширения, Файл.ПолноеИмя)); СтандартнаяОбработка = Ложь; - // ДобавитьКласс(Файл.ПолноеИмя, Файл.ИмяБезРасширения); - + МассивПлагинов.Добавить(Файл.ИмяБезРасширения); КонецЦикла; @@ -126,21 +122,16 @@ КаталогСборки = ВременныеФайлы.СоздатьКаталог(); КаталогУстановки = ОбъединитьПути(КаталогПроекта, "bin"); - ПодготовитьПлагины(КаталогУстановки, КаталогПроекта); - ВыполнитьСборкуEXE(КаталогУстановки); ВременныеФайлы.УдалитьФайл(КаталогСборки); - //ВременныеФайлы.УдалитьФайл(КаталогУстановки); КонецПроцедуры - ФайлКаталогПроекта = Новый Файл(ОбъединитьПути(ТекущийСценарий().Каталог, "..")); КаталогПроекта = ФайлКаталогПроекта.ПолноеИмя; Лог = Логирование.ПолучитьЛог("task.install-opm"); -// Лог.УстановитьУровень(УровниЛОга.отладка); ПолезнаяРабота(); diff --git a/tasks/test.os b/tasks/test.os index 2200b09..3c3725e 100644 --- a/tasks/test.os +++ b/tasks/test.os @@ -27,7 +27,10 @@ Функция ПрогнатьФичи() - ПутьОтчетаJUnit = "./bdd-log.xml"; + ПутьКОтчетам = ОбъединитьПути("build", "reports"); + СоздатьКаталог(ПутьКОтчетам); + + ПутьОтчетаJUnit = ОбъединитьПути(ПутьКОтчетам, "bdd-log.xml"); КаталогФич = ОбъединитьПути(".", "features"); diff --git a/tasks/testing-build.os b/tasks/testing-build.os index 646b3d1..d497ccd 100644 --- a/tasks/testing-build.os +++ b/tasks/testing-build.os @@ -4,29 +4,19 @@ Перем Лог; -Процедура ПолучитьИсходники(Знач URLРепозитория, Знач Ветка, Знач Каталог) - - ГитРепозиторий = Новый ГитРепозиторий; - - ГитРепозиторий.УстановитьРабочийКаталог(Каталог); - - ГитРепозиторий.КлонироватьРепозиторий(URLРепозитория, Каталог); - ГитРепозиторий.ПерейтиВВетку(Ветка); - -КонецПроцедуры - -Процедура УстановитьПакет(Знач Каталог, ПутьКМанифестуСборки) +Процедура СобратьУстановитьТекущиеПлагины(Знач Каталог, ПутьКМанифестуСборки) + Лог.Информация("Сборка пакета gitsync-plugins"); + Лог.Информация("Каталог сборки <%1>", Каталог); - Лог.Информация("Сборка пакета библиотеки"); КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(Каталог); КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("build"); - КомандаOpm.ДобавитьПараметр("--mf"); - КомандаOpm.ДобавитьПараметр(ПутьКМанифестуСборки); - КомандаOpm.ДобавитьПараметр(Каталог); + КомандаOpm.ДобавитьПараметр("build"); + КомандаOpm.ДобавитьПараметр("--mf"); + КомандаOpm.ДобавитьПараметр(ПутьКМанифестуСборки); + КомандаOpm.ДобавитьПараметр(Каталог); КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); КодВозврата = КомандаOpm.Исполнить(); @@ -35,42 +25,30 @@ ВызватьИсключение КомандаOpm.ПолучитьВывод(); КонецЕсли; - МассивФайлов = НайтиФайлы(Каталог, "*.ospx"); + МассивФайлов = НайтиФайлы(Каталог, "gitsync-plugins*.ospx"); Если МассивФайлов.Количество() = 0 Тогда - ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета gitsync", "Не найден собранный файл пакета gitsync"); + ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета gitsync-plugins", "Не найден собранный файл пакета gitsync-plugins"); КонецЕсли; ФайлПлагина = МассивФайлов[0].ПолноеИмя; ИсполнительGitSync = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "bin/gitsync/src/cmd/gitsync.os"); - // ФС.ОбеспечитьКаталог(КаталогПроектаGitsync); - - // Лог.Информация("Установка в каталог проекта <%1>", КаталогПроектаGitsync); - - Лог.Информация("Установка пакета из файла <%1>", ФайлПлагина); + Лог.Информация("Установка плагинов из файла <%1>", ФайлПлагина); КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(Каталог); КомандаOpm.УстановитьКоманду("oscript"); - КомандаOpm.ДобавитьПараметр("-encoding=utf-8"); - КомандаOpm.ДобавитьПараметр(ИсполнительGitSync); - КомандаOpm.ДобавитьПараметр("p c -a"); - - КомандаOpm = Новый Команда; - КомандаOpm.УстановитьРабочийКаталог(Каталог); - КомандаOpm.УстановитьКоманду("oscript"); - КомандаOpm.ДобавитьПараметр("-encoding=utf-8"); КомандаOpm.ДобавитьПараметр(ИсполнительGitSync); КомандаOpm.ДобавитьПараметр("p i"); - КомандаOpm.ДобавитьПараметр("-f"); - КомандаOpm.ДобавитьПараметр(ФайлПлагина); + КомандаOpm.ДобавитьПараметр("-f"); + КомандаOpm.ДобавитьПараметр(ФайлПлагина); КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); КодВозврата = КомандаOpm.Исполнить(); - Если КодВозврата <> 0 Тогда + Если КодВозврата <> 0 Тогда ВызватьИсключение СтрШаблон("Ошибка установки плагинов из <%1> по причине <%2>", ФайлПлагина, КомандаOpm.ПолучитьВывод()); КонецЕсли; @@ -78,19 +56,7 @@ КонецПроцедуры -Процедура ПолезнаяРабота() - - ПутьКМанифестуСборки = "packagedef"; - - // ПолучитьИсходники(URLРепозитория, Ветка, КаталогСборки); - УстановитьПакет(ОбъединитьПути(ТекущийСценарий().Каталог, ".."), ПутьКМанифестуСборки); - - // ВременныеФайлы.УдалитьФайл(КаталогСборки); - -КонецПроцедуры - Лог = Логирование.ПолучитьЛог("task.install-opm"); +ПутьКМанифестуСборки = "packagedef"; -ПолезнаяРабота(); - - +СобратьУстановитьТекущиеПлагины(ОбъединитьПути(ТекущийСценарий().Каталог, ".."), ПутьКМанифестуСборки); From e32e84481beafc067275482e4b635363edb9f17c Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 11:55:10 +0300 Subject: [PATCH 13/69] fix gitsync install path --- .gitignore | 3 ++- CONTRIBUTING.md | 2 +- features/step_definitions/shared.os | 2 +- tasks/install-gitsync.os | 24 +++++++++++++----------- tasks/testing-build.os | 2 +- 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/.gitignore b/.gitignore index e99e07a..fff908e 100644 --- a/.gitignore +++ b/.gitignore @@ -2,8 +2,9 @@ build/* -bin/gitsync/* +bin_gitsync/* bin/gitsync.exe +bin/gitsync bin/build_gitsync.bat tests/*.xml diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 84a56c1..e84100e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ По умолчанию используется версия 2022.2.5 -- Необходимо предварительно выполнить команду, которая устанавливает gitsync в каталог bin +- Необходимо предварительно выполнить команду, которая устанавливает gitsync в каталог bin_gitsync - `opm run install-gitsync` - После чего можно запускать тесты - `opm test` diff --git a/features/step_definitions/shared.os b/features/step_definitions/shared.os index 81545b6..62cef15 100644 --- a/features/step_definitions/shared.os +++ b/features/step_definitions/shared.os @@ -393,7 +393,7 @@ Функция ПутьКГитсинк() - Возврат ОбъединитьПути(КаталогГитсинк(), "bin", "gitsync/src/cmd/gitsync.os"); + Возврат ОбъединитьПути(КаталогГитсинк(), "bin_gitsync", "gitsync/src/cmd/gitsync.os"); КонецФункции diff --git a/tasks/install-gitsync.os b/tasks/install-gitsync.os index 5525ddc..5796bf2 100644 --- a/tasks/install-gitsync.os +++ b/tasks/install-gitsync.os @@ -57,7 +57,7 @@ ВызватьИсключение КомандаOpm.ПолучитьВывод(); КонецЕсли; - МассивФайлов = НайтиФайлы(Каталог, "*.ospx"); + МассивФайлов = НайтиФайлы(Каталог, "gitsync*.ospx"); Если МассивФайлов.Количество() = 0 Тогда ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета gitsync", "Не найден собранный файл пакета gitsync"); @@ -65,26 +65,28 @@ ФайлПлагина = МассивФайлов[0].ПолноеИмя; - КаталогПроектаGitsync = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "bin"); - - УстановитьПеременнуюСреды("OSCRIPTBIN", КаталогПроектаGitsync); - - ФС.ОбеспечитьКаталог(КаталогПроектаGitsync); + КореньПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); + + // устанавливать gitsync из файла с параметром --dest + // необходимо в каталог, отличный от ./bin, потому что + // на Linux имя каталога установки ./bin/gitsync + // и имя исполняемого файла ./bin/gitsync совпадут + КаталогУстановкиGitsync = ОбъединитьПути(КореньПроекта, "bin_gitsync"); - Лог.Информация("Установка в каталог проекта <%1>", КаталогПроектаGitsync); + ФС.ОбеспечитьКаталог(КаталогУстановкиGitsync); + + Лог.Информация("Установка в каталог проекта <%1>", КаталогУстановкиGitsync); Лог.Информация("Установка пакета из файла <%1>", ФайлПлагина); - УстановитьПеременнуюСреды("OSCRIPTBIN", КаталогПроектаGitsync); - КомандаOpm = Новый Команда; - КомандаOpm.УстановитьРабочийКаталог(КаталогПроектаGitsync); + КомандаOpm.УстановитьРабочийКаталог(КореньПроекта); КомандаOpm.УстановитьКоманду("opm"); КомандаOpm.ДобавитьПараметр("install"); КомандаOpm.ДобавитьПараметр("-f"); КомандаOpm.ДобавитьПараметр(ФайлПлагина); КомандаOpm.ДобавитьПараметр("--dest"); - КомандаOpm.ДобавитьПараметр(КаталогПроектаGitsync); + КомандаOpm.ДобавитьПараметр(КаталогУстановкиGitsync); КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); КодВозврата = КомандаOpm.Исполнить(); diff --git a/tasks/testing-build.os b/tasks/testing-build.os index d497ccd..c8bb4c9 100644 --- a/tasks/testing-build.os +++ b/tasks/testing-build.os @@ -33,7 +33,7 @@ ФайлПлагина = МассивФайлов[0].ПолноеИмя; - ИсполнительGitSync = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "bin/gitsync/src/cmd/gitsync.os"); + ИсполнительGitSync = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "bin_gitsync/gitsync/src/cmd/gitsync.os"); Лог.Информация("Установка плагинов из файла <%1>", ФайлПлагина); From 9bcd05b927f613435447f6f11cd7c499366c8ced Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 12:22:20 +0300 Subject: [PATCH 14/69] fixes --- .github/workflows/qa.yml | 2 +- .github/workflows/testing.yml | 2 +- features/check-authors.feature | 2 +- features/step_definitions/edtExport.os | 4 ++-- features/step_definitions/increment.os | 10 ++++++---- features/step_definitions/shared.os | 8 ++++---- tasks/{testing-build.os => install-plugins.os} | 0 7 files changed, 15 insertions(+), 13 deletions(-) rename tasks/{testing-build.os => install-plugins.os} (100%) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 69c9a04..086a877 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -7,7 +7,7 @@ name: Контроль качества on: [push, pull_request] jobs: build: - if: github.repository == 'khorevaa/gitsync-plugins' + if: github.repository == 'oscript-library/gitsync-plugins' runs-on: ${{ matrix.os }} strategy: fail-fast: false diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index c22898a..433a48c 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -141,4 +141,4 @@ jobs: report_paths: '**/build/reports/*.xml' fail_on_failure: true comment: true - check_name: 'Результаты тестов. ОС: ${{ matrix.os }}. Версия 1С: ${{ matrix.v8_version }}. Версия OneScript: ${{ steps.extract_oscript_version.outputs.version }}' \ No newline at end of file + check_name: 'Результаты тестов. ОС: ${{ matrix.os }}. Версия 1С: ${{ matrix.v8_version }}. Версия OneScript: ${{ matrix.oscript_version }}' \ No newline at end of file diff --git a/features/check-authors.feature b/features/check-authors.feature index 5c06516..1e9e4e2 100644 --- a/features/check-authors.feature +++ b/features/check-authors.feature @@ -25,7 +25,7 @@ И Я выключаю все плагины И Я включаю плагин "check-authors" -Сценарий: Cинхронизация c простым использованием +Сценарий: Cинхронизация с простым использованием Допустим Я создаю неполный тестовый файл AUTHORS И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" diff --git a/features/step_definitions/edtExport.os b/features/step_definitions/edtExport.os index 6ca3ae6..efc795a 100644 --- a/features/step_definitions/edtExport.os +++ b/features/step_definitions/edtExport.os @@ -61,9 +61,9 @@ КонецФункции Функция КаталогFixtures() - Возврат ОбъединитьПути(КаталогГитсинк(), "tests", "fixtures"); + Возврат ОбъединитьПути(КореньПроекта(), "tests", "fixtures"); КонецФункции -Функция КаталогГитсинк() +Функция КореньПроекта() Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", ".."); КонецФункции diff --git a/features/step_definitions/increment.os b/features/step_definitions/increment.os index 8c193e4..4d36449 100644 --- a/features/step_definitions/increment.os +++ b/features/step_definitions/increment.os @@ -1,4 +1,7 @@ -#Использовать fs +// BSLLS:MissingParameterDescription-off +// BSLLS:MissingReturnedValueDescription-off + +#Использовать fs // Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd Перем БДД; //контекст фреймворка 1bdd @@ -32,7 +35,6 @@ КаталогХранилища1С = БДД.ПолучитьИзКонтекста(ИмяПеременной); ФС.ОбеспечитьПустойКаталог(КаталогХранилища1С); ФС.КопироватьСодержимоеКаталога(ПутьКВременномуФайлуХранилища1С(), КаталогХранилища1С); - // КопироватьФайл(ПутьКВременномуФайлуХранилища1С(), ОбъединитьПути(КаталогХранилища1С, "1cv8ddb.1CD")); КонецПроцедуры Функция ПутьКВременномуФайлуХранилища1С() @@ -42,9 +44,9 @@ КонецФункции Функция КаталогFixtures() - Возврат ОбъединитьПути(КаталогГитсинк(), "tests", "fixtures"); + Возврат ОбъединитьПути(КореньПроекта(), "tests", "fixtures"); КонецФункции -Функция КаталогГитсинк() +Функция КореньПроекта() Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", ".."); КонецФункции diff --git a/features/step_definitions/shared.os b/features/step_definitions/shared.os index 62cef15..75fca7a 100644 --- a/features/step_definitions/shared.os +++ b/features/step_definitions/shared.os @@ -317,7 +317,7 @@ Процедура ЯУстанавливаюТекущиеПлагины() Экспорт КомандаOpm = Новый Команда; - КомандаOpm.УстановитьРабочийКаталог(КаталогГитсинк()); + КомандаOpm.УстановитьРабочийКаталог(КореньПроекта()); КомандаOpm.УстановитьКоманду("opm"); КомандаOpm.ДобавитьПараметр("run install-plugins"); @@ -384,16 +384,16 @@ КонецФункции Функция КаталогFixtures() - Возврат ОбъединитьПути(КаталогГитсинк(), "tests", "fixtures"); + Возврат ОбъединитьПути(КореньПроекта(), "tests", "fixtures"); КонецФункции -Функция КаталогГитсинк() +Функция КореньПроекта() Возврат ОбъединитьПути(ТекущийСценарий().Каталог, "..", ".."); КонецФункции Функция ПутьКГитсинк() - Возврат ОбъединитьПути(КаталогГитсинк(), "bin_gitsync", "gitsync/src/cmd/gitsync.os"); + Возврат ОбъединитьПути(КореньПроекта(), "bin_gitsync", "gitsync/src/cmd/gitsync.os"); КонецФункции diff --git a/tasks/testing-build.os b/tasks/install-plugins.os similarity index 100% rename from tasks/testing-build.os rename to tasks/install-plugins.os From 7d3fd4671398d10b2ab5971e4068499d96d7bb7e Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 12:56:45 +0300 Subject: [PATCH 15/69] speed up testing, switch to tmp action branch --- .github/workflows/testing.yml | 15 +++++++++------ CONTRIBUTING.md | 6 ++++-- tasks/install-gitsync.os | 8 ++++---- tasks/install-plugins.os | 30 +++--------------------------- 4 files changed, 20 insertions(+), 39 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 433a48c..4b7661e 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -18,7 +18,7 @@ jobs: locale: ['ru_RU'] fail-fast: false steps: - - name: Set Russian locale + - name: Установка локали if: matrix.os == startsWith(matrix.os, 'windows') run: | powershell -Command "Set-WinUILanguageOverride -Language ru-RU" @@ -40,8 +40,8 @@ jobs: run: | opm install opm opm install --dev - opm install gitsync - + opm install gitsync # TODO: должно быть необязательно + - name: Подготовка окружения (Linux) if: startsWith(matrix.os, 'ubuntu') run: | @@ -64,7 +64,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: ovcharenko-di/onec-setup-action@bump-actions-cache + uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -81,7 +81,7 @@ jobs: java-version: '11' - name: Установка EDT - uses: ovcharenko-di/onec-setup-action@bump-actions-cache + uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg with: type: edt # Тип устанавливаемого приложения edt_version: ${{ matrix.edt_version }} @@ -123,6 +123,9 @@ jobs: env: ONEC_LICENCE: ${{ secrets.ONEC_LICENCE }} + - name: Сборка пакета + run: opm build + - name: Установка gitsync (локально) run: opm run install-gitsync @@ -134,7 +137,7 @@ jobs: with: run: oscript ./tasks/test.os - - name: Publish Test Report + - name: Публикация отчета if: always() uses: mikepenz/action-junit-report@v5 with: diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index e84100e..63a3aca 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,9 @@ По умолчанию используется версия 2022.2.5 -- Необходимо предварительно выполнить команду, которая устанавливает gitsync в каталог bin_gitsync +- Cобрать пакет + - `opm build` +- Выполнить команду, которая устанавливает gitsync в каталог bin_gitsync - `opm run install-gitsync` -- После чего можно запускать тесты +- Запустить тесты - `opm test` diff --git a/tasks/install-gitsync.os b/tasks/install-gitsync.os index 5796bf2..1153014 100644 --- a/tasks/install-gitsync.os +++ b/tasks/install-gitsync.os @@ -63,7 +63,7 @@ ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета gitsync", "Не найден собранный файл пакета gitsync"); КонецЕсли; - ФайлПлагина = МассивФайлов[0].ПолноеИмя; + ФайлПакетаGitsync = МассивФайлов[0].ПолноеИмя; КореньПроекта = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); @@ -77,14 +77,14 @@ Лог.Информация("Установка в каталог проекта <%1>", КаталогУстановкиGitsync); - Лог.Информация("Установка пакета из файла <%1>", ФайлПлагина); + Лог.Информация("Установка пакета из файла <%1>", ФайлПакетаGitsync); КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(КореньПроекта); КомандаOpm.УстановитьКоманду("opm"); КомандаOpm.ДобавитьПараметр("install"); КомандаOpm.ДобавитьПараметр("-f"); - КомандаOpm.ДобавитьПараметр(ФайлПлагина); + КомандаOpm.ДобавитьПараметр(ФайлПакетаGitsync); КомандаOpm.ДобавитьПараметр("--dest"); КомандаOpm.ДобавитьПараметр(КаталогУстановкиGitsync); КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); @@ -92,7 +92,7 @@ КодВозврата = КомандаOpm.Исполнить(); Если КодВозврата <> 0 Тогда - ВызватьИсключение СтрШаблон("Ошибка установки opm из <%1> по причине <%2>", ФайлПлагина, КомандаOpm.ПолучитьВывод()); + ВызватьИсключение СтрШаблон("Ошибка установки opm из <%1> по причине <%2>", ФайлПакетаGitsync, КомандаOpm.ПолучитьВывод()); КонецЕсли; КонецПроцедуры diff --git a/tasks/install-plugins.os b/tasks/install-plugins.os index c8bb4c9..c2e2eae 100644 --- a/tasks/install-plugins.os +++ b/tasks/install-plugins.os @@ -1,34 +1,13 @@ #Использовать gitrunner -#Использовать tempfiles -#Использовать fs Перем Лог; -Процедура СобратьУстановитьТекущиеПлагины(Знач Каталог, ПутьКМанифестуСборки) +Процедура УстановитьТекущиеПлагины(Знач Каталог) - Лог.Информация("Сборка пакета gitsync-plugins"); - - Лог.Информация("Каталог сборки <%1>", Каталог); - - КомандаOpm = Новый Команда; - КомандаOpm.УстановитьРабочийКаталог(Каталог); - КомандаOpm.УстановитьКоманду("opm"); - КомандаOpm.ДобавитьПараметр("build"); - КомандаOpm.ДобавитьПараметр("--mf"); - КомандаOpm.ДобавитьПараметр(ПутьКМанифестуСборки); - КомандаOpm.ДобавитьПараметр(Каталог); - КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); - - КодВозврата = КомандаOpm.Исполнить(); - - Если КодВозврата <> 0 Тогда - ВызватьИсключение КомандаOpm.ПолучитьВывод(); - КонецЕсли; - МассивФайлов = НайтиФайлы(Каталог, "gitsync-plugins*.ospx"); Если МассивФайлов.Количество() = 0 Тогда - ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка создания пакета gitsync-plugins", "Не найден собранный файл пакета gitsync-plugins"); + ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка поиска пакета gitsync-plugins", "Не найден собранный файл пакета gitsync-plugins"); КонецЕсли; ФайлПлагина = МассивФайлов[0].ПолноеИмя; @@ -52,11 +31,8 @@ ВызватьИсключение СтрШаблон("Ошибка установки плагинов из <%1> по причине <%2>", ФайлПлагина, КомандаOpm.ПолучитьВывод()); КонецЕсли; - ВременныеФайлы.УдалитьФайл(ФайлПлагина); - КонецПроцедуры Лог = Логирование.ПолучитьЛог("task.install-opm"); -ПутьКМанифестуСборки = "packagedef"; -СобратьУстановитьТекущиеПлагины(ОбъединитьПути(ТекущийСценарий().Каталог, ".."), ПутьКМанифестуСборки); +УстановитьТекущиеПлагины(ОбъединитьПути(ТекущийСценарий().Каталог, "..")); From babb5ee5209b2b792b90bc8bf65c383bd486d7a1 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:04:07 +0300 Subject: [PATCH 16/69] =?UTF-8?q?fix:=20=D0=94=D0=BB=D1=8F=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=20sync-remote=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D0=B0=D1=80=D0=B0?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D1=80=20branch=20(B)=20=D0=B4=D0=BB=D1=8F=20?= =?UTF-8?q?=D1=83=D0=BA=D0=B0=D0=B7=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=81=D0=B8?= =?UTF-8?q?=D0=BD=D1=85=D1=80=D0=BE=D0=BD=D0=B8=D0=B7=D0=B8=D1=80=D1=83?= =?UTF-8?q?=D0=B5=D0=BC=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=82=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syncRemote.os" | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index ec8d0ca..5d4941c 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -27,7 +27,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "1.6.0"; + Возврат "1.6.1"; КонецФункции // Возвращает приоритет выполнения плагина @@ -110,6 +110,9 @@ КлассРеализации.Опция("G pull", Ложь, "[*sync-remote] Флаг получения изменений из удаленный репозитория перед синхронизацией") .Флаг() .ВОкружении("GITSYNC_REMOTE_PULL"); + КлассРеализации.Опция("B branch", Ложь, "[*sync-remote] Имя ветки") + .ТСтрока() + .ВОкружении("GITSYNC_REMOTE_BRANCH"); КлассРеализации.Опция("T push-tags", Ложь, "[*sync-remote] Флаг отправки тегов по версиям") .Флаг() .ВОкружении("GITSYNC_REMOTE_PUSH_TAGS"); @@ -134,8 +137,9 @@ КоличествоКоммитовДоPush = ПараметрыКоманды.Параметр("push-n-commits", 0); - Лог.Отладка("Установлена отправка изменений <%1> ", ОтправитьИзменения); Лог.Отладка("Установлено получение изменений <%1> ", ПолучитьИзменения); + Лог.Отладка("Установлено имя ветки <%1> ", ИмяВетки); + Лог.Отладка("Установлена отправка изменений <%1> ", ОтправитьИзменения); Лог.Отладка("Установлено количество коммитов <%1>, после которых осуществляется отправка", КоличествоКоммитовДоPush); Лог.Отладка("Установлен флаг отправки меток в значение <%1> выгрузки версий", ОтправлятьТеги); From 82ab887e9136f0385d60df6deb85db68a09f9331 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:10:20 +0300 Subject: [PATCH 17/69] =?UTF-8?q?fix:=20=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8?= =?UTF-8?q?=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8F?= =?UTF-8?q?=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=D0=B0=20=D1=83=D1=82=D0=B8=D0=BB?= =?UTF-8?q?=D0=B8=D1=82=D1=8B=20ibcmd;=20=D0=94=D0=BE=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=BD=D0=B0=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D0=BA=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=B8=20=D0=B8=D0=BD=D0=BA=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=B2?= =?UTF-8?q?=D1=8B=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D1=81=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=D0=BC=20ibcmd=20=D0=BF=D1=80=D0=B8=20=D0=BE=D1=88?= =?UTF-8?q?=D0=B8=D0=B1=D0=BA=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B8=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=BA=D0=BE=D0=BD=D1=84=D0=B8=D0=B3=D1=83=D1=80=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 53 ++++++++++--------- 1 file changed, 27 insertions(+), 26 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index f7cf279..6395009 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -160,7 +160,7 @@ .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_PWD"); - КлассРеализации.Опция("j ibcmd-threads", "", "[*use-ibcmd] Количество потоков используемых при экспорте") + КлассРеализации.Опция("j ibcmd-threads", "", "[*use-ibcmd] Количество потоков используемых при экспорте") .ТЧисло() .ВОкружении("GITSYNC_IBCMD_THREADS"); @@ -211,8 +211,8 @@ ВыгрузитьКонфигурациюВФайлыIBCMD(Конфигуратор, КаталогВыгрузки); Исключение ТекстОшибки = ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()); - Лог.Ошибка("Невозможно выгрузить конфигурацию в файлы. Ошибка:%1%2", Символы.ПС, ТекстОшибки); - ВызватьИсключение; + ТекстОшибки = СтрШаблон("Невозможно выгрузить конфигурацию в файлы. Ошибка:%1%2", Символы.ПС, ТекстОшибки); + ВызватьИсключение ТекстОшибки; КонецПопытки; КонецПроцедуры @@ -275,9 +275,10 @@ Если КодВозврата <> 0 Тогда ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); - Лог.КритичнаяОшибка("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD:%1%2", - Символы.ПС, - ТекстОшибки); + ТекстОшибки = СтрШаблон("Не удалось выгрузить конфигурацию в файлы с использованием IBCMD:%1%2", + Символы.ПС, + ТекстОшибки); + ВызватьИсключение ТекстОшибки; КонецЕсли; КонецПроцедуры // ВыгрузитьКонфигурациюВФайлыIBCMD() @@ -335,28 +336,28 @@ КодВозврата = КомандаIBCMD.Исполнить(); - Если КодВозврата <> 0 Тогда - ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); - Лог.КритичнаяОшибка("Не удалось получить информацию об изменениях конфигурации:%1%2", - Символы.ПС, - ТекстОшибки); - КонецЕсли; - - ФайлПроверки = Новый Файл(ПутьКФайлуПроверки); - - Если ФайлПроверки.Существует() Тогда - СтрокаПолныйДамп = "modified: all"; - ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлуПроверки); - СтрокаПроверки = Лев(ЧтениеФайла.ПрочитатьСтроку(), СтрДлина(СтрокаПолныйДамп)); - - Если Не ПустаяСтрока(СокрЛП(СтрокаПроверки)) Тогда - - Лог.Отладка("Строка проверки на возможность выгрузки конфигурации: <%1> = <%2> ", СтрокаПолныйДамп, СтрокаПроверки); - Результат = НЕ (ВРег(СтрокаПроверки) = ВРег(СтрокаПолныйДамп)); + Если КодВозврата = 0 Тогда + ФайлПроверки = Новый Файл(ПутьКФайлуПроверки); + Если ФайлПроверки.Существует() Тогда + СтрокаПолныйДамп = "modified: all"; + ЧтениеФайла = Новый ЧтениеТекста(ПутьКФайлуПроверки); + СтрокаПроверки = Лев(ЧтениеФайла.ПрочитатьСтроку(), СтрДлина(СтрокаПолныйДамп)); + + Если Не ПустаяСтрока(СокрЛП(СтрокаПроверки)) Тогда + + Лог.Отладка("Строка проверки на возможность выгрузки конфигурации: <%1> = <%2> ", СтрокаПолныйДамп, СтрокаПроверки); + Результат = НЕ (ВРег(СтрокаПроверки) = ВРег(СтрокаПолныйДамп)); + + КонецЕсли; + ЧтениеФайла.Закрыть(); + УдалитьФайлы(ПутьКФайлуПроверки); КонецЕсли; - ЧтениеФайла.Закрыть(); - УдалитьФайлы(ПутьКФайлуПроверки); + Иначе + ТекстОшибки = КомандаIBCMD.ПолучитьВывод(); + Лог.Ошибка("Не удалось получить информацию об изменениях конфигурации:%1%2", + Символы.ПС, + ТекстОшибки); КонецЕсли; Лог.Отладка("Инкрементальная выгрузка конфигурации - %1", ?(Результат, "ВОЗМОЖНА", "НЕВОЗМОЖНА")); From 22dc5043af1677c393e917e1e47744facea60be9 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:11:02 +0300 Subject: [PATCH 18/69] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=20`use-ibcmd`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../useIbcmd.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 6395009..002c053 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -28,7 +28,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "1.6.0"; + Возврат "1.6.1"; КонецФункции // Возвращает приоритет выполнения плагина From e13c2a2e6f78725b42ee6390b4a4e91a1d08ebd8 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 10:11:41 +0300 Subject: [PATCH 19/69] =?UTF-8?q?=D0=92=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index 2b06493..372b7a3 100644 --- a/packagedef +++ b/packagedef @@ -35,7 +35,7 @@ КонецПроцедуры Описание.Имя("gitsync-plugins") - .Версия("1.6.0") + .Версия("1.6.1") .Автор("Khorev A.A. and SilverBulleters") .АдресАвтора("khorevaa@gmail.com,help@silverbulleters.org") .Описание("Набор предустановленных плагинов для gitsync") From a9218be94e819068e0ce250f1f4a5c5a47ef45c2 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 11:15:32 +0300 Subject: [PATCH 20/69] =?UTF-8?q?feat:=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B6=D0=BA=D0=B0=20`edtcli`=20=D0=B4=D0=BB=D1=8F=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D0=B9=20EDT=202024=20=D0=B8=20=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D1=80=D1=88=D0=B5.=20refactor:=20=D0=98=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=BA=D1=80=D0=B0=D1=82?= =?UTF-8?q?=D0=BA=D0=BE=D0=B5=20=D0=B8=D0=BC=D1=8F=20=D0=BE=D0=BF=D1=86?= =?UTF-8?q?=D0=B8=D0=B8=20'--project-name'=20`P`=20->=20`PN`=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D1=81=D0=BE=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8?= =?UTF-8?q?=D0=BC=D0=BE=D1=81=D1=82=D0=B8=20=D1=81=20=D0=B4=D1=80=D1=83?= =?UTF-8?q?=D0=B3=D0=B8=D0=BC=D0=B8=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8;=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BA=D1=80=D0=B0=D1=82=D0=BA=D0=BE=D0=B5=20?= =?UTF-8?q?=D0=B8=D0=BC=D1=8F=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B8=20'--base-p?= =?UTF-8?q?roject-name'=20`B`=20->=20`BP`=20=D0=B4=D0=BB=D1=8F=20=D1=81?= =?UTF-8?q?=D0=BE=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=B8=20=D1=81=20=D0=B4=D1=80=D1=83=D0=B3=D0=B8=D0=BC?= =?UTF-8?q?=D0=B8=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8?= =?UTF-8?q?;=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8?= =?UTF-8?q?=D0=BD=D0=B0=20`edt-export`.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../edtExport.os" | 284 ++++++++++++++++-- 1 file changed, 263 insertions(+), 21 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index e7a3103..068f636 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -1,6 +1,7 @@ #Использовать logos #Использовать tempfiles #Использовать fs +#Использовать semver Перем ВерсияПлагина; Перем Лог; @@ -100,27 +101,25 @@ Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); - КлассРеализации.Опция("P project-name", "", "[*edtExport] Имя проекта") - .ТСтрока() - .ВОкружении("GITSYNC_PROJECT_NAME"); + КлассРеализации.Опция("PN project-name", "", "[*edtExport] Имя проекта") + .ТСтрока() + .ВОкружении("GITSYNC_PROJECT_NAME"); КлассРеализации.Опция("W workspace-location", "", "[*edtExport] расположение рабочей области") - .ТСтрока() - .ВОкружении("GITSYNC_WORKSPACE_LOCATION"); - - КлассРеализации.Опция( - "B base-project-name", - "", - "[*edtExport] имя базового проекта в рабочей области (для расширений))") - .ТСтрока() - .ВОкружении("GITSYNC_BASE_PROJECT_NAME"); - - КлассРеализации.Опция( - "M module", - "", - "[*edtExport] имя установленного модуля edt") - .ТСтрока() - .ВОкружении("GITSYNC_MODULE"); + .ТСтрока() + .ВОкружении("GITSYNC_WORKSPACE_LOCATION"); + + КлассРеализации.Опция("BP base-project-name", + "", + "[*edtExport] имя базового проекта в рабочей области (для расширений))") + .ТСтрока() + .ВОкружении("GITSYNC_BASE_PROJECT_NAME"); + + КлассРеализации.Опция("M module", + "", + "[*edtExport] имя установленного модуля edt") + .ТСтрока() + .ВОкружении("GITSYNC_MODULE"); КонецПроцедуры @@ -185,7 +184,7 @@ Лог.Отладка("Каталог проекта EDT: %1", КаталогПроекта); ФС.ОбеспечитьПустойКаталог(КаталогПроекта); - Команда = Новый Команда; + Команда = КомандаКонвертации(КаталогВыгрузки, ВременноеРабочееПространство, КаталогПроекта); Параметры = Новый Массив(); Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); @@ -225,6 +224,249 @@ #Область Вспомогательные_процедуры_и_функции +// Функция - получает команду запуска утилиты ring для выполнения конвертации +// +// Возвращаемое значение: +// Команда - команда запуска утилиты ring для выполнения конвертации +// +Функция КомандаКонвертации(КаталогВыгрузки, РабочееПространство, КаталогПроекта) + + ВерсияEDT = ВерсияEDT(); + + Если Лев(ВерсияEDT(), 4) >= "2024" Тогда + Команда = КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта); + Иначе + Команда = КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта); + КонецЕсли; + + Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); + Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport"); + Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина); + Команда.ПоказыватьВыводНемедленно(Ложь); + Команда.УстановитьПравильныйКодВозврата(0); + + Возврат Команда; + +КонецФункции // КомандаКонвертации() + +// Функция - получает команду запуска утилиты ring для выполнения конвертации +// +// Возвращаемое значение: +// Команда - команда запуска утилиты ring для выполнения конвертации +// +Функция КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта) + + Команда = Новый Команда; + + Параметры = Новый Массив(); + Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); + Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", РабочееПространство)); + Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); + + Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда + Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); + КонецЕсли; + + ИсполняемыйФайл = НайтиRing(); + + Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 %2 workspace import", ИсполняемыйФайл, ИмяМодуля)); + Команда.ДобавитьПараметры(Параметры); + + Возврат Команда; + +КонецФункции // КомандаRing() + +// Функция - получает команду запуска утилиты edtcli для выполнения конвертации +// +// Возвращаемое значение: +// Команда - команда запуска утилиты edtcli для выполнения конвертации +// +Функция КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта) + + Команда = Новый Команда; + + Параметры = Новый Массив(); + Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); + Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); + // Параметры.Добавить(СтрШаблон("--version ""%1""", Параметры.ВерсияПлатформы)); + + Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда + Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); + КонецЕсли; + + ИсполняемыйФайл = НайтиEdtcli(); + + Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 -data ""%2"" -command import", + ИсполняемыйФайл, + РабочееПространство)); + Команда.ДобавитьПараметры(Параметры); + + Возврат Команда; + +КонецФункции // КомандаEdtcli() + +// Функция - выполняет поиск утилиты ring и возвращает полный путь к утилите +// +// Возвращаемое значение: +// Строка - полный путь к утилите ring +// +Функция НайтиRing() Экспорт + + РасположениеRing = НайтиКоманду("ring"); + + Если ЗначениеЗаполнено(РасположениеRing) Тогда + Возврат РасположениеRing; + КонецЕсли; + + Если ЭтоWindows() Тогда + КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); + Расширение = ".cmd"; + Иначе + КаталогПрограмм = "/opt"; + Расширение = ""; + КонецЕсли; + ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components"); + Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("ring%1", Расширение), Истина); + + Если Файлы.Количество() > 0 Тогда + Возврат Файлы[0].ПолноеИмя; + КонецЕсли; + + Возврат ""; + +КонецФункции // НайтиRing() + +// Функция - выполняет поиск утилиты edtcli и возвращает полный путь к утилите +// +// Возвращаемое значение: +// Строка - полный путь к утилите edtcli +// +Функция НайтиEdtcli() Экспорт + + РасположениеEdtcli = НайтиКоманду("1cedtcli"); + + Если ЗначениеЗаполнено(РасположениеEdtcli) Тогда + Возврат РасположениеEdtcli; + КонецЕсли; + + Если ЭтоWindows() Тогда + КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); + Расширение = ".exe"; + Иначе + КаталогПрограмм = "/opt"; + Расширение = ""; + КонецЕсли; + ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components"); + Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("1cedtcli%1", Расширение), Истина); + + Если Файлы.Количество() > 0 Тогда + Возврат Файлы[0].ПолноеИмя; + КонецЕсли; + + Возврат ""; + +КонецФункции // НайтиEdtcli() + +// Функция - выполняет поиск указанной команды в текущем каталоге или переменной окружения PATH +// +// Параметры: +// ИмяКоманды - Строка - имя команды для поиска +// +// Возвращаемое значение: +// Строка - полный путь к команде +// +Функция НайтиКоманду(Знач ИмяКоманды) + + ЭтоWindows = ЭтоWindows(); + + Команда = Новый Команда(); + Если ЭтоWindows Тогда + Команда.УстановитьКоманду("where"); + Иначе + Команда.УстановитьКоманду("which"); + КонецЕсли; + Команда.ДобавитьПараметр(ИмяКоманды); + + Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); + Команда.ПоказыватьВыводНемедленно(Ложь); + + КодВозврата = Команда.Исполнить(); + + ВыводКоманды = СокрЛП(Команда.ПолучитьВывод()); + + Если КодВозврата = 0 Тогда + Лог.Отладка("Найдена команда ""%1"": %2", ИмяКоманды, ВыводКоманды); + Иначе + Лог.Предупреждение("Команда ""%1"" не найдена в текущем каталоге или в переменной окружения PATH:%2%3", + ИмяКоманды, + Символы.ПС, + ВыводКоманды); + Возврат ""; + КонецЕсли; + + Если ФС.ФайлСуществует(ВыводКоманды) Тогда + Возврат ВыводКоманды; + КонецЕсли; + + Возврат ""; + +КонецФункции // НайтиКоманду() + +// Функция - проверяет, что скрипт выполняется в среде Windows +// +// Возвращаемое значение: +// Булево - Истина - скрипт выполняется в среде Windows +// +Функция ЭтоWindows() Экспорт + + СистемнаяИнформация = Новый СистемнаяИнформация; + Возврат Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; + +КонецФункции // ЭтоWindows() + +// Функция - выполняет поиск утилиты ring и возвращает полный номер последней версии EDT +// +// Возвращаемое значение: +// Строка - полный номер последней версии EDT +// +Функция ВерсияEDT() Экспорт + + РасположениеEdtcli = НайтиEdtcli(); + + ФайлEdtcli = Новый Файл(РасположениеEdtcli); + КаталогEdtcli = Новый Файл(ФайлEdtcli.Путь); + КаталогEdtcli = Новый Файл(КаталогEdtcli.Путь); + + Файлы = НайтиФайлы(КаталогEdtcli.Путь, "1cedt.ini", Истина); + РВ = Новый РегулярноеВыражение("1c-edt-(\d+\.\d+\.\d+)\+"); + + НомераВерсий = Новый Массив(); + + Для Каждого ТекФайл Из Файлы Цикл + КаталогВерсии = Новый Файл(ТекФайл.Путь); + + Совпадения = РВ.НайтиСовпадения(КаталогВерсии.Имя); + + Если Совпадения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + НомераВерсий.Добавить(Совпадения[0].Группы[1].Значение); + Лог.Отладка("Найдена версия EDT ""%1"" в каталоге ""%2"".", Совпадения[0].Группы[1].Значение, ТекФайл.Путь); + КонецЦикла; + + Версии.СортироватьВерсии(НомераВерсий, "УБЫВ"); + + Если НомераВерсий.Количество() = 0 Тогда + Лог.Предупреждение("Не найдена версия EDT"); + КонецЕсли; + + Лог.Отладка("Найдена версия EDT ""%1"".", НомераВерсий[0]); + + Возврат НомераВерсий[0]; + +КонецФункции // ВерсияEDT() + Процедура ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки) ПутьКФайлуДополнительнойВыгрузки = ВременныеФайлы.НовоеИмяФайла(); @@ -387,7 +629,7 @@ Процедура Инициализация() - ВерсияПлагина = "1.3.0"; + ВерсияПлагина = "1.4.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); From fd9e61da0490f47e5332d35de5e48e0708ebae15 Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 11:16:35 +0300 Subject: [PATCH 21/69] =?UTF-8?q?refactor:=20=D0=98=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=BA=D1=80=D0=B0=D1=82=D0=BA=D0=BE?= =?UTF-8?q?=D0=B5=20=D0=B8=D0=BC=D1=8F=20=D0=BE=D0=BF=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?'--push'=20P=20->=20PS=20=D0=B4=D0=BB=D1=8F=20=D1=81=D0=BE?= =?UTF-8?q?=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=B8=D0=BC=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D0=B8=20=D1=81=20=D0=B4=D1=80=D1=83=D0=B3=D0=B8=D0=BC=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BB=D0=B0=D0=B3=D0=B8=D0=BD=D0=B0=D0=BC=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../syncRemote.os" | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index 5d4941c..05076ad 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -103,14 +103,13 @@ Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); - //КлассРеализации.Опция("b branch", "master", "<имя ветки git>").ВОкружении("GITSYNC_BRANCH"); - КлассРеализации.Опция("P push", Ложь, "[*sync-remote] Флаг отправки изменений на удаленный репозиторий") + КлассРеализации.Опция("PS push", Ложь, "[*sync-remote] Флаг отправки изменений на удаленный репозиторий") .Флаг() .ВОкружении("GITSYNC_REMOTE_PUSH"); КлассРеализации.Опция("G pull", Ложь, "[*sync-remote] Флаг получения изменений из удаленный репозитория перед синхронизацией") .Флаг() .ВОкружении("GITSYNC_REMOTE_PULL"); - КлассРеализации.Опция("B branch", Ложь, "[*sync-remote] Имя ветки") + КлассРеализации.Опция("b branch", "master", "[*sync-remote] Имя ветки") .ТСтрока() .ВОкружении("GITSYNC_REMOTE_BRANCH"); КлассРеализации.Опция("T push-tags", Ложь, "[*sync-remote] Флаг отправки тегов по версиям") From 35ffffd980e65296d38cde8ac72611bc538c086b Mon Sep 17 00:00:00 2001 From: Artem Kuznetsov Date: Wed, 18 Dec 2024 11:26:51 +0300 Subject: [PATCH 22/69] =?UTF-8?q?ci:=20=D0=98=D0=B7=D0=BC=D0=B5=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D1=82=D1=80=D0=B5=D0=B1=D1=83=D0=B5=D0=BC?= =?UTF-8?q?=D0=B0=D1=8F=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D1=8F=20oscript.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/qa.yml | 2 +- .github/workflows/release.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 086a877..4c43b11 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -13,7 +13,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.8.3'] + oscript_version: ['1.9.2'] steps: # Загрузка проекта diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 24dd142..bb91b3f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,7 +15,7 @@ jobs: fail-fast: false matrix: os: [ubuntu-latest] - oscript_version: ['1.8.3'] + oscript_version: ['1.9.2'] package_mask: ["gitsync-plugins-*.ospx"] steps: From de8b78fb97a76f78404d07b0ad6cf93ebccb7a4a Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 13:46:12 +0300 Subject: [PATCH 23/69] add quotes --- .../edtExport.os" | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index 068f636..540e658 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -288,7 +288,6 @@ Параметры = Новый Массив(); Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); - // Параметры.Добавить(СтрШаблон("--version ""%1""", Параметры.ВерсияПлатформы)); Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); @@ -296,9 +295,10 @@ ИсполняемыйФайл = НайтиEdtcli(); - Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 -data ""%2"" -command import", - ИсполняемыйФайл, - РабочееПространство)); + СтрокаЗапуска = СтрШаблон("%1 -data ""%2"" -command import", + ОбернутьВКавычки(ИсполняемыйФайл), + РабочееПространство); + Команда.УстановитьСтрокуЗапуска(СтрокаЗапуска); Команда.ДобавитьПараметры(Параметры); Возврат Команда; @@ -367,6 +367,10 @@ КонецФункции // НайтиEdtcli() +Функция ОбернутьВКавычки(Знач Строка) + Возврат """" + Строка + """"; +КонецФункции + // Функция - выполняет поиск указанной команды в текущем каталоге или переменной окружения PATH // // Параметры: From a5382e81626805f6821dfb535a7990234839ecd2 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 14:18:04 +0300 Subject: [PATCH 24/69] fix edtExport after rebase --- .../edtExport.os" | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index 540e658..d1cca7e 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -186,19 +186,6 @@ Команда = КомандаКонвертации(КаталогВыгрузки, ВременноеРабочееПространство, КаталогПроекта); - Параметры = Новый Массив(); - Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); - Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", ВременноеРабочееПространство)); - Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); - - Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда - Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); - КонецЕсли; - - Команда.УстановитьСтрокуЗапуска(СтрШаблон("ring %1 workspace import", ИмяМодуля)); - Команда.ДобавитьЛогВыводаКоманды(ИмяЛога()); - Команда.ДобавитьПараметры(Параметры); - Команда.УстановитьПравильныйКодВозврата(0); КодВозврата = Команда.Исполнить(); Лог.Отладка("Код возврата EDT: %1", КодВозврата); @@ -269,7 +256,10 @@ ИсполняемыйФайл = НайтиRing(); - Команда.УстановитьСтрокуЗапуска(СтрШаблон("%1 %2 workspace import", ИсполняемыйФайл, ИмяМодуля)); + СтрокаЗапуска = СтрШаблон("%1 %2 workspace import", + ОбернутьВКавычки(ИсполняемыйФайл), + ИмяМодуля); + Команда.УстановитьСтрокуЗапуска(СтрокаЗапуска); Команда.ДобавитьПараметры(Параметры); Возврат Команда; @@ -649,4 +639,4 @@ #КонецОбласти -Инициализация(); +Инициализация(); \ No newline at end of file From 48f9a655267cb9291d6955432853b1cd5043bb21 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 14:42:37 +0300 Subject: [PATCH 25/69] fix features --- features/edtExport.feature | 6 +++--- features/sync-remote.feature | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/features/edtExport.feature b/features/edtExport.feature index 1c63f98..f893b73 100644 --- a/features/edtExport.feature +++ b/features/edtExport.feature @@ -22,7 +22,7 @@ И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" - И Я добавляю параметр "--project-name test" для команды "gitsync" + И Я добавляю параметр "-PN test" для команды "gitsync" И Я вычисляю имя модуля edt по версии из переменной окружения "EDT_VERSION" в переменную "ИмяМодуляEDT" И Я добавляю параметр "--module" для команды "gitsync" из переменной "ИмяМодуляEDT" И Я выключаю все плагины @@ -47,12 +47,12 @@ И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 -Сценарий: Cинхронизация хранилища расширения с использованием edtExport c указанием базового проекта +Сценарий: Cинхронизация хранилища расширения с использованием edtExport с указанием базового проекта Допустим Я скопировал каталог тестового хранилища конфигурации расширения в каталог из переменной "КаталогХранилища1С" И я скопировал каталог рабочего окружения EDT в каталог из переменной "РабочееОкружениеEDT" И Я добавляю параметр "-e test" для команды "gitsync" И Я добавляю параметр "-W" для команды "gitsync" из переменной "РабочееОкружениеEDT" - И Я добавляю параметр "-B edtExport" для команды "gitsync" + И Я добавляю параметр "-BP edtExport" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" diff --git a/features/sync-remote.feature b/features/sync-remote.feature index 2c842cf..611fb0f 100644 --- a/features/sync-remote.feature +++ b/features/sync-remote.feature @@ -30,7 +30,7 @@ И Я включаю плагин "sync-remote" Сценарий: Cинхронизация с использованием push - Допустим Я добавляю параметр "-P" для команды "gitsync" + Допустим Я добавляю параметр "-PS" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" @@ -40,7 +40,7 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация с использованием pull и push - Допустим Я добавляю параметр "-GP" для команды "gitsync" + Допустим Я добавляю параметр "-PSG" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" @@ -50,7 +50,7 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация c использованием push-tags - Допустим Я добавляю параметр "-P" для команды "gitsync" + Допустим Я добавляю параметр "-PS" для команды "gitsync" И Я добавляю параметр "--push-tags" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" @@ -61,7 +61,7 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация c использованием push-every-n-commits - Допустим Я добавляю параметр "-P" для команды "gitsync" + Допустим Я добавляю параметр "-PS" для команды "gitsync" И Я добавляю параметр "--push-n-commits 1" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" @@ -72,7 +72,7 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация хранилища все вместе - Допустим Я добавляю параметр "-PGTn=2" для команды "gitsync" + Допустим Я добавляю параметр "-PSGTn=2" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" From a7e6c6fce306811de3e74e38751641f5610cd72b Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 15:17:13 +0300 Subject: [PATCH 26/69] fix features again --- features/edtExport.feature | 4 ++-- features/sync-remote.feature | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/features/edtExport.feature b/features/edtExport.feature index f893b73..7a08b64 100644 --- a/features/edtExport.feature +++ b/features/edtExport.feature @@ -22,7 +22,7 @@ И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" - И Я добавляю параметр "-PN test" для команды "gitsync" + И Я добавляю параметр "--PN test" для команды "gitsync" И Я вычисляю имя модуля edt по версии из переменной окружения "EDT_VERSION" в переменную "ИмяМодуляEDT" И Я добавляю параметр "--module" для команды "gitsync" из переменной "ИмяМодуляEDT" И Я выключаю все плагины @@ -52,7 +52,7 @@ И я скопировал каталог рабочего окружения EDT в каталог из переменной "РабочееОкружениеEDT" И Я добавляю параметр "-e test" для команды "gitsync" И Я добавляю параметр "-W" для команды "gitsync" из переменной "РабочееОкружениеEDT" - И Я добавляю параметр "-BP edtExport" для команды "gitsync" + И Я добавляю параметр "--BP edtExport" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" diff --git a/features/sync-remote.feature b/features/sync-remote.feature index 611fb0f..71ff2e0 100644 --- a/features/sync-remote.feature +++ b/features/sync-remote.feature @@ -30,7 +30,7 @@ И Я включаю плагин "sync-remote" Сценарий: Cинхронизация с использованием push - Допустим Я добавляю параметр "-PS" для команды "gitsync" + Допустим Я добавляю параметр "--PS" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" @@ -40,7 +40,8 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация с использованием pull и push - Допустим Я добавляю параметр "-PSG" для команды "gitsync" + Допустим Я добавляю параметр "--PS" для команды "gitsync" + И Я добавляю параметр "-G" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" @@ -50,7 +51,7 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация c использованием push-tags - Допустим Я добавляю параметр "-PS" для команды "gitsync" + Допустим Я добавляю параметр "--PS" для команды "gitsync" И Я добавляю параметр "--push-tags" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" @@ -61,7 +62,7 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация c использованием push-every-n-commits - Допустим Я добавляю параметр "-PS" для команды "gitsync" + Допустим Я добавляю параметр "--PS" для команды "gitsync" И Я добавляю параметр "--push-n-commits 1" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" @@ -72,7 +73,8 @@ И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация хранилища все вместе - Допустим Я добавляю параметр "-PSGTn=2" для команды "gitsync" + Допустим Я добавляю параметр "--PS" для команды "gitsync" + И Я добавляю параметр "-GTn=2" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" From f1532740c7566da8a87d059783da2f15f87956df Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 2 Jun 2025 16:35:41 +0300 Subject: [PATCH 27/69] rm scripts --- .github/scripts/add-1cedtcli-ring-to-path.bat | 35 ------------------- .github/scripts/add-1cedtcli-ring-to-path.sh | 26 -------------- .github/workflows/testing.yml | 8 ----- 3 files changed, 69 deletions(-) delete mode 100644 .github/scripts/add-1cedtcli-ring-to-path.bat delete mode 100755 .github/scripts/add-1cedtcli-ring-to-path.sh diff --git a/.github/scripts/add-1cedtcli-ring-to-path.bat b/.github/scripts/add-1cedtcli-ring-to-path.bat deleted file mode 100644 index 56123ed..0000000 --- a/.github/scripts/add-1cedtcli-ring-to-path.bat +++ /dev/null @@ -1,35 +0,0 @@ -@echo off -setlocal enabledelayedexpansion - -:: Search for the 1c-enterprise-ring directory -set "ring_dir=" -for /f "delims=" %%d in ('dir /b /ad /o-d "%ProgramFiles%\1C\1CE\components\1c-enterprise-ring-*-x86_64" 2^>nul') do ( - if not defined ring_dir set "ring_dir=%ProgramFiles%\1C\1CE\components\%%d" -) - -if not defined ring_dir ( - echo ::error::Could not find ring directory in %ProgramFiles%\1C\1CE\components\ -) else ( - echo %ring_dir%>> "%GITHUB_PATH%" -) - -:: Search for the 1cedtcli directory (optional) -set "edtcli_dir=" -for /f "delims=" %%d in ('dir /b /ad /o-d "%ProgramFiles%\1C\1CE\components\1c-edt-*-x86_64" 2^>nul') do ( - if exist "%ProgramFiles%\1C\1CE\components\%%d\1cedtcli.exe" ( - if not defined edtcli_dir set "edtcli_dir=%ProgramFiles%\1C\1CE\components\%%d" - ) -) - -:: Add edtcli_dir to path if found -if not defined edtcli_dir ( - echo ::error::Could not find 1cedtcli directory in %ProgramFiles%\1C\1CE\components\ -) else ( - echo %edtcli_dir%>> "%GITHUB_PATH%" -) - -echo ::group::Successfully added to PATH -echo %ring_dir% -if defined edtcli_dir echo %edtcli_dir% -echo ::endgroup:: -exit /b 0 \ No newline at end of file diff --git a/.github/scripts/add-1cedtcli-ring-to-path.sh b/.github/scripts/add-1cedtcli-ring-to-path.sh deleted file mode 100755 index b88f4c7..0000000 --- a/.github/scripts/add-1cedtcli-ring-to-path.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -# Find and symlink 1c-enterprise-ring (required) -ring_path=$(find /opt/1C/1CE/components -name ring -type f -print -quit 2>/dev/null) -if [ -z "$ring_path" ]; then - echo "::error::Could not find ring executable in /opt/1C/1CE" >&2 - exit 1 -fi -sudo ln -sfn "$(dirname "$ring_path")" /opt/1C/1CE/components/1c-enterprise-ring - -# Find and symlink 1cedtcli (optional) -edtcli_path=$(find /opt/1C/1CE/components -name 1cedtcli -type f -print -quit 2>/dev/null) -if [ -n "$edtcli_path" ]; then - sudo ln -sfn "$(dirname "$edtcli_path")" /opt/1C/1CE/components/1cedtcli -fi - -# Update PATH (only add directories that exist) -PATH="/opt/1C/1CE/components/1c-enterprise-ring:$PATH" -if [ -d "/opt/1C/1CE/components/1cedtcli" ]; then - PATH="/opt/1C/1CE/components/1cedtcli:$PATH" -fi - -echo "::group::Successfully added to PATH" -echo "/opt/1C/1CE/components/1c-enterprise-ring" -[ -d "/opt/1C/1CE/components/1cedtcli" ] && echo "/opt/1C/1CE/components/1cedtcli" -echo "::endgroup::" \ No newline at end of file diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 4b7661e..4a35457 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -91,14 +91,6 @@ jobs: ONEC_USERNAME: ${{ secrets.ONEC_USERNAME }} ONEC_PASSWORD: ${{ secrets.ONEC_PASSWORD }} - - name: Настройка EDT (Windows) - if: startsWith(matrix.os, 'windows') - run: .github/scripts/add-1cedtcli-ring-to-path.bat - - - name: Настройка EDT (Linux) - if: startsWith(matrix.os, 'ubuntu') - run: .github/scripts/add-1cedtcli-ring-to-path.sh - - name: Установка лицензии (Linux) if: startsWith(matrix.os, 'ubuntu') run: | From b583197c713167a51215c2a442c7b37c1fd4ed9b Mon Sep 17 00:00:00 2001 From: Dima Ovcharenko Date: Tue, 3 Jun 2025 11:41:29 +0300 Subject: [PATCH 28/69] add testing on EDT 2024 for 1cedtcli --- .github/workflows/testing.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 4a35457..a3f71bb 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -13,7 +13,7 @@ jobs: matrix: oscript_version: ['1.9.2'] v8_version: ['8.3.21.1624', '8.3.24.1691'] - edt_version: ['2023.3.6'] + edt_version: ['2023.3.6', '2024.2.5'] os: [windows-latest, ubuntu-22.04] locale: ['ru_RU'] fail-fast: false @@ -136,4 +136,4 @@ jobs: report_paths: '**/build/reports/*.xml' fail_on_failure: true comment: true - check_name: 'Результаты тестов. ОС: ${{ matrix.os }}. Версия 1С: ${{ matrix.v8_version }}. Версия OneScript: ${{ matrix.oscript_version }}' \ No newline at end of file + check_name: 'Результаты тестов. ОС: ${{ matrix.os }}. Версия 1С: ${{ matrix.v8_version }}. Версия OneScript: ${{ matrix.oscript_version }}' From 72798d21a543bdeb6106385bf39a854c86288268 Mon Sep 17 00:00:00 2001 From: Dima Date: Thu, 5 Jun 2025 16:29:27 +0300 Subject: [PATCH 29/69] add workflow for PR from forks --- .github/workflows/pre-testing.yml | 15 +++++++++++++++ .github/workflows/testing.yml | 18 ++++++++++++++++-- 2 files changed, 31 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/pre-testing.yml diff --git a/.github/workflows/pre-testing.yml b/.github/workflows/pre-testing.yml new file mode 100644 index 0000000..8925f04 --- /dev/null +++ b/.github/workflows/pre-testing.yml @@ -0,0 +1,15 @@ +name: Pre-testing checks + +on: + push: + branches: [ develop ] + pull_request: + branches: [ develop ] + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout code + run: echo "Success" \ No newline at end of file diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index a3f71bb..5622c34 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -3,11 +3,20 @@ # All rights reserved. name: Тестирование -# Любой пуш и pr в проекте -on: [push, pull_request] + +on: + workflow_run: + workflows: ["Pre-testing checks"] + types: + - completed + +permissions: + checks: write + contents: read jobs: test: + if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ${{ matrix.os }} strategy: matrix: @@ -17,6 +26,7 @@ jobs: os: [windows-latest, ubuntu-22.04] locale: ['ru_RU'] fail-fast: false + steps: - name: Установка локали if: matrix.os == startsWith(matrix.os, 'windows') @@ -28,6 +38,10 @@ jobs: - name: Актуализация uses: actions/checkout@v4.2.2 + with: + fetch-depth: 0 + repository: ${{ github.event.workflow_run.head_repository.full_name }} + ref: ${{ github.event.workflow_run.head_sha }} # Установка OneScript конкретной версии - name: Установка OneScript From 1de77e377ecc52a36f96922d88e16434a7caddbc Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 13:07:54 +0300 Subject: [PATCH 30/69] Revert "add workflow for PR from forks" This reverts commit 72798d21a543bdeb6106385bf39a854c86288268. --- .github/workflows/pre-testing.yml | 15 --------------- .github/workflows/testing.yml | 18 ++---------------- 2 files changed, 2 insertions(+), 31 deletions(-) delete mode 100644 .github/workflows/pre-testing.yml diff --git a/.github/workflows/pre-testing.yml b/.github/workflows/pre-testing.yml deleted file mode 100644 index 8925f04..0000000 --- a/.github/workflows/pre-testing.yml +++ /dev/null @@ -1,15 +0,0 @@ -name: Pre-testing checks - -on: - push: - branches: [ develop ] - pull_request: - branches: [ develop ] - workflow_dispatch: - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout code - run: echo "Success" \ No newline at end of file diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 5622c34..a3f71bb 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -3,20 +3,11 @@ # All rights reserved. name: Тестирование - -on: - workflow_run: - workflows: ["Pre-testing checks"] - types: - - completed - -permissions: - checks: write - contents: read +# Любой пуш и pr в проекте +on: [push, pull_request] jobs: test: - if: ${{ github.event.workflow_run.conclusion == 'success' }} runs-on: ${{ matrix.os }} strategy: matrix: @@ -26,7 +17,6 @@ jobs: os: [windows-latest, ubuntu-22.04] locale: ['ru_RU'] fail-fast: false - steps: - name: Установка локали if: matrix.os == startsWith(matrix.os, 'windows') @@ -38,10 +28,6 @@ jobs: - name: Актуализация uses: actions/checkout@v4.2.2 - with: - fetch-depth: 0 - repository: ${{ github.event.workflow_run.head_repository.full_name }} - ref: ${{ github.event.workflow_run.head_sha }} # Установка OneScript конкретной версии - name: Установка OneScript From 1c66a4ca79da1cc85bd26f1dcf6fba5ce3dd2218 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 13:17:30 +0300 Subject: [PATCH 31/69] add fetch-depth --- .github/workflows/testing.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index a3f71bb..878e8e0 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -28,6 +28,8 @@ jobs: - name: Актуализация uses: actions/checkout@v4.2.2 + with: + fetch-depth: 0 # Установка OneScript конкретной версии - name: Установка OneScript From d61feeaeaf88c72c73811f2065d3d8d540756fb5 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 14:48:03 +0300 Subject: [PATCH 32/69] fix 1cedcli behaviour, fix testing in PRs, qa, refactoring --- .github/workflows/qa.yml | 24 +- .github/workflows/testing.yml | 38 ++- CONTRIBUTING.md | 2 - features/edtExport.feature | 16 +- features/step_definitions/edtExport.os | 16 - .../edtExport.os" | 294 +++++++++--------- tasks/coverage.os | 3 +- tasks/install-plugins.os | 19 +- 8 files changed, 202 insertions(+), 210 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 4c43b11..f4677b0 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -3,7 +3,7 @@ # All rights reserved. name: Контроль качества -# Любой пуш и pr в проекте но с фильтром по основному проекту + on: [push, pull_request] jobs: build: @@ -16,9 +16,8 @@ jobs: oscript_version: ['1.9.2'] steps: - # Загрузка проекта - name: Актуализация - uses: actions/checkout@v2 + uses: actions/checkout@v4.2.2 # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Извлечение имени текущей ветки @@ -26,25 +25,20 @@ jobs: run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" id: extract_branch - # Установка OneScript конкретной версии - name: Установка OneScript - uses: otymko/setup-onescript@v1.0 - env: - ACTIONS_ALLOW_UNSECURE_COMMANDS: true + uses: otymko/setup-onescript@v1.5 with: version: ${{ matrix.oscript_version }} - # Установка зависимостей пакета - name: Установка зависимостей run: | opm install opm opm install --dev - opm install 1testrunner - opm install 1bdd - opm install notify - opm install coverage + opm install gitsync # TODO: должно быть необязательно + + - name: Установка gitsync локально + run: opm run install-gitsync - # Запуск тестов и сбор покрытия кода - name: Покрытие кода run: oscript ./tasks/coverage.os true @@ -54,9 +48,8 @@ jobs: id: extract_version - name: Установка Sonar-scanner - uses: warchant/setup-sonar-scanner@v1 + uses: warchant/setup-sonar-scanner@v7 - # Анализ проекта в SonarQube (ветка) - name: Анализ в SonarQube (branch) if: github.event_name == 'push' run: sonar-scanner @@ -65,7 +58,6 @@ jobs: -Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }} -Dsonar.projectVersion=${{ steps.extract_version.outputs.version }} - # Анализ проекта в SonarQube (PR) # https://docs.sonarqube.org/latest/analysis/pull-request/ - name: Анализ в SonarQube (pull-request) if: github.event_name == 'pull_request' diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 878e8e0..99477eb 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -3,8 +3,15 @@ # All rights reserved. name: Тестирование -# Любой пуш и pr в проекте -on: [push, pull_request] + +on: + push: + pull_request_target: + workflow_dispatch: + +permissions: + checks: write + pull-requests: write jobs: test: @@ -28,8 +35,6 @@ jobs: - name: Актуализация uses: actions/checkout@v4.2.2 - with: - fetch-depth: 0 # Установка OneScript конкретной версии - name: Установка OneScript @@ -51,14 +56,14 @@ jobs: sudo DEBIAN_FRONTEND=noninteractive apt-get install -y locales libwebkit2gtk-4.0-37 sudo localedef -i ${{ matrix.locale }} -c -f UTF-8 -A /usr/share/locale/locale.alias ${{ matrix.locale }}.UTF-8 - - name: Установка libenchant1c2a (Linux) + - name: Установка libenchant1c2a для 8.3.21 (Linux) if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.v8_version, '8.3.21') run: | sudo echo "deb http://cz.archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list sudo apt-get update sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libenchant1c2a - - name: Установка wine (требуется для Tool1CD) + - name: Установка wine для Tool1CD (Linux) if: startsWith(matrix.os, 'ubuntu') run: | sudo dpkg --add-architecture i386 @@ -76,16 +81,24 @@ jobs: ONEC_USERNAME: ${{ secrets.ONEC_USERNAME }} ONEC_PASSWORD: ${{ secrets.ONEC_PASSWORD }} - - name: Установка Java + - name: Установка Java 11 + if: startsWith(matrix.edt_version, '2023') uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '11' + - name: Установка Java 17 + if: startsWith(matrix.edt_version, '2024') + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + - name: Установка EDT uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg with: - type: edt # Тип устанавливаемого приложения + type: edt edt_version: ${{ matrix.edt_version }} cache: true cache_distr: true @@ -117,10 +130,7 @@ jobs: env: ONEC_LICENCE: ${{ secrets.ONEC_LICENCE }} - - name: Сборка пакета - run: opm build - - - name: Установка gitsync (локально) + - name: Установка gitsync локально run: opm run install-gitsync - name: Тестирование @@ -132,10 +142,10 @@ jobs: run: oscript ./tasks/test.os - name: Публикация отчета - if: always() + if: success() || failure() uses: mikepenz/action-junit-report@v5 with: report_paths: '**/build/reports/*.xml' fail_on_failure: true comment: true - check_name: 'Результаты тестов. ОС: ${{ matrix.os }}. Версия 1С: ${{ matrix.v8_version }}. Версия OneScript: ${{ matrix.oscript_version }}' + check_name: 'Результаты тестов. ОС: ${{ matrix.os }}. Версия 1С: ${{ matrix.v8_version }}. Версия OneScript: ${{ matrix.oscript_version }}. Версия EDT: ${{ matrix.edt_version }}' diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 63a3aca..b2ae27a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,8 +21,6 @@ По умолчанию используется версия 2022.2.5 -- Cобрать пакет - - `opm build` - Выполнить команду, которая устанавливает gitsync в каталог bin_gitsync - `opm run install-gitsync` - Запустить тесты diff --git a/features/edtExport.feature b/features/edtExport.feature index 7a08b64..3c64914 100644 --- a/features/edtExport.feature +++ b/features/edtExport.feature @@ -23,17 +23,27 @@ # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" И Я добавляю параметр "--PN test" для команды "gitsync" - И Я вычисляю имя модуля edt по версии из переменной окружения "EDT_VERSION" в переменную "ИмяМодуляEDT" - И Я добавляю параметр "--module" для команды "gitsync" из переменной "ИмяМодуляEDT" И Я выключаю все плагины И Я включаю плагин "edtExport" -Сценарий: Cинхронизация с использованием edtExport +Сценарий: Cинхронизация с использованием edtExport без явного указания версии EDT Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Вывод команды "gitsync" содержит "Версия EDT не передана через параметры, выполняется поиск максимальной установленной версии." + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация с использованием edtExport с явным указанием версии EDT + Дано Я получаю переменную окружения "EDT_VERSION" в переменную "ВерсияEDT" + Дано Я добавляю параметр "--edt-version" для команды "gitsync" из переменной "ВерсияEDT" + Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Вывод команды "gitsync" не содержит "Версия EDT не передана через параметры, выполняется поиск максимальной установленной версии." И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация хранилища расширения с использованием edtExport без указания базового проекта diff --git a/features/step_definitions/edtExport.os b/features/step_definitions/edtExport.os index efc795a..bf0298f 100644 --- a/features/step_definitions/edtExport.os +++ b/features/step_definitions/edtExport.os @@ -15,8 +15,6 @@ ВсеШаги = Новый Массив; ВсеШаги.Добавить("ЯСкопировалКаталогРабочегоОкруженияEDTВКаталогИзПеременной"); - ВсеШаги.Добавить("ЯВычисляюИмяМодуляEdtПоВерсииИзПеременнойОкруженияВПеременную"); - Возврат ВсеШаги; КонецФункции @@ -40,20 +38,6 @@ ФС.КопироватьСодержимоеКаталога(ПутьКРабочемуОкружениюEDT(), РабочееОкружениеEDT); КонецПроцедуры -//я вычисляю имя модуля edt по версии из переменной окружения "EDT_VERSION" в переменную "ИмяМодуляEDT" -Процедура ЯВычисляюИмяМодуляEdtПоВерсииИзПеременнойОкруженияВПеременную(Знач ИмяПеременнойОкружения, Знач ИмяПеременной) Экспорт - - ВерсияEDT = ПолучитьПеременнуюСреды(ИмяПеременнойОкружения); - - Если Не ЗначениеЗаполнено(ВерсияEDT) Тогда - ВерсияEDT = "2022.2.5"; // значение по умолчанию - КонецЕсли; - - ИмяМодуля = СтрШаблон("edt@%1:x86_64", ВерсияEDT); - БДД.СохранитьВКонтекст(ИмяПеременной, ИмяМодуля); - -КонецПроцедуры - Функция ПутьКРабочемуОкружениюEDT() Возврат ОбъединитьПути(КаталогFixtures(), "edtWorkspace"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index d1cca7e..71b50a6 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -9,7 +9,7 @@ Перем КомандыПлагина; Перем ИмяПроекта; -Перем ИмяМодуля; +Перем ВерсияEDT; Перем РабочееПространство; Перем ИмяРасширения; Перем ИмяБазовогоПроекта; @@ -44,7 +44,7 @@ // Функция Описание() Экспорт Возврат "Плагин добавляет возможность выгрузки в формате EDT." - + " Важно: Для работы плагина необходимы установленные EDT и Ring"; + + " Важно: Для работы плагина необходимы установленные EDT и ring\1cedtcli"; КонецФункции // Возвращает подробную справку к плагину @@ -115,24 +115,20 @@ .ТСтрока() .ВОкружении("GITSYNC_BASE_PROJECT_NAME"); - КлассРеализации.Опция("M module", + КлассРеализации.Опция("EDT edt-version", "", - "[*edtExport] имя установленного модуля edt") + "[*edtExport] версия EDT") .ТСтрока() - .ВОкружении("GITSYNC_MODULE"); + .ВОкружении("GITSYNC_EDT_VERSION"); КонецПроцедуры Процедура ПриПолученииПараметров(ПараметрыКоманды) Экспорт ИмяПроекта = ПараметрыКоманды.Параметр("project-name"); - ИмяМодуля = ПараметрыКоманды.Параметр("module"); + ВерсияEDT = ПараметрыКоманды.Параметр("edt-version"); РабочееПространство = ПараметрыКоманды.Параметр("workspace-location"); ИмяБазовогоПроекта = ПараметрыКоманды.Параметр("base-project-name"); - - Если ПустаяСтрока(ИмяМодуля) Тогда - ИмяМодуля = "edt"; - КонецЕсли; Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) @@ -156,7 +152,7 @@ КаталогВыгрузки, ПутьКХранилищу, НомерВерсии) Экспорт - // BSLLS:UnusedParameters-on +// BSLLS:UnusedParameters-on Лог.Отладка("Начинаю выгрузку EDT"); Лог.Отладка("Имя проекта: %1", ИмяПроекта); @@ -188,7 +184,7 @@ КодВозврата = Команда.Исполнить(); - Лог.Отладка("Код возврата EDT: %1", КодВозврата); + Лог.Отладка("Код возврата команды конвертации: %1", КодВозврата); ТекущийФайлВерсийМетаданных = Новый Файл(ОбъединитьПути(КаталогВыгрузки, ИмяФайлаДампаКонфигурации)); Если ТекущийФайлВерсийМетаданных.Существует() Тогда @@ -211,22 +207,60 @@ #Область Вспомогательные_процедуры_и_функции -// Функция - получает команду запуска утилиты ring для выполнения конвертации +Функция ОпределитьИсполняемыйФайл() + + ИсполняемыйФайл = ""; + + КаталогEDT = УточнитьВерсиюEDT(); + + Если Лев(ВерсияEDT, 4) >= "2024" Тогда // BSLLS:MagicNumber-off + ИсполняемыйФайл = НайтиEdtcli(КаталогEDT); + Иначе + ИсполняемыйФайл = НайтиRing(); + КонецЕсли; + + Возврат ИсполняемыйФайл; + +КонецФункции + +Функция УточнитьВерсиюEDT() + + ВсеВерсииEDT = НайтиВсеУстановленныеEDT(); + + Если Не ЗначениеЗаполнено(ВерсияEDT) Тогда + + Лог.Информация("Версия EDT не передана через параметры, выполняется поиск максимальной установленной версии."); + + ВерсияEDT = ВсеВерсииEDT.Версии[0]; + КаталогEDT = ВсеВерсииEDT.КаталогиEDT.Получить(ВсеВерсииEDT.Версии[0]); + Лог.Информация("Версия EDT определена автоматически: %1, каталог %2", ВерсияEDT, КаталогEDT); + + Возврат КаталогEDT; + + Иначе + + Возврат ВсеВерсииEDT.КаталогиEDT.Получить(ВерсияEDT); + + КонецЕсли; + +КонецФункции + +// Функция - получает команду запуска утилиты ring или 1cedtcli для выполнения конвертации // // Возвращаемое значение: -// Команда - команда запуска утилиты ring для выполнения конвертации +// Команда - команда запуска утилиты ring или 1cedtcli для выполнения конвертации // Функция КомандаКонвертации(КаталогВыгрузки, РабочееПространство, КаталогПроекта) + + Команда = Новый Команда; + Команда.УстановитьКоманду(ОпределитьИсполняемыйФайл()); - ВерсияEDT = ВерсияEDT(); - - Если Лев(ВерсияEDT(), 4) >= "2024" Тогда - Команда = КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта); + Если Лев(ВерсияEDT, 4) >= "2024" Тогда // BSLLS:MagicNumber-off + КомандаEdtcli(Команда, КаталогВыгрузки, РабочееПространство, КаталогПроекта); Иначе - Команда = КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта); + КомандаRing(Команда, КаталогВыгрузки, РабочееПространство, КаталогПроекта); КонецЕсли; - Команда.УстановитьКодировкуВывода(КодировкаТекста.ANSI); Команда.ДобавитьЛогВыводаКоманды("oscript.lib.gitsync.plugins.edtExport"); Команда.УстановитьИсполнениеЧерезКомандыСистемы(Истина); Команда.ПоказыватьВыводНемедленно(Ложь); @@ -234,66 +268,47 @@ Возврат Команда; -КонецФункции // КомандаКонвертации() +КонецФункции // Функция - получает команду запуска утилиты ring для выполнения конвертации // // Возвращаемое значение: // Команда - команда запуска утилиты ring для выполнения конвертации // -Функция КомандаRing(КаталогВыгрузки, РабочееПространство, КаталогПроекта) +Процедура КомандаRing(Команда, КаталогВыгрузки, РабочееПространство, КаталогПроекта) - Команда = Новый Команда; + Команда.ДобавитьПараметр(СтрШаблон("edt@%1:x86_64", ВерсияEDT)); + Команда.ДобавитьПараметр("workspace import"); - Параметры = Новый Массив(); - Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); - Параметры.Добавить(СтрШаблон("--workspace-location ""%1""", РабочееПространство)); - Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); + Команда.ДобавитьПараметр(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); + Команда.ДобавитьПараметр(СтрШаблон("--workspace-location ""%1""", РабочееПространство)); + Команда.ДобавитьПараметр(СтрШаблон("--project ""%1""", КаталогПроекта)); Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда - Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); + Команда.ДобавитьПараметр(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); КонецЕсли; - - ИсполняемыйФайл = НайтиRing(); - СтрокаЗапуска = СтрШаблон("%1 %2 workspace import", - ОбернутьВКавычки(ИсполняемыйФайл), - ИмяМодуля); - Команда.УстановитьСтрокуЗапуска(СтрокаЗапуска); - Команда.ДобавитьПараметры(Параметры); - - Возврат Команда; - -КонецФункции // КомандаRing() +КонецПроцедуры // Функция - получает команду запуска утилиты edtcli для выполнения конвертации // // Возвращаемое значение: // Команда - команда запуска утилиты edtcli для выполнения конвертации // -Функция КомандаEdtcli(КаталогВыгрузки, РабочееПространство, КаталогПроекта) +Процедура КомандаEdtcli(Команда, КаталогВыгрузки, РабочееПространство, КаталогПроекта) - Команда = Новый Команда; + Команда.ДобавитьПараметр("-data"); + Команда.ДобавитьПараметр(ОбернутьВКавычки(РабочееПространство)); + Команда.ДобавитьПараметр("-command import"); - Параметры = Новый Массив(); - Параметры.Добавить(СтрШаблон("--project ""%1""", КаталогПроекта)); - Параметры.Добавить(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); + Команда.ДобавитьПараметр(СтрШаблон("--project ""%1""", КаталогПроекта)); + Команда.ДобавитьПараметр(СтрШаблон("--configuration-files ""%1""", КаталогВыгрузки)); Если Не ПустаяСтрока(ИмяРасширения) И Не ПустаяСтрока(ИмяБазовогоПроекта) Тогда - Параметры.Добавить(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); + Команда.ДобавитьПараметр(СтрШаблон("--base-project-name ""%1""", ИмяБазовогоПроекта)); КонецЕсли; - - ИсполняемыйФайл = НайтиEdtcli(); - СтрокаЗапуска = СтрШаблон("%1 -data ""%2"" -command import", - ОбернутьВКавычки(ИсполняемыйФайл), - РабочееПространство); - Команда.УстановитьСтрокуЗапуска(СтрокаЗапуска); - Команда.ДобавитьПараметры(Параметры); - - Возврат Команда; - -КонецФункции // КомандаEdtcli() +КонецПроцедуры // Функция - выполняет поиск утилиты ring и возвращает полный путь к утилите // @@ -302,12 +317,6 @@ // Функция НайтиRing() Экспорт - РасположениеRing = НайтиКоманду("ring"); - - Если ЗначениеЗаполнено(РасположениеRing) Тогда - Возврат РасположениеRing; - КонецЕсли; - Если ЭтоWindows() Тогда КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); Расширение = ".cmd"; @@ -324,88 +333,38 @@ Возврат ""; -КонецФункции // НайтиRing() +КонецФункции -// Функция - выполняет поиск утилиты edtcli и возвращает полный путь к утилите +// Функция - выполняет поиск утилиты 1cedtcli и возвращает полный путь к утилите // // Возвращаемое значение: -// Строка - полный путь к утилите edtcli +// Строка - полный путь к утилите 1cedtcli // -Функция НайтиEdtcli() Экспорт - - РасположениеEdtcli = НайтиКоманду("1cedtcli"); - - Если ЗначениеЗаполнено(РасположениеEdtcli) Тогда - Возврат РасположениеEdtcli; - КонецЕсли; +Функция НайтиEdtcli(КаталогEDT) Экспорт + Расширение = ""; Если ЭтоWindows() Тогда - КаталогПрограмм = ПолучитьПеременнуюСреды("ProgramW6432"); Расширение = ".exe"; - Иначе - КаталогПрограмм = "/opt"; - Расширение = ""; КонецЕсли; - ПутьУстановки_1CE = ОбъединитьПути(КаталогПрограмм, "1C", "1CE", "components"); - Файлы = НайтиФайлы(ПутьУстановки_1CE, СтрШаблон("1cedtcli%1", Расширение), Истина); - Если Файлы.Количество() > 0 Тогда - Возврат Файлы[0].ПолноеИмя; + ИсполняемыйФайл = СтрШаблон("1cedtcli%1", Расширение); + Лог.Информация("Ищу %1 в %2", ИсполняемыйФайл, КаталогEDT); + НайденныеФайлы = НайтиФайлы(КаталогEDT, ИсполняемыйФайл, Истина); + + Если НайденныеФайлы.Количество() = 0 Тогда + ВызватьИсключение "1cedtcli не найден"; КонецЕсли; - Возврат ""; + Результат = НайденныеФайлы[0].ПолноеИмя; + Лог.Информация("Найден исполняемый файл %1", Результат); + Возврат Результат; -КонецФункции // НайтиEdtcli() +КонецФункции Функция ОбернутьВКавычки(Знач Строка) Возврат """" + Строка + """"; КонецФункции -// Функция - выполняет поиск указанной команды в текущем каталоге или переменной окружения PATH -// -// Параметры: -// ИмяКоманды - Строка - имя команды для поиска -// -// Возвращаемое значение: -// Строка - полный путь к команде -// -Функция НайтиКоманду(Знач ИмяКоманды) - - ЭтоWindows = ЭтоWindows(); - - Команда = Новый Команда(); - Если ЭтоWindows Тогда - Команда.УстановитьКоманду("where"); - Иначе - Команда.УстановитьКоманду("which"); - КонецЕсли; - Команда.ДобавитьПараметр(ИмяКоманды); - - Команда.УстановитьИсполнениеЧерезКомандыСистемы(Ложь); - Команда.ПоказыватьВыводНемедленно(Ложь); - - КодВозврата = Команда.Исполнить(); - - ВыводКоманды = СокрЛП(Команда.ПолучитьВывод()); - - Если КодВозврата = 0 Тогда - Лог.Отладка("Найдена команда ""%1"": %2", ИмяКоманды, ВыводКоманды); - Иначе - Лог.Предупреждение("Команда ""%1"" не найдена в текущем каталоге или в переменной окружения PATH:%2%3", - ИмяКоманды, - Символы.ПС, - ВыводКоманды); - Возврат ""; - КонецЕсли; - - Если ФС.ФайлСуществует(ВыводКоманды) Тогда - Возврат ВыводКоманды; - КонецЕсли; - - Возврат ""; - -КонецФункции // НайтиКоманду() - // Функция - проверяет, что скрипт выполняется в среде Windows // // Возвращаемое значение: @@ -418,48 +377,77 @@ КонецФункции // ЭтоWindows() -// Функция - выполняет поиск утилиты ring и возвращает полный номер последней версии EDT +// Функция - выполняет поиск всех установленных версий EDT // // Возвращаемое значение: -// Строка - полный номер последней версии EDT +// Структура - отсортированные версии и пути к исполняемым файлам // -Функция ВерсияEDT() Экспорт +Функция НайтиВсеУстановленныеEDT() - РасположениеEdtcli = НайтиEdtcli(); + КаталогиEDT = Новый Соответствие; + ВерсииДляСортировки = Новый Массив; - ФайлEdtcli = Новый Файл(РасположениеEdtcli); - КаталогEdtcli = Новый Файл(ФайлEdtcli.Путь); - КаталогEdtcli = Новый Файл(КаталогEdtcli.Путь); + КаталогиПоиска = КаталогиУстановкиЕДТПоУмолчанию(); - Файлы = НайтиФайлы(КаталогEdtcli.Путь, "1cedt.ini", Истина); - РВ = Новый РегулярноеВыражение("1c-edt-(\d+\.\d+\.\d+)\+"); + РВ = Новый РегулярноеВыражение("1c[-|_]edt[-| ](\d+\.\d+(?:\.\d)*)"); + РВ.ИгнорироватьРегистр = Истина; - НомераВерсий = Новый Массив(); + Для Каждого КаталогПоиска Из КаталогиПоиска Цикл - Для Каждого ТекФайл Из Файлы Цикл - КаталогВерсии = Новый Файл(ТекФайл.Путь); + Лог.Информация("Ищу версии EDT в каталоге ""%1""", КаталогПоиска); - Совпадения = РВ.НайтиСовпадения(КаталогВерсии.Имя); + ФайлыIni = НайтиФайлы(КаталогПоиска, "1cedt.ini", Истина); + Файлы = НайтиФайлы(КаталогПоиска, "1cedt", Истина); - Если Совпадения.Количество() = 0 Тогда - Продолжить; - КонецЕсли; - - НомераВерсий.Добавить(Совпадения[0].Группы[1].Значение); - Лог.Отладка("Найдена версия EDT ""%1"" в каталоге ""%2"".", Совпадения[0].Группы[1].Значение, ТекФайл.Путь); - КонецЦикла; + Для Каждого Файл Из ФайлыIni Цикл + Файлы.Добавить(Файл); + КонецЦикла; + + Для Каждого ТекФайл Из Файлы Цикл - Версии.СортироватьВерсии(НомераВерсий, "УБЫВ"); + Лог.Информация("Ищу совпадения регулярного выражения с именем файла ""%1""", ТекФайл.Путь); + КаталогВерсии = Новый Файл(ТекФайл.Путь); + Совпадения = РВ.НайтиСовпадения(КаталогВерсии.Имя); + + Если Совпадения.Количество() = 0 Тогда + Продолжить; + КонецЕсли; + + НайденнаяВерсия = Совпадения[0].Группы[1].Значение; + + КаталогиEDT.Вставить(НайденнаяВерсия, ТекФайл.Путь); + ВерсииДляСортировки.Добавить(НайденнаяВерсия); - Если НомераВерсий.Количество() = 0 Тогда - Лог.Предупреждение("Не найдена версия EDT"); + Лог.Информация("Найдена версия EDT ""%1"" в каталоге ""%2"".", НайденнаяВерсия, ТекФайл.Путь); + КонецЦикла; + КонецЦикла; + + Версии.СортироватьВерсии(ВерсииДляСортировки, "УБЫВ"); + + Если ВерсииДляСортировки.Количество() = 0 Тогда + ВызватьИсключение "Не найдено ни одной установленной версии EDT"; КонецЕсли; - Лог.Отладка("Найдена версия EDT ""%1"".", НомераВерсий[0]); + Возврат Новый Структура("Версии, КаталогиEDT", ВерсииДляСортировки, КаталогиEDT); + +КонецФункции + +// скопировано из yard, код Abramov Dmitry +Функция КаталогиУстановкиЕДТПоУмолчанию() - Возврат НомераВерсий[0]; + СистемнаяИнформация = Новый СистемнаяИнформация(); + Массив = Новый Массив(); + Если ЭтоWindows() Тогда + Массив.Добавить(ОбъединитьПути(СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений), "1C\1cedtstart\installations")); + Массив.Добавить("C:\Program Files\1C\1CE\components"); + Иначе + Массив.Добавить("~/.local/share/1C/1cedtstart/installations"); + Массив.Добавить("/opt/1C/1CE/components"); + КонецЕсли; -КонецФункции // ВерсияEDT() + Возврат Массив; + +КонецФункции Процедура ДополнитьИнкрементнуюВыгрузкуПроекта(Конфигуратор, КаталогВыгрузки) diff --git a/tasks/coverage.os b/tasks/coverage.os index f75160e..b03ba30 100644 --- a/tasks/coverage.os +++ b/tasks/coverage.os @@ -7,8 +7,7 @@ Команда = Новый Команда; Команда.УстановитьКоманду("oscript"); -Команда.ДобавитьПараметр("-encoding=utf-8"); -Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); +Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); Команда.ДобавитьПараметр("tasks/test.os"); Команда.ПоказыватьВыводНемедленно(Истина); diff --git a/tasks/install-plugins.os b/tasks/install-plugins.os index c2e2eae..67cd587 100644 --- a/tasks/install-plugins.os +++ b/tasks/install-plugins.os @@ -3,18 +3,29 @@ Перем Лог; Процедура УстановитьТекущиеПлагины(Знач Каталог) - + + Лог.Информация("=== Собираю пакет с плагинами из текущего каталога ==="); + + КомандаOpm = Новый Команда; + КомандаOpm.УстановитьРабочийКаталог(Каталог); + КомандаOpm.УстановитьКоманду("opm"); + КомандаOpm.ДобавитьПараметр("build"); + КомандаOpm.ДобавитьЛогВыводаКоманды("task.install-opm"); + + КодВозврата = КомандаOpm.Исполнить(); + МассивФайлов = НайтиФайлы(Каталог, "gitsync-plugins*.ospx"); Если МассивФайлов.Количество() = 0 Тогда - ВызватьИсключение Новый ИнформацияОбОшибке("Ошибка поиска пакета gitsync-plugins", "Не найден собранный файл пакета gitsync-plugins"); + Сообщение = СтрШаблон("В каталоге %1 найден собранный файл пакета gitsync-plugins", Каталог); + ВызватьИсключение Новый ИнформацияОбОшибке("Не найден собранный пакет gitsync-plugins", Сообщение); КонецЕсли; ФайлПлагина = МассивФайлов[0].ПолноеИмя; - ИсполнительGitSync = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "bin_gitsync/gitsync/src/cmd/gitsync.os"); + ИсполнительGitSync = ОбъединитьПути(Каталог, "bin_gitsync/gitsync/src/cmd/gitsync.os"); - Лог.Информация("Установка плагинов из файла <%1>", ФайлПлагина); + Лог.Информация("=== Установка плагинов из файла <%1> ===", ФайлПлагина); КомандаOpm = Новый Команда; КомандаOpm.УстановитьРабочийКаталог(Каталог); From d0d2ca103d99f3ca72d3cca62b9e786e81dc8c49 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 15:57:03 +0300 Subject: [PATCH 33/69] bump version --- packagedef | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packagedef b/packagedef index 372b7a3..81ecb85 100644 --- a/packagedef +++ b/packagedef @@ -35,7 +35,7 @@ КонецПроцедуры Описание.Имя("gitsync-plugins") - .Версия("1.6.1") + .Версия("2.0.0") .Автор("Khorev A.A. and SilverBulleters") .АдресАвтора("khorevaa@gmail.com,help@silverbulleters.org") .Описание("Набор предустановленных плагинов для gitsync") From c4a1328fc3253c88e1c0c8bed7fac9150ae20a05 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 16:06:41 +0300 Subject: [PATCH 34/69] fix secret name --- .github/workflows/testing.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 99477eb..289f6bc 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -113,22 +113,22 @@ jobs: sudo mkdir -p /var/1C/licenses # Запись лицензии в файл - echo "${{ secrets.ONEC_LICENCE }}" | sudo tee /var/1C/licenses/licence.lic > /dev/null + echo "${{ secrets.ONEC_LICENSE }}" | sudo tee /var/1C/licenses/licence.lic > /dev/null # Назначение прав sudo chmod 777 -R /var/1C/licenses shell: bash env: - ONEC_LICENCE: ${{ secrets.ONEC_LICENCE }} + ONEC_LICENSE: ${{ secrets.ONEC_LICENSE }} - name: Установка лицензии (Windows) if: startsWith(matrix.os, 'windows') run: | mkdir "C:\ProgramData\1C\licenses" -Force - echo $Env:ONEC_LICENCE | Out-File -FilePath "C:\ProgramData\1C\licenses\licence.lic" -Encoding ascii + echo $Env:ONEC_LICENSE | Out-File -FilePath "C:\ProgramData\1C\licenses\licence.lic" -Encoding ascii shell: pwsh env: - ONEC_LICENCE: ${{ secrets.ONEC_LICENCE }} + ONEC_LICENSE: ${{ secrets.ONEC_LICENSE }} - name: Установка gitsync локально run: opm run install-gitsync From beba92d291bea0752f23c8dd71cb772aff3b403d Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 16:51:03 +0300 Subject: [PATCH 35/69] fix workflows --- .github/workflows/qa.yml | 79 ++++++++++++++++++++++++++++++++--- .github/workflows/testing.yml | 4 +- 2 files changed, 76 insertions(+), 7 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index f4677b0..72fb9c5 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -4,9 +4,13 @@ name: Контроль качества -on: [push, pull_request] +on: + push: + pull_request_target: + workflow_dispatch: + jobs: - build: + sonar: if: github.repository == 'oscript-library/gitsync-plugins' runs-on: ${{ matrix.os }} strategy: @@ -14,6 +18,9 @@ jobs: matrix: os: [ubuntu-latest] oscript_version: ['1.9.2'] + v8_version: ['8.3.24.1691'] + edt_version: ['2024.2.5'] + locale: ['ru_RU'] steps: - name: Актуализация @@ -36,11 +43,73 @@ jobs: opm install --dev opm install gitsync # TODO: должно быть необязательно + - name: Подготовка окружения (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo apt-get update + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y locales libwebkit2gtk-4.0-37 + sudo localedef -i ${{ matrix.locale }} -c -f UTF-8 -A /usr/share/locale/locale.alias ${{ matrix.locale }}.UTF-8 + + - name: Установка wine для Tool1CD (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: | + sudo dpkg --add-architecture i386 + sudo apt update + sudo apt install wine -y + + - name: Установка платформы 1С + uses: 1CDevFlow/onec-setup-action@main + with: + type: onec # Тип устанавливаемого приложения + onec_version: ${{ matrix.v8_version }} + cache: true + cache_distr: true + env: + ONEC_USERNAME: ${{ secrets.ONEC_USERNAME }} + ONEC_PASSWORD: ${{ secrets.ONEC_PASSWORD }} + + - name: Установка Java 17 + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + - name: Установка EDT + uses: 1CDevFlow/onec-setup-action@main + with: + type: edt + edt_version: ${{ matrix.edt_version }} + cache: true + cache_distr: true + env: + ONEC_USERNAME: ${{ secrets.ONEC_USERNAME }} + ONEC_PASSWORD: ${{ secrets.ONEC_PASSWORD }} + + - name: Установка лицензии (Linux) + if: startsWith(matrix.os, 'ubuntu') + run: | + # Создание каталога + sudo mkdir -p /var/1C/licenses + + # Запись лицензии в файл + echo "${{ secrets.ONEC_LICENSE }}" | sudo tee /var/1C/licenses/licence.lic > /dev/null + + # Назначение прав + sudo chmod 777 -R /var/1C/licenses + shell: bash + env: + ONEC_LICENSE: ${{ secrets.ONEC_LICENSE }} + - name: Установка gitsync локально run: opm run install-gitsync - name: Покрытие кода - run: oscript ./tasks/coverage.os true + uses: coactions/setup-xvfb@v1 + env: + EDT_VERSION: ${{ matrix.edt_version }} + GITSYNC_V8VERSION: ${{ matrix.v8_version }} + with: + run: opm run coverage - name: Извлечение версии пакета shell: bash @@ -48,10 +117,10 @@ jobs: id: extract_version - name: Установка Sonar-scanner - uses: warchant/setup-sonar-scanner@v7 + uses: warchant/setup-sonar-scanner@v8 - name: Анализ в SonarQube (branch) - if: github.event_name == 'push' + if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' run: sonar-scanner -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 289f6bc..4384e25 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -71,7 +71,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg + uses: 1CDevFlow/onec-setup-action@main with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -96,7 +96,7 @@ jobs: java-version: '17' - name: Установка EDT - uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg + uses: 1CDevFlow/onec-setup-action@main with: type: edt edt_version: ${{ matrix.edt_version }} From b994d634bd68b7c5d9b01c8992ced22af8afbcf1 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 17:02:25 +0300 Subject: [PATCH 36/69] run qa in fork (temp change) --- .github/workflows/qa.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 72fb9c5..41d5554 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -11,7 +11,6 @@ on: jobs: sonar: - if: github.repository == 'oscript-library/gitsync-plugins' runs-on: ${{ matrix.os }} strategy: fail-fast: false From d7f72bc201c6961ae819b30483a524b27a82fc49 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 6 Jun 2025 17:06:41 +0300 Subject: [PATCH 37/69] switch to ubuntu 22.04 --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 41d5554..e08d42f 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -15,7 +15,7 @@ jobs: strategy: fail-fast: false matrix: - os: [ubuntu-latest] + os: [ubuntu-22.04] oscript_version: ['1.9.2'] v8_version: ['8.3.24.1691'] edt_version: ['2024.2.5'] From 144b4ecdc7a991bafa1a16ba9957f4d800bfecab Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 7 Jun 2025 14:44:34 +0300 Subject: [PATCH 38/69] speed up features, add helper files --- CONTRIBUTING.md | 2 ++ features/check-authors.feature | 8 +++----- features/check-comments.feature | 7 ++++--- features/edtExport.feature | 5 ++++- features/increment.feature | 5 +++-- features/limit.feature | 7 +++++-- features/smart-tags.feature | 9 +++++---- features/sync-remote.feature | 6 +++++- features/tool1CD.feature | 4 ++-- features/unpackForm.feature | 6 +++--- ...320\270\320\273\320\270\321\211\320\260.mxl" | Bin 0 -> 12897 bytes ...321\200\320\265\320\275\320\270\321\217.mxl" | Bin 0 -> 6292 bytes 12 files changed, 36 insertions(+), 23 deletions(-) create mode 100644 "tests/fixtures/\320\236\321\202\321\207\320\265\321\202\320\237\320\276\320\222\320\265\321\200\321\201\320\270\321\217\320\274\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.mxl" create mode 100644 "tests/fixtures/\320\236\321\202\321\207\320\265\321\202\320\237\320\276\320\222\320\265\321\200\321\201\320\270\321\217\320\274\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260\320\240\320\260\321\201\321\210\320\270\321\200\320\265\320\275\320\270\321\217.mxl" diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b2ae27a..63a6350 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -2,6 +2,8 @@ Доработка проводится по git-flow. Жду ваших PR. +Для удобства доработки в каталог ./tests/fixtures сохранены отчеты по версиям хранилища в формате mxl. Обратите внимание, что комментарий к версии хранилища может неточно описывать изменения в этой версии. + ## Требования к окружению - Установленная Платформа 1С diff --git a/features/check-authors.feature b/features/check-authors.feature index 1e9e4e2..85462b7 100644 --- a/features/check-authors.feature +++ b/features/check-authors.feature @@ -15,8 +15,7 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION + И Я создаю тестовый файл AUTHORS И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" @@ -27,11 +26,10 @@ Сценарий: Cинхронизация с простым использованием Допустим Я создаю неполный тестовый файл AUTHORS + И Я записываю "8" в файл VERSION И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "В таблице истории версий найдены авторы (количество 10), которые не сопоставлены в AUTHORS" + Тогда Вывод команды "gitsync" содержит "В таблице истории версий найдены авторы (количество 3), которые не сопоставлены в AUTHORS" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 1 - - diff --git a/features/check-comments.feature b/features/check-comments.feature index 86dfda9..4202121 100644 --- a/features/check-comments.feature +++ b/features/check-comments.feature @@ -16,7 +16,6 @@ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" @@ -28,17 +27,19 @@ Сценарий: Cинхронизация с использованием просто check-comments Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "7" в файл VERSION Когда Я выполняю команду "gitsync" - Тогда Вывод команды "gitsync" содержит "КРИТИЧНАЯОШИБКА - Версия <4> от автора <Администратор>: комментарий не задан" + Тогда Вывод команды "gitsync" содержит "КРИТИЧНАЯОШИБКА - Версия <8> от автора <Администратор>: комментарий не задан" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 Сценарий: Cинхронизация c использованием --error-comment Допустим Я добавляю параметр "--error-comment" для команды "gitsync" + И Я записываю "2" в файл VERSION И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "КРИТИЧНАЯОШИБКА - Версия <4> от автора <Администратор>: комментарий не задан" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 1 - И Количество коммитов должно быть "3" + И Количество коммитов должно быть "1" diff --git a/features/edtExport.feature b/features/edtExport.feature index 3c64914..123c84e 100644 --- a/features/edtExport.feature +++ b/features/edtExport.feature @@ -17,7 +17,6 @@ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" # И Я добавляю параметр "-v" для команды "gitsync" @@ -29,6 +28,7 @@ Сценарий: Cинхронизация с использованием edtExport без явного указания версии EDT Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "8" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -40,6 +40,7 @@ Дано Я добавляю параметр "--edt-version" для команды "gitsync" из переменной "ВерсияEDT" Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "8" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -52,6 +53,7 @@ И Я добавляю параметр "-e test" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "2" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -65,6 +67,7 @@ И Я добавляю параметр "--BP edtExport" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "2" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" diff --git a/features/increment.feature b/features/increment.feature index 76cbb2f..4f73b6d 100644 --- a/features/increment.feature +++ b/features/increment.feature @@ -15,8 +15,7 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION + И Я создаю тестовый файл AUTHORS И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" # И Я добавляю параметр "-v" для команды "gitsync" @@ -27,6 +26,7 @@ Сценарий: Cинхронизация с использованием increment Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Тип выгрузки конфигурации в файлы:" @@ -38,6 +38,7 @@ И Я добавляю параметр "-e test" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "3" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Тип выгрузки конфигурации в файлы:" diff --git a/features/limit.feature b/features/limit.feature index 8ae2709..f1c146e 100644 --- a/features/limit.feature +++ b/features/limit.feature @@ -15,8 +15,7 @@ И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" - И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION + И Я создаю тестовый файл AUTHORS И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" @@ -29,6 +28,7 @@ Допустим Я добавляю параметр "-l 1" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -39,6 +39,7 @@ Допустим Я добавляю параметр "--maxversion 2" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "0" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -49,6 +50,7 @@ Допустим Я добавляю параметр "--minversion 5" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "0" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -61,6 +63,7 @@ И Я добавляю параметр "--maxversion 4" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "0" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" diff --git a/features/smart-tags.feature b/features/smart-tags.feature index cbc6756..fd01813 100644 --- a/features/smart-tags.feature +++ b/features/smart-tags.feature @@ -5,7 +5,7 @@ Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища Чтобы автоматизировать свою работы с хранилищем с git -Контекст: Тестовый контекст check-authors +Контекст: Тестовый контекст smart-tags Когда Я очищаю параметры команды "gitsync" в контексте И Я устанавливаю рабочий каталог во временный каталог И Я создаю новый объект ГитРепозиторий @@ -16,7 +16,6 @@ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" @@ -28,18 +27,20 @@ Сценарий: Cинхронизация c установкой тэгов Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 - И Тег "1.0" должен присутствовать в репозитории + И Тег "1.1.0.1" должен присутствовать в репозитории Сценарий: Пропуск ошибки уже существующих тэгов Допустим Я добавляю параметр "--skip-exists-tags" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "8" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 - И Тег "1.0" должен присутствовать в репозитории \ No newline at end of file + И Тег "1.1.0.1" должен присутствовать в репозитории \ No newline at end of file diff --git a/features/sync-remote.feature b/features/sync-remote.feature index 71ff2e0..3ff1717 100644 --- a/features/sync-remote.feature +++ b/features/sync-remote.feature @@ -16,7 +16,6 @@ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я создаю временный каталог и сохраняю его в контекст @@ -34,6 +33,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -45,6 +45,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -56,6 +57,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -67,6 +69,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" @@ -78,6 +81,7 @@ И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я добавляю позиционный параметр для команды "gitsync" из переменной "URLРепозитория" + И Я записываю "6" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" diff --git a/features/tool1CD.feature b/features/tool1CD.feature index 467f01d..d83dd08 100644 --- a/features/tool1CD.feature +++ b/features/tool1CD.feature @@ -16,7 +16,6 @@ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" И Я создаю тестовый файл AUTHORS - И Я записываю "0" в файл VERSION И я включаю отладку лога с именем "oscript.app.gitsync" И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" @@ -28,9 +27,10 @@ Сценарий: Успешная синхронизация с tool1CD Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Использую tool1CD для работы с хранилищем" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 - И Количество коммитов должно быть "10" + И Количество коммитов должно быть "1" diff --git a/features/unpackForm.feature b/features/unpackForm.feature index a5251d2..68383fe 100644 --- a/features/unpackForm.feature +++ b/features/unpackForm.feature @@ -28,9 +28,9 @@ Сценарий: Распаковка форм без переименования Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" - # И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Каталог из переменной "ПутьКаталогаИсходников" содержит файл "Catalogs/Справочник1/Forms/ФормаСписка/Ext/Form/module" @@ -38,9 +38,9 @@ Допустим Я добавляю параметр "-R" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" - # И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Каталог из переменной "ПутьКаталогаИсходников" содержит файл "Catalogs/Справочник1/Forms/ФормаСписка/Ext/Form/Module.bsl" @@ -48,8 +48,8 @@ Допустим Я добавляю параметр "-F" для команды "gitsync" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" - # И Вывод команды "gitsync" не содержит "Внешнее исключение" И Код возврата команды "gitsync" равен 0 И Каталог из переменной "ПутьКаталогаИсходников" содержит файл "Catalogs/Справочник1/Forms/ФормаСписка/Ext/Form/form.txt" diff --git "a/tests/fixtures/\320\236\321\202\321\207\320\265\321\202\320\237\320\276\320\222\320\265\321\200\321\201\320\270\321\217\320\274\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.mxl" "b/tests/fixtures/\320\236\321\202\321\207\320\265\321\202\320\237\320\276\320\222\320\265\321\200\321\201\320\270\321\217\320\274\320\245\321\200\320\260\320\275\320\270\320\273\320\270\321\211\320\260.mxl" new file mode 100644 index 0000000000000000000000000000000000000000..9f1abad43e67957d14aa5e102486ed90686a1fba GIT binary patch literal 12897 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 SItXGRe@RFUqFi3XaN|FZ@18>d literal 0 HcmV?d00001 From 0558e706bf525297f263a0615ea35a7b8b7f1b56 Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 7 Jun 2025 14:57:30 +0300 Subject: [PATCH 39/69] revert onec-setup-action --- .github/workflows/qa.yml | 4 ++-- .github/workflows/testing.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index e08d42f..9c10feb 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -57,7 +57,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: 1CDevFlow/onec-setup-action@main + uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -74,7 +74,7 @@ jobs: java-version: '17' - name: Установка EDT - uses: 1CDevFlow/onec-setup-action@main + uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg with: type: edt edt_version: ${{ matrix.edt_version }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 4384e25..289f6bc 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -71,7 +71,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: 1CDevFlow/onec-setup-action@main + uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -96,7 +96,7 @@ jobs: java-version: '17' - name: Установка EDT - uses: 1CDevFlow/onec-setup-action@main + uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg with: type: edt edt_version: ${{ matrix.edt_version }} From 010fa540ed80c61a1d1a9df7088747616dd510cb Mon Sep 17 00:00:00 2001 From: Dima Date: Sun, 8 Jun 2025 11:30:15 +0300 Subject: [PATCH 40/69] ignore coverage --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index fff908e..fe7105d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ build/* +coverage/* + bin_gitsync/* bin/gitsync.exe bin/gitsync From 78ed476a448d02af4089541d73e3720157c2470b Mon Sep 17 00:00:00 2001 From: Dima Date: Sun, 8 Jun 2025 11:30:34 +0300 Subject: [PATCH 41/69] fix coverage --- tasks/coverage.os | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tasks/coverage.os b/tasks/coverage.os index b03ba30..2dd8ed7 100644 --- a/tasks/coverage.os +++ b/tasks/coverage.os @@ -3,7 +3,7 @@ #Использовать 1commands ФС.ОбеспечитьПустойКаталог("coverage"); -ПутьКСтат = "coverage/stat.json"; +ПутьКСтат = ОбъединитьПути("coverage", "stat.json"); Команда = Новый Команда; Команда.УстановитьКоманду("oscript"); @@ -20,10 +20,10 @@ ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); ПроцессорГенерации.ОтносительныеПути() - .ФайлСтатистики(Файл_Стат.ПолноеИмя) + .ИмяФайлаСтатистики("stat.json") .GenericCoverage() .Cobertura() .Clover(ИмяПакета) .Сформировать(); -ЗавершитьРаботу(КодВозврата); \ No newline at end of file +ЗавершитьРаботу(КодВозврата); From d4cf47dc0dd83c72b7f879e37465bd71c2a70780 Mon Sep 17 00:00:00 2001 From: Dima Date: Sun, 8 Jun 2025 11:56:16 +0300 Subject: [PATCH 42/69] add if --- .github/workflows/qa.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 9c10feb..521a2ac 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -11,6 +11,7 @@ on: jobs: sonar: + if: github.repository == 'oscript-library/gitsync-plugins' runs-on: ${{ matrix.os }} strategy: fail-fast: false From 9849ba9c01adc381f69509dee178141814db2476 Mon Sep 17 00:00:00 2001 From: Dima Ovcharenko Date: Sun, 8 Jun 2025 14:38:31 +0300 Subject: [PATCH 43/69] fix projectKey --- sonar-project.properties | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sonar-project.properties b/sonar-project.properties index 177897d..523def8 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -1,6 +1,5 @@ # must be unique in a given SonarQube instance -sonar.projectKey=opensource-gitsync-plugins -sonar.organization=sonar-opensource-add +sonar.projectKey=gitsync-plugins # this is the name displayed in the SonarQube UI sonar.projectName=Embedded plugins for Gitsync From d1fd09cc276495f167e085db4c49f04a1835cff2 Mon Sep 17 00:00:00 2001 From: Dima Ovcharenko Date: Sun, 8 Jun 2025 15:40:38 +0300 Subject: [PATCH 44/69] add fetch-depth: 0 --- .github/workflows/qa.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 521a2ac..9c02c32 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -25,6 +25,8 @@ jobs: steps: - name: Актуализация uses: actions/checkout@v4.2.2 + with: + fetch-depth: 0 # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions - name: Извлечение имени текущей ветки From d3be0aa3847afae2c9e54c6a1886402e7c2a0013 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 10:15:32 +0300 Subject: [PATCH 45/69] add feature coverage --- tasks/coverage.os | 55 ++++++++++++++++++++++++---- tasks/test.os | 93 +++++++++++++++++++++-------------------------- 2 files changed, 89 insertions(+), 59 deletions(-) diff --git a/tasks/coverage.os b/tasks/coverage.os index 2dd8ed7..128cbd6 100644 --- a/tasks/coverage.os +++ b/tasks/coverage.os @@ -1,29 +1,70 @@ +#Использовать 1commands #Использовать fs #Использовать coverage -#Использовать 1commands -ФС.ОбеспечитьПустойКаталог("coverage"); -ПутьКСтат = ОбъединитьПути("coverage", "stat.json"); +ИмяПакета = "gitsync-plugins"; + +ИмяКаталогаФайловПокрытия = "coverage"; +ИмяОбщегоФайлаПокрытия = "stat.json"; +ШаблонИменФайловПокрытия = "*.json"; + +ФС.ОбеспечитьПустойКаталог(ИмяКаталогаФайловПокрытия); +ПутьКСтат = ОбъединитьПути(ИмяКаталогаФайловПокрытия, ИмяОбщегоФайлаПокрытия); + +СистемнаяИнформация = Новый СистемнаяИнформация; +ЭтоWindows = Найти(НРег(СистемнаяИнформация.ВерсияОС), "windows") > 0; Команда = Новый Команда; Команда.УстановитьКоманду("oscript"); +Если НЕ ЭтоWindows Тогда + Команда.ДобавитьПараметр("-encoding=utf-8"); +КонецЕсли; Команда.ДобавитьПараметр(СтрШаблон("-codestat=%1", ПутьКСтат)); -Команда.ДобавитьПараметр("tasks/test.os"); +Команда.ДобавитьПараметр("tasks/test.os coverage"); Команда.ПоказыватьВыводНемедленно(Истина); КодВозврата = Команда.Исполнить(); Файл_Стат = Новый Файл(ПутьКСтат); -ИмяПакета = "gitsync-plugins"; +// Заменяем пути в файлах на ./src +ПутьКИсходникам = ОбъединитьПути(ТекущийСценарий(), "..", "src"); +КаталогИсходников = Новый Файл(ПутьКИсходникам).ПолноеИмя; +КаталогИсходников = СтрЗаменить(КаталогИсходников, "\", "\\"); + +// взято из gitsync +СистемнаяИнформация = Новый СистемнаяИнформация; +ОбщийКаталогДанныхПриложений = СистемнаяИнформация.ПолучитьПутьПапки(СпециальнаяПапка.ЛокальныйКаталогДанныхПриложений); +ПутьУстановкиПлагинов = ОбъединитьПути(ОбщийКаталогДанныхПриложений, "gitsync", "plugins"); +ПутьИсходниковУстановленныхПлагинов = ОбъединитьПути(ПутьУстановкиПлагинов, "gitsync-plugins", "src"); +ПолноеИмяКаталогаИсходниковУстановленныхПлагинов = Новый Файл(ПутьИсходниковУстановленныхПлагинов).ПолноеИмя; + +ПолноеИмяКаталогаИсходниковУстановленныхПлагинов = СтрЗаменить(ПолноеИмяКаталогаИсходниковУстановленныхПлагинов, "\", "\\"); + +ФайлыСтатистики = НайтиФайлы(ИмяКаталогаФайловПокрытия, ШаблонИменФайловПокрытия); +Для Каждого ФайлСтатистики Из ФайлыСтатистики Цикл + + ЧтениеТекста = Новый ЧтениеТекста(ФайлСтатистики.ПолноеИмя, КодировкаТекста.UTF8NoBOM); + Содержимое = ЧтениеТекста.Прочитать(); + ЧтениеТекста.Закрыть(); + + Содержимое = СтрЗаменить(Содержимое, ПолноеИмяКаталогаИсходниковУстановленныхПлагинов, КаталогИсходников); + + ЗаписьТекста = Новый ЗаписьТекста(ФайлСтатистики.ПолноеИмя, КодировкаТекста.UTF8NoBOM); + ЗаписьТекста.Записать(Содержимое); + ЗаписьТекста.Закрыть(); + +КонецЦикла; ПроцессорГенерации = Новый ГенераторОтчетаПокрытия(); ПроцессорГенерации.ОтносительныеПути() - .ИмяФайлаСтатистики("stat.json") + .РабочийКаталог(ИмяКаталогаФайловПокрытия) + .ИмяФайлаСтатистики(ШаблонИменФайловПокрытия) + .ФайлСтатистики(Файл_Стат.ПолноеИмя) .GenericCoverage() .Cobertura() .Clover(ИмяПакета) .Сформировать(); -ЗавершитьРаботу(КодВозврата); +ЗавершитьРаботу(0); // TODO КодВозврата diff --git a/tasks/test.os b/tasks/test.os index 3c3725e..cef9cbd 100644 --- a/tasks/test.os +++ b/tasks/test.os @@ -1,85 +1,74 @@ -// #Использовать "../src" #Использовать 1bdd #Использовать 1testrunner +#Использовать fs -Функция ПрогнатьТесты() - - Тестер = Новый Тестер; +Функция ПрогнатьФичи(Знач КаталогФайловПокрытия, Знач ПутьФич = "features", Знач ПутьОтчетаJUnit = "./bdd-log.xml") - ПутьКТестам = ОбъединитьПути(ТекущийСценарий().Каталог, "..", "tests"); - ПутьКОтчетуJUnit = ОбъединитьПути(ТекущийСценарий().Каталог, ".."); + КаталогФич = ОбъединитьПути(".", ПутьФич); - КаталогТестов = Новый Файл(ПутьКТестам); - Если Не КаталогТестов.Существует() Тогда - Сообщить(СтрШаблон("Не найден каталог тестов %1", ПутьКТестам)); - Возврат Истина; - КонецЕсли; - - РезультатТестирования = Тестер.ТестироватьКаталог( - КаталогТестов, - Новый Файл(ПутьКОтчетуJUnit) - ); - - Успешно = РезультатТестирования = 0; - - Возврат Успешно; -КонецФункции // ПрогнатьТесты() - -Функция ПрогнатьФичи() - - ПутьКОтчетам = ОбъединитьПути("build", "reports"); - СоздатьКаталог(ПутьКОтчетам); - - ПутьОтчетаJUnit = ОбъединитьПути(ПутьКОтчетам, "bdd-log.xml"); + Файл_КаталогФич = Новый Файл(КаталогФич); - КаталогФич = ОбъединитьПути(".", "features"); + ИсполнительБДД = Новый ИсполнительБДД; - Файл_КаталогФич = Новый Файл(КаталогФич); - Если Не Файл_КаталогФич.Существует() Тогда - Сообщить(СтрШаблон("Не найден каталог фич %1", КаталогФич)); - Возврат Истина; + Если ЗначениеЗаполнено(КаталогФайловПокрытия) Тогда + ИсполнительБДД.СохранитьВКонтекст("ПризнакСтатистикиСкриптовOnescript", Новый Файл(КаталогФайловПокрытия)); КонецЕсли; - ИсполнительБДД = Новый ИсполнительБДД; РезультатыВыполнения = ИсполнительБДД.ВыполнитьФичу(Файл_КаталогФич, Файл_КаталогФич); ИтоговыйРезультатВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); - СтатусВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения().НеВыполнялся; + СтатусыВыполнения = ИсполнительБДД.ВозможныеСтатусыВыполнения(); + + СтатусВыполнения = СтатусыВыполнения.НеВыполнялся; Если РезультатыВыполнения.Строки.Количество() > 0 Тогда - + СтатусВыполнения = ИсполнительБДД.ПолучитьИтоговыйСтатусВыполнения(РезультатыВыполнения); - + ИсполнительБДД.ПоказатьПроблемныеСценарии(РезультатыВыполнения); + + ИсполнительБДД.ВывестиИтоговыеРезультатыВыполнения(РезультатыВыполнения, Файл_КаталогФич.ЭтоКаталог()); КонецЕсли; ГенераторОтчетаJUnit = Новый ГенераторОтчетаJUnit; ГенераторОтчетаJUnit.Сформировать(РезультатыВыполнения, СтатусВыполнения, ПутьОтчетаJUnit); - Сообщить(СтрШаблон("Результат прогона фич <%1> - |", ИтоговыйРезультатВыполнения)); + Сообщить(СтрШаблон("Результат прогона фич <%1>. Путь %2 + |", ИтоговыйРезультатВыполнения, ПутьФич)); + + Возврат ИтоговыйРезультатВыполнения <> СтатусыВыполнения.Сломался; +КонецФункции + +ИмяКаталогаФайловПокрытия = "coverage"; + +// основной код + +ТекКаталог = ТекущийКаталог(); - Возврат ИтоговыйРезультатВыполнения <> ИсполнительБДД.ВозможныеСтатусыВыполнения().Сломался; -КонецФункции // ПрогнатьФичи() +КаталогФайловПокрытия = ""; -// Попытка -// ТестыПрошли = ПрогнатьТесты(); +ИспользуетсяПокрытиеКода = Ложь; +Для каждого Элемент Из АргументыКоманднойСтроки Цикл + Если Элемент = "coverage" Тогда -// Исключение -// ТестыПрошли = Ложь; -// Сообщить(СтрШаблон("Тесты через 1testrunner выполнены неудачно -// |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); -// КонецПопытки; + КаталогФайловПокрытия = ОбъединитьПути(ТекущийКаталог(), ".", ИмяКаталогаФайловПокрытия); + ФС.ОбеспечитьПустойКаталог(КаталогФайловПокрытия); + + Прервать; + КонецЕсли; +КонецЦикла; + +УстановитьТекущийКаталог(ТекКаталог); Попытка - ФичиПрошли = ПрогнатьФичи(); + ФичиПрошли = ПрогнатьФичи(КаталогФайловПокрытия, "features"); Исключение ФичиПрошли = Ложь; Сообщить(СтрШаблон("Тесты поведения через 1bdd выполнены неудачно |%1", ПодробноеПредставлениеОшибки(ИнформацияОбОшибке()))); КонецПопытки; +Сообщить(СтрШаблон("Результат прогона основных фич <%1> +|", ФичиПрошли)); + Если Не ФичиПрошли Тогда ВызватьИсключение "Тестирование завершилось неудачно!"; -Иначе - Сообщить(СтрШаблон("Результат прогона тестов <%1> - |", ФичиПрошли)); КонецЕсли; From e3c6d84cf4ca666eea38b59cbf4d87d4ed7cb74d Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 10:56:13 +0300 Subject: [PATCH 46/69] rename SQ project --- sonar-project.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sonar-project.properties b/sonar-project.properties index 523def8..97c70c7 100644 --- a/sonar-project.properties +++ b/sonar-project.properties @@ -2,7 +2,7 @@ sonar.projectKey=gitsync-plugins # this is the name displayed in the SonarQube UI -sonar.projectName=Embedded plugins for Gitsync +sonar.projectName=gitsync-plugins # Path is relative to the sonar-project.properties file. Replace "\" by "/" on Windows. # Since SonarQube 4.2, this property is optional if sonar.modules is set. From ad28b725f43a7c7888ba3c225acf9808a1dc7dc2 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 10:56:38 +0300 Subject: [PATCH 47/69] run SQ on pull_request_target as well --- .github/workflows/qa.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 9c02c32..620c7a4 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -131,7 +131,7 @@ jobs: # https://docs.sonarqube.org/latest/analysis/pull-request/ - name: Анализ в SonarQube (pull-request) - if: github.event_name == 'pull_request' + if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' run: sonar-scanner -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} From f3bf7f4a40cf3b93ab71fc4bf8ddc96086fe9abb Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 12:16:37 +0300 Subject: [PATCH 48/69] fix bug, add feature --- features/useIbcmd.feature | 35 +++++++++++++++++++ .../useIbcmd.os" | 2 +- 2 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 features/useIbcmd.feature diff --git a/features/useIbcmd.feature b/features/useIbcmd.feature new file mode 100644 index 0000000..9a88eb1 --- /dev/null +++ b/features/useIbcmd.feature @@ -0,0 +1,35 @@ +# language: ru + +Функционал: Работа плагина use-ibcmd + Как Пользователь + Я хочу выполнять автоматическую синхронизацию конфигурации из хранилища с использованием ibcmd + Чтобы ускорить операции выгрузки и загрузки + +Контекст: Тестовый контекст use-ibcmd + Когда Я очищаю параметры команды "gitsync" в контексте + И Я устанавливаю рабочий каталог во временный каталог + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я устанавливаю текущие плагины + И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в переменной "РабочееОкружениеEDT" + И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" + И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" + И Я создаю тестовый файл AUTHORS + И Я записываю "9" в файл VERSION + И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" + И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + # И Я добавляю параметр "-v" для команды "gitsync" + И Я добавляю параметр "sync" для команды "gitsync" + И Я выключаю все плагины + И Я включаю плагин "use-ibcmd" + +Сценарий: Cинхронизация с использованием use-ibcmd (успешная) + Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Вывод команды "gitsync" содержит "Используем утилиту ibcmd для выгрузки конфигурации в файлы" + И Код возврата команды "gitsync" равен 0 diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 002c053..59ae14a 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -160,7 +160,7 @@ .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DB_PWD"); - КлассРеализации.Опция("j ibcmd-threads", "", "[*use-ibcmd] Количество потоков используемых при экспорте") + КлассРеализации.Опция("j ibcmd-threads", 0, "[*use-ibcmd] Количество потоков используемых при экспорте") .ТЧисло() .ВОкружении("GITSYNC_IBCMD_THREADS"); From 3907f315fc73e209d484f0c5080eee06abead563 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 12:47:17 +0300 Subject: [PATCH 49/69] fix qa on PR --- .github/workflows/qa.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 620c7a4..7c02a03 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -123,8 +123,9 @@ jobs: - name: Анализ в SonarQube (branch) if: github.event_name == 'push' || github.event_name == 'workflow_dispatch' + env: + SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} run: sonar-scanner - -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} -Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }} -Dsonar.projectVersion=${{ steps.extract_version.outputs.version }} @@ -132,10 +133,10 @@ jobs: # https://docs.sonarqube.org/latest/analysis/pull-request/ - name: Анализ в SonarQube (pull-request) if: github.event_name == 'pull_request' || github.event_name == 'pull_request_target' + env: + SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} run: sonar-scanner - -Dsonar.login=${{ secrets.SONARQUBE_TOKEN }} -Dsonar.host.url=${{ secrets.SONARQUBE_HOST }} - -Dsonar.branch.name=${{ steps.extract_branch.outputs.branch }} -Dsonar.pullrequest.key=${{ github.event.pull_request.number }} -Dsonar.pullrequest.branch=${{ github.event.pull_request.head.ref }} -Dsonar.pullrequest.base=${{ github.event.pull_request.base.ref }} From 2c9a5593c88fa597c438e86e17708651f5325343 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 13:24:57 +0300 Subject: [PATCH 50/69] fix junit report path --- tasks/test.os | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tasks/test.os b/tasks/test.os index cef9cbd..96a2493 100644 --- a/tasks/test.os +++ b/tasks/test.os @@ -2,7 +2,12 @@ #Использовать 1testrunner #Использовать fs -Функция ПрогнатьФичи(Знач КаталогФайловПокрытия, Знач ПутьФич = "features", Знач ПутьОтчетаJUnit = "./bdd-log.xml") +Функция ПрогнатьФичи(Знач КаталогФайловПокрытия, Знач ПутьФич = "features") + + ПутьКОтчетам = ОбъединитьПути("build", "reports"); + ФС.ОбеспечитьКаталог(ПутьКОтчетам); + + ПутьОтчетаJUnit = ОбъединитьПути(ПутьКОтчетам, "bdd-log.xml"); КаталогФич = ОбъединитьПути(".", ПутьФич); From 1bfbb7e2ee11a8204a7f90afd3174668609f1a79 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 14:12:27 +0300 Subject: [PATCH 51/69] fix params, add ibcmd --incremental feature --- features/useIbcmd.feature | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/features/useIbcmd.feature b/features/useIbcmd.feature index 9a88eb1..9b22a40 100644 --- a/features/useIbcmd.feature +++ b/features/useIbcmd.feature @@ -17,19 +17,33 @@ И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" И Я создаю тестовый файл AUTHORS - И Я записываю "9" в файл VERSION И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" + И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректорияАвтономногоСервера" + И Я добавляю параметр "--ibcmd-data" для команды "gitsync" из переменной "ВременнаяДиректорияАвтономногоСервера" И Я выключаю все плагины И Я включаю плагин "use-ibcmd" Сценарий: Cинхронизация с использованием use-ibcmd (успешная) Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Вывод команды "gitsync" содержит "Используем утилиту ibcmd для выгрузки конфигурации в файлы" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация с использованием use-ibcmd (инкрементальная) + Допустим Я добавляю параметр "--increment" для команды "gitsync" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "8" в файл VERSION Когда Я выполняю команду "gitsync" Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" И Вывод команды "gitsync" не содержит "Внешнее исключение" И Вывод команды "gitsync" содержит "Используем утилиту ibcmd для выгрузки конфигурации в файлы" + И Вывод команды "gitsync" содержит "ИНФОРМАЦИЯ - Тип выгрузки конфигурации в файлы: ИНКРЕМЕНТАЛЬНАЯ ВЫГРУЗКА" И Код возврата команды "gitsync" равен 0 From c3350281dc4bd64e9153bfb56a9e440b189f361a Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 15:15:24 +0300 Subject: [PATCH 52/69] fix ibcmd-data parameter --- features/useIbcmd.feature | 4 ++-- .../useIbcmd.os" | 7 +++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/features/useIbcmd.feature b/features/useIbcmd.feature index 9b22a40..c9701e5 100644 --- a/features/useIbcmd.feature +++ b/features/useIbcmd.feature @@ -21,8 +21,8 @@ И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" # И Я добавляю параметр "-v" для команды "gitsync" И Я добавляю параметр "sync" для команды "gitsync" - И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректорияАвтономногоСервера" - И Я добавляю параметр "--ibcmd-data" для команды "gitsync" из переменной "ВременнаяДиректорияАвтономногоСервера" + И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталогАвтономногоСервера" + И Я добавляю параметр "--ibcmd-data" для команды "gitsync" из переменной "РабочийКаталогАвтономногоСервера" И Я выключаю все плагины И Я включаю плагин "use-ibcmd" diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 59ae14a..63d25ff 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -136,7 +136,7 @@ Лог.Отладка("Устанавливаю дополнительные параметры для команды %1", ИмяКоманды); - КлассРеализации.Опция("d ibcmd-data", "", "[*use-ibcmd] рабочий каталог утилиты ibcmd") + КлассРеализации.Опция("ibcmd-data", "", "[*use-ibcmd] рабочий каталог утилиты ibcmd") .ТСтрока() .ВОкружении("GITSYNC_IBCMD_DATA"); @@ -246,9 +246,8 @@ КомандаIBCMD = Новый Команда; КомандаIBCMD.УстановитьКоманду(ПутьКIBCMD); КомандаIBCMD.ПоказыватьВыводНемедленно(Истина); - КомандаIBCMD.УстановитьКодировкуВывода("UTF-8"); КомандаIBCMD.ДобавитьПараметр("infobase config export"); - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=""%1""", РабочийКаталогIBCMD)); Если ЧислоПотоков > 0 Тогда КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--threads=%1", ЧислоПотоков)); @@ -324,7 +323,7 @@ КомандаIBCMD.ПоказыватьВыводНемедленно(Ложь); КомандаIBCMD.УстановитьКодировкуВывода("UTF-8"); КомандаIBCMD.ДобавитьПараметр("infobase config export status"); - КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=%1", РабочийКаталогIBCMD)); + КомандаIBCMD.ДобавитьПараметр(СтрШаблон("--data=""%1""", РабочийКаталогIBCMD)); ДобавитьПараметрыПодключенияКИБ(КомандаIBCMD, Конфигуратор); From 16a54651a12da6e87a60124bc925bfaee9632ee4 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 9 Jun 2025 16:30:07 +0300 Subject: [PATCH 53/69] fix qa --- .github/workflows/qa.yml | 2 ++ .github/workflows/testing.yml | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 7c02a03..5697e17 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -26,6 +26,8 @@ jobs: - name: Актуализация uses: actions/checkout@v4.2.2 with: + repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + ref: ${{ github.event.pull_request.head.ref || github.ref_name }} fetch-depth: 0 # https://stackoverflow.com/questions/58033366/how-to-get-current-branch-within-github-actions diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 289f6bc..8340a24 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -35,14 +35,15 @@ jobs: - name: Актуализация uses: actions/checkout@v4.2.2 + with: + repository: ${{ github.event.pull_request.head.repo.full_name || github.repository }} + ref: ${{ github.event.pull_request.head.ref || github.ref_name }} - # Установка OneScript конкретной версии - name: Установка OneScript uses: otymko/setup-onescript@v1.5 with: version: ${{ matrix.oscript_version }} - # Установка зависимостей пакета - name: Установка зависимостей run: | opm install opm From b991601a99a99622a931c0362f03028e7e6f7e46 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 11 Jun 2025 18:24:35 +0300 Subject: [PATCH 54/69] upd libstdc++6 --- .github/workflows/testing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 8340a24..5732f42 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -62,7 +62,7 @@ jobs: run: | sudo echo "deb http://cz.archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list sudo apt-get update - sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libenchant1c2a + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libenchant1c2a libstdc++6 - name: Установка wine для Tool1CD (Linux) if: startsWith(matrix.os, 'ubuntu') From 14de64603ff134e96bd0f080c2ada409d73f21a4 Mon Sep 17 00:00:00 2001 From: Dima Date: Wed, 11 Jun 2025 18:56:37 +0300 Subject: [PATCH 55/69] add compatibility features --- .github/workflows/testing.yml | 2 +- features/compatibility.feature | 49 +++++++++++++++++++ features/dropConfigDump.feature | 33 +++++++++++++ features/step_definitions/shared.os | 36 ++++++++++++++ features/step_definitions/unpackForm.os | 48 ------------------ .../dropConfigDump.os" | 5 -- .../useIbcmd.os" | 5 -- 7 files changed, 119 insertions(+), 59 deletions(-) create mode 100644 features/compatibility.feature create mode 100644 features/dropConfigDump.feature delete mode 100644 features/step_definitions/unpackForm.os diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 5732f42..8340a24 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -62,7 +62,7 @@ jobs: run: | sudo echo "deb http://cz.archive.ubuntu.com/ubuntu focal main universe" | sudo tee -a /etc/apt/sources.list sudo apt-get update - sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libenchant1c2a libstdc++6 + sudo DEBIAN_FRONTEND=noninteractive apt-get install -y libenchant1c2a - name: Установка wine для Tool1CD (Linux) if: startsWith(matrix.os, 'ubuntu') diff --git a/features/compatibility.feature b/features/compatibility.feature new file mode 100644 index 0000000..fb4fae2 --- /dev/null +++ b/features/compatibility.feature @@ -0,0 +1,49 @@ +# language: ru + +Функционал: Работа комбинаций плагинов + Как Пользователь + Я хочу выполнять автоматическую синхронизацию даже если активированы несовместимые плагины + Чтобы синхронизация выполнялась корректно всегда + +Контекст: Тестовый контекст + Когда Я очищаю параметры команды "gitsync" в контексте + И Я устанавливаю рабочий каталог во временный каталог + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я устанавливаю текущие плагины + И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" + И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" + И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" + И я включаю отладку лога с именем "oscript.app.gitsync" + И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" + И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + # И Я добавляю параметр "-v" для команды "gitsync" + И Я добавляю параметр "sync" для команды "gitsync" + И Я выключаю все плагины + +Сценарий: Cинхронизация с использованием плагинов increment и use-ibcmd + Допустим Я включаю плагин "increment" + И Я включаю плагин "use-ibcmd" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит + | Плагин "increment" не совместим с плагином "use-ibcmd" и будет отключен на время выполнения синхронизации | + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + +Сценарий: Cинхронизация с использованием плагинов increment и drop-config-dump + Допустим Я включаю плагин "increment" + И Я включаю плагин "drop-config-dump" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION + Когда Я выполняю команду "gitsync" + Тогда Вывод команды "gitsync" содержит "Завершена синхронизации с git" + Тогда Вывод команды "gitsync" содержит + | Плагин "increment" не совместим с плагином "drop-config-dump" и будет отключен на время выполнения синхронизации | + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 diff --git a/features/dropConfigDump.feature b/features/dropConfigDump.feature new file mode 100644 index 0000000..eda7544 --- /dev/null +++ b/features/dropConfigDump.feature @@ -0,0 +1,33 @@ +# language: ru + +Функционал: Работа плагина отключения версионирования файла дампа версий объектов конфигурации (ConfigDumpInfo.xml) + Как Пользователь + Я хочу выполнять автоматическую синхронизацию и не версионировать при этом ConfigDumpInfo.xml + Чтобы в репозитории не было лишних изменений + +Контекст: Тестовый контекст drop-config-dump + Когда Я очищаю параметры команды "gitsync" в контексте + И Я устанавливаю рабочий каталог во временный каталог + И Я создаю новый объект ГитРепозиторий + И Я устанавливаю путь выполнения команды "gitsync" к текущей библиотеке + И Я устанавливаю текущие плагины + И Я создаю временный каталог и сохраняю его в переменной "КаталогХранилища1С" + И я скопировал каталог тестового хранилища конфигурации в каталог из переменной "КаталогХранилища1С" + И Я создаю временный каталог и сохраняю его в переменной "ПутьКаталогаИсходников" + И Я инициализирую репозиторий в каталоге из переменной "ПутьКаталогаИсходников" + И я включаю отладку лога с именем "oscript.app.gitsync" + И Я создаю временный каталог и сохраняю его в переменной "ВременнаяДиректория" + И Я добавляю параметр "--tempdir" для команды "gitsync" из переменной "ВременнаяДиректория" + # И Я добавляю параметр "-v" для команды "gitsync" + И Я добавляю параметр "sync" для команды "gitsync" + И Я выключаю все плагины + И Я включаю плагин "drop-config-dump" + +Сценарий: Cинхронизация с использованием плагина drop-config-dump + Допустим Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" + И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" + И Я записываю "9" в файл VERSION + Когда Я выполняю команду "gitsync" + И Вывод команды "gitsync" не содержит "Внешнее исключение" + И Код возврата команды "gitsync" равен 0 + И Каталог из переменной "ПутьКаталогаИсходников" не содержит файл "ConfigDumpInfo.xml" diff --git a/features/step_definitions/shared.os b/features/step_definitions/shared.os index 75fca7a..2a3b285 100644 --- a/features/step_definitions/shared.os +++ b/features/step_definitions/shared.os @@ -17,6 +17,8 @@ ВсеШаги = Новый Массив; + ВсеШаги.Добавить("КаталогИзПеременнойСодержитФайл"); + ВсеШаги.Добавить("КаталогИзПеременнойНеСодержитФайл"); ВсеШаги.Добавить("ЯУстанавливаюПутьВыполненияКомандыКТекущейБиблиотеке"); ВсеШаги.Добавить("ЯСкопировалКаталогТестовогоХранилищаКонфигурацииВоВременныйКаталог"); ВсеШаги.Добавить("ЯСохраняюЗначениеВременногоКаталогаВПеременной"); @@ -48,6 +50,40 @@ КонецФункции +//Каталог из переменной "ПутьКаталогаИсходников" содержит файл "module.bsl" +Процедура КаталогИзПеременнойСодержитФайл(Знач ПеременнаяКаталога, Знач ИмяФайла) Экспорт + + КаталогИсходников = БДД.ПолучитьИзКонтекста(ПеременнаяКаталога); + + ПутьКФайлу = ОбъединитьПути(КаталогИсходников, ИмяФайла); + Файл = Новый Файл(ПутьКФайлу); + Если Не Файл.Существует() Тогда + + МассивФайлов = НайтиФайлы(КаталогИсходников, ПолучитьМаскуВсеФайлы(), Истина); + Для каждого Файл Из МассивФайлов Цикл + + Сообщить(Файл.ПолноеИмя); + + КонецЦикла; + + ВызватьИсключение СтрШаблон("Каталог не содержит нужного файла <%1>", ПутьКФайлу); + КонецЕсли; + +КонецПроцедуры + +//Каталог из переменной "ПутьКаталогаИсходников" не содержит файл "module.bsl" +Процедура КаталогИзПеременнойНеСодержитФайл(Знач ПеременнаяКаталога, Знач ИмяФайла) Экспорт + + КаталогИсходников = БДД.ПолучитьИзКонтекста(ПеременнаяКаталога); + + ПутьКФайлу = ОбъединитьПути(КаталогИсходников, ИмяФайла); + Файл = Новый Файл(ПутьКФайлу); + Если Файл.Существует() Тогда + ВызватьИсключение СтрШаблон("Каталог содержит искомый файл <%1>", ПутьКФайлу); + КонецЕсли; + +КонецПроцедуры + //Я создаю временный каталог и сохраняю его в переменной "КаталогПлагинов" Процедура ЯСоздаюВременныйКаталогИСохраняюЕгоВПеременной(Знач ИмяПеременной) Экспорт diff --git a/features/step_definitions/unpackForm.os b/features/step_definitions/unpackForm.os deleted file mode 100644 index f4f30d5..0000000 --- a/features/step_definitions/unpackForm.os +++ /dev/null @@ -1,48 +0,0 @@ -// Реализация шагов BDD-фич/сценариев c помощью фреймворка https://github.com/artbear/1bdd - -Перем БДД; //контекст фреймворка 1bdd - -// Метод выдает список шагов, реализованных в данном файле-шагов -Функция ПолучитьСписокШагов(КонтекстФреймворкаBDD) Экспорт - БДД = КонтекстФреймворкаBDD; - - ВсеШаги = Новый Массив; - - ВсеШаги.Добавить("КаталогИзПеременнойСодержитФайл"); - - Возврат ВсеШаги; -КонецФункции - -// Реализация шагов - -// Процедура выполняется перед запуском каждого сценария -Процедура ПередЗапускомСценария(Знач Узел) Экспорт - -КонецПроцедуры - -// Процедура выполняется после завершения каждого сценария -Процедура ПослеЗапускаСценария(Знач Узел) Экспорт - -КонецПроцедуры - - -//Каталог из переменной "ПутьКаталогаИсходников" содержит файл "module.bsl" -Процедура КаталогИзПеременнойСодержитФайл(Знач ПеременнаяКаталога, Знач ИмяФайла) Экспорт - - КаталогИсходников = БДД.ПолучитьИзКонтекста(ПеременнаяКаталога); - - ПутьКФайлу = ОбъединитьПути(КаталогИсходников, ИмяФайла); - Файл = Новый Файл(ПутьКФайлу); - Если Не Файл.Существует() Тогда - - МассивФайлов = НайтиФайлы(КаталогИсходников, ПолучитьМаскуВсеФайлы(), Истина); - Для каждого Файл Из МассивФайлов Цикл - - Сообщить(Файл.ПолноеИмя); - - КонецЦикла; - - ВызватьИсключение СтрШаблон("Каталог не содержит нужного файла <%1>", ПутьКФайлу); - КонецЕсли; - -КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" index 967817f..7952ec6 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" @@ -74,11 +74,6 @@ Обработчик = СтандартныйОбработчик; - Если НЕ (ВРег(ТекущаяКоманда) = "ALL" - ИЛИ ВРег(ТекущаяКоманда) = "SYNC") Тогда - Возврат; - КонецЕсли; - МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); ОтключаемыеПлагины = ОтключаемыеПлагины(); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 63d25ff..bc8918b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -95,11 +95,6 @@ Инкрементально = Ложь; ЧислоПотоков = 0; - Если НЕ (ВРег(ТекущаяКоманда) = "ALL" - ИЛИ ВРег(ТекущаяКоманда) = "SYNC") Тогда - Возврат; - КонецЕсли; - МенеджерПлагинов = ПараметрыПриложения.МенеджерПлагинов(); ИндексПлагинов = МенеджерПлагинов.ПолучитьИндексПлагинов(); ОтключаемыеПлагины = ОтключаемыеПлагины(); From 9eba9a540b09b90ad2a2a645341ddcf50e2b3ee5 Mon Sep 17 00:00:00 2001 From: Dima Date: Fri, 13 Jun 2025 13:02:48 +0300 Subject: [PATCH 56/69] add ibcmd-data --- features/compatibility.feature | 2 ++ 1 file changed, 2 insertions(+) diff --git a/features/compatibility.feature b/features/compatibility.feature index fb4fae2..a8a906d 100644 --- a/features/compatibility.feature +++ b/features/compatibility.feature @@ -25,6 +25,8 @@ Сценарий: Cинхронизация с использованием плагинов increment и use-ibcmd Допустим Я включаю плагин "increment" И Я включаю плагин "use-ibcmd" + И Я создаю временный каталог и сохраняю его в переменной "РабочийКаталогАвтономногоСервера" + И Я добавляю параметр "--ibcmd-data" для команды "gitsync" из переменной "РабочийКаталогАвтономногоСервера" И Я добавляю позиционный параметр для команды "gitsync" из переменной "КаталогХранилища1С" И Я добавляю позиционный параметр для команды "gitsync" из переменной "ПутьКаталогаИсходников" И Я записываю "9" в файл VERSION From 21e4535d2ecdb16b4dbb34cfb8871c27e399d2cd Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 29 Sep 2025 11:38:43 +0300 Subject: [PATCH 57/69] fix param name --- .../useIbcmd.os" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 63d25ff..8098fd7 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -413,7 +413,7 @@ Если ЗначениеЗаполнено(Пользователь) Тогда Команда.ДобавитьПараметр(СтрШаблон("--user=%1", Пользователь)); Если ЗначениеЗаполнено(Пароль) Тогда - Команда.ДобавитьПараметр(СтрШаблон("--pwd=%1", Пароль)); + Команда.ДобавитьПараметр(СтрШаблон("--password=%1", Пароль)); КонецЕсли; КонецЕсли; From 0fc3b87551282afe8825913daa71f5abac097b71 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 29 Sep 2025 12:42:49 +0300 Subject: [PATCH 58/69] maximize space, rm libstdc --- .github/workflows/testing.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 8340a24..c3b910c 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -25,6 +25,15 @@ jobs: locale: ['ru_RU'] fail-fast: false steps: + - name: Освобождение места + if: startsWith(matrix.os, 'ubuntu') + uses: easimon/maximize-build-space@master + with: + remove-android: 'true' + remove-haskell: 'true' + remove-codeql: 'true' + remove-docker-images: 'true' + - name: Установка локали if: matrix.os == startsWith(matrix.os, 'windows') run: | @@ -56,6 +65,7 @@ jobs: sudo apt-get update sudo DEBIAN_FRONTEND=noninteractive apt-get install -y locales libwebkit2gtk-4.0-37 sudo localedef -i ${{ matrix.locale }} -c -f UTF-8 -A /usr/share/locale/locale.alias ${{ matrix.locale }}.UTF-8 + sudo rm /opt/1C/v8.3/x86_64/libstdc++.so.6 - name: Установка libenchant1c2a для 8.3.21 (Linux) if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.v8_version, '8.3.21') From 7b6b46954c8b47a4559663bd01d0d5d095e3703a Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 29 Sep 2025 12:56:52 +0300 Subject: [PATCH 59/69] revert rm --- .github/workflows/testing.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index c3b910c..0cf5724 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -65,7 +65,6 @@ jobs: sudo apt-get update sudo DEBIAN_FRONTEND=noninteractive apt-get install -y locales libwebkit2gtk-4.0-37 sudo localedef -i ${{ matrix.locale }} -c -f UTF-8 -A /usr/share/locale/locale.alias ${{ matrix.locale }}.UTF-8 - sudo rm /opt/1C/v8.3/x86_64/libstdc++.so.6 - name: Установка libenchant1c2a для 8.3.21 (Linux) if: startsWith(matrix.os, 'ubuntu') && startsWith(matrix.v8_version, '8.3.21') From cb7bf738adfa44902ddd385e90f5861f352b7427 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 29 Sep 2025 14:00:56 +0300 Subject: [PATCH 60/69] reduce swap --- .github/workflows/testing.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 0cf5724..967d8a4 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -29,6 +29,7 @@ jobs: if: startsWith(matrix.os, 'ubuntu') uses: easimon/maximize-build-space@master with: + swap-size-mb: 1024 remove-android: 'true' remove-haskell: 'true' remove-codeql: 'true' From 5e092ba556341345cd0da0f518d05aedfaeeb5e4 Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 29 Sep 2025 14:08:53 +0300 Subject: [PATCH 61/69] increase root size --- .github/workflows/testing.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 967d8a4..6f9ab20 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -29,6 +29,7 @@ jobs: if: startsWith(matrix.os, 'ubuntu') uses: easimon/maximize-build-space@master with: + root-reserve-mb: 10240 swap-size-mb: 1024 remove-android: 'true' remove-haskell: 'true' From d6b4e85e7c20dee0bb6f942cff6a1e844563e3af Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 29 Sep 2025 14:19:27 +0300 Subject: [PATCH 62/69] increase root size --- .github/workflows/testing.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 6f9ab20..008ea45 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -29,7 +29,7 @@ jobs: if: startsWith(matrix.os, 'ubuntu') uses: easimon/maximize-build-space@master with: - root-reserve-mb: 10240 + root-reserve-mb: 20480 swap-size-mb: 1024 remove-android: 'true' remove-haskell: 'true' From ebb6a2eb139b8874a21a29415cccf3132420e9cc Mon Sep 17 00:00:00 2001 From: Dima Date: Mon, 29 Sep 2025 15:46:14 +0300 Subject: [PATCH 63/69] switch to original onec-setup-action --- .github/workflows/qa.yml | 4 ++-- .github/workflows/testing.yml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 5697e17..16c69b0 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -62,7 +62,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg + uses: 1CDevFlow/onec-setup-action with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -79,7 +79,7 @@ jobs: java-version: '17' - name: Установка EDT - uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg + uses: 1CDevFlow/onec-setup-action with: type: edt edt_version: ${{ matrix.edt_version }} diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index 008ea45..fd66eb6 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -83,7 +83,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg + uses: 1CDevFlow/onec-setup-action with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -108,7 +108,7 @@ jobs: java-version: '17' - name: Установка EDT - uses: ovcharenko-di/onec-setup-action@fix/cache-ring-commands-cfg + uses: 1CDevFlow/onec-setup-action with: type: edt edt_version: ${{ matrix.edt_version }} From f3c3322357ab4aef7355e7e646c437a42f9cd39e Mon Sep 17 00:00:00 2001 From: Dima Ovcharenko Date: Fri, 5 Dec 2025 15:32:14 +0300 Subject: [PATCH 64/69] fix qa --- .github/workflows/qa.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 16c69b0..790e1bb 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -62,7 +62,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: 1CDevFlow/onec-setup-action + uses: 1CDevFlow/onec-setup-action@main with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -79,7 +79,7 @@ jobs: java-version: '17' - name: Установка EDT - uses: 1CDevFlow/onec-setup-action + uses: 1CDevFlow/onec-setup-action@main with: type: edt edt_version: ${{ matrix.edt_version }} From 0eb1d0d5ddb60c277a530e4957a7a22814329286 Mon Sep 17 00:00:00 2001 From: Dima Ovcharenko Date: Fri, 5 Dec 2025 15:32:43 +0300 Subject: [PATCH 65/69] fix testing --- .github/workflows/testing.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/testing.yml b/.github/workflows/testing.yml index fd66eb6..3e6b691 100644 --- a/.github/workflows/testing.yml +++ b/.github/workflows/testing.yml @@ -83,7 +83,7 @@ jobs: sudo apt install wine -y - name: Установка платформы 1С - uses: 1CDevFlow/onec-setup-action + uses: 1CDevFlow/onec-setup-action@main with: type: onec # Тип устанавливаемого приложения onec_version: ${{ matrix.v8_version }} @@ -108,7 +108,7 @@ jobs: java-version: '17' - name: Установка EDT - uses: 1CDevFlow/onec-setup-action + uses: 1CDevFlow/onec-setup-action@main with: type: edt edt_version: ${{ matrix.edt_version }} From 04a92ed5f96e12ba4033e36cf1a2c528d4304ab8 Mon Sep 17 00:00:00 2001 From: Dima Ovcharenko Date: Sat, 6 Dec 2025 13:31:53 +0300 Subject: [PATCH 66/69] add maximize-build-space --- .github/workflows/qa.yml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/.github/workflows/qa.yml b/.github/workflows/qa.yml index 790e1bb..e40e7db 100644 --- a/.github/workflows/qa.yml +++ b/.github/workflows/qa.yml @@ -23,6 +23,17 @@ jobs: locale: ['ru_RU'] steps: + - name: Освобождение места + if: startsWith(matrix.os, 'ubuntu') + uses: easimon/maximize-build-space@master + with: + root-reserve-mb: 20480 + swap-size-mb: 1024 + remove-android: 'true' + remove-haskell: 'true' + remove-codeql: 'true' + remove-docker-images: 'true' + - name: Актуализация uses: actions/checkout@v4.2.2 with: From af2932033646ca7bb45262939f3596110f4d90be Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 13 Dec 2025 12:38:03 +0300 Subject: [PATCH 67/69] upd versions --- .../disableSupport.os" | 2 -- .../dropConfigDump.os" | 6 +++--- .../dropSupport.os" | 6 +++--- .../edtExport.os" | 4 +--- .../increment.os" | 1 - .../limit.os" | 5 ----- .../plugin.os.template" | 4 +--- .../roboCopy.os" | 4 ---- .../smartTags.os" | 1 - .../syncRemote.os" | 4 +--- .../tool1CD.os" | 2 -- .../unpackForm.os" | 2 -- .../useIbcmd.os" | 2 +- 13 files changed, 10 insertions(+), 33 deletions(-) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/disableSupport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/disableSupport.os" index 2182bf8..80cfc12 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/disableSupport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/disableSupport.os" @@ -1,7 +1,6 @@ #Использовать logos -Перем ВерсияПлагина; Перем Лог; Перем КомандыПлагина; Перем Описание; @@ -83,7 +82,6 @@ Процедура Инициализация() - ВерсияПлагина = "1.3.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КонецПроцедуры diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" index 967817f..38dee51 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropConfigDump.os" @@ -136,7 +136,7 @@ КорневойКаталогГит = КорневойКаталогГит(КаталогРабочейКопии); Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда - Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", КаталогРабочейКопии); + Лог.Предупреждение("Каталог ""%1"" не является репозиторием git!", КаталогРабочейКопии); Возврат; КонецЕсли; @@ -185,7 +185,7 @@ КорневойКаталогГит = КорневойКаталогГит(РабочийКаталог); Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда - Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", РабочийКаталог); + Лог.Предупреждение("Каталог ""%1"" не является репозиторием git!", РабочийКаталог); Возврат; КонецЕсли; @@ -211,7 +211,7 @@ // // Возвращаемое значение: // Строка - путь к корневому каталогу репозитария git -// если пустая строка, то каталог не является репозитарием git +// если пустая строка, то каталог не является репозиторием git // Функция КорневойКаталогГит(Знач КаталогРабочейКопии) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" index 8063a52..8f8525d 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/dropSupport.os" @@ -112,7 +112,7 @@ КорневойКаталогГит = КорневойКаталогГит(КаталогРабочейКопии); Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда - Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", КаталогРабочейКопии); + Лог.Предупреждение("Каталог ""%1"" не является репозиторием git!", КаталогРабочейКопии); Возврат; КонецЕсли; @@ -159,7 +159,7 @@ КорневойКаталогГит = КорневойКаталогГит(РабочийКаталог); Если НЕ ЗначениеЗаполнено(КорневойКаталогГит) Тогда - Лог.Предупреждение("Каталог ""%1"" не является репозитарием git!", РабочийКаталог); + Лог.Предупреждение("Каталог ""%1"" не является репозиторием git!", РабочийКаталог); Возврат; КонецЕсли; @@ -185,7 +185,7 @@ // // Возвращаемое значение: // Строка - путь к корневому каталогу репозитария git -// если пустая строка, то каталог не является репозитарием git +// если пустая строка, то каталог не является репозиторием git // Функция КорневойКаталогГит(Знач КаталогРабочейКопии) diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" index 71b50a6..f92493c 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/edtExport.os" @@ -3,7 +3,6 @@ #Использовать fs #Использовать semver -Перем ВерсияПлагина; Перем Лог; Перем Обработчик; Перем КомандыПлагина; @@ -25,7 +24,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат ВерсияПлагина; + Возврат "2.0.0"; КонецФункции // Возвращает приоритет выполнения плагина @@ -611,7 +610,6 @@ Процедура Инициализация() - ВерсияПлагина = "1.4.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/increment.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/increment.os" index 114ef28..70294aa 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/increment.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/increment.os" @@ -9,7 +9,6 @@ Перем ИмяФайлаДампаКонфигурации; Перем ПутьКФайлуВерсийМетаданных; -Перем ОчиститьКаталогРабочейКопии; Перем ВыгрузкаИзмененийВозможна; Перем ИмяРасширения; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/limit.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/limit.os" index a78a9e3..e9d6a05 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/limit.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/limit.os" @@ -1,10 +1,8 @@ #Использовать logos -Перем ВерсияПлагина; Перем Лог; Перем КомандыПлагина; -Перем МассивНомеровВерсий; Перем Лимит; Перем Обработчик; Перем НачальнаяВерсия; @@ -144,7 +142,6 @@ Функция ОпределитьМаксимальнуюВерсиюСУчетомОграниченияСверху(Знач ТаблицаИсторииХранилища, Знач ТекущаяВерсия, Знач МаксимальнаяВерсия) МаксимальнаяВерсияДляРазбора = 0; - ЧислоВерсийПлюс = 0; Если МаксимальнаяВерсия <> 0 Тогда Попытка @@ -196,5 +193,3 @@ КонецПроцедуры Инициализация(); - - diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/plugin.os.template" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/plugin.os.template" index 5f23b49..ae9cca5 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/plugin.os.template" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/plugin.os.template" @@ -2,7 +2,6 @@ #Использовать logos #Использовать tempfiles -Перем ВерсияПлагина; Перем Лог; Перем КомандыПлагина; @@ -15,7 +14,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат ВерсияПлагина; + Возврат "1.0.0"; КонецФункции // Возвращает приоритет выполнения плагина @@ -109,7 +108,6 @@ Процедура Инициализация() - ВерсияПлагина = "1.3.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/roboCopy.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/roboCopy.os" index 5fb38a7..2a72991 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/roboCopy.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/roboCopy.os" @@ -1,12 +1,9 @@ - #Использовать logos #Использовать tempfiles -Перем ВерсияПлагина; Перем Лог; Перем КомандыПлагина; - #Область Интерфейс_плагина // Возвращает версию плагина @@ -125,7 +122,6 @@ Процедура Инициализация() - ВерсияПлагина = "1.0.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/smartTags.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/smartTags.os" index 19ed708..b456e6b 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/smartTags.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/smartTags.os" @@ -1,6 +1,5 @@ #Использовать logos -Перем ВерсияПлагина; Перем Лог; Перем Обработчик; Перем КомандыПлагина; diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" index 43c154c..6419cff 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/syncRemote.os" @@ -2,7 +2,6 @@ #Использовать logos #Использовать gitrunner -Перем ВерсияПлагина; Перем Лог; Перем КомандыПлагина; @@ -28,7 +27,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "1.7.0"; + Возврат "2.0.0"; КонецФункции // Возвращает приоритет выполнения плагина @@ -252,7 +251,6 @@ Процедура Инициализация() - ВерсияПлагина = "1.3.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/tool1CD.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/tool1CD.os" index 711a736..5b2d31e 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/tool1CD.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/tool1CD.os" @@ -3,7 +3,6 @@ #Использовать "./internal/tool1cd" #Использовать tempfiles -Перем ВерсияПлагина; Перем Лог; Перем Обработчик; Перем КоличествоЦикловОжиданияЛицензии; @@ -355,7 +354,6 @@ Процедура Инициализация() - ВерсияПлагина = "1.3.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/unpackForm.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/unpackForm.os" index f0a9c2c..83d7699 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/unpackForm.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/unpackForm.os" @@ -1,7 +1,6 @@ #Использовать logos #Использовать "./internal/v8unpack" -Перем ВерсияПлагина; Перем Лог; Перем Обработчик; Перем КомандыПлагина; @@ -177,7 +176,6 @@ Процедура Инициализация() - ВерсияПлагина = "1.3.0"; Лог = Логирование.ПолучитьЛог(ИмяЛога()); КомандыПлагина = Новый Массив; КомандыПлагина.Добавить("sync"); diff --git "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" index 8098fd7..2fa5604 100644 --- "a/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" +++ "b/src/\320\232\320\273\320\260\321\201\321\201\321\213/useIbcmd.os" @@ -28,7 +28,7 @@ // Строка - текущая версия плагина // Функция Версия() Экспорт - Возврат "1.6.1"; + Возврат "2.0.0"; КонецФункции // Возвращает приоритет выполнения плагина From 52532f22a7841daab70b0cc05a113d0eea3632c8 Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 13 Dec 2025 12:38:23 +0300 Subject: [PATCH 68/69] add bls config --- .bsl-language-server.json | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .bsl-language-server.json diff --git a/.bsl-language-server.json b/.bsl-language-server.json new file mode 100644 index 0000000..aff302a --- /dev/null +++ b/.bsl-language-server.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://1c-syntax.github.io/bsl-language-server/configuration/schema.json", + "language": "ru", + "diagnostics": { + "parameters": { + "LineLength": { + "maxLineLength": 150 + }, + "MissingSpace": { + "allowMultipleCommas": true + }, + "Typo": { + "minWordLength": 3, + "userWordsToIgnore": "Закоммитить,Коммитом,Коммита,Коммите,тэг,Тэг,Инкрементально," + } + } + } +} \ No newline at end of file From 7f39f40a54cb776909965f577efb189dacdd3f42 Mon Sep 17 00:00:00 2001 From: Dima Date: Sat, 13 Dec 2025 12:38:33 +0300 Subject: [PATCH 69/69] upd contrib --- CONTRIBUTING.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 63a6350..08c0b23 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ # Руководство контрибьютора -Доработка проводится по git-flow. Жду ваших PR. +Доработка проводится по github-flow, основная ветка - master. Жду ваших PR. -Для удобства доработки в каталог ./tests/fixtures сохранены отчеты по версиям хранилища в формате mxl. Обратите внимание, что комментарий к версии хранилища может неточно описывать изменения в этой версии. +Для удобства доработки в каталог ./tests/fixtures сохранены выгрузки отчетов по версиям хранилища в формате mxl. Можно ориентироваться на них при написании тестов. Обратите внимание, что комментарий к версии хранилища может неточно описывать изменения в этой версии. ## Требования к окружению @@ -15,13 +15,13 @@ - `set GITSYNC_V8VERSION=8.3.21` # Windows - `export GITSYNC_V8VERSION=8.3.21` # Linux - По умолчанию версию платформы выберет библиотека v8find +Если переменная не указана, то версию платформы выберет установленная у вас библиотека v8find. - Установить значение переменной EDT_VERSION, например: - `set EDT_VERSION=2023.3.6` # Windows - `export EDT_VERSION=2023.3.6` # Linux - По умолчанию используется версия 2022.2.5 +По умолчанию используется версия 2022.2.5 - Выполнить команду, которая устанавливает gitsync в каталог bin_gitsync - `opm run install-gitsync`